본문 바로가기

Domain/네트워크

[네트워크] 5. Transport Layer: UDP/TCP

UDP(User Datagram Protocol)

TCP와 함께 계층 4의 프로토콜이다. End-To-end, connectionless, message-oriented의 특징을 갖는다. 그리고 UDP는 신뢰성을 제공하지 않는 프로토콜로 응용 프로그램에서 신뢰성을 제공하는 방식으로 통신할 수 있다. 멀티미디어와 같은 경우 신뢰성이 중요하지 않기 때문에 주로 사용된다. (일부 패킷에 오류가 있더라도 사람의 눈으로는 그 변화를 알아채기 힘듦)

  • End-To-End: 어플리케이션간의 통신을 제공
  • Connectionless: 통신을 위해 송신을 알리거나 하는 특별한 과정이 필요하지 않다.
  • Message-oriented: 메시지를 자르거나 나누거나 합치지 않고 온전한 형태 그대로 보낸다.

계층4의 port number

  • Well-known: 1024 보다 작은 값으로, 자주 사용되는 포트 넘버. ex) HTTP-80
  • Registered number: 49151 이하의 값으로 특정 용도로 사용하기 위해 등록된 포트 넘버 ex) MySQL-3308
  • Dynamic port number: 그 외의 포트 넘버로 클라이언트로 사용된다.

EX. 와이어샤크 패킷 캡쳐

  • Source: 57545
  • Destination: 53
  • Length: 40
  • Checksum: 0x9499

TCP(Transmission Control Protocol)

계층 4의 프로토콜로 UDP와 다르게 신뢰성을 제공하는 프로토콜이다. End-to-End, connection oriented, full-duplex, stream interface 등의 특징을 가진다.

  • End-to-End: UDP와 같음
  • Connection oriented: 가상적인 연결을 수립하여 통신하고 해제하는 과정을 거침.
  • Full-duplex: 동시에 양방향 통신이 가능
  • Stream interface: 필요에 따라 패킷을 자르거나 합칠 수 있음.

-Code Bits

  • Urgent
  • ACK
  • Push
  • Reset
  • SYN
  • FIN

- TCP 헤더의 옵션

  • MSS(Maximum Segment Size): TCP 페이로드의 최대 크기
  • Window scale
  • Selective ACK

TCP가 신뢰성을 제공하는 방법

1. Sequence number: TCP 패킷 헤더에 순서 정보를 붙여 중복이나 무순서 전달 문제를 해결한다.

2. Timeout-and-retransmission: 수신자는 패킷을 정상적으로 받을 시 ACK 패킷을 보내어 잘 수신되었음을 알린다. 만약 송신자가 ACK을 일정 시간 내에 받지 못할 경우 전송에 문제가 있다고 가정하고 다시 패킷을 전송한다.

 

3-Way Handshake

TCP의 연결을 설정하기 위해 3개의 패킷을 교환하는 과정이다. SYN segment는 컨트롤 메시지로 연결을 설정하는데 사용되고, 첫 SYN segment는 랜덤한 SEQ NO을 전송한다. FIN segment는 컨트롤 메시지로 연결을 해제하는데 사용된다.

 

TCP의 연결 상태

  • LISTEN: 서버가 구성을 마치고 클라이언트의 요청을 기다리는 상태.
  • ESTABLISHED: 연결이 성립된 상태
  • CLOSE_WAIT: 한쪽 호스트의 송신만 종료된 상태
  • TIME_WAIT: 두 호스트 모두 송신이 끝났지만, 일시적으로 대기하는 상태. 보낸 패킷이 도착하지 않는 것과 같은 무제를 대비하여 마지막으로 일정 시간 대기하는 것.
  • CLOSED: 연결이 완전히 종료된 상태.

 

 

Sliding Window

TCP에서 사용하는 처리율을 크게 향상시키는 기법으로 패킷 마다 ACK을 받는게 아닌, ACK을 받기 전에 window size 만큼 패킷을 전송한다. Window size가 4라면,아래처럼 1~4 패킷을 보낸다. 이후 1,2 패킷에 대한 ACK이 도착하면 5,6을 보내는 방식이다.

Delayed ACK

TCP는 full-duplex라는 특징을 갖고 있기 때문에 이를 활용하는 방식이다. 수신자는 송신자에게 패킷을 받으면 바로 ACK을 보내지 않고 일정 시간 대기한 후 보낼 패킷이 있다면 ACK과 함꼐 전송하는 효율을 향상시키는 기법이다.

 

Nagle Algorithm

네트워크 상의 패킷 수를 줄이기 위해 가능하다면 패킷을 뭉쳐서 보내는 알고리즘.

 

Flow Control

송신자의 전송률이 수신자의 수신률보다 커서 overrun이 발생하는 문제를 해결하가 위해 사용하는 기법이다. 수신자는 송신자에게 window advertisement라는 남은 버퍼 공간을 알려주어 흐름을 제어한다.

 

혼잡을 피하는 기술 (TCP는 패킷의 손실, 딜레이의 변화가 있을 시 혼잡으로 고려한다)

  1. 혼잡이 발견되면, 일시적으로 윈도우 크기를 줄인다.
  2. Slow start: 혼잡 방지를 위해 일시적으로 한 세그먼트의 congestion window size를 사용한다. 이후 ACK이 도착할 때마다 사이즈를 두배씩 증가시킨다.
  3. Congestion avoidance: 윈도우 크기가 임계점을 도달하면 윈도우의 크기를 1씩 증가시킨다.
  4. 패킷이 손실될 경우 임계점을 cwnd의 1/2로 줄이고 다시 slow start한다.

EX. 와이어샤크 패킷 캡쳐 - TCP