본문 바로가기
네트워크/컴퓨터네트워크

Internet Protocol Version 4 (IPv4)

by HJINHA 2021. 6. 28.

IP Datagram

- 헤더 길이: 20~60

- VER: version. IPv4, IPv6버전임. 4 or 6

- HLEN: 헤더 길이. 20 사용하려면 20/4=5 쓰고 60 사용하려면 60/4=15 쓴다.

- Service type: 잘 안 쓰임. 이름과 위치만 기억하기

- Total length: 헤더를 포함한 데이터그램의 총 길이

- Identification: fragmentation 재조합용. 얘를 보고 같은 애들끼리 다시 조합할 수 있음

- Flags:

- Fragmentation offset: flags 때문에 3비트 덜쓰니까 23만큼 더 쓰기 위해 /8해서 보내고 받을 땐 *8 .

- Time to Live (TTL): 소멸 시간. Maximum Hop Count. 라우터들이 패킷을 받을 때마다 값을 하나씩 빼다가 0이 되면 더이상 전달하지 않음

- Protocol: IP헤더 안에다 ‘IP헤더를 달고 가는 상위 프로토콜이 뭔지써야 받는쪽이 거기로 맞게 올림

 

Fragment

- 데이터그램은 다른 네트워크를 통해 이동할 수 있다. 각 라우터는 수신한 프레임에서 IP 데이터그램을 receive하고 process한 다음 다른 프레임에 캡슐화한다. 수신된/전송된 프레임의 형식과 크기는 프레임이 방금 이동한 physical 네트워크에서 사용하는 프로토콜에 따라 다르다.

 

- MTU(최대 전송 단위)

- 프레임에 캡슐화될 수 있는 데이터의 최대 길이 - physical network마다 다르다.

 

- Flags field

- D: Do not fragment 보내는쪽이 분할하지 말라고 써서 보내는 것. 분할해야 하는 상황인데 D로 돼있어서 분할전송 못하면 걍 버림

- M: More fragments. M bit value0이면 뒤에 더 없다는 뜻. 1이면 뒤에 더 있다는 뜻

 

Options

- 최대 40byte까지 가능

- Copy: 패킷들이 MTU가 작은 네트워크로 가면 패킷을 분할해야 하는데, 옵션에 있는 부분들을 어떻게 분할할지 결정함.

- 0: H|O|D -> H|O|D1, H|D2, H|D3   (첫 번째 패킷만 옵션을 가져감)

- 1: H|O|D -> H|0|D1, H|O|D2, H|O|D3   (모든 fragment가 옵션을 가져감)

- Class: 0010 두 개 있음. Datgram control/Debugging

- Number: 옵션들.

1) Record-route option

- 어느 라우터들을 거쳐왔는지. (라우터의 오른쪽 주소. 추적하는거니까.)

- 해당 포인터가 가리키는 빈 공간에 자기 주소를 쓴다. 그리고 다음 라우터에 패킷을 보낼 때 다음번에 쓸 빈공간을 포인터로 가리키게끔 증가시킨다.

- 7: 옵션종류, 15: 전체길이 (3+4*3)

- 누가 어디로 보내는지 정보는 기본헤더에 있음

 

2) Strict-source-route option

- 네트워크 관리할 때 쓰는 옵션.

- sender, 거쳐갈 라우터 순서를 미리 정해놓은 것

- 기본헤더의 Destination이 계속 바뀜

- 아래 세줄엔 자신을 제외한 나머지를 씀

- 보내야 할 next가 나랑 연결되어있지 않은 네트워크이거나 경로가 없으면 버린다.

- 라우터의 왼쪽주소. 다음에 갈 곳이니까.

 

3) Loose-source-route option

- strict는 반드시 그 순서대로만 가야 되는데, loose는 그 사이에 다른 경로를 거쳐가도 된다. 좀더 flexible.

 

4) Time-stamp option

- 옵션에 따라 라우터들이 패킷을 전달할 때 자신의 IP주소와 시간을 적음.

 

5) No operation

6) End of option

 

 

Checksum

- 에러 유무 감지. 받는 쪽에서 계산한 결과가 0이면 정상

- IPchecksum header만 다룬다. (dataX)

- payload에 에러 생기면 IP checksum은 감지 못하고 TCP 헤더의 checksum에 의해 감지된다.

 

Reassembly table

- reassemble은 최종 목적지에서만 한다.

- 분할된 패킷들이 원래 순서대로 들어온다고 보장 못함.

- timeout: 패킷 기다려도 안 오면 재조합 불가능 -> 다 버림

- id가 같은 패킷끼리 묶는다.

- offset으로 순서를 정해 연결리스트로 관리함

 

- 1) MSS(maximum segment size)가 작아서 fragmentation이 안 되는 경우

  : 자잘한 걸로 여러개 보냄 (분할 안 된 상태) -> 하나하나가 TCP를 올리기 때문에 중간에 작은거 하나 없어져도 나머지 작은거 3개를 받고 금방 detect이 가능함

- 2) TCP MSS를 크게 잡아서 segment를 크게 만든 경우

  : MTU 크기를 초과해서 fragmentation을 해야 함 -> 잘게 쪼갰음

   그런데 쪼갠 것 중에 하나라도 사라지면 나머지 받은 것들도 다 소용없음. TCP 긴거 자체를 못받게 됨

    -> #51, 52, 53까지 전부 받고 나서야 #50이 사라진 걸 알 수 있음

- 크게 보내는 게 좋아보일 수 있으나, 분할된 패킷이 하나라도 사라질 경우 감지 오래 걸리고, 전부 다시 보내야 한다.

* MSS: 어플리케이션 계층에서 한번에 최대로 보낼 수 있는 payload 사이즈

 MTU: 네트워크 계층에서 한번에 최대로 보낼 수 있는 payload 사이즈

'네트워크 > 컴퓨터네트워크' 카테고리의 다른 글

Unicast Routing Protocols  (0) 2021.06.28
ICMP (Internet Control Message Protocol)  (0) 2021.06.28
Web and HTTP  (0) 2021.06.28
Delivery and Forwarding of IP Packets  (0) 2021.06.28
NAT (Network Address Translation)  (0) 2021.06.28

댓글