Internet Protocol#
The Internet Protocol (IP) is the basic communication protocol in the Internet layer. IP has the task of delivering packets from the source host to the destination host solely based on the IP addresses in the packet headers.
IP-Address#
Version | Length | Addresses | Example |
---|---|---|---|
IPv4 | 32 b = 4 B | 4.3e9 | 192.168.1.1 |
IPv6 | 128 b = 16 B | 3.4e38 | 2001:0db8:85a3:0042:0000:8a2e:0370:7334 |
Address Notation#
IPv6#
16 byte written as 8 groups of 4 hexadecimal characters.
- leading zeros within a group may be omitted
- consecutive groups of only zeros may be replace by
::
. This replacement is only allowed once within an address.
Example:
Initial address: 2001:0db8:0000:0000:0000:ff00:0042:8329
Removing
leading zeroes: 2001:db8:0:0:0:ff00:42:8329
Omitting consecutive
groups of zeroes: 2001:db8::ff00:42:8329
IPv4#
4 byte written as 4 groups of integers between 0 and 255.
192.168.0.0
Subnets#
Subnets share a certain number of identical most-significant bits in
their IP addresses (net prefix). The number \(n\) of these bits is either
noted as /n
behind an IP address or as a subnet mask.
- Prefix:
x.x.x.x/24
: 24 bits for the network, 8 bits for the host - Subnetmask:
255.255.255.0
: 24 bits for the network, 8 bits for the host
Special Address Ranges#
Certain adress ranges are reserved for special use cases.
IPv6#
2000::/4
(global)2002::/16
(global 6to4 tunnel)fd00::/7
: Unique Local Addresses (ULA) for LANsfe80::/10
: Link Local Addresses. Created by interfaces for status communication
IPv4#
0.0.0.0/8
(broadcast)10.0.0.0/8
(private network)100.64.0.0/10
127.0.0.0/8
(local net)172.16.0.0/12
(private network)192.168.0.0/16
(private network)224.0.0.0
--255.255.255.254
(future use)255.255.255.255
(limited broadcast)
Header Format#
IPv6#
The IPv6 header has a fixed size of 40 bytes.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class | Flow Label |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload Length | Next Header | Hop Limit |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Source Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Explanation of the Header Fields
- Version -- 4 bit
- Internet Protocol version number = 6 (
0b1010
). - Traffic Class -- 8 bit
- Set different priorities of IPv6 packets. The default value must be zero for all 8 bits.
- Flow Label -- 20 bit
- May be used by a source to label sequences of packets for which it requests special handling by the IPv6 routers, such as non-default quality of service or "real-time" service. Hosts or routers that do not support the functions of the Flow Label field are required to set the field to zero when originating a packet, pass the field on unchanged when forwarding a packet, and ignore the field when receiving a packet.
- Payload Length -- 16-bit unsigned integer
- Length of the IPv6 payload, i.e., the rest of the packet following this IPv6 header, in octets.
- Next Header -- 8 bit
- Identifies the type of header immediately following the IPv6 header. Uses the same values as the IPv4 Protocol field.
- Hop Limit -- 8 bit unsigned integer
- Decremented by 1 by each node that forwards the packet. When forwarding, the packet is discarded if Hop Limit was zero when received or is decremented to zero. A node that is the destination of a packet should not discard a packet with Hop Limit equal to zero; it should process the packet normally.
- Source Address -- 128 bit
- Address of the originator of the packet.
- Destination Address -- 128 bit
- Address of the intended recipient of the packet.
IPv4#
The IPv4 header has a size of 20 bytes if options are not used.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Explanation of the Header Fields
- Version -- 4 bit
- The version of the internet header. (4 =
0b0100
) - IHL -- 4 bit
- The Internet Header Length (IHL) is the length of the internet header in 32 bit words, and thus points to the beginning of the data. The minimum value for a correct header is 5.
- Type of Service -- 8 bit
- Indication of the abstract parameters of the quality of service desired.
- Total Length -- 16 bit
- The length of the datagram, measured in octets, including internet header and data. This field allows the length of a datagram to be up to 65,535 octets. Such long datagrams are impractical for most hosts and networks. All hosts must be prepared to accept datagrams of up to 576 octets (whether they arrive whole or in fragments).
- Identification -- 16 bit
- Value assigned by the sender to aid in assembling the fragments of a datagram.
- Flags -- 3 bit
- Various Control Flags.
- Bit 0: reserved, must be zero
- Bit 1: (DF) 0 = May Fragment, 1 = Don't Fragment.
- Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments.
- Fragment Offset -- 13 bit
- Offset indicating where in the datagram this fragment belongs. The fragment offset is measured in units of 8 octets (64 bits). The first fragment has offset zero.
- Time to Live (TTL) -- 8 bit
- This field indicates the maximum time the datagram is allowed to remain in the internet system. Every module that processes a datagram must decrease the TTL by at least one. If this field contains the value zero, then the datagram must be destroyed.
- Protocol -- 8 bit
- This field indicates the next level protocol used in the data portion of the internet datagram. Protocol numbers were defined in RFC 1700 but are now maintained by IANA. Most important numbers are 1 (ICMP), 6 (TCP), and 17 (UDP).
- Header Checksum -- 16 bits
- A checksum on the header only. Since some header fields change (e.g., time to live), this is recomputed and verified at each point that the internet header is processed. The checksum field is the 16 bit one's complement of the one's complement sum of all 16 bit words in the header. For purposes of computing the checksum, the value of the checksum field is zero.
- Source Address -- 32 bit
- Address of the originator of the packet.
- Destination Address -- 32 bit
- Address of the intended recipient of the packet.
- Options -- variable
- The options field is not often used.
IP protocol numbers#
The protocol number is used in the Protocol field of the IPv4 header and the Next Header field of the IPv6 header.
Hex | Dec | Abbr | Protocol | RFC |
---|---|---|---|---|
0x01 | 1 | ICMP | Internet Control Message Protocol | RFC 792 |
0x02 | 2 | IGMP | Internet Group Management Protocol | RFC 1112 |
0x06 | 6 | TCP | Transmission Control Protocol | RFC 793 |
0x11 | 17 | UDP | User Datagram Protocol | RFC 768 |
0x33 | 51 | AH | Authentication Header | RFC 4302 |
A full list of all numbers can be found on IANA or on Wikipedia.