[C 프로젝트] 패킷 분석기 Part 4. IPv4 프로토콜 스택 정보를 알려주세요.

 

IPv4 프로토콜 스택 헤더

  • IPv4

Internet Protocol version 4

  • VER(4)

버전 정보

IPv4는 항상 4

  • HLEN(4)

헤더 길이

4바이트 단위

최소 5(20바이트)~최대 15(60바이트)

  • Service Type(8)

Code Point(6) + Unused(2)

서비스 유형 및 우선 순위에 사용

TOS(Type Of Services)로 불렀음

Differentiated Services로도 부름

XXX000: 우선순위

XXXX11: 지역 기관에서 서비스 의미

XXXX01:임시 실험

XXXXX0: IETF에서 서비스 의미

  • Total Length(16)

전체 길이

헤더길이 +Data 길이

단위는 바이트

  • Identification(16)

IP 패킷을 구분하기 위해 부여한 번호

단편화 패킷을 조립할 때 사용

  • Flags(3)

첫 번째 비트는 사용 안 함

두 번째 비트는 DF(Don’t Fragment)

    1:단편화하지 마라

    2: 단편화해도 된다.

세 번째 비트는 MF(More Fragment)

    0이면 마지막 패킷(단편화하지 않은 패킷도)

    1이면 뒤에 단편화 패킷이 더 있음

  • Fragmentation offset(13)

단편화하기 전에 패킷의 위치 정보

단위는 8바이트

예) 4000 바이트 크기의 패킷을 1000바이트 씩 단편화하여 보내면

    첫 번째 단편화: 0

    두 번째 단편화: 125

    세 번째 단편화: 250

    네 번째 단편화: 375

  • Time To Live(8)

경유할 수 있는 라우터 수

라우터를 거쳐갈 때마다 1 감소

  • Protocol(8)

ICMP(1), IGMP(2), TCP(6), UDP(17), OSPF(89)

  • Header Checksum(16)

패킷이 유효한지 계산하기 위한 필드

헤더 부분만 계산

// reference Unix Network Programming written by Stevens
u_short cal_checksum(u_short *base,int len){
  int nleft = len;
  int sum = 0;
  u_short *w = base;
  u_short answer = 0; 
 
  while(nleft>1){
    sum += *w;
    w++;
    nleft -= 2;
  }//while
 
  if(nleft == 1){
    *(u_short *)(&answer) = *(u_char *)w;
    sum += answer;
  }//if
 
  sum = (sum>>16) + (sum & 0xFFFF);
  sum += (sum >>16);
  answer = ~sum;
  return (answer);
}
  • Source IP Address(32)

발신지 주소

  • Destination IP Address(32)

목적지 주소

IPv4 주소 클래스

Option and Padding(0~40 바이트)