본문 바로가기

리눅스 커널/네트워크

IP & ICMP Header

먼저 IP헤더이다.

#include <linux/ip.h>

struct iphdr {
#if defined(__LITTLE_ENDIAN_BITFIELD)
	__u8	ihl:4,
		version:4;
#elif defined (__BIG_ENDIAN_BITFIELD)
	__u8	version:4,
  		ihl:4;
#else
#error	"Please fix <asm/byteorder.h>"
#endif
	__u8	tos;
	__be16	tot_len;
	__be16	id;
	__be16	frag_off;
	__u8	ttl;
	__u8	protocol;
	__sum16	check;
	__be32	saddr;
	__be32	daddr;
	/*The options start here. */
};

ihl: ip헤더의 길이, 4바이트 단위 (ex, 5 -> 20바이트, 옵션 포함 시 최대 15 -> 60바이트 까지)

version: TCP/IP는 4

--------------------------------------------------------------------------------------------------------------

tos: Type of Service, 여러 플래그를 설정할 수 있지만 주로 0

tot_len: IP 헤더를 포함한 전체 패킷의 바이트 단위 크기(최대 65535 까지)

id: 단편화 발생 시 원래 데이터를 식별하기 위한 식별자, 같은 데이터 그램에 속하면 같은 번호를 갖는다.

---------------------------------------------------------------------------------------------------------------

frag_off: 단편화 오프셋

16비트 중 첫번째 비트는 항상 0이며, 두번째 비트는 Don`t Fragment, 세번째 비트는 More fragment로

Don`t Fragment가 [0] 이면 라우터에서도 단편화가 가능함을 뜻하고

                        [1] 이면 더 이상 단편화를 하지 말 것을 뜻한다.

More Fragment가 [0] 이면 현재가 단편화된 데이터 그램의 마지막 임을 뜻하고

                        [1] 이면 뒤이어 단편화된 조각이 더 있음을 뜻한다.

이하 13비트는 

8바이트 단위로 최초 분열 조각으로부터의 오프셋을 나타냄.

--------------------------------------------------------------------------------------------------------------- 

ttl: Time to Live

protocol: 상위 계층의 프로토콜 번호

check: IP 체크섬

saddr: 출발지 IP주소

daddr: 도착지 IP주소

ICMP 헤더이다.

#include <linux/icmp.h>

struct icmphdr {
  __u8		type;
  __u8		code;
  __sum16	checksum;
  union {
	struct {
		__be16	id;
		__be16	sequence;
	} echo;
	__be32	gateway;
	struct {
		__be16	__unused;
		__be16	mtu;
	} frag;
	__u8	reserved[4];
  } un;
};

 

참조

http://ktword.co.kr/abbr_view.php?m_temp1=1859

https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-18%ED%8E%B8-IP-Header-IP%ED%97%A4%EB%8D%94-%EA%B5%AC%EC%A1%B0



'리눅스 커널 > 네트워크' 카테고리의 다른 글

Raw socket incoming packet capture  (0) 2021.10.24
Ethernet & ARP Header  (0) 2021.10.24
TCP & UDP Header  (0) 2021.10.24
ioctl - socket  (0) 2021.10.24
struct net_device example  (0) 2021.10.24