티스토리 뷰

  1장에서 다룬 네트워크 접근 계층(Network Access Layer)의 상위계층인 인터넷 계층에 관한 이야기이다. 전장에서 네트워크 접근 계층은 네트워크 인터페이스층과 하드웨어로 구분되고, 네트워크 인터페이스층은 곧 OS와 하드웨어를 잇는 "디바이스 드라이버" 역할을 한다는 것을 알았다. 쉽게 말하면 "랜선(정확히는 UTP-RJ45잭)을 PC에 꼽으면 통신 가능한 환경이 갖추어지는 것"이 네트워크 인터페이스층의 역할이다. (가만히 생각하면 OSI 7계층에서 복잡하게 정의한 것과는 분명 차이가 있다.)

 

  그 상위계층인 인터넷 계층과 전송 계층의 기능은 일반적으로 host의 OS(Operating System)에 내장되어 있는데, 인터넷 계층이 최종 목적지까지의 데이터 전송을 담당한다면, 전송 계층은 어플리케이션 간의 통신을 책임진다. 항상 헷깔리는 게 전송층의 개념인데, 컴퓨터에서 여러 응용프로그램이 동작하고 있을 때 어떤 프로그램과 통신하고 있는지 특정하기 위해 포트번호라는 식별자를 사용한다는 걸 기억하면 된다. 반면 인터넷 계층에서는 각 host를 특정하기 위해 식별자로 IP주소를 사용한다.

 

  * IP를 사용함으로써 데이터링크의 특성은 감춘다. IP만 있으면 데이터링크가 무엇이든 상관없다.

  * IP는 패킷이 상대방에게 도착하지 않더라도 재전송하지 않는다. 따라서 "신뢰성 없는 패킷 교환 프로토콜"이라고 할 수 있다.

 

 

[그림1. OSI 참조모델과 TCP/IP 프로토콜의 비교]

 

 

  위 그림에 각 계층에서 사용되는 프로토콜의 종류를 표시하였다. 인터넷 계층에서는 IP 외에도 ICMP와 ARP라는 프로토콜을 사용한다. IP는 신뢰성이 보장되지 않기 때문에 수신측에서 송신측으로 네트워크의 상태를 알리기 위해서는 별도의 프로토콜이 필요하다. 이를 ICMP(Internet Control Message Protocol)라고 한다. ARP(Address Resolution Protocol)는 같은 네트워크 상에서 IP로 통신할 때 목적지 IP주소와 매핑된 하위계층 프로토콜의 MAC 주소를 알아내기 위해 사용한다.

 

 

[그림2. IPv4 패킷의 구조, IP헤더의 구조]

 

 

  인터넷 계층에서 사용되는 패킷에는 IP 프로토콜로 패킷 전송을 제어하기 위해 데이터 앞에 IP헤더가 붙는다. 따라서 이 IP헤더를 알면 인터넷 계층이 하는 일을 알 수 있다. 그림2는 현재 일반적으로 사용되고 있는 IP패킷(version4)의 구조이다. IP페이로드라고 되어있는 Data 부분을 제외하면 IP헤더가 된다. (여기서 Data란 TCP, UDP, ICMP 등 프로토콜의 헤더와 실 데이터를 모두를 의미한다.)

 

 

1. VER(Version) - 4bits

  IP의 version을 나타낸다. 현재 version은 IPv4이므로 이 값은 '4'(이진수 0110)가 된다. 이전에 등장하였던 IPv1~IPv3은 version 4가 개발되기까지의 중간과정이라고 볼 수 있다. IPv5는 비디오 및 오디오 스트리밍 데이터를 전송하기 위한 Streaming Protocol인데 IP주소 부족문제를 해결할 수 없어 시장에서 사라졌다. 반면, IPv6(128bit 주소체계)는 IPv4(32bit 주소체계)의 IP주소 부족을 해결하기 위한 차기 인터넷 주소체계가 될 것이다.

 

2. HLEN(Header Length) 혹은 IHL(Internet Header Length) - 4bits

  IP헤더의 크기를 나타낸다. 단위는 4-byte(4옥텟, 32-bit)이며 그림2에서 한 줄이다. HLEN의 길이는 4bits이므로 헤더의 최대 길이는 '15'(이진수 1111)가 된다. IP헤더의 필수항목인 버전부터 목적지IP 주소까지가 총 20bytes(HLEN='5')이므로 나머지 option 및 padding은 0~40bytes까지 덧붙일 수 있다.


3. TOS(Type of Service) - 8bits

  요구되는 서비스 타입으로, 이전에는 단순히 우선순위와 지연/처리율/신뢰성만을 나타냈지만 최근에는 다음과 같은 방식으로 사용된다. 총 8개 비트 중 앞 여섯 자리는 서비스의 질을 나타내는 "DS필드(Differentiated Service, 차등서비스) 혹은 DSCP필드(Differentiated Service Code Point, DiffServ Code Point)"이고, 나머지 두 자리는 혼잡알림을 위한 "ECN필드(Explicit Congestion Notification, 명시적 혼잡알림)"이다. DSCP필드는 DiffServ 모델에서 제안된 방식인데, 이 부분에 대해 잠깐 짚고 넘어가도록 하자.

  인터넷은 기본적으로 모든 트래픽을 하나의 Class로 취급해 똑같은 정책을 사용한다. 이를 Best-Effort(최선노력) 방식이라고 한다. 하지만 최근 인터넷전화(VoIP), IPTV, IoT 등 다양한 유형의 서비스가 생겨남에 따라 기존 방식으로는 QoS(Quality of Service)를 보장할 수 없게 되었다. 이를 극복하기 위한 방법 중 하나가 DiffServ 모델이다. 여기서는 패킷들을 비슷한 성격끼리 하나의 Class로 묶어 중요한 순으로 가중치를 둬 서비스를 제공한다. 들어오는 패킷들을 가중치에 따라 Queue에 태우는 것이다. DSCP필드가 6bits이므로 총 64개의 클래스가 사용된다. (사실 마지막 bit는 '1'이면 실험용/사설용이어서 항상 '0'이라고 생각하면 결국 32개의 클래스만 사용된다.)

 

4. Total Length - 16bits

  IP헤더와 데이터를 포함한 IP패킷의 크기를 나타낸다. byte 단위이며, 20bytes부터 65,535bytes(2^16-1)까지 가능하다.

 

5. Identification 혹은 Fragment Identification - 16bits

  데이터링크의 MTU size에 따라 조각화된 패킷을 복원하기 위한 식별자이다. 동일한 fragment에서는 같은 값을, 다른 fragment에서는 다른 값을 가진다. 물론 ID가 같더라도 송수신 IP주소나 프로토콜이 다른 경우, 다른 fragment이다.

 

6. Flags 혹은 Fragmentation Flags - 3bits

  패킷 분할과 관련된 필드로 첫 번째 bit는 무조건 "0"이다. 두 번째 bit는 1장에서도 다루었던 DF(Don't Fragment) bit로 이 값이 "1"이면 패킷을 조각화하지 않겠다는 뜻이다. 마지막 bit는 MF(More Fragment) bit로, 분할된 패킷이 마지막일 경우 "0"이고 추가로 더 있을 경우 "1"이다.

  * 참고:  MTU와 Fragmentation, DF bit 관련 포스팅 - [TCP/IP] 1. 네트워크 접근 계층, 그리고 데이터링크층과 MTU

 

7. FO(Fragmentation Offset) - 13bits

  분할된 Fragment가 원래 데이터에서 어떤 위치였는지 나타내는 값으로 단위는 8-byte(8옥텟)이다. 예를 들어 하나의 데이터가 쪼개지면 모든 Fragment는 Flag 값과 Offset 값을 제외한 모든 헤더 값이 동일하다.

 

8. TTL(Time to live) - 8bits

  패킷이 네트워크 상에 얼마나 오래 살아남을 수 있는지를 알려주는 값이다. 라우터를 통과할 때마다 TTL은 1씩 줄어들며, 그 값이 "0"이 되면 패킷은 버려지고 그 결과를 ICMP 프로토콜을 이용해 출발지에 알린다. (TTL 사이즈가 8bits이므로 0부터 255까지의 값이다. 따라서 라우터를 255개 넘게 통과할 수 없다. 즉, 패킷은 네트워크 안에 영원히 존재할 수 없다.)

 

9. Protocol - 8bits

  다음 상위계층(전송계층)의 프로토콜이 무엇인지 나타낸다. 패킷을 전송할 때 상위계층의 프로토콜을 포함시켜 전송한다는 얘기다. 다시 말해, IP패킷 중 데이터 부분(전송계층 헤더와 실제 데이터가 캡슐화 된)이 어떤 프로토콜인지 알 수 있다. 대표적인 프로토콜 번호는 1-ICMP, 2-IGMP, 6-TCP, 8-EGP, 17-UDP, 89-OSPF가 있다. (전체보기▶ IANA 프로토콜 번호 관리)

 

10. Header checksum - 16bits

  IP헤더가 손상되지 않았다는 것을 보증하기 위한 checksum이다. 계산 방법은 먼저 해당 필드 값을 "0"으로 하여 16bits 단위로 1의 보수의 합을 구한 다음, 그 값의 1의 보수를 계산하면 checksum이 된다. TTL이 라우터를 통과할 때마다 값이 달라지므로, 각 라우터에서 매번 checksum 값도 다시 산출된다.

 

11. Source IP address - 4bytes(32bits)

  출발지 IP주소이다.

 

12. Destination IP address - 4bytes(32bits)

  목적지 IP주소이다. IP 네트워크가 신뢰성 없는 "무연결" 네트워크이기 때문에 패킷은 항상 출발지와 목적지 IP주소를 갖는다.

 

13. Options - 0~40bytes

  가변길이를 갖는 옵션 값은, 일반적으로는 사용되지 않고 테스트나 디버그 등의 용도로 사용된다.

 

 

 

  이번 장에서는 IP헤더의 구조를 중심으로 인터넷 계층에 대해 알아보았다. 다음 시간에는 IP주소 체계와 서브넷, CIDR/VLSM, NAT 및 IPv6에 대해 탐구해보도록 하자.

 


[지난 글 보기]

[TCP/IP] 1. 네트워크 접근 계층, 그리고 데이터링크층과 MTU

[TCP/IP] 2. 가장 널리 보급된 데이터링크인 이더넷, 1000BASE-T의 의미는?

댓글