⚠️ 들어가기 앞서
경북대학교 컴퓨터학부 COMP0414-001 컴퓨터망 과목을 공부하며 정리한 글입니다.
이번 장에서는 Network Layer의 가장 핵심이라고 할 수 있는 IP(Internet Protocol) Datagram의 구조에 대해서 알아보자.
IP datagram의 전체 구조는 다음과 같다. 하나하나 세세하게 알아보자.
version
: 프로토콜의 버전이 IPv4인지 IPv6인지를 나타낸다.headlen
: option
필드의 존재 때문에 헤더의 길이가 가변적인데 헤더의 길이를 명시함으로써 어디까지가 헤더인지, 다르게 말하면 어디부터가 payload data인지를 알 수 있다.type of service
: 해당 datagram의 혼잡 여부, 우선순위, 신뢰성, 처리량 등의 정보를 담고 있는 필드이다. 8비트로 이루어져 있다.패킷의 길이(크기)를 나타낸다. 16비트로 이루어져 있으며 따라서 패킷 사이즈는 최대 2^16 바이트이다. 이보다 큰 datagram은 쪼개 주어야 한다.
데이터의 길이가 전체 패킷 길이보다 길어 쪼개야 할 필요가 있을 때 각 패킷들 간의 순서 보장을 위한 부분이다. 이 때 쪼개는 작업을 fragmentation
이라고 한다.
기억해야 할 점은 fragmentation이 일어나면 바로 다음 라우터에서 재조합 하는 것이 아니라 목적지에서 마지막에 재조합한다는 것이다.
그리고 당연한 소리이지만 패킷을 자를 때는 헤더를 포함하지 않고 payload data에 대해서만 자르고, 잘린 각각의 패킷에 대해서 또 헤더를 붙여 전송한다. 헤더를 포함하여 자르면... 뒤의 패킷들은 헤더가 없어지니까 말이 안 된다.
앞글자만 따서 TTL
이라고 하며 패킷의 수명을 나타낸다.
만약 주소 부분에 오류가 생겨서 목적지를 찾지 못하고 라우터들 사이를 이리저리 돌아다니는 패킷이 생길 수가 있는데, 이러한 패킷들이 영영 네트워크 상에 존재해선 안되므로 패킷의 수명을 지정해 준다.
수명의 단위는 홉
hop
이다. '폴짝 뛰다' 라는 뜻을 가지고 있는 '홉' 은 라우터를 하나 이동할 때마다 TTL 필드가 1씩 감소한다. 이 필드가 0이 되면 해당 패킷은 삭제된다.
이 때 ICMP
프로토콜을 통해 삭제되었다는 사실을 송신자에게 알려 준다.
upper layer (상위 계층) 필드는 말 그대로 IP Datagram의 상위 계층, 즉 전송 계층에서 TCP인지 UDP인지 어떤 프로토콜을 사용하고 있는지를 나타낸다.
header checksum은 TCP/UDP 헤더의 checksum 필드와 동일하게 오류를 검증하는 작업에서 비교하는 용도로 사용한다.
헤더의 필드들을 비트 연산, 보수 연산을 수행하여 checksum 작업을 수행하기 때문에, 헤더의 내용이 바뀌면 checksum 값도 바뀌어야 한다. 그런데 라우터 사이를 이동할 때마다 TTL 홉이 줄어든다. 따라서 헤더의 내용이 바뀌므로, 라우터 사이를 이동할 때마다 checksum 필드도 매번 변한다.
그리고 이러한 checksum 오류 검증은 헤더의 내용에 대해서만 이루어지며 payload data의 변조 여부는 신경쓰지 않는다.
출발지와 목적지의 IP 주소를 나타낸다. 라우터는 이 부분을 routing table과 대조하여 forwarding 작업을 수행한다. 32비트로 이루어져 있다.
timestamp, record route token 등 기타 정보를 담고 있으며 선택사항이다. 길이 또한 가변적이어서 headlen
필드에서 options 필드를 포함한 전체 헤더의 길이를 명시해 주어야 한다.