TCP(Transmission Control Protocol)
양종단 호스트 내 프로세스 상호 간에 신뢰적인 연결지향성 서비스를 제공한다. IP의 비신뢰적인 최선형 서비스에다가, 신뢰적인 연결지향성 서비스를 추가 제공하게 한다. 이렇게, IP에 추가적으로 신뢰적인 전송을 보장함으로써, 어플리케이션 구현이 한층 쉬워지게 된다.
📌 TCP가 제공하는 서비스
- 신뢰성 있음 (Reliable): 패킷 손실, 중복, 순서바뀜 등이 없도록 보장
- Full-duplex service: Piggybacking을 함으로써 성능을 향상시켰다.(ack과 데이터를 같이 보내는 것)
- 연결지향적 (Connection-oriented): 같은 전송계층의 UDP가 비연결성(connectionless)인 것과는 달리 TCP는 연결지향적임, 연결 관리를 위한 연결설정 및 연결해제 필요함
Well-Known port used by TCP: 21/FTP(file transfer protocol), 25/SMTP(Sinmple Mail Transfer procotol), 80/HTTP(hypertext transfer protocol)
📌 Stream delivery (boundary가 없는 delivery)
보내는 응용 프로그램에서 문자 스트림을 수락하려면 세그먼트라는 패킷을 만들고 네트워크를 통해 보냅니다. 즉 TCP에서는 데이터가 바이트의 연속(낱개)으로 전송되며 이를 stream delivery 방식이라 한다. TCP는 데이터를 패킷으로 만들어 상대방에게 보내주며, 해당 패킷은 Transport Layer에서 segment라 부른다.
📌 Sending and receiving buffers
- TCP에서는 보내고 싶은 bit만큼 세그멘트를 만들어서 보낸다. 전송시 buffer에 합쳐져서 보이기 때문에 위에서 메세지가 어떤 구조로 왔는지 구분이 안된다.
- TCP는 Byte단위마다 번호를 붙인다.
💡 전송과정
- 송신 버퍼의 Sent는 이미 보낸 data이며 상대방이 해당 데이터를 정상적으로 수신하지 못했을 때 재전송 할 목적으로 보관하고 있는, data의 copy본들이 저장되어 있다.
- Not sent는 applicartion에게 받아 아직 보내지 않은 데이터이며 아무런 표시가 되어 있지 않은 empty 부분은 applicartion에게 받을 데이터를 보관할 빈 공간이다.
- 수신 버퍼의 Not read에는 아직 읽지 않은 수신데이터가 보관되어 있다. 버퍼에서는 누락된 데이터를 제외하고 제대로 도착한 데이터만 위로 올려보내준다.
- 누락된 건은 상대방 Transport Layer와 Process - to - process로 연락을 주고 받아 재전송 받고, 데이터의 신뢰성을 확인한 후 상위계층(application)으로 전송한다.
📌 TCP 주요 특징
✔ Numbering system
- Byte number: TCP는 패킷 누락에 책임이 있으며 누락 확인을 위해 각 패킷마다 번호를 부여한다. 번호는 임의의 번호로 시작된다.
- Sequence number: sender에서 보내는 패킷에 있는 data의 첫번째 byte이다.
- Acknowledgment number: 패킷을 받았을 때의 응답으로 receiver에서 다음에 받기 원하는 next byte이다.
✔ Flow control
- 수신자는 수신자가 데이터에 압도되지 않도록 발신자가 보낼 데이터의 양을 제어한다.
✔ Error control
✔ Congestion control
- 이것이 데이터 링크와의 차이점이다. sender가 보내는 데이터의 양은 수신자(흐름 제어)에 의해 제어될 뿐만 아니라 네트워크의 congestion level에 따라 결정된다.
📌 Difference between data link and transport layer
- Major dissimilarities between environment: subnet을 통해서 통신한다. 목적지의 명시적인 주소지정이 있다. DL은 중간이 선으로 연결되어있는 반면 TL은 중간이 인터넷으로 연결되어 있다.
- Process of connection establishment: 초기 connection set-up이 좀더 복잡하다. TCP에 3-way handshake를 사용하기 때문이다.
- Existence of storage capacity in the subnet: 보낼때는 순서에 맞게 보냈지만 받을때에 순서대로 받았는지 모른다. 때문에 순서에 어긋나게 받을 수가 있다.
- Amount rather than kind: 연결 수의 차이가 있다. TCP에는 동적으로 변화하는 많은 수의 연결 존재한다.
📌 Transport layer에서의 문제점
데이터링크는 보낸 순서대로 도착하기 때문에 문제가 없지만 transport layer의 경우 처음에 데이터가 손실되어 다시 그 데이터를 보냈는데, 나중에 손실되었던 데이터가 도착했을 경우 두 데이터가 같은 데이터인지 구분이 불가능한다. 이러한 혼잡을 해결해야하는 문제가 있다.