Ch 2. IPv4(1) - IP헤더
IP(Internet Protocol)
IP는 OSI 참조 모델의 네트워크 계층 기능을 수행하며 패킷 전송을 위한 주소 정의 및 관리와 라우팅을 담당한다.
IP의 특징
- 비신뢰성(Unreliable)
- 가능한 범위 내에서 패킷을 목적지까지 전달하는 최선형 서비스(Best Effort Service)
- 비접속형(Connectionless)
- 연결 설정 없이 패킷을 전송
- 서로 다른 경로로 패킷이 전송될 수 있으며, 순서도 바뀔 수 있다.
- 주소 지정
- 네트워크 내의 노드를 고유하게 지정하기 위한 수단으로 IP주소를 사용
- 경로 결정
- 목적지 IP주소를 기반으로 패킷 전달 경로를 판단(Routing Protocol).
IP패킷 구성
- IP패킷은 헤더 필드와 데이터 필드로 분리.
- 헤더 필드에는 패킷을 목적지까지 전송하기 위한 값을 포함.
- 헤더의 길이는 확장헤더를 포함한 헤더의 길이이다.
- 데이터 필드에는 TCP, UDP와 같은 전송 계층으로부터의 데이터 유닛(IDU)이 포함되어 있다.
1. 버전
- IP 프로토콜의 버전을 의미(IPv4의 경우 버전 필드 값은 4).
2. 헤더 길이
- 옵션 필드를 포함한 헤더의 총 길이를 4바이트 단위로 표시 (확장 헤더를 사용하지 않는 경우 20byte로 헤더 길이 필드 값은 5).
3. 서비스 타입(Type-Of-Service)
- 우선권 필드 3비트, TOS(Type-Of-Service)필드 4비트, 예약 필드 1비트로 구성되어 있음.
- 우선권 필드 - 패킷의 우선순위 정의(혼잡시 폐기할 패킷을 우선권 필드 값으로 결정하며 데이터의 중요도를 나타냄).
- TOS 필드 - 최소 지연(Delay), 최대 처리량(Throughput), 최대 신뢰성(Reliability), 최소 비용(Cost)을 4비트로 나타내어 4비트 중 1비트만 set하는 방식으로 타입을 표시.
- 해당 필드 값에 명시된 TOS를 지원하는 서브넷으로 패킷을 라우팅 시키는데 사용됨.
- 예약 필드 - 0의 값을 갖도록 예약되어 있어 MBZ(Must Be Zero)라고도 불림, 라우터와 수신 측은 이 필드 값을 무시함.
| TOS필드 | 의미 |
|---|---|
| 1000 | 최소 지연 |
| 0100 | 최대 처리 |
| 0010 | 최대 신뢰성 |
| 0001 | 최소 비용 |
4. 전체 길이(Total Length)
- 헤더와 데이터를 포함한 IP 패킷의 전체 길이를 바이트 단위로 표현.
- IP패킷의 최대 크기는 $2^{16}-1=65,534 byte$로 최대 값은 65534.
5. 식별자(Identification)
- 패킷 단편화(Fragmentation)로 인한 패킷을 구분하는 역할.
- 동일한 데이터로부터 분할된 패킷들은 같은 식별자 값을 가짐.
6. 플래그(Flags)
- 예약, 단편화 금지, 추가 단편화 비트의 3비트로 표현됨
- 예약(Reserved) - 항상 0의 값을 갖도록 예약되어 있음.
- 단편화 금지(Do not Fragment) - 해당 패킷에 대해 단편화를 하지 않도록 설정, 만약 서브넷이 단편화를 필요로 하고, 단편화 금지 비트 값이 1이라면 패킷을 폐기함.
- 추가 단편화 비트(More Fragment) - 비트 값이 1이라면 추가적인 단편화 패킷이 있음, 0이라면 마지막 패킷임을 명시함.
7. 단편화 옵셋(Fragment Offset)
- 패킷 재조립(reassembly)시 분할된 패킷 간의 순서에 대한 정보 포함.
- 전체 데이터에서 분할된 패킷의 상대 위치를 8 바이트 단위로 기술.

8. Time-To-Live(TTL)
- 패킷이 경유할 수 있는 최대 홉 수(hop count)를 의미.
- 패킷이 라우터를 통과할 때마다 TTL 값은 1씩 감소.
- TTL 값이 0이 되면 패킷은 폐기되고 송신 측으로 ICMP메시지를 전달.
9. 프로토콜(Protocol)
- 데이터가 어떤 프로토콜을 사용하는지 나타내는 필드
- ICMP프로토콜을 사용한다면 1, TCP프로토콜을 사용한다면 6, UDP프로토콜을 사용한다면 17의 값을 갖는다.
10. 헤더 체크섬(Header Checksum)
- IP 패킷 헤더의 오류 발생을 검사하기 위한 필드
11. 옵션
- 확장 헤더의 필드 값으로, 다음과 같은 옵션이 존재한다.
(1) IP 패킷 헤더 옵션
- 경로 추적이나 네트워크 상황 파악 등 특정 목적을 위해 사용.
- 하나 이상의 옵션을 동시에 사용할 수 있음.
- 코드 필드(Code Field)
-복사 필드(Copy Field): 단편화시 단편화된 모든 패킷에 헤더 옵션 필드의 복사 여부를 결정함.(copy=1: 모든 fragment에 option을 복사함.) - 옵션 종료(End of Option)
- 옵션 필드의 끝을 나타내는 1바이트 옵션.
- 남은 옵션종류 공간을 무동작 옵션(NoOp)로 채워넣는다.
- 옵션 종료는 마지막 옵션에서만 사용 가능
- 옵션 종류 코드값을 0으로 하여 사용.
- 무동작(No Operation)
- 옵션 간의 경계로 사용되는 1바이트 옵션.
- 다른 옵션을 4바이트 경계에 맞추기 위해 사용한다.
- 옵션 종류 코드값을 1로 하여 사용.
- 엄격한 소스 루트(Strict Source Route)
- 전달 경로를 송신 측에서 미리 지정하고 네트워크 장비(라우터)는 경로를 따라서만 패킷을 전송하는 옵션.
- 옵션 종류 코드 값을 137로 하여 사용.
- 포인터 값은 홉을 지날 때마다 단계적으로 증가하여 다음 경유할 주소를 가르킴
- 기술된 경로대로 패킷을 전송할 수 없다면 패킷을 폐기하고 ICM 메시지를 송신측으로 전송.
- IP헤더에 명시된 수신 측 주소에 도달한 경우 해당 옵션 패킷의 포인터에 지나온 IP 주소와 수신 측 주소를 교환, 포인터를 다음 IP주소 정보가 담긴 필드를 가르키는 포인터로 변경함으로써 연속적인 이동 경로의 설정이 가능하다.
- 옵션 패킷의 IP주소에 이동한 경로가 기록되므로 패킷의 반환시 기록된 IP주소를 역방향으로 찾아 루트를 재설정 할 수 있음(ex ICMP).
- 경유할 IP주소를 일일이 설정해주어야하므로 출발지와 목적지의 IP주소 뿐만 아니라 경유할 IP주소도 미리 기록되어있어야한다.(주소 목록에 저장되지 않은 주소는 경로로 사용할 수 없음)
- 느슨한 소스 루트(Loose Source Route)
- 옵션 종류 코드 값 131 사용.
- 엄격한 소스 루트와 비슷하지만, 주소 목록에 없는 경로라도 사용 가능하다는 점에서 차이점이 존재.
- 주어진 IP주소를 모두 경유하되, 도중에 명시되지 않은 경로를 갈 수 있다.
- 레코드 루트(Record Route)
- 패킷의 전달 경로를 모두 기록.
- 옵션 종류 코드 값 7을 사용.
- 포인터는 라우터의 주소를 기록할 장소를 가르킨다.
- IP 옵션의 총 길이가 40바이트로 제한되어 있으므로, 기록할 수 있는 경로의 수는 제한되어 있음.
- 타임스탬프(Timestamp)
- 패킷이 경로상의 라우터에 도착하는 시간을 기록.
- 옵션 종류 코드 값 68.
- 오버플로우 필드가 존재하며 공간부족으로 기록하지 못한 라우터의 수를 명시한다.
- 플래그 필드는 주소나 시간 둘 중 하나만을 기록할 것인지 모두 기록할 것인지를 명시함.

출처: 정진욱, 김현철 공저. “TCP/IP와 인터넷”, pp 36-42. 2004. (주)생능출판사

