TCP
TCP는 transport Layer의 프로토콜로 3계층의 ip protocol과 같이 현재 가장 많이 쓰이는 프로토콜입니다.
TCP의 주요 특징은 다음과 같습니다
- Connection oriented service (연결 지향)
- Flow control (흐름 제어)
- Congestion control (혼잡 제어)
- Reliable data transmission (신뢰 전송)
- Guarantees the order of packet data (패킷 순서 정렬 보증)
Connetcion oriented service라는 것은 데이터 통신을 하기전 미리 상대방 host와의 연결을 확인하는 것 입니다.
위 사진처럼 통신전에 SYN 시그널을 보내고 다시 ACK와 SYN 리턴을 받으면서 연결이 되었다는 것을 확인후 ACK(3번째 화살표)를 다시 받으면서 데이터를 포함시켜 전송할 수 있습니다. 이 기능을 통해 수신하는 host가 통신을 할 준비가 되어 있다는 점을 알고 데이터 통신을 시작 할 수 있습니다. (Realiable data trasmission이라 부르는 이유중 하나가 됩니다)
이 과정에서 host간 데이터 전송시 초기 순서번호(ISN)를 교환하여 패킷의 순서또한 보증하게 됩니다. 이 과정을 3-way handshake라 부릅니다.
Flow control은 수신 측이 송신측 보다 데이터 처리 속도가 빠르면 문제가 생길 일이 없지만, 수신측의 데이터 처리 속도가 송신측의 전송 속도 보다 더 느리다면 어떤 상황이 생길까요? 아마 수신측에서 처리 해야 할 데이터들이 쌓여 버퍼의 물리적인 용량이 더이상 받을 수 없어 그 뒤로 도착하는 packet을 loss 하는 문제가 생길 수 있습니다. 이 것을 방지하기 위해 송신 측과 수신 측이 서로 정보를 전달하가며 데이터 전송량을 조절하는 것이 바로 Flow control 입니다.
Order of packet data을 설명하려면 현대 네트워크 구조를 간단히 알아야 합니다. 인터넷을 통해 데이터를 전송하는 길은 여러갈래가 있고 그 때마다 상황이 괜찮은 길(route)로 packet은 전송됩니다(이것을 routing 이라 합니다). 이런 구조에서 늦게 보낸 5번 packet이 먼저보낸 2번 packet보다 먼저 도착해서 앞쪽에 배치된다면 수신된 데이터는 에러가 발생할 것입니다. 그래서 TCP는 이러한 상황을 피하기 위해 packet 순서를 ack 번호에 따라 정렬하는 기능이 있습니다.
TCP header
위에서 언급한 기능들은 다 TCP header가 있기에 수행이 가능합니다. TCP header는 기본적으로 20byte이고 이 안에 ack num, syn bit, window size등 TCP의 다양한 기능을 실행 할 수 있게하는 공간이 존재합니다.
Congestion control은 네트워크 통신 중에 어떠한 한 라우터에 데이터가 몰릴 경우 네트워크 지연이 발생하는데 이 때 packet delay나 packet loss가 발생하게 됩니다. TCP는 이러한 것이 발생하면 재전송이 되기 기능을 가지고 있기때문에 기존의 packet + 재전송 packet으로 인해 네트워크 상에서 더욱 혼잡이 가중되는 상황이 생길 수 있습니다. 이를 방지하기 위해 송신측에서 보내는 데이터의 전송속도를 조절하여 네트워크 내부의 congestion을 방지하는 기술이 congestion control 입니다. congestion control은 위의 기능들과 다른점이 있습니다. 엄밀히 말하면 tcp header에는 congestion control을 위한 공간이 없다고 할 수 있습니다. 그 대신에 상대방 host에게 packet을 잘 받았다는 ack 신호가 얼마나 안오는지 어느 시간 동안 안오는지를 체크하여 동작하게 됩니다. congestion control에 대한 자세한 내용은 TCP Reno, Tahoe에 관해 찾아보면 congestion control의 여러 모델이 있을 것입니다.