TCP
TCP(Transmission Control Protocol)는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜로서, 장치들 사이에 논리적인 접속을 성립하기 위하여 연결을 설정하여 신뢰성을 보장하는 연결형 서비스이다. TCP는 네트워크 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 데이터를 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.
TCP의 특징
-
연결형 서비스
연결형 서비스로 가상 회선 방식을 제공한다.
- 3-way handshaking 과정을 통해 연결을 설정
- 4-way handshaking 을 통해 연결을 해제
-
흐름제어(Flow control)
데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로를 방지
- 데이터를 받는 곳에서 데이터를 처리하는 속도이상으로 데이터를 계속 받다보면 버퍼에 데이터가 쌓인다. 그리고 버퍼 사이즈 이상으로 데이터가 들어오면 결국 데이터가 손실된다.
- 데이터를 받는 곳에서 윈도우 크기 값을 통해 수신량을 정할 수 있다.
-
혼잡 제어(Congestion control)
네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지
- 정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.
-
신뢰성이 높은 전송(Reliable transmission)
- Dupack-based retransmission
- 정상적인 상황에서는 ACK 값이 연속적으로 전송되어야 한다.
- 그러나 ACK값이 중복으로 올 경우 패킷 이상을 감지하고 재전송을 요청한다.
- Timeout-based retransmission
- 일정시간동안 ACK 값이 수신을 못할 경우 재전송을 요청한다.
-
전이중, 점대점 방식
- 전이중(Full-Duplex)
전송이 양방향으로 동시에 일어날 수 있따.
- 점대점(Point to Point)
각 연결이 정확히 2개의 종단점을 가지고 있다.
-> 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다.
응용 계층으로부터 데이터를 받은 TCP는 헤더를 추가한 후에 이를 IP로 보낸다. 헤더에는 아래 표와 같은 정보가 포함된다.
제어 비트(Flag Bit) 정보
ACK 제어비트
- ACK는 송신측에 대하여 수신측에서 긍정 응답으로 보내지는 전송 제어용 캐릭터
- ACK 번호를 사용하여 패킷이 도착했는지 확인한다.
-> 송신한 패킷이 제대로 도착하지 않았으면 재송신을 요구한다.
TCP의 연결 및 해제 과정
TCP Connection (3-way handshake)
- 먼저 open()을 실행한 클라이언트가 SYN을 보내고 SYN_SENT 상태로 대기한다.
- 서버는 SYN_RCVD 상태로 바꾸고 SYN과 응답 ACK를 보낸다.
- SYN과 응답 ACK를 받은 클라이언트는 ESTABLISHED 상태로 변경하고 서버에게 응답 ACK를 보낸다.
- 응답 ACK를 받은 서버는 ESTABLISHED 상태로 변경한다.
TCP Disconnection (4-way handshake)
- 먼저 close()를 실행한 클라이언트가 FIN을 보내고 FIN_WAIT1 상태로 대기한다.
- 서버는 CLOSE_WAIT으로 바꾸고 응답 ACK를 전달한다. 동시에 해당 포트에 연결되어 있는 어플리케이션에게 close()를 요청한다.
- ACK를 받은 클라이언트는 상태를 FIN_WAIT2로 변경한다.
- close() 요청을 받은 서버 어플리케이션은 종료 프로세스를 진행하고 FIN을 클라이언트에 보내 LAST_ACK 상태로 바꾼다.
- FIN을 받은 클라이언트는 ACK를 서버에 다시 전송하고 TIME_WAIT으로 상태를 바꾼다. TIME_WAIT에서 일정 시간이 지나면 CLOSED가 된다. ACK를 받은 서버도 포트를 CLOSED로 닫는다.
- 주의
반드시 서버만 CLOSE_WAIT 상태를 갖는 것은 아닌다.
서버가 먼저 종료하겠다고 FIN을 보낼 수 있고, 이런 경우 서버가 FIN_WAIT1 상태가 된다.
누가 먼저 close()를 요청하는냐에 따라 상태가 달라질 수 있다.
응용 계층으로부터 데이터를 받은 UDP도 UDP 헤더를 추가한 후에 이를 IP로 보낸다.
신뢰성을 보장해주지 않지만 간단하고 속도가 빠른 것이 특징이다.
TCP vs UDP
TCP(Transimission Control Protocol), UDP(User Datagram Protocol) 두 프로토콜은 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP프로토콜을 기반으로 구현되어 있다.
- TCP의 데이터 송신과정
- UDP의 데이터 송신과정
신뢰성이 요구되는 애플리케이션에서는 TCP를 사용하고 간단한 데이터를 빠른 속도로 전송하고자 하는 애플리케이션에서는 UDP를 사용한다.
- TCP, UDP 비교