encapsulation
ethernet
u_char ether_dhost[6] | destionation의 Mac address (6bytes) |
u_char ether_shost[6] | source의 Mac address (6bytes) |
u_short ether_type | 패킷 타입 ID(2bytes) Big-endian방식으로 버퍼에 저장됨 /* Ethernet protocol ID's */ #define ETHERTYPE_PUP 0x0200 #define ETHERTYPE_IP 0x0800 /* 헤더 다음에 오는 데이터가 IP주소를 가지고 있다. */ #define ETHERTYPE_ARP 0x0806 /* Address resolution - MAC을 요청 */ #define ETHERTYPE_REVARP 0x8035 /* Reverse ARP - IP를 요청 */ |
network
Field Name | Bit | Describtion |
Version | 4 | IPv4패킷일 경우 4가 들어가고 IPv6일 경우 6이 들어 있다. |
IHL | 4 | Internet Header Length IP헤더 길이를 나타내는 필드. 20~60byte의 값을 가진다. ip_hl값이 5라면, 5*4인 20byte를 갖는다. |
TOS (or DSCP) | 8 | Type Of Service (or Differentiated Service CodePoint) QOS |
Total Length | 16 | Layer 3 Packet Total Length 헤더와 데이터 길이를 포함한 전체 길이를 바이트 단위로 나타낸다 |
Identification | 16 | Fragmented Datagram Identification Identification |
IP Flags | 3 | Fragmentation State Flags ip_off의 상위 3비트가 Flags 비트이며 3비트 중 제일 처음 오는 비트는 사용되지 않으며 두번째 오는 비트가 1이라면 해당 패킷에 대해서는 단편화할 수 없다는 표시이다. 마지막 비트는 More fragment비트로 이 비트가 1로 설정되었다면 패킷이 단편화 되었는데 아직 끝이 아니라는 의미이다. |
Fragments Offset | 13 |
|
TTL | 8 | Time to live |
Protocol | 8 | IP |
Header Checksum | 16 | 오류를 검증할수 있도록 체크섬된 값을 기록한다. Header를 2Bytes씩으로 나눠 각각의 자리수를 모두 더하여 반전시킨 값이다. 패킷을 받는 목적지 호스트는 체크섬을 확인하여 결과가 다르다면 패킷을 버린다 |
Source Address | 32 | Datagram을 송신한 최초출발지의 32Bits의 IP Address inet_ntoa(ip_src) |
Destination Address | 32 | Datagram을 수신한 최종목적지의 32Bits의 IP Address inet_ntoa(ip_src) |
Option | Variable Length | IP 옵션필드로 각 필드의 기능에서의 부가적인 옵션 수행을 정의한다. |
Padding | 32bits - Option | IP Header를 32Bits의 배수로 맞추기위해 '0' bit로 패딩을 추가한다. |
transport