03-1
💡 UDP : Datagram Protocol
- Datagram messaging servies
- Demultiplexing : port numbers
port number를 보고 적절한 application으로 전달한다
- Detecting corruption : checksums
checksums로 충돌이 일어날만 한 것(error)를 검사한다
- Connectionless
- no handshaking between UDP sender, receiver
TCP는 정보를 주고받을 때 마다 handshaking이 필요하지만 UDP는 그렇지 않다
- each UDP segment handled independently of others
TCP 처럼 congestion control을 하지 않는다
- Lightweight communication
- just send and receives messages
- Avoid overhead of ordered, reliable delivery
connection이 없기떄문에 headr가 작아지고,
header가 작아지기 때문에 overhead를 피할 수 있고 빨라진다
📌 Adventage of UDP vs TCP
- faster : no connection set-up delay
TCP 에서 필요한 connection을 맺지 않기 때문에 그 시간이 줄어든다
- simple : no connection state at sender, receiver
TCP connection이 없기 때문에 sender와 receiver를 왕복할 때 드는 RTT 시간이 없어졌다
- Lightweight : smaller header size (8 byte vs 20 byte)
사실상 UDP는 demultiplexing 과 error detecting만 하기 때문에 TCP에 비해 하는일이 적다 -> header에 들어갈 내용이 TCP에 비해 없다
- no congestion control
UDP can blast away as fast as desired
receiver의 상황을 고려하지 않고 되는대로 막 보내기 때문에 빠르다
💡 DNS & DHCP uses UDP
UDP는 unreliable하기 때문에 DNS나 DHCP에 정보를 보냈어도 error가 날 수도 있다.
대신 DNS는 webpage IP를 빨리 얻어야하고 DHCP는 사용자가 IP를 빨리 받아내야하기 때문에 TCP 대신 UDP를 사용한다.
그렇기 때문에 우리는 인터넷에 보다 빨리 들어갈 수 있다.
💡 UDP Checksums
Error 는 보내는쪽에서 보낸 데이터와 받는 쪽에서 받은 데이터가 다르면 일어난다.
For Example
근데 이 두 이진수 리스트들은 뭐지? 무슨 기준으로 어디서 나온 애들일까
1s complement
1 → 0
0 → 1
로 바꾸는 것을 말한다.
두 이진수 데이터를 더한다.
1 1 인경우 올림을 해준다.
올림이 지속될 경우에는 16자리가 아닌 17자리가 나오는 경우가 있는데
이 경우에는 앞의 1을 맨 뒤로 보내서 다시 더해준다.
이렇게 나온 이진수 나열이 sum이다.
checksum은 sum을 1s complement 해준 것이다.
receiver 쪽에서 받은 데이터를 sum + checksum 값을 했을 때, 모든 이진수 나열이 1 1 1 1 ... 1 1 1 로 나와야 한다. ( checksum 은 sum의 1s complement이기 때문에 )
📌 BUT ! checksum이 error detect의 완벽한 방법은 아니다
data에 error가 없지만 있다고 판단할 수 있다.
- data에 오류가 없지만 checksum의 오류인 경우
만약 첫번째 줄의 마지막인 0 이 1로 업데이트 되고 ,
두번째 줄의 마지막 1이 0으로 error 가 났다면
정상적인 sum의 값인 1과 같아진다.
이렇게되면 숫자는 바뀌었지만 checksum은 바뀌지 않는다.
이런 경우가 가끔있지만 transfer layer & link layer 에서 checksum error checking 을 해준다.