본문 바로가기
네트워크

[네트워크] Chap 3.2 - Simple UDP, Internet checksum (TCP & UDP)

by 개발 고양이 2024. 11. 20.

UDP : User Datagram Protocol

: connectionless → no connection set-up delay => 빠르다!

: no handshaking between UDP sender, receiver

: no dedicated socket for each connection

: loss보다는 throughput에 민감한 application들에 쓰인다

: UDP를 사용하는 것들
 → rate sensitive(속도에 민감)한 streaming multimedia application, DNS, SNMP, HTTP/3

 

UDP socket ID = (Dst. IP addr., Dst. port#) when demuxing


UDP datagram format [RFC768]

 

첫 줄은 TCP하고 똑같음!

 

no connection establishment

: TCP와 달리, 미리 connection-set-up 과정이 필요가 없어 connection-set-up delay가 없다.

 

small header size

: 헤더 사이즈가 작다

: UDP datagram에는 추가적인 정보가 들어가지 않아 TCP에 비해 header size가 작은 편이다.

 

no congestion control

: TCP와 달리 congestion control을 하지 않아, 빠른 데이터 전송이 가능하다는 장점이 있다. 


UDP : Transport Layer Actions

source port number에 자기 port number를 넣고,

destination port number에 application이 알려준 client의 port number를 넣어서 UDP segment를 만든다.

=> 그 다음 checksum을 계산하고(16bit), UDP segment를 network layer로 내려보낸다.

 

 

 

sender로부터 날아오면, network layer은 이 UDP segment를 Transport layer로 올려보낸다.

UDP는 header를 통해 port number가 있는지 보고 (이때 없으면 버린다), port number가 있는 경우 checksum field를 통해 error checking을 한다.


UDP/TCP checksum

Goal : 전송된 segment에서 error(ex. flipped bits)가 있는지 detect

UDP, TCP 모두 같은 방식(algorithm)으로 16bit checksum을 한다!

(참고로 IP도 똑같이 checksum을 하는데, IP의 경우 header에서만 한다)

 

 

Why UDP and TCP perform the end-to-end error checking?

1. e2e 경로상의 모든 layer 2 프로토콜들이 error checking한다고 보장할 수 없음

2. 중간 라우터 버퍼에서도 error가 발생할 수 있는데, 이 경우 error를 1번으로도 찾아낼 수 없음

 

  • TCP, UDP는 전체 PDU에 대해서 checksum
  • sender와 receiver 가 동일한 연산을 수행한 결과 값이 다르면 error detection → drop!
  • 16-bit 거리의 두 bit 들이 동시에 filp 되면 error detection 불가능!

  • sender
    : checksum을 계산한다 (방법은 아래에 설명)

  • receiver
    : sender와 똑같은 방식으로 checksum을 계산한다.
    : 계산한 값이, sender가 보낸 checksum 값과 다른지 비교한다.
     => sender가 보낸 checksum과 다른 경우 → error가 발생했다고 간주 → drop한다
     => sender가 보낸 checksum과 같은 경우 → no error detected
    (하지만 checksum값이 같다고 해서 반드시 error가 없는 것은 아니다. 예외는 있다. 예를 들어, 16bit 거리의 두 bit가 동시에 flip된 경우 error를 감지하지 못한다. 아래에서 그림으로 설명하겠다.)

 


Three steps of the Internet Checksum

 

 

 

① 16-bit alignment

: 보내야할게 쭉 있으면 16bit로 커팅해서 줄을 세운다.


② Ones-complement addition

: 각각의 bit는 부호가 없음. 다 그냥 더하면 된다.
: overflow되어 carry out된 값이 있으면, sum값에 다시 더해준다.


③ Ones-complement operation

: 마지막 나온 결과값을 뒤집는다! (ex. 0 1 0 1 ..이면 1 0 1 0 ..으로)
: 그 뒤집은 값이 checksum 값이 된다!

 

 


 

 

그러나 checksum 결과값이 같다고 해서 반드시 error가 없는 것은 아니다.

그림과 같이 만약에 2개의 bit가 동시에 뒤집어지는 경우,

sum 값에는 변화가 없기 때문에 checksum 결과 값 또한 똑같이 나온다. 

=> error detection 불가능!