네트워크 계층(Network Layer/3)

 - 대표적인 프로토콜 : IP, ICMP, 라우팅 프로토콜( RIP, OSPF, ...), IPSEC

 - 주소 체계 : IP Address

 

샘플 패킷 - b'\x00PV\xcc\xcc\x10\x00\x0c)o\xad\x1a\x08\x00E\x00\x00!\x00\x00@\x00@\x11\xa2H

                 \xc0\xa8\x0b\xa6\xc0\xa8\x0b\x8du0\x82\xb5\x00\r\x98\xa2hello'

IP 헤더 - E\x00\x00!\x00\x00@\x00@\x11\xa2H\xc0\xa8\x0b\xa6\xc0\xa8\x0b\x8d

 - 20바이트(byte) 고정 크기

 - 옵셔널 필드가 존재하기 때문에 사실은 가변 크기지만 거의 사용되지 않기 때문에 20바이트로 고정

 - 총 10개의 필드

 - UDP 헤더(8바이트 + 데이터)를 제외하고 20바이트를 뒤에서부터 떼오면 된다.

 필드

크기 

 패킷

16진수 

10진수 

IP버전과 헤더의 길이 

1byte

 E

 0x45

69 

 service type

 1byte 

 \x00

 0x00

 0

 IP 패킷의 전체 크기

 2byte

 \x00!

 0x00 0x21

 33

 identfication

 2byte

 \x00\x00

 0x00 0x00

 0

 flag & frgment offset

 2byte

 @\x00

0x40 0x00 

 16384

 TTL(Time TO Live)

 1byte

 @

 0x40

 64

 프로토콜의 타입

 1byte

 \x11

 0x11

 17

 checksum

  2byte 

\xa2H 

 0xa2 0x48

 41544

 출발지 IP

 4byte

 \xc0\xa8\x0b\xa6

 0xc0 0xa8 0x0b 0xa6


 192 168 11 166

 

도착지 IP

  4byte 

\xc0\xa8\x0b\x8d 

 0xc0 0xa8 0x0b 0x8d


192 168 11 141 


1. IP버전과 헤더의 길이(1byte)

 E -> 0x45

 1) IP버전 - 상위 4비트

 - 0x4 -> 0100 = 4   -> IPv4

 2) IP 헤더의 길이 - 하위 4비트

 - 0x5 -> 0101 (왼쪽으로 시프트 2비트 해준다.) -> 10100 = 20 -> 20byte


 2. service type(1byte)

 - 0x00(default) 

 - 서비스별로 통신을 제어하기 위한 용도

 - 지금은 사용되지 않는다.


3. IP 패킷의 전체 크기(2byte)

 - 0x00 0x21 -> 33(byte)

 - IP 헤더(20byte) + UDP 헤더(8byte + 5byte(데이터))


4. identfication(2byte)


5. flag & fragment offset(2byte)

 - ip fragment(조각)와 관련된 헤더필드


6. TTL(Time To Live/1byte)

 - @ -> 0x40 -> 64

 - packet이 지나갈 수 있는 라우터(홉/hop)의 최대 갯수

 - 총 64개의 라우터를 지나갈 수 있다.

 - 리눅스 64개, 윈도우 128개를 사용한다.

 - 30개 정도면 전세계 네트워크 연결 가능


7. 프로토콜의 타입(1byte)

 - \x11 -> 17

 - # vi /etc/protocols 를 보면 프로토콜의 타입이 정의되어있다.

 - ICMP : 1, TCP : 6, UDP : 17


8. Checksum(2byte)

 - 전체 내용의 값들을 더한 값


9. 출발지 IP(4byte)

 0xc0 0xa8 0x0b 0xa6 -> 192 168 11 166


10. 도착지 IP(4byte)

0xc0 0xa8 0x0b 0x8d -> 192 168 11 141





WRITTEN BY
Bugday

,