IP(Internet Protocol)란?
- 인터넷에 연결된 모든 장치들을 식별할 수 있도록 장비마다 부여되는 고유 주소이다. (각 장치의 주민등록번호와 같은 역할)
- IPv4와 IPv6가 있으며 현재는 IPv4를 사용한다.
- 32비트 방식으로 8비트씩 4자리, 각 자리는 온점으로 구분한다.
IP 헤더 구조

1. Version - 4bit
- 현재는 IPv4를 사용한다. -> 4
2. IHL(Header Length) - 4bit
- 32비트 단위로 IP 헤더의 길이를 나타낸다. 최소 5부터 15까지의 값이다.
- 대부분의 IP 헤더의 길이는 20byte(4 * 5 = 20)이다.
3. Type of Service (TOS) - 16bit
- 패킷의 우선 순위를 제공한다.
4. Total Length - 16bit
- 패킷(IP헤더+데이터)의 전체 길이를 바이트 단위로 길이를 표시한다.
- 최대값은 65,535
5. Identification - 16bit
- 각 패킷을 식별하는 번호.
- 분열이 발생할 경우, 조각을 다시 결합하고 원래 데이터를 식별하기 위해서 사용한다.
6. IP Plags - 3bit
- 첫번째 비트 : 항상 0이다.
- 두번째 비트(Don't fragment) : 분열 여부를 나타낸다. (0 : 분열 가능 / 1 : 분열 방지)
- 세번째 비트(More fragment) : 원래 데이터의 분열된 조각이 더 있는지 판단한다. (0 : 마지막 조각 / 1 : 조각 더 있음)
7. Fragment Offset - 13bit
- 조각나기 전 원래의 데이터그램의 8 바이트 단위의 위치를 나타낸다.
8. Time To Live (TTL) - 8bit
- 데이터가 이동할 수 있는 단계의 수를 나타낸다.
- TTL필드는 1에서 255 사이의 값을 가지며, 라우터들은 패킷을 전달 할 때마다 이 값을 하나씩 감소시킨다.
9. Protocol - 8bit
- 상위 계층 프로토콜을 나타낸다. (1 : ICMP / 6 : TCP / 17 : UDP)
10. Header Checksum - 16bit
- IP헤더의 체크섬으로 내용이 바르게 교환되고 있는가를 점검한다.
- 라우터를 지나갈 때 마다 재계산을 하기 때문에 속도가 떨어진다.
11. Source IP Address - 32bit
- 출발지 IP 주소
12. Destination IP Address - 32bit
- 목적지 IP 주소
13. IP Option
- 경로배정 및 보안 등 제어기능이 필요한 경우 4vyte 단위로 패딩하여 채워넣음. 가변적인 필드.
IP 헤더 C언어 구조체 구현
