본 글은 2017년 5월 29일 8시 34분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다.
IPv4(Internet Protocol Version 4)는 1981년 9월에 IETF RFC 791에 정의된 TCP/IP에서 활용하는 네트워크 주소체계이다. 현재 IPv6와 함께 가장 강력한 인터넷 주소체계로 인정 받는다. IPv4에서는 네트워크 주소를 총 32비트로 표현하기 때문에 약 43억개의 주소를 나타낼 수 있다. 2011년 2월 4일부터 모든 공인 IPv4 주소가 소진되어 IPv4의 공인 IP 할당이 중지되었다.
네트워크에서의 주소를 표현하기 때문에 IPv4는 TCP/IP의 네트워크 레이어에 해당하는 프로토콜이다. 이 프로토콜의 패킷을 데이터그램이라고 부른다.
IPv4의 패킷 구조는 위와 같다. 20~60바이트의 크기를 가진 헤더(Header)와 그 뒤에 데이터(Data, Payload)가 담긴다. 헤더에는 라우팅과 데이터그램 전달을 위한 정보가 담기고 데이터에는 전달하고자 하는 정보가 담긴다.
헤더의 각 필드별 소개는 아래와 같다.
- VER: 인터넷 프로토콜의 버전을 의미한다. IPv4, IPv5, IPv6 등의 버전이 들어갈 수 있다.
- HLEN: 헤더의 길이이다. 헤더의 길이는 최소 20바이트부터 최대 60바이트의 크기를 가지기에 0부터 15까지의 수를 표현할 수 있는 4비트를 가지고 60바이트까지 표현하기 위해서 4를 곱한다. 0~15 표현 범위에 4를 곱하면 0~60까지를 표현할 수 있다. IPv6에서는 헤더의 크기가 항상 320바이트이기에 이 필드가 없다.
- Service type: IP 데이터그램의 서비스 형태를 알린다.이 필드를 통해 이 패킷이 얼마나 중요하고 긴급한 것인지를 알 수 있기에 QoS(Quality of Service)를 구현할 수 있다. IPv6에서는 Traffic Class로 이름이 바뀌었다. 이 필드는 6비트의 DSCP(Differenctiated Service Code Point)와 2비트의 ECN(Explicit Congestion Notification)라는 필드로 구분된다.
- DSCP: 서비스 유형을 의미하는 필드이다. 인터넷(Internet)과 지역(Local), 실험 또는 임시적으로 쓰는 패킷인지를 구분 하는 것이 정의되어 있다.
- ECN: 원래는 경로의 혼잡 정보를 담는 필드로 쓰려고 정의했다고 하는데 지금은 쓰지 않는 필드이다. 어떤 경로의 혼잡 정보를 담는 건지 모르겠다. 인접 라우터의 혼잡 정보인지 종단간 혼잡 정보인지 도통 모르겠다. 추후에 알게 되면 갱신하겠다.
- Total length: 헤더의 크기까지 포함한 IP데이터그램의 크기를 의미한다.
- Identification: IP 데이터그램을 구분하기 위해서 쓴다. 예를 들어 IP 데이터그램이 단편화(fragmentation)되었을 때 단편화된 데이터그램이 원래 어떤 데이터그램에 속해 있는 지를 알 수 있다. IPv6에서는 라우터가 패킷을 단편화하지 않기 때문에 이 필드는 삭제되었다.
- Flags: IP 데이터그램이 단편화됬는지를 나타내는 필드이다. 마찬가지로 IPv6에서는 삭제되었다.
- Fragmentation offset: 단편화된 데이터그램의 순서를 나타낸다. 역시나 IPv6에서는 삭제되었다.
- Time to live: 패킷이 라우터를 최대 몇 번 거쳐서까지 살아 남을 것인지를 나타내는 필드이다. 패킷이 라우터를 거칠 때마다 이 필드의 값이 1씩 감소되며 0이 되면 버려진다. 흔히 TTL로 줄여 부른다.
- Protocol: IP 데이터그램의 데이터(페이로드)에 담겨져 있는 상위 계층의 프로토콜을 알려준다. IPv6에서는 Next Header로 이름이 변경되었다.
- ICMP가 1번, IGMP가 2번, TCP가 6번, UDP가 17번으로 정의되어 있다.
- Header checksum: Header 필드의 오류를 검출할 수 있는 정보가 담긴 필드이다. 하위 계층에서 원홉오류검출을 하고 상위계층에서 종단간오류검출을 하는 데도 불구하고 네트워크 계층의 프로토콜에 이 필드가 있는 이유는 다음과 같다. 과거에는 이웃 노드간 통신 중에 패킷이 깨지는 경우가 너무 빈번하였기에 라우터에서 한번 더 오류검출하기 위해 정의한 필드라고 한다. 현재는 기술이 많이 발전하여 유선에서는 사실 거의 패킷유실(Packet loss)가 발생하지 않는다. 그래서 IPv6에서는 지워진 필드다.
- Source IP address: 패킷을 보낸 노드의 IP 주소가 담긴다.
- Destination IP address: 패킷이 도착해야하는 목적지의 IP 주소가 담긴다.
※ 참고1: 네트워크통신에서는 전송할 데이터가 한번에 보낼 수 있는 단위를 벗어났을 때 데이터를 여러개의 패킷으로 분할(단편화)하여 보낸다.
※ 참고2: 어떤 사람의 비공식적인 실험 결과 이더넷(Ethernet)에서 원홉통신을 실험해보면 패킷을 40,000개 보내면 8개 정도 패킷유실이 발생했다고 한다. 나도 조만간 실험해봐야겠다.
'컴퓨터 네트워크 프로토콜 > IP(Internet Protocol)' 카테고리의 다른 글
왜 TCP/IP에서는 OSI의 5,6,7계층이 하나의 계층에 들어가는가? (0) | 2020.10.14 |
---|---|
TCP/IP가 성공한 이유는 무엇일까? (2) | 2020.10.13 |
VPN(Virtual Private Network)을 경유하지않고 외부망 이용하기 (0) | 2019.05.02 |
댓글