UDP 헤더의 구조와 항목
전송 단위가 데이터그램인 UDP 헤더의 길이는 그림 1-1과 같이 8바이트(64BIT)다. UDP 헤더의 길이는 사실 그림 1-2가 더 정확하다.
출발지 포트 번호 항목과 목적지 포트 번호 항목은 각각 16비트 길이를 이룬다. 다음에 나오는 길이(Length) 항목과
오류 검사(checksum) 항목 역시도 각각 16비트 길이를 이룬다. 이에 따라 UDP 헤더의 길이는 총 64비트다
출발지 포트 번호 항목과 목적지 포트 번호 항목에는 각각 출발지 포트 번호 정보와 목적지 포트 번호 정보가 있다.
길이 항목에는 응용 계층에서 생성한 UDP 페이로드와 전송 계층에서 생성한 UDP 헤더가 더해진 데이터그램 길이 정보가 있도, 오류 검사 항목은 일반적으로 비활성 상태다. 하지만 TCP/IP 소켓을 개발할 경우 오류검사 항목의 활성 상태와
비활성 상태에 따라 데이터그램의 모습이 다르다는 점을 인식해야 한다.
오류 검사 항목이 비활성 상태인 경우 데이터그램의 모습은 그림 1-3과 같다.
오류 검사 항목이 활성 상태인 경우 데이터그램의 모습은 그림 1-4와 같다.
그림 1-4와 같이 오류 검사 항목이 활성 상태인 경우에는 데이터그램을 생성할 때 가상 헤더가 추가적으로 붙는다.
UDP 헤더의 길이는 8바이트이지만 가상 헤더의 길이는 12바이트(96BIT)다. 가상 헤더의 구조는 다음과 같다.
가상 헤더는 그림 1-5에서와 같은 구조로서 출발지 IP 주소 항목과 목적지 IP 주소 항목은 각각 32비트이고 제로 항목과 프로토콜 ID 항목은 각각 8비트이고, 길이 항목은 16비트다. 이에 따라 가상 헤더의 길이는 96비트다
출발지 IP 주소 항목과 목적지 IP 주소 항목에는 각각 출발지 IP 주소 정보와 목적지 IP 주소 정보가 있다. 또한 제로 항목은 모두 0이고, 프로토콜 ID 항목에는 UDP 또는 TCP 식별자 정보가 있고, 길이 항목에는 프로토콜 ID 항목에 따른 UDP 데이터그램의 길이 정보 또는 TCP 세그먼트 길이 정보가 있다.
그럼 파이썬으로 실제 UDP 헤더가 출발지 포드, 목적지 포트, 길이, 오류검사 4가지로 구성되어 있는지 확인해보자.
실행 결과 UDP 헤더 4가지 항목과 동일하게 나온것을 알 수 있다.
계속해서 임의의 출발지 포트 번호 항목과 임의의 목적지 포트 번호 항목을 설정해 해당 항목을 출력해 보자.