CS Repo/네트워크 - Top-down Approach + @
IPv4 패킷의 구조
조금씩 차근차근
2025. 4. 16. 16:38
버전
- IP의 버전을 나타내는 4비트 필드이다.
- IPv4에서는 "0x4" 가 들어간다.
헤더 길이(Internet Header Length, IHL)
- IPv4의 헤더 길이를 나타내는 4비트 필드이다.
- 헤더의 길이를 4바이트 단위로 환산한 값이 들어간다.
- 1바이트, 1비트 단위가 아님에 유의하자.
- IPv4 헤더의 길이는 20바이트 이므로 "0x5"가 들어간다.
ToS(Type of Service)
정의
- IPv4 패킷의 우선도를 나타내는 1바이트(8비트) 필드이다.
- 우선 제어, 대역 제어, 혼잡 제어 등 QoS(Quality of Service)에서 사용한다.
- 미리 네트워크 기기에서 '이 값이면 최우선으로 전송한다.', '이 값이면 이것만은 보증한다' 등 정책을 설정해 두고
- 송신자가 적절한 헤더를 선택함으로써 QoS를 지원할 수 있다.
구성
- DSCP(Differentiated SErvices Code Point, 앞 6비트) 필드
- 우선 제어, 대역 제어에 사용한다.
- ECN(Explicit Congestion Notification, 뒤 2비트) 필드
- 혼잡 알림 시 사용한다.
패킷 길이
- IPv4 헤더와 IPv4 페이로드를 합친 패킷의 전체 길이를 나타내는 2바이트(16비트) 필드이다.
- 이더넷의 기본 MTU(Maximum Transmission Unit) 까지 들어있는 IPv4 패킷의 경우, 패킷 길이 값은 0x05dc(=1500) 이 된다.
식별자(ID)
잠깐, IP fragmentation이란?
- 패킷 교환 방식은 MTU를 넘지 않는 크기에 데이터만 전송 가능하기에,
- 네트워크 계층은 데이터를 파편화(fragmentation) 하여 쪼개 보낼 수 있다.
- 네트워크 계층에서는, 파편화한 정보를 식별자(ID), 플래그(flag), 프래그먼트 오프셋(fragment offset) 에 나눠 저장한다.
정의
- 패킷을 만들 때 무작위로 할당되는 패킷 ID를 의미한다.
- 프래그먼트 셋은 같은 식별자를 복사해서 갖는다.
- 프래그먼트 패킷을 받은 단말은 이 식별자를 보고, 통신 도중에 fragmentation되었다는 것을 인식하고 패킷을 재결합한다.
플래그
- 3비트로 구성된 fragmentation을 위한 비트
첫번째 비트
- 사용하지 않는다.
두번째 비트
- DF(Don't Fragment) 비트라고 불린다.
- IP 패킷을 fragmentation해도 좋을 지 여부를 담은 비트.
- 0이면 fragmentation을 허가한다.
- 1이면 fragmentation을 허가하지 않는다.
- 요즘은 상위 계층(L4~L7) 에서 fragmentation을 수행하고, 해당 비트를 1로 설정한다.
- 네트워크 계층에서 fragmentation이 일어나지 않도록
3번째 비트
- MF(More Fragments) 비트라고 불린다.
- fragmentation된 IPv4 패킷이 뒤에 계속되는가를 나타낸다.
- 0이면 fragmentation된 IPv4 패킷이 뒤에 계속되지 않는다는 의미이다.
- 1이면 fragmentation된 IPv4 패킷이 뒤에 계속된다는 의미이다.
프래그먼트 오프셋
- fragmentation한 뒤, 그 패킷이 오리지널 패킷의 앞쪽부터 어느 위치에 있는지를 나타내는 13비트 오프셋 필드이다.
- 0-indexed로 동작한다.
- 패킷을 받은 단말은 이 값을 보고 IP패킷의 순서를 정렬한다.
TTL
- Time To Live
- 패킷의 수명을 나타내는 1바이트 필드이다.
- '경유 가능한 라우터의 수'로 수명을 결정한다.
- 라우터를 경유할 때마다 1씩 감소시킨다.
- TTL이 0이되면 패킷을 파기한다.
- 패킷을 파기한 라우터는 'Time-to-live exceed(타입 11/코드 0)' 라는 ICMPv4(작성예정) 패킷을 반환하여, 패킷을 파기했다는 정보를 송신지 단말에 전달한다.
프로토콜 번호
- IPv4 페이로드가 어떤 프로토콜로 구성되어 있는지를 나타내는 1바이트(8비트) 필드이다.
- 0x06: TCP
- 0x11(=17): UDP
헤더 체크섬
- IPv4 헤더의 정합성을 체크하기 위해 사용되는 2바이트(16비트) 필드이다.
송신지/수신지 IPv4 주소
- IPv4 주소를 담당한다.
- 참고) 단말 하나 당 여러 IP주소를 가질수도 있다.
옵션
- IPv4 패킷 송신에 대한 확장 기능을 저장한 가변 길이 필드이다.
- 잘 사용되지는 않는다.
패딩
- IPv4 헤더는 사양 상 4바이트 단위여야 한다.
- 옵션 길이는 정해져있지 않으므로, 4바이트가 되는지 알 수 없다.
- 따라서 4바이트의 정수배가 되지 않으면, 마지막에 패딩 '0'을 추가해, 4바이트의 정수배가 되도록 만든다.
본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다.