TCP: Transmission Control Protocol
1. TCP Services
TCP/IP protocol suite
해당 그림은 TCP/IP 프로토콜 제품군의 다른 프로토콜에 대한 TCP의 관계를 보여준다.
TCP는 애플리케이션 계층과 네트워크 계층 사이에 있으며 애플리케이션 프로그램과 네트워크 운영 사이의 중개자 역할을 한다.
TCP는 인터넷 통신에 있어 매우 중요한 역할을 수행한다.
IP주소와 Port 번호
우리가 상대방과 전화통화를 하기 위해 상대의 전화번호를 반드시 알고 있어야 한다.
이와 마찬가지로, 인터넷에서 클라이언트가 서버에 접속하기 위해서는 해당 웹페이지의 IP주소와 Port 번호를 반드시 알고 있어야 한다.
IP주소는 source to destination을 위해 필요한 주소이며 Network Layer의 IP 헤더에 들어간다.
Port번호는 시스템이 1024번 이후 번호로 임의 지정해 주는 주소이며 Transport Layer에서 관여한다.
IP주소와 Port번호의 개념이 애매하다면 IP주소는 한 회사의 대표 전화, Port 번호는 회사 내의 내선전화라고 생각하면 쉽다.
일반적으로 web의 port번호는 80번으로 지정되어 있다.
Stream delivery (boundary가 없는 delivery)
Stream of delivery: 바이트의 연속으로 데이터 전달
개념을 이해하기 쉽게 (주)tcp무역의 강 사장의 예를 들어보겠다.
강 사장은 (주)ip상사의 김 사장에게 도움받은 일의 답례로 사탕을 보내려 한다. 강 사장은 사탕을 소포장 해 비서에게 전달했다. 비서는 강 사장이 포장한 상자 여러 개를 그대로 포장부서에 전달해 김 사장에게 전송한다.
즉 이 경우는 application에서 생성한 boundary가 유지되는 경우라 볼 수 있다. 이는 UDP의 데이터 전송 방식이다.
반면 TCP의 경우, 비서는 강 사장이 전달한 사탕의 포장을 분해한 뒤 본인이 임의대로 재포장해 상대에게 보낸다.
만약 사장이 OOOO | XXX | ☆☆☆☆☆☆의 사탕을 전달한다고 할 때, 비서는 강 사장에게 받은 데이터를 바구니(버퍼)에 차곡차곡 쌓아두고 해당 데이터를 OOOOXX | X☆☆☆☆☆ | ☆... 의 식으로 자신이 가진 박스의 크기에 맞게 재포장한다. (사탕의 종류가 다르지만 낱개로 취급해서 본인 임의대로 끊어 보낸다.) 기존에 사장이 정해둔 boundary가 무너진 것이다.
이처럼 TCP에서는 데이터가 바이트의 연속(낱개)으로 전송되며 이를 stream delivery 방식이라 한다.
Sending and receiving buffers
데이터 전송의 대략적 프로세스를 그려놓은 그림이다.
해당 그림은 한쪽이 보내고 한쪽이 받기만 하는 단방향의 전송을 나타내지만 사실 두 TCP는 양방향으로 데이터를 전송한다. 그림은 송수신의 프로세스를 이해하기 위해 다른 쪽 buffer를 생략했으나 사실 그림과 같은 buffer가 한 쌍 더 있다고 생각하면 된다.
위의 예시와 같이 초기 OOOO | XXX | ☆☆☆☆☆☆이었던 데이터는 비서의 재포장으로 인해 도착했을 때는 OOOOXX | X☆☆☆☆☆ | ☆... 형태로 변해 있을 수 있다.(stream delivery)
송신 버퍼의 Sent는 이미 보낸 data이며 상대방이 해당 데이터를 정상적으로 수신하지 못했을 때 재전송 할 목적으로 보관하고 있는, data의 copy본들이 저장되어 있다. Not sent는 applicartion에게 받아 아직 보내지 않은 데이터이며 아무런 표시가 되어 있지 않은 empty 부분은 applicartion에게 받을 데이터를 보관할 빈 공간이다.
수신 버퍼의 Not read에는 아직 읽지 않은 수신데이터가 보관되어 있다. 버퍼에서는 누락된 데이터를 제외하고 제대로 도착한 데이터만 위로 올려보내준다. 누락된 건은 상대방 Transport Layer와 Process - to - process로 연락을 주고 받아 재전송 받고, 데이터의 신뢰성을 확인한 후 상위계층(application)으로 전송한다.
TCP segments
TCP는 데이터를 패킷으로 만들어 상대방에게 보내주며, 해당 패킷은 Transport Layer에서 segment라 부른다.
TCP는 최초로 택배상자를 싸는 일을 하며, 이 과정에서 전송되는 패킷의 크기가 결정된다.
일반적인 Segment 크기는 대략 536bytes이다.
2. TCP Fetures
Numbering system
TCP는 패킷 누락에 책임이 있으며 누락 확인을 위해 각 패킷마다 번호를 부여한다.
번호는 임의의 번호로 시작된다.
Example 15.1
ex.
TCP 연결이 5,000바이트의 파일을 전송한다고 가정해 보자. 첫 번째 바이트는 10,001로 번호가 매겨졌다(랜덤). 데이터가 각각 1,000바이트를 운반하는 5개의 세그먼트로 전송될 경우 각 세그먼트의 시퀀스 번호는?
Solution
패킷에 있는 data의 첫번째 byte = 그 패킷의 sequence number
ACK(Acknowledgment, 확인 응답)
패킷을 받았을 때의 응답
Selective ACK | Cumulative ACK | |
UDP/TCP | UDP 방식 | TCP 방식 |
전송 | 받은 데이터의 byte 번호 | 다음 번에 받고 싶은 데이터의 byte 번호 |
ACK #201 | 201번을 받았다는 의미 | 200번까지 잘 받았고 다음 번에 201번을 보내달라는 의미 |
자료 출처:
- TCP/IP Protocol Suite 4th Edition Slide
(Behrouz A. Forouzan 저, McGraw-Hill, 2010)
'Computer Science > 컴퓨터 네트워크' 카테고리의 다른 글
컴퓨터 네트워크: Windows in TCP (0) | 2021.10.01 |
---|---|
컴퓨터 네트워크: State transition diagram (0) | 2021.10.01 |
컴퓨터 네트워크: A TCP Connection (0) | 2021.09.24 |
컴퓨터 네트워크: Segment (0) | 2021.09.24 |
컴퓨터 네트워크: Addressing (0) | 2021.09.09 |
컴퓨터 네트워크: OSI 7-Layer Model (OSI 7 계층 모델) (0) | 2021.09.02 |