DongDD's IT

Internet Protocol Version4(IPv4) - IP Datagram, Header, Fragmentation, IP Option 본문

네트워크

Internet Protocol Version4(IPv4) - IP Datagram, Header, Fragmentation, IP Option

DongDD 2017. 9. 3. 14:47

Internet Protocol Version4(IPv4)


IP Protocol



IP : Netwrok Layer에 존재하는 프로토콜


현재 많이 쓰이는 TCP/IP에 사용되는 프로토콜


IP Header


IP Header는 기본적으로 20bytes를 사용하고 Option을 추가하면 최대 60bytes까지 사용된다.

1) VER : IP프로토콜의 version을 나타냄. (IPv4, IPv6)

2) HLEN : header길이를 나타내 Option이 사용된 여부를 알 수 있다. TCP와 마찬가지로 4로 나눈 값을 넣음

3) Service type : service type을 나타내는데 거의 쓰이지 않음

4) Total length : Header+Data 길이를 나타냄. padding 사용 정도를 알 수 있음

5) Identification : Fragmentation에서 동일한 패킷이 분할된 것인지 알기 위해 사용

6) Flags : 여러가지 상태를 조절할 수 있음

7) Fragmentation offset : Fragmentation시 offset을 통하여 순서를 알 수 있음

8) Time to live(TTL) : Routing이 잘못될 경우 loop가 생길 수 있는 데 이 루프를 빠져나올 수 있게 해줌

최대 hop수를 적고 router가 받을 때마다 1씩 감소시키고 0이 될 경우 버림

9) Protocol : 어떤 protocol type인지 나타냄(Multiplexing)

10) Header checksum : TCP와 달리 Header만 checksum하여 header에 에러가 있는 지 알아냄

11) Source IP Address, Destination IP Address : source와 destination의 IP주소를 넣어줌

12) Option 및 Padding


Protocol type : 상위 Layer로 보내줄 때 demultiplexing 하기위해 사용


Flags 

- 1bit는 사용하지 않고 나머지 2bit는 D,M으로 나타냄

- D bit

1) 1 - MTU를 초과하더라도 분할을 못하게 함

- M bit

1) 1 - 뒤에 packet이 더 있음을 나타냄

2) 2 - packet의 끝을 나타냄




Fragmentation


- 네트워크로 전송할 때 통과할 수 있는 data량이 다르기 때문에 분할을 해주어야 함.

- MTU(Maximum Transfer Unit) : 네트워크를 통과할 수 있는 Maximum 값

1) Header+Data <= MTU : 분할안해도 됨

2) Header+Data > MTU : 분할해서 전송

- Framentation option은 13bit이기 때문에 실제 offset을 8로 나눈 값을 넣어줌

위와 같이 offest을 8로 나눈 값을 fragmentation offset필드에 넣어줌

ex) MTU가 1420인 경우, Header가 20bytes라고 가정


4000bytes의 data를 분할해야 함

1400+20, 1400+20, 1200+20으로 분할할 수 있음

첫 번째 분할된 fragment는 끝이 아니므로 Mbit가 1이고 offset은 0을 나타냄

두 번째 분할된 fragment도 끝이 아니므로 Mbit가 1이고 1400/8을 하여 offset:175

세 번째 분할된 fragment는 끝이므로 Mbit가 0이고 2800/8을 하여 offset:350



Option


- 여러가지 Option을 사용할 수 있음


- Type은 8bit로 이루어져 있음

- 1bit : fragment시 option copy 여부(0 : 첫 번째 fragmentation에만 복사, 1 : 모든 fragmentation에 복사)

- 2bit : 00 - 네트워크 제어 옵션, 10 : 디버깅 용

- 5bit : Option의 Type을 나타냄


- Option은 크게 single-byte와 multiple-byte로 나눠짐


1. Single byte

1) No operation

- 아무 동작도 하지 않고 단순히 Padding 용

2) End-of-option

- Option의 끝을 나타냄

2. Multiple-byte

1) Record-route option (Type 7)

- 지나온 Router의 주소를 넣어줌(나가는 쪽 Network Router 주소)


- Router를 지날때마다 지나온 router의 IP주소를 기록함

- 4-8-12-16(Pointer) : IP주소를 기록할 위치를 나타냄


2) Strict-source-route option

- 거쳐서 가야할 router의 IP 주소를 적어 놓음

-> 해당 순서대로 갈 수 없게 되면 이 packet을 버림

-> 보통 관리 목적으로 해당 경로를 확인하기 위해 사용


- 처음 destination은 나가는 쪽 router의 IP주소로 되어있음

- Option에는 거쳐가야 할 router의 들어가는 쪽 주소가 적혀 있음

- 해당 Destination에 도착할 때마다 Pointer에 있는 주소와 Destination 주소를 바꿈

- 해당 경로로 끝까지 도달할 수 없을 경우 패킷을 버림


3) Loose-source-route option

- Strict-source-route option과 비슷하게 가야할 주소를 적어 놓음

- 대신 좀더 flexibility가 있음. 다른 곳을 거쳐도 상관 없고 적혀 있는 주소에 들르기만 하면 됨


4) Time-stamp option

- flag를 이용하여 3가지 상태를 사용할 수 있음

 -> 0 : router를 거칠 때의 시간을 기록함

 -> 1 : router를 거칠 때 router의 주소와 시간을 기록함

 -> 2 : 미리 주소를 명시해놓고 해당 주소를 가진 router를 지날 때의 시간을 기록함


Comments