TCP IP 파이썬 활용

IP 헤더의 구조와 항목

웹하는빡통 2020. 6. 8. 19:16

전송 단위가 패킷인 IP 헤더의 길이는 20바이트(160BIT)이다. TCP 헤더와 마찬가지로 IP 헤더 역시도 IP 부가 항목에 따라 21바이트 이상의 길이가 가능하다.

 

버전(Version) 항목과 헤더(Header) 길이 항목은 4비트다.

서비스 타입(Type of Service) 항목은 8비트다.

전체 길이(Total Length) 항목은 16비트다.

ID(Identification)항목은 16비트다. 

IP Flags는 3비트이고 플래그먼트 오프셋(Fragment Offset) 항목은 13비트이다.

생존시간(TTL)프로토콜 ID각각 8비트이다.

헤더 오류 검사(Header Checksum)은 16비트이다. 

출발지 IP주소 목적지 IP주소는 각각 32비트이다.

따라서 IP 헤더의 길이총 160비트인 것이다. 

 

버전 항목 IP 주소의 종류와 관련이 있다. IPv4 주소면 4가 들어가고 IPv6 주소면 6이 들어간다.

헤더 길이 항목에는 IP 해더의 크기가 들어간다. 일반적으로 20바이트 길이로 고정되기 때문에 20이 들어간다.

서비스 타입 항목에는 해당 패킷의 전송 우선 순위 정보를 저장되 전체 길이 항목 IP헤더를 포함한 패킷 전체의 길이 정보를 저장한다, ID항목 IP플래그 항목 플래그먼트 오프셋 항목 MTU에 따른 패킷 분할 정보를 저장한다.

생존시간(TTL)항목 상위 계층에 속한 프로토콜 번호를 저장하고 헤더 오류 검사 항목 일반적으로 비활성 상태(UDP 헤더 TCP 헤더의 오류 검사 항목과 다른 속성임).

출발지 IP 주소 항목과 목적지 IP 주소 항목에는 각각 IPv4 기반의 출발지 IP 주소와 목적지 IP 주소를 저장한다. 

 

IP 헤더 기본 구조

위 예제와 같이 TCP 헤더처럼 IP헤더에서도 기본 설정 값이 보인다.

버전 정보= IPv4

생존시간(TTL)= 64

프로토콜 ID= ip 또는 hopopt(IPv6 Hop-by-Hop Option)으로 설정됨. 

출발지 IP= 172.30.51.82

목적지 IP= 127.0.0.1로 설정되어 있다. 

 

이제 IP() 일부 항목을 변경해 보자. 

헤더 길이 항목, ID 항목, 프로토콜 항목을 변경했다. 

아울러 TCP 헤더와 마찬가지로 IP 헤더 역시도 파이썬 변수로 구현할 때 주의할 항목이 있다.

8비트 배수가 아닌 항목의 설정 문제다. IP헤더에서는 버전 항목과 헤더 길이 항목각각 4비트이고 IP 플래그 항목3비트이고 플래그먼트 오프셋 헤더길이 항목이 13비트이기 때문에 8비트 배수에 부합하도록 처리해야 한다. 그런데 IP 플래그 항목과 플래그먼트 오프셋 항목은 패킷 분할이 일어나는 경우에만 활성 상태인 만큼 여기에서는 일단 버전 항목과 헤더 길이 항목만 고려하자.  

 

파이썬에서 처리할 수 있는 8비트 배수 단위를 기준으로 변경하기 위해 (version << 4) + header_length처럼 4비트 좌측 이동 연산을 수행한 뒤 두 개의 변수(version 변수와 header_length 변수)를 한 개의 변수(version_header_length)로 통합 1비트 기준으로 상위 4비트 공간에 버전 항목의 정보를 저장하고 남은 하위 4비트 공간에 헤더 길이 항목의 정보를 저장한다는 의미이다.