본문 바로가기

전공/네트워크

전송 계층 - UDP와 TCP의 모든 것

반응형

전송계층을 대표하는 프로토콜은 UDP와 TCP다. TCP의 역할이 UDP에 비해 현저히 많기 때문에 포스팅을 두개로 나눌까 고민했지만 둘은 뗄래야 뗄 수 없는 사이인 것 같아 한번에 하기로 했다.

 

1. UDP[User Datagram Protocol]

UDP의 모토는 '최소한의 기능으로 동작하자'다. 따라서 복잡한 과정은 일체없이 가벼운 임무만을 수행한다. 연결없다. 신뢰도 없으며 데이터 순서로 올바르지 않다. 그러면 왜 사용할까? 이것 저것 없이 전송만 하기 때문에 속도가 굉장히 빠르다.

  • 비 연결형 프로토콜
  • 신뢰할 수 없다. [데이터가 전송되었는지 보장X. 데이터의 순서가 올바른지 보장X]
  • 속도가 빠르기 때문에 신속성이 중요한 서비스에 유리하다.
  • UDP를 이용하는 서비스: DNS, SNMP, TFTP, 스트리밍 서비스

본래 동영상이라는 것은 여러 장의 사진을 이어붙인 것이다. 따라서 한 픽셀 픽셀이 다 소중하고 중요한 것이 아니라 픽셀 몇개는 손실되더라도 빠른 속도로 많은 사진을 가져오는 것이 더 중요하다. 따라서 스트리밍 서비스(=동영상)에는 UDP가 적합하다

 

1.2. UDP의 패킷 구조

UDP의 헤더에는 오직 포트번호와 길이 체크섬만 붙는다. 따라서 이는 총 8Byte밖에 되지 않는다. 

 

2. TCP [Transport Connection Protocol]

TCP는 신뢰를 중요시 여기는 프로토콜이다. 따라서 데이터를 전송하였을 때, 해당 데이터가 제대로 전송되었는지를 보장한다. 만약 데이터가 절대 도달할 수 없는 상황이라면, 데이터가 도달하지 못했다는 사실을 알린다. (반면에 UDP는 도착했는지 안도착했는지 알림 자체가 X)

  • 연결형 프로토콜
  • 높은 신뢰성
  • 데이터 전송 및 순서 보장
  • 혼잡 제어
  • 흐름 제어

 

2.1. TCP 패킷 구조

8Byte였던 UDP와는 다르게 TCP 헤더는 20Byte다. 필드와 각각의 역할에 대해 살펴보자.

필드명 크기(Bit) 역할
[Source Port | Destination] Port 16 포트 번호
Sequence number 32 송신[Send] 데이터의 순서 번호
ACK number 32 데이터 전송을 보장하기 위한 필드. Sequence number에 대한 응답 값
Header Length 4 TCP 헤더의 전체 길이
not used 3~6 미래 통신을 위해 남겨놓은 필드
URG(Urgent) 1 Urgent pointer 값의 유효성을 나타낸다.
ACK(Acknowledgement) 1 Acknowledgement 값의 유효성을 나타낸다.
PSH(Push) 1 버퍼링된 데이터를 상위 계층에 즉시 전달할 것을 요청한다.
RST(Reset) 1 연결을 초기화한다.
SYN(Synchronize) 1 동기화를 위한 번호다. 양측 최초 패킷에만 값이 부여된다.
FIN(Finish) 1 전송을 마친다.
Window size 16 송수신자와의 흐름제어를 위해 사용된다. 수신자가 수용 가능한 버퍼 크기
Check sum 16 오류를 체크하기 위한 필드영역이다. (가상헤더+실제헤더+데이터+패딩)
Urgent Pointer 16 URG에 값이 있을 때 요청한 부분까지 긴급한 데이터 처리를 위해 마지막 바이트에 대한 일련번호를 갖는다.
Options 0~320 다양한 TCP 옵션을 사용할 때 추가적으로 사용한다.

 

반응형