[TIL] TCP, UDP

river·2022년 6월 8일
0

스터디

목록 보기
4/9

TCP(Transmission Control Protocol, 전송 제어 프로토콜)

컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 프로토콜의 일종.
세계 통신표준으로 개발된 OSI 모형에서 4번째 계층인 전송계층(Transport Layer)에서 사용하는 규약으로, 보통 하위계층에서 사용하는 IP와 엮어 TCP/IP로 표현하기도 한다. TCP 프로토콜은 패킷을 수신했는지 확인하고 중복된 패킷도 처리해주므로 신뢰성있는 전송이 필요할 때 사용된다.
같은 계층의 다른 프로토콜로 UDP가 있다.

❓ 전송계층

송신자와 수신자를 연결하는 통신서비스를 제공하는 계층.
데이터의 전달을 담당한다.

TCP의 특징

  • 연결형 서비스로 가상 회선 방식을 제공한다.
  • 3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.
  • 흐름 제어 및 혼잡 제어
  • 높은 신뢰성 보장
  • UDP에 비해 느리다.
  • 전이중(Full-Duplex), 점대점(Point to Point)방식

TCP 서버의 특징

  • 서버 소켓은 연결만을 담당
  • 연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용된다.
  • 서버와 클라이언트는 1:1로 연결된다.
  • 스트림 전송으로 전송 데이터의 크기가 무제한이다.
  • 패킷에 대한 응답을 해야하기 때문에 성능이 낮다.(시간지연, CPU 소모 ...)
  • Streaming 서비스에 불리하다.(손실될 경우 재전송 요청을 하기 때문)

❓ 3-way handshaking

TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정

  1. 클라이언트는 서버에게 통신을 하고 싶다는 메세지(SYN 패킷)를 전송한다. 이때 클라이언트는 SYN_SENT, 서버는 Wait for Client 상태.
  2. 서버는 메세지에 대한 응답 + 통신 준비가 되었다는 메세지(SYN-ACK)를 보낸다. 이때 서버는 SYN_RECEIVED 상태
  3. 클라이언트는 서버에게 받은 메세지에 응답(ACK)을 보낸다. 이때 서버는 ESTABLISHED 상태.

이 과정을 통해 상대방과의 통신준비가 완료되었고, 연결되어 있음을 보장한다. 기존의 회선교환 방식과 유사하지만 단순히 서로 연결되어 있다는 것만을 보장한다.

SYN : synchronize sequence numbers
ACK : acknowledgment

❓ 4-way handshaking

3-way handshaking이 TCP의 연결을 초기화 할 때 사용된다면, 4-way handshaking은 세션을 종료하기 위해 사용된다.

  1. 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다. 이때 클라이언트는 FIN-WAIT 상태.
  2. 서버는 FIN플래그를 받고, 우선 확인메세지(ACK)를 전송한다. 이후 통신이 끝날때까지 기다리는데, 이때 서버는 CLOSE_WAIT상태.
  3. 연결을 종료할 준비가 완료되면 클라이언트에게 FIN플래그를 전송한다. 이때 서버의 상태는 LAST-ACK이다.
  4. 클라이언트도 준비가 완료되었을 경우 ACK를 확인했다는 메세지를 전송한다. 클라이언트의 상태는 FIN-WAIT에서 TIME-WAIT으로 변경된다.

TIME-WAIT?
: 서버에서 FIN을 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하는 등의 경우, 클라이언트에서 세션을 종료시킨 후 뒤늦게 도착하는 패킷이 있다면 이 패킷은 Drop되고, 데이터는 유실된다.
클라이언트는 이런 현상을 대비해 서버로부터 FIN을 수신한 이후에도 일정시간(디폴트는 240초)동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거친다. 이 과정을 TIME-WAIT라고 하며, 지정된 일정 시간이 종료될 경우 세션을 만료하고 연결을 종료시키며 CLOSE 상태가 된다.

UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)

컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 규약의 일종.
데이터 신뢰성을 보장하기 위한 방식인 TCP의 단점을 해결하기 위해 제시된 프로토콜. (TCP를 사용할 경우 간단히 전체 영상에서 점 하나 못 받은 것 때문에 버퍼링이 돌아가거나 재생이 중지되는 등의 현상이 있었고, 또한 혼잡제어를 위해 전송하는 양도 조절하기 때문에 영상 데이터의 퀄리티가 안정적이지 못했다.)

스트리밍 분야나 VoIP, mVoIP에서 사용되고 있다. 실시간성 보장이 중요한 분야에서 사용된다.

신뢰성 기능이 없는 TCP라고 생각하면 쉽다. 단, 이 신뢰성 기능의 부재로 UDP를 사용해 데이터를 전송할 경우 데이터의 손실이 발생할 수 있다.

UDP 헤더에는 목적지주소, 데이터순서, checksum과 실데이터만 포함되고, 확인응답 같은 것이 없기 때문에 TCP보다 용량이 가볍고 송신속도가 빠르다. 그러나 확인응답을 하지 못하기때문에 신뢰도가 TCP보다 떨어지는 편. UDP는 비연결형이라 부르며 TCP는 연결형이라 구분한다.

UDP에는 스스로 속도제어를 하는 기능 또한 없다.

TCP와 UDP의 차이

  1. UDP는 비연결형, TCP는 연결형 전송계층 프로토콜이다.
  2. TCP와 달리 UDP는 신뢰성 기능이 없다.
  3. TCP의 경우 대규모 데이터 통신에 적합하며, UDP는 비교적 소규모 데이터 통신에 적합하다.
profile
가보자고

0개의 댓글