IPv4(Internet Protocol version 4)는 32비트 주소로 호스트를 가리키고, 데이터그램을 발신 호스트에서 목적 호스트까지 전달하는 IP(Internet Protocol)의 4판이다. RFC 791이 정한다. IPv4는 비연결형 프로토콜로, 전달, 순서, 중복 없음을 보장하지 않는다.[1] 데이터그램은 손상되거나, 중복되거나, 순서가 바뀌거나, 아예 도착하지 않을 수 있다. 신뢰성이 필요하면 IP 위 계층이 맡으며, TCP가 끝과 끝 신뢰성을 주는 전송 계층 프로토콜이다.[2]
주소
IPv4 주소는 32비트다.[1] 주소는 흔히 8비트씩 네 부분으로 나누어, 각 부분을 0~255의 10진수로 쓰고 점으로 잇는 점 10진 표기(dotted-decimal)로 쓴다.[3][4] 예: 192.0.2.1.[5]
주소의 앞부분은 네트워크를, 뒷부분은 그 네트워크 안의 호스트를 가리킨다.[1][2]
특수한 용도의 주소가 있다.[6]
헤더
IPv4 헤더는 옵션이 없으면 20바이트이고, 옵션을 포함해 최대 60바이트다. 데이터그램 전체의 최대 길이는 65,535바이트다. 헤더 필드는 아래와 같다.[1]
| 필드 | 비트 | 뜻 |
|---|---|---|
| Version | 4 | IP 판 번호. IPv4는 4 |
| IHL | 4 | 헤더 길이. 32비트 워드 단위 |
| Type of Service | 8 | 아래 설명 참고 |
| Total Length | 16 | 헤더와 데이터를 합친 데이터그램 길이. 바이트 단위 |
| Identification | 16 | 단편을 재조립할 때 같은 데이터그램을 가려내는 값 |
| Flags | 3 | 단편화 제어 플래그. 예약 비트 하나와 DF(Don’t Fragment), MF(More Fragments) |
| Fragment Offset | 13 | 단편이 원래 데이터그램에서 놓이는 자리. 8바이트 단위 |
| Time to Live | 8 | 데이터그램이 네트워크에 머물 수 있는 한도 |
| Protocol | 8 | 데이터 부분에 실린 위 계층 프로토콜 |
| Header Checksum | 16 | 헤더만의 체크섬 |
| Source Address | 32 | 발신 주소 |
| Destination Address | 32 | 목적 주소 |
| Options | 가변 | 선택 사항 |
RFC 791은 Type of Service를 원하는 서비스 품질을 가리키는 필드로 정했다. RFC 2474는 이 8비트를 DS(Differentiated Services) 필드로 대체해, 그 가운데 6비트를 DSCP(Differentiated Services Code Point)로 쓴다.[1][10]
헤더 필드는 가장 높은 자리 바이트부터 보내는 네트워크 바이트 순서로 보낸다.[1]
Protocol 필드 값은 IANA가 관리한다. ICMP는 1, TCP는 6, UDP는 17이다.[11]
라우터는 데이터그램을 넘길 때마다 Time to Live를 1 이상 줄이고, 0이 되면 데이터그램을 버린다.[12] Time to Live처럼 바뀌는 헤더 필드가 있으므로, Header Checksum은 헤더를 처리하는 곳마다 다시 계산한다.[1]
단편화
데이터그램이 다음 네트워크가 허용하는 크기보다 크면, IPv4는 이를 여러 단편으로 나눈다. 단편은 목적 호스트에서 재조립한다.[1] 라우터는 데이터그램을 넘기기 전에 재조립하지 않는다.[12] DF 플래그가 선 데이터그램은 나누지 않으며, 나누지 않고는 목적지에 전달할 수 없으면 버린다. 이런 단편화와 재조립은 분할과 재조립의 한 경우다.[1]
라우팅
데이터그램은 라우터를 거쳐 네트워크 사이를 건넌다.[1][12] 라우터가 경로를 고르는 방법은 인터넷 프로토콜 스위트에서 다룬다. 이더넷 같은 링크에서 IPv4 주소에 대응하는 링크 계층 주소는 ARP로 얻는다.[2][13]
IPv6와의 차이
IPv4의 32비트 주소 공간은 약 43억 개다. IETF는 주소 공간이 점점 제약이 되리라는 전망에 따라 IPv4의 후계 프로토콜을 찾기 시작했다.[14] 그 결과 나온 IPv6는 주소 크기를 32비트에서 128비트로 늘렸다.[15]