미친해커

[Network] IPv4(Internet Protocol version 4) 헤더 본문

Network

[Network] IPv4(Internet Protocol version 4) 헤더

미친해커 2022. 10. 1. 01:58
반응형

인터넷 프로토콜

인터넷 프로토콜(IP, Internet Protocol)은 두 호스트가 네트워크에서 패킷을 교환하며 정보를 주고 받는 데 사용하는 규약이며, 호스트의 주소 지정과 패킷 분할 및 조립 기능을 담당한다. 줄여서 아이피(IP)라고도 한다.

주소 체계

인터넷 프로토콜은 특정한 호스트의 주소를 지정할 수 있도록 설계되었다. 보편적으로 사용되는 IP 주소 체계는 IPv4와 IPv6가 있다.

 

IPv4는 인터넷 프로토콜의 4번째 버전이다. 전 세계적으로 사용된 첫 번째 인트넷 프로토콜이며, 과거에 사용되던 유일한 인터넷 프로토콜이였으나 오늘날에는 IPv4의 주소가 소진되어 IPv4의 할당이 중지되고 IPv6로 대체되고 있다.

 

IPv4의 주소체계는 총 12자리이며 네 부분으로 나뉜다. 각 부분 마다 0~255까지 3자리의 수로 표현된다. IPv4는 32비트로 구성되어 있으며, 한 부분당 1바이트이다.

IPv4 주소 예시 : 192.168.123.100

 

IPv4 주소의 개수는 32비트로 표현할 수 있는 2^32개인 약 43억개이다.

헤더

인터넷 프로토콜 버전 4 헤더는 옵션 미지정시 20바이트이며, 고정 20바이트와 가변 0 ~ 40바이트가 있다.

 

인터넷 프로토콜 버전 4 헤더는 최소 20바이트의 사이즈를 가지며 옵션에 따라 0 ~ 40바이트가 늘어날 수 있다.

IPv4 헤더의 고정 부분
IPv4 헤더의 가변 부분

typedef struct _NETWORK_IP_HEADER
{
    unsigned char HeaderLength : 4;          // IP Header Length
    unsigned char Version : 4;               // Internet Protocol Version
    union
    {
        unsigned char TypeOfService;         // Type of Service
        struct
        {
            unsigned char ECN : 2;           // Differentiated Services Codepoint
            unsigned char DSCP : 6;          // Explicit Congestion Notification
        };
    };
    unsigned short TotalLength;              // Total Packet Length in byte except for Ethernet Header Length
    unsigned short Identification;           // IP Packet Identifier
    union
    {
        unsigned short Flag;                 // Information about the status of the packet segmentation.
        unsigned short FragmentOffset : 13;  // Original Location of Split Packets
        struct
        {
            unsigned short : 13;             // bit field padding
            unsigned short MoreFragment : 1; // More fragment packets present
            unsigned short DontFragment : 1; // It is last fragment packet
            unsigned short Reserved : 1;     // Reserved, always set to 0
        } Flags;
    };
    unsigned char TTL;                       // Time To Live
    unsigned char Protocol;                  // Protocol Type in the next layer
    unsigned short Checksum;                 // Header Checksum
    struct sockaddr_in SourceAddr;           // Source IP Address
    struct sockaddr_in DestinationAddr;      // Destination IP Address
    // unsigned long SourceAddr;
    // unsigned long DestinationAddr;
} NETWORK_IP_HEADER, *PNETWORK_IP_HEADER;
반응형
Comments