* Demultiplexing : extend the host-to-host delivery service to a process-to-process service
호스트에서 호스트로 전송하는 것을 넘어서, 프로세스에서 프로세스로 전송하게 해주는 서비스
세그먼트 구조
port # : 포트 번호
목적지 호스트가 목적지 종단 시스템에서 동작하는 (역다중화 기능을 수행하는) 정확한 프로세스에게 애플리케이션 데이터를 넘기게 해줌
* 전송 계층에서는 헤더에 포트 번호 (프로세스의 위치)를 헤더에 붙여준다.
각 port 번호를 지칭하는 길이는 16bit 이므로 \(2^{16} = 64K = 65536\) 개의 포트가 사용 가능하다.
Length : 길이
헤더를 포함하는 UDP 세그먼트의 길이를 바이트 단위로 나타낸다.
checksum : 체크섬
세그먼트에 오류가 발생했는지 검사하기 위해 수신 호스트가 사용한다
Application data : message
UDP 데이터그램의 데이터 필드에 위치한다.
Checksum
세그먼트가 출발지로부터 목적지로 이동했을 때, UDP 세그만트 안의 비트에 대한 변경사항이 있는지 검사하여 오류를 검출한다.
* Parity, 에러 여부를 확인함
Checksum = UDP header + contents of the msg body + Pseudo header에 대한 1의 보수
[ Pseudo header ]
- protocol number
- source IP address
- dst IP address
* protocol number
TCP = 6, ICMP = 1, UDP = 17 등으로 이루어져있다.
- 송신자 : 세그먼트 안에 있는 모든 16비트 워드의 합산을 1의 보수를 수행
- 해당 결과가 UDP 체크섬 필드에 들어감
- 수신자에서 체크섬을 포함한 모든 16비트 워드를 합산함
- 만약 패킷에 오류가 없다면 16비트 1일 것이며, 아니라면 오류가 발생한 것이다.
1's complement of 1's complement sum of all 16bits word in the segment
ex)
송신자의 합산 결과가 0110011001100110
checksum은 1001100110011001이 된다
수신자는 두 가지를 더한 값을 확인하므로 1111111111111111이 되어, 오류가 없는 것을 확인할 수 있다.
1의 보수
음수를 표현하기 위해서 0→1, 1→0으로 전환
연산시 생기는 carry는 맨 아래 자리에 더해준다. (wrap around 윤회식 자리올림)
* 2의 보수의 경우 연산시 carry 된 것은 버린다.
ex)
2 = 0010
-2 = 1101
Why UDP?
- no connection (handshacking) : 연결 설정이 없어 연결을 설정하기 위한 지연이 없다.
- no connection state at sender/receiver : 연결 상태를 유지하지 않기 때문에, 어떤 파라미터를 기록하지 않는다.
- small segment header : 8바이트의 오버헤드를 가진다.
- no cogestion control : 혼잡 제어를 하지 않는다.
'CS > Computer Network' 카테고리의 다른 글
[Transport Layer] TCP (1) | 2024.10.17 |
---|---|
[Transport Layer] 신뢰적인 데이터 전송의 원리 (4) | 2024.10.16 |
Transport Layer 개요 (0) | 2024.10.15 |
DNS (Domain Name System) (1) | 2024.10.15 |
SMTP & FTP (1) | 2024.10.15 |