2886 lines
93 KiB
Plaintext
2886 lines
93 KiB
Plaintext
RFC: 791
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
INTERNET PROTOCOL
|
||
|
||
|
||
DARPA INTERNET PROGRAM
|
||
|
||
PROTOCOL SPECIFICATION
|
||
|
||
|
||
|
||
September 1981
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
prepared for
|
||
|
||
Defense Advanced Research Projects Agency
|
||
Information Processing Techniques Office
|
||
1400 Wilson Boulevard
|
||
Arlington, Virginia 22209
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
by
|
||
|
||
Information Sciences Institute
|
||
University of Southern California
|
||
4676 Admiralty Way
|
||
Marina del Rey, California 90291
|
||
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
TABLE OF CONTENTS
|
||
|
||
PREFACE ........................................................ iii
|
||
|
||
1. INTRODUCTION ..................................................... 1
|
||
|
||
1.1 Motivation .................................................... 1
|
||
1.2 Scope ......................................................... 1
|
||
1.3 Interfaces .................................................... 1
|
||
1.4 Operation ..................................................... 2
|
||
|
||
2. OVERVIEW ......................................................... 5
|
||
|
||
2.1 Relation to Other Protocols ................................... 9
|
||
2.2 Model of Operation ............................................ 5
|
||
2.3 Function Description .......................................... 7
|
||
2.4 Gateways ...................................................... 9
|
||
|
||
3. SPECIFICATION ................................................... 11
|
||
|
||
3.1 Internet Header Format ....................................... 11
|
||
3.2 Discussion ................................................... 23
|
||
3.3 Interfaces ................................................... 31
|
||
|
||
APPENDIX A: Examples & Scenarios ................................... 34
|
||
APPENDIX B: Data Transmission Order ................................ 39
|
||
|
||
GLOSSARY ............................................................ 41
|
||
|
||
REFERENCES .......................................................... 45
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page i]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page ii]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
PREFACE
|
||
|
||
|
||
|
||
This document specifies the DoD Standard Internet Protocol. This
|
||
document is based on six earlier editions of the ARPA Internet Protocol
|
||
Specification, and the present text draws heavily from them. There have
|
||
been many contributors to this work both in terms of concepts and in
|
||
terms of text. This edition revises aspects of addressing, error
|
||
handling, option codes, and the security, precedence, compartments, and
|
||
handling restriction features of the internet protocol.
|
||
|
||
Jon Postel
|
||
|
||
Editor
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page iii]
|
||
|
||
|
||
|
||
September 1981
|
||
|
||
|
||
RFC: 791
|
||
Replaces: RFC 760
|
||
IENs 128, 123, 111,
|
||
80, 54, 44, 41, 28, 26
|
||
|
||
INTERNET PROTOCOL
|
||
|
||
DARPA INTERNET PROGRAM
|
||
PROTOCOL SPECIFICATION
|
||
|
||
|
||
|
||
1. INTRODUCTION
|
||
|
||
1.1. Motivation
|
||
|
||
The Internet Protocol is designed for use in interconnected systems of
|
||
packet-switched computer communication networks. Such a system has
|
||
been called a "catenet" [1]. The internet protocol provides for
|
||
transmitting blocks of data called datagrams from sources to
|
||
destinations, where sources and destinations are hosts identified by
|
||
fixed length addresses. The internet protocol also provides for
|
||
fragmentation and reassembly of long datagrams, if necessary, for
|
||
transmission through "small packet" networks.
|
||
|
||
1.2. Scope
|
||
|
||
The internet protocol is specifically limited in scope to provide the
|
||
functions necessary to deliver a package of bits (an internet
|
||
datagram) from a source to a destination over an interconnected system
|
||
of networks. There are no mechanisms to augment end-to-end data
|
||
reliability, flow control, sequencing, or other services commonly
|
||
found in host-to-host protocols. The internet protocol can capitalize
|
||
on the services of its supporting networks to provide various types
|
||
and qualities of service.
|
||
|
||
1.3. Interfaces
|
||
|
||
This protocol is called on by host-to-host protocols in an internet
|
||
environment. This protocol calls on local network protocols to carry
|
||
the internet datagram to the next gateway or destination host.
|
||
|
||
For example, a TCP module would call on the internet module to take a
|
||
TCP segment (including the TCP header and user data) as the data
|
||
portion of an internet datagram. The TCP module would provide the
|
||
addresses and other parameters in the internet header to the internet
|
||
module as arguments of the call. The internet module would then
|
||
create an internet datagram and call on the local network interface to
|
||
transmit the internet datagram.
|
||
|
||
In the ARPANET case, for example, the internet module would call on a
|
||
|
||
|
||
[Page 1]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Introduction
|
||
|
||
|
||
|
||
local net module which would add the 1822 leader [2] to the internet
|
||
datagram creating an ARPANET message to transmit to the IMP. The
|
||
ARPANET address would be derived from the internet address by the
|
||
local network interface and would be the address of some host in the
|
||
ARPANET, that host might be a gateway to other networks.
|
||
|
||
1.4. Operation
|
||
|
||
The internet protocol implements two basic functions: addressing and
|
||
fragmentation.
|
||
|
||
The internet modules use the addresses carried in the internet header
|
||
to transmit internet datagrams toward their destinations. The
|
||
selection of a path for transmission is called routing.
|
||
|
||
The internet modules use fields in the internet header to fragment and
|
||
reassemble internet datagrams when necessary for transmission through
|
||
"small packet" networks.
|
||
|
||
The model of operation is that an internet module resides in each host
|
||
engaged in internet communication and in each gateway that
|
||
interconnects networks. These modules share common rules for
|
||
interpreting address fields and for fragmenting and assembling
|
||
internet datagrams. In addition, these modules (especially in
|
||
gateways) have procedures for making routing decisions and other
|
||
functions.
|
||
|
||
The internet protocol treats each internet datagram as an independent
|
||
entity unrelated to any other internet datagram. There are no
|
||
connections or logical circuits (virtual or otherwise).
|
||
|
||
The internet protocol uses four key mechanisms in providing its
|
||
service: Type of Service, Time to Live, Options, and Header Checksum.
|
||
|
||
The Type of Service is used to indicate the quality of the service
|
||
desired. The type of service is an abstract or generalized set of
|
||
parameters which characterize the service choices provided in the
|
||
networks that make up the internet. This type of service indication
|
||
is to be used by gateways to select the actual transmission parameters
|
||
for a particular network, the network to be used for the next hop, or
|
||
the next gateway when routing an internet datagram.
|
||
|
||
The Time to Live is an indication of an upper bound on the lifetime of
|
||
an internet datagram. It is set by the sender of the datagram and
|
||
reduced at the points along the route where it is processed. If the
|
||
time to live reaches zero before the internet datagram reaches its
|
||
destination, the internet datagram is destroyed. The time to live can
|
||
be thought of as a self destruct time limit.
|
||
|
||
|
||
[Page 2]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Introduction
|
||
|
||
|
||
|
||
The Options provide for control functions needed or useful in some
|
||
situations but unnecessary for the most common communications. The
|
||
options include provisions for timestamps, security, and special
|
||
routing.
|
||
|
||
The Header Checksum provides a verification that the information used
|
||
in processing internet datagram has been transmitted correctly. The
|
||
data may contain errors. If the header checksum fails, the internet
|
||
datagram is discarded at once by the entity which detects the error.
|
||
|
||
The internet protocol does not provide a reliable communication
|
||
facility. There are no acknowledgments either end-to-end or
|
||
hop-by-hop. There is no error control for data, only a header
|
||
checksum. There are no retransmissions. There is no flow control.
|
||
|
||
Errors detected may be reported via the Internet Control Message
|
||
Protocol (ICMP) [3] which is implemented in the internet protocol
|
||
module.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 3]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 4]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
2. OVERVIEW
|
||
|
||
2.1. Relation to Other Protocols
|
||
|
||
The following diagram illustrates the place of the internet protocol
|
||
in the protocol hierarchy:
|
||
|
||
|
||
+------+ +-----+ +-----+ +-----+
|
||
|Telnet| | FTP | | TFTP| ... | ... |
|
||
+------+ +-----+ +-----+ +-----+
|
||
| | | |
|
||
+-----+ +-----+ +-----+
|
||
| TCP | | UDP | ... | ... |
|
||
+-----+ +-----+ +-----+
|
||
| | |
|
||
+--------------------------+----+
|
||
| Internet Protocol & ICMP |
|
||
+--------------------------+----+
|
||
|
|
||
+---------------------------+
|
||
| Local Network Protocol |
|
||
+---------------------------+
|
||
|
||
Protocol Relationships
|
||
|
||
Figure 1.
|
||
|
||
Internet protocol interfaces on one side to the higher level
|
||
host-to-host protocols and on the other side to the local network
|
||
protocol. In this context a "local network" may be a small network in
|
||
a building or a large network such as the ARPANET.
|
||
|
||
2.2. Model of Operation
|
||
|
||
The model of operation for transmitting a datagram from one
|
||
application program to another is illustrated by the following
|
||
scenario:
|
||
|
||
We suppose that this transmission will involve one intermediate
|
||
gateway.
|
||
|
||
The sending application program prepares its data and calls on its
|
||
local internet module to send that data as a datagram and passes the
|
||
destination address and other parameters as arguments of the call.
|
||
|
||
The internet module prepares a datagram header and attaches the data
|
||
to it. The internet module determines a local network address for
|
||
this internet address, in this case it is the address of a gateway.
|
||
|
||
|
||
[Page 5]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Overview
|
||
|
||
|
||
|
||
It sends this datagram and the local network address to the local
|
||
network interface.
|
||
|
||
The local network interface creates a local network header, and
|
||
attaches the datagram to it, then sends the result via the local
|
||
network.
|
||
|
||
The datagram arrives at a gateway host wrapped in the local network
|
||
header, the local network interface strips off this header, and
|
||
turns the datagram over to the internet module. The internet module
|
||
determines from the internet address that the datagram is to be
|
||
forwarded to another host in a second network. The internet module
|
||
determines a local net address for the destination host. It calls
|
||
on the local network interface for that network to send the
|
||
datagram.
|
||
|
||
This local network interface creates a local network header and
|
||
attaches the datagram sending the result to the destination host.
|
||
|
||
At this destination host the datagram is stripped of the local net
|
||
header by the local network interface and handed to the internet
|
||
module.
|
||
|
||
The internet module determines that the datagram is for an
|
||
application program in this host. It passes the data to the
|
||
application program in response to a system call, passing the source
|
||
address and other parameters as results of the call.
|
||
|
||
|
||
Application Application
|
||
Program Program
|
||
\ /
|
||
Internet Module Internet Module Internet Module
|
||
\ / \ /
|
||
LNI-1 LNI-1 LNI-2 LNI-2
|
||
\ / \ /
|
||
Local Network 1 Local Network 2
|
||
|
||
|
||
|
||
Transmission Path
|
||
|
||
Figure 2
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 6]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Overview
|
||
|
||
|
||
|
||
2.3. Function Description
|
||
|
||
The function or purpose of Internet Protocol is to move datagrams
|
||
through an interconnected set of networks. This is done by passing
|
||
the datagrams from one internet module to another until the
|
||
destination is reached. The internet modules reside in hosts and
|
||
gateways in the internet system. The datagrams are routed from one
|
||
internet module to another through individual networks based on the
|
||
interpretation of an internet address. Thus, one important mechanism
|
||
of the internet protocol is the internet address.
|
||
|
||
In the routing of messages from one internet module to another,
|
||
datagrams may need to traverse a network whose maximum packet size is
|
||
smaller than the size of the datagram. To overcome this difficulty, a
|
||
fragmentation mechanism is provided in the internet protocol.
|
||
|
||
Addressing
|
||
|
||
A distinction is made between names, addresses, and routes [4]. A
|
||
name indicates what we seek. An address indicates where it is. A
|
||
route indicates how to get there. The internet protocol deals
|
||
primarily with addresses. It is the task of higher level (i.e.,
|
||
host-to-host or application) protocols to make the mapping from
|
||
names to addresses. The internet module maps internet addresses to
|
||
local net addresses. It is the task of lower level (i.e., local net
|
||
or gateways) procedures to make the mapping from local net addresses
|
||
to routes.
|
||
|
||
Addresses are fixed length of four octets (32 bits). An address
|
||
begins with a network number, followed by local address (called the
|
||
"rest" field). There are three formats or classes of internet
|
||
addresses: in class a, the high order bit is zero, the next 7 bits
|
||
are the network, and the last 24 bits are the local address; in
|
||
class b, the high order two bits are one-zero, the next 14 bits are
|
||
the network and the last 16 bits are the local address; in class c,
|
||
the high order three bits are one-one-zero, the next 21 bits are the
|
||
network and the last 8 bits are the local address.
|
||
|
||
Care must be taken in mapping internet addresses to local net
|
||
addresses; a single physical host must be able to act as if it were
|
||
several distinct hosts to the extent of using several distinct
|
||
internet addresses. Some hosts will also have several physical
|
||
interfaces (multi-homing).
|
||
|
||
That is, provision must be made for a host to have several physical
|
||
interfaces to the network with each having several logical internet
|
||
addresses.
|
||
|
||
|
||
|
||
[Page 7]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Overview
|
||
|
||
|
||
|
||
Examples of address mappings may be found in "Address Mappings" [5].
|
||
|
||
Fragmentation
|
||
|
||
Fragmentation of an internet datagram is necessary when it
|
||
originates in a local net that allows a large packet size and must
|
||
traverse a local net that limits packets to a smaller size to reach
|
||
its destination.
|
||
|
||
An internet datagram can be marked "don't fragment." Any internet
|
||
datagram so marked is not to be internet fragmented under any
|
||
circumstances. If internet datagram marked don't fragment cannot be
|
||
delivered to its destination without fragmenting it, it is to be
|
||
discarded instead.
|
||
|
||
Fragmentation, transmission and reassembly across a local network
|
||
which is invisible to the internet protocol module is called
|
||
intranet fragmentation and may be used [6].
|
||
|
||
The internet fragmentation and reassembly procedure needs to be able
|
||
to break a datagram into an almost arbitrary number of pieces that
|
||
can be later reassembled. The receiver of the fragments uses the
|
||
identification field to ensure that fragments of different datagrams
|
||
are not mixed. The fragment offset field tells the receiver the
|
||
position of a fragment in the original datagram. The fragment
|
||
offset and length determine the portion of the original datagram
|
||
covered by this fragment. The more-fragments flag indicates (by
|
||
being reset) the last fragment. These fields provide sufficient
|
||
information to reassemble datagrams.
|
||
|
||
The identification field is used to distinguish the fragments of one
|
||
datagram from those of another. The originating protocol module of
|
||
an internet datagram sets the identification field to a value that
|
||
must be unique for that source-destination pair and protocol for the
|
||
time the datagram will be active in the internet system. The
|
||
originating protocol module of a complete datagram sets the
|
||
more-fragments flag to zero and the fragment offset to zero.
|
||
|
||
To fragment a long internet datagram, an internet protocol module
|
||
(for example, in a gateway), creates two new internet datagrams and
|
||
copies the contents of the internet header fields from the long
|
||
datagram into both new internet headers. The data of the long
|
||
datagram is divided into two portions on a 8 octet (64 bit) boundary
|
||
(the second portion might not be an integral multiple of 8 octets,
|
||
but the first must be). Call the number of 8 octet blocks in the
|
||
first portion NFB (for Number of Fragment Blocks). The first
|
||
portion of the data is placed in the first new internet datagram,
|
||
and the total length field is set to the length of the first
|
||
|
||
|
||
[Page 8]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Overview
|
||
|
||
|
||
|
||
datagram. The more-fragments flag is set to one. The second
|
||
portion of the data is placed in the second new internet datagram,
|
||
and the total length field is set to the length of the second
|
||
datagram. The more-fragments flag carries the same value as the
|
||
long datagram. The fragment offset field of the second new internet
|
||
datagram is set to the value of that field in the long datagram plus
|
||
NFB.
|
||
|
||
This procedure can be generalized for an n-way split, rather than
|
||
the two-way split described.
|
||
|
||
To assemble the fragments of an internet datagram, an internet
|
||
protocol module (for example at a destination host) combines
|
||
internet datagrams that all have the same value for the four fields:
|
||
identification, source, destination, and protocol. The combination
|
||
is done by placing the data portion of each fragment in the relative
|
||
position indicated by the fragment offset in that fragment's
|
||
internet header. The first fragment will have the fragment offset
|
||
zero, and the last fragment will have the more-fragments flag reset
|
||
to zero.
|
||
|
||
2.4. Gateways
|
||
|
||
Gateways implement internet protocol to forward datagrams between
|
||
networks. Gateways also implement the Gateway to Gateway Protocol
|
||
(GGP) [7] to coordinate routing and other internet control
|
||
information.
|
||
|
||
In a gateway the higher level protocols need not be implemented and
|
||
the GGP functions are added to the IP module.
|
||
|
||
|
||
+-------------------------------+
|
||
| Internet Protocol & ICMP & GGP|
|
||
+-------------------------------+
|
||
| |
|
||
+---------------+ +---------------+
|
||
| Local Net | | Local Net |
|
||
+---------------+ +---------------+
|
||
|
||
Gateway Protocols
|
||
|
||
Figure 3.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 9]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 10]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
3. SPECIFICATION
|
||
|
||
3.1. Internet Header Format
|
||
|
||
A summary of the contents of the internet header follows:
|
||
|
||
|
||
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 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
Example Internet Datagram Header
|
||
|
||
Figure 4.
|
||
|
||
Note that each tick mark represents one bit position.
|
||
|
||
Version: 4 bits
|
||
|
||
The Version field indicates the format of the internet header. This
|
||
document describes version 4.
|
||
|
||
IHL: 4 bits
|
||
|
||
Internet Header Length is the length of the internet header in 32
|
||
bit words, and thus points to the beginning of the data. Note that
|
||
the minimum value for a correct header is 5.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 11]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
Type of Service: 8 bits
|
||
|
||
The Type of Service provides an indication of the abstract
|
||
parameters of the quality of service desired. These parameters are
|
||
to be used to guide the selection of the actual service parameters
|
||
when transmitting a datagram through a particular network. Several
|
||
networks offer service precedence, which somehow treats high
|
||
precedence traffic as more important than other traffic (generally
|
||
by accepting only traffic above a certain precedence at time of high
|
||
load). The major choice is a three way tradeoff between low-delay,
|
||
high-reliability, and high-throughput.
|
||
|
||
Bits 0-2: Precedence.
|
||
Bit 3: 0 = Normal Delay, 1 = Low Delay.
|
||
Bits 4: 0 = Normal Throughput, 1 = High Throughput.
|
||
Bits 5: 0 = Normal Relibility, 1 = High Relibility.
|
||
Bit 6-7: Reserved for Future Use.
|
||
|
||
0 1 2 3 4 5 6 7
|
||
+-----+-----+-----+-----+-----+-----+-----+-----+
|
||
| | | | | | |
|
||
| PRECEDENCE | D | T | R | 0 | 0 |
|
||
| | | | | | |
|
||
+-----+-----+-----+-----+-----+-----+-----+-----+
|
||
|
||
Precedence
|
||
|
||
111 - Network Control
|
||
110 - Internetwork Control
|
||
101 - CRITIC/ECP
|
||
100 - Flash Override
|
||
011 - Flash
|
||
010 - Immediate
|
||
001 - Priority
|
||
000 - Routine
|
||
|
||
The use of the Delay, Throughput, and Reliability indications may
|
||
increase the cost (in some sense) of the service. In many networks
|
||
better performance for one of these parameters is coupled with worse
|
||
performance on another. Except for very unusual cases at most two
|
||
of these three indications should be set.
|
||
|
||
The type of service is used to specify the treatment of the datagram
|
||
during its transmission through the internet system. Example
|
||
mappings of the internet type of service to the actual service
|
||
provided on networks such as AUTODIN II, ARPANET, SATNET, and PRNET
|
||
is given in "Service Mappings" [8].
|
||
|
||
|
||
|
||
[Page 12]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
The Network Control precedence designation is intended to be used
|
||
within a network only. The actual use and control of that
|
||
designation is up to each network. The Internetwork Control
|
||
designation is intended for use by gateway control originators only.
|
||
If the actual use of these precedence designations is of concern to
|
||
a particular network, it is the responsibility of that network to
|
||
control the access to, and use of, those precedence designations.
|
||
|
||
Total Length: 16 bits
|
||
|
||
Total Length is 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). It is recommended that hosts only send datagrams
|
||
larger than 576 octets if they have assurance that the destination
|
||
is prepared to accept the larger datagrams.
|
||
|
||
The number 576 is selected to allow a reasonable sized data block to
|
||
be transmitted in addition to the required header information. For
|
||
example, this size allows a data block of 512 octets plus 64 header
|
||
octets to fit in a datagram. The maximal internet header is 60
|
||
octets, and a typical internet header is 20 octets, allowing a
|
||
margin for headers of higher level protocols.
|
||
|
||
Identification: 16 bits
|
||
|
||
An identifying value assigned by the sender to aid in assembling the
|
||
fragments of a datagram.
|
||
|
||
Flags: 3 bits
|
||
|
||
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.
|
||
|
||
0 1 2
|
||
+---+---+---+
|
||
| | D | M |
|
||
| 0 | F | F |
|
||
+---+---+---+
|
||
|
||
Fragment Offset: 13 bits
|
||
|
||
This field indicates where in the datagram this fragment belongs.
|
||
|
||
|
||
[Page 13]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
The fragment offset is measured in units of 8 octets (64 bits). The
|
||
first fragment has offset zero.
|
||
|
||
Time to Live: 8 bits
|
||
|
||
This field indicates the maximum time the datagram is allowed to
|
||
remain in the internet system. If this field contains the value
|
||
zero, then the datagram must be destroyed. This field is modified
|
||
in internet header processing. The time is measured in units of
|
||
seconds, but since every module that processes a datagram must
|
||
decrease the TTL by at least one even if it process the datagram in
|
||
less than a second, the TTL must be thought of only as an upper
|
||
bound on the time a datagram may exist. The intention is to cause
|
||
undeliverable datagrams to be discarded, and to bound the maximum
|
||
datagram lifetime.
|
||
|
||
Protocol: 8 bits
|
||
|
||
This field indicates the next level protocol used in the data
|
||
portion of the internet datagram. The values for various protocols
|
||
are specified in "Assigned Numbers" [9].
|
||
|
||
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 algorithm is:
|
||
|
||
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.
|
||
|
||
This is a simple to compute checksum and experimental evidence
|
||
indicates it is adequate, but it is provisional and may be replaced
|
||
by a CRC procedure, depending on further experience.
|
||
|
||
Source Address: 32 bits
|
||
|
||
The source address. See section 3.2.
|
||
|
||
Destination Address: 32 bits
|
||
|
||
The destination address. See section 3.2.
|
||
|
||
|
||
|
||
|
||
|
||
[Page 14]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
Options: variable
|
||
|
||
The options may appear or not in datagrams. They must be
|
||
implemented by all IP modules (host and gateways). What is optional
|
||
is their transmission in any particular datagram, not their
|
||
implementation.
|
||
|
||
In some environments the security option may be required in all
|
||
datagrams.
|
||
|
||
The option field is variable in length. There may be zero or more
|
||
options. There are two cases for the format of an option:
|
||
|
||
Case 1: A single octet of option-type.
|
||
|
||
Case 2: An option-type octet, an option-length octet, and the
|
||
actual option-data octets.
|
||
|
||
The option-length octet counts the option-type octet and the
|
||
option-length octet as well as the option-data octets.
|
||
|
||
The option-type octet is viewed as having 3 fields:
|
||
|
||
1 bit copied flag,
|
||
2 bits option class,
|
||
5 bits option number.
|
||
|
||
The copied flag indicates that this option is copied into all
|
||
fragments on fragmentation.
|
||
|
||
0 = not copied
|
||
1 = copied
|
||
|
||
The option classes are:
|
||
|
||
0 = control
|
||
1 = reserved for future use
|
||
2 = debugging and measurement
|
||
3 = reserved for future use
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 15]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
The following internet options are defined:
|
||
|
||
CLASS NUMBER LENGTH DESCRIPTION
|
||
----- ------ ------ -----------
|
||
0 0 - End of Option list. This option occupies only
|
||
1 octet; it has no length octet.
|
||
0 1 - No Operation. This option occupies only 1
|
||
octet; it has no length octet.
|
||
0 2 11 Security. Used to carry Security,
|
||
Compartmentation, User Group (TCC), and
|
||
Handling Restriction Codes compatible with DOD
|
||
requirements.
|
||
0 3 var. Loose Source Routing. Used to route the
|
||
internet datagram based on information
|
||
supplied by the source.
|
||
0 9 var. Strict Source Routing. Used to route the
|
||
internet datagram based on information
|
||
supplied by the source.
|
||
0 7 var. Record Route. Used to trace the route an
|
||
internet datagram takes.
|
||
0 8 4 Stream ID. Used to carry the stream
|
||
identifier.
|
||
2 4 var. Internet Timestamp.
|
||
|
||
|
||
|
||
Specific Option Definitions
|
||
|
||
End of Option List
|
||
|
||
+--------+
|
||
|00000000|
|
||
+--------+
|
||
Type=0
|
||
|
||
This option indicates the end of the option list. This might
|
||
not coincide with the end of the internet header according to
|
||
the internet header length. This is used at the end of all
|
||
options, not the end of each option, and need only be used if
|
||
the end of the options would not otherwise coincide with the end
|
||
of the internet header.
|
||
|
||
May be copied, introduced, or deleted on fragmentation, or for
|
||
any other reason.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 16]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
No Operation
|
||
|
||
+--------+
|
||
|00000001|
|
||
+--------+
|
||
Type=1
|
||
|
||
This option may be used between options, for example, to align
|
||
the beginning of a subsequent option on a 32 bit boundary.
|
||
|
||
May be copied, introduced, or deleted on fragmentation, or for
|
||
any other reason.
|
||
|
||
Security
|
||
|
||
This option provides a way for hosts to send security,
|
||
compartmentation, handling restrictions, and TCC (closed user
|
||
group) parameters. The format for this option is as follows:
|
||
|
||
+--------+--------+---//---+---//---+---//---+---//---+
|
||
|10000010|00001011|SSS SSS|CCC CCC|HHH HHH| TCC |
|
||
+--------+--------+---//---+---//---+---//---+---//---+
|
||
Type=130 Length=11
|
||
|
||
Security (S field): 16 bits
|
||
|
||
Specifies one of 16 levels of security (eight of which are
|
||
reserved for future use).
|
||
|
||
00000000 00000000 - Unclassified
|
||
11110001 00110101 - Confidential
|
||
01111000 10011010 - EFTO
|
||
10111100 01001101 - MMMM
|
||
01011110 00100110 - PROG
|
||
10101111 00010011 - Restricted
|
||
11010111 10001000 - Secret
|
||
01101011 11000101 - Top Secret
|
||
00110101 11100010 - (Reserved for future use)
|
||
10011010 11110001 - (Reserved for future use)
|
||
01001101 01111000 - (Reserved for future use)
|
||
00100100 10111101 - (Reserved for future use)
|
||
00010011 01011110 - (Reserved for future use)
|
||
10001001 10101111 - (Reserved for future use)
|
||
11000100 11010110 - (Reserved for future use)
|
||
11100010 01101011 - (Reserved for future use)
|
||
|
||
|
||
|
||
|
||
|
||
[Page 17]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
Compartments (C field): 16 bits
|
||
|
||
An all zero value is used when the information transmitted is
|
||
not compartmented. Other values for the compartments field
|
||
may be obtained from the Defense Intelligence Agency.
|
||
|
||
Handling Restrictions (H field): 16 bits
|
||
|
||
The values for the control and release markings are
|
||
alphanumeric digraphs and are defined in the Defense
|
||
Intelligence Agency Manual DIAM 65-19, "Standard Security
|
||
Markings".
|
||
|
||
Transmission Control Code (TCC field): 24 bits
|
||
|
||
Provides a means to segregate traffic and define controlled
|
||
communities of interest among subscribers. The TCC values are
|
||
trigraphs, and are available from HQ DCA Code 530.
|
||
|
||
Must be copied on fragmentation. This option appears at most
|
||
once in a datagram.
|
||
|
||
Loose Source and Record Route
|
||
|
||
+--------+--------+--------+---------//--------+
|
||
|10000011| length | pointer| route data |
|
||
+--------+--------+--------+---------//--------+
|
||
Type=131
|
||
|
||
The loose source and record route (LSRR) option provides a means
|
||
for the source of an internet datagram to supply routing
|
||
information to be used by the gateways in forwarding the
|
||
datagram to the destination, and to record the route
|
||
information.
|
||
|
||
The option begins with the option type code. The second octet
|
||
is the option length which includes the option type code and the
|
||
length octet, the pointer octet, and length-3 octets of route
|
||
data. The third octet is the pointer into the route data
|
||
indicating the octet which begins the next source address to be
|
||
processed. The pointer is relative to this option, and the
|
||
smallest legal value for the pointer is 4.
|
||
|
||
A route data is composed of a series of internet addresses.
|
||
Each internet address is 32 bits or 4 octets. If the pointer is
|
||
greater than the length, the source route is empty (and the
|
||
recorded route full) and the routing is to be based on the
|
||
destination address field.
|
||
|
||
|
||
[Page 18]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
If the address in destination address field has been reached and
|
||
the pointer is not greater than the length, the next address in
|
||
the source route replaces the address in the destination address
|
||
field, and the recorded route address replaces the source
|
||
address just used, and pointer is increased by four.
|
||
|
||
The recorded route address is the internet module's own internet
|
||
address as known in the environment into which this datagram is
|
||
being forwarded.
|
||
|
||
This procedure of replacing the source route with the recorded
|
||
route (though it is in the reverse of the order it must be in to
|
||
be used as a source route) means the option (and the IP header
|
||
as a whole) remains a constant length as the datagram progresses
|
||
through the internet.
|
||
|
||
This option is a loose source route because the gateway or host
|
||
IP is allowed to use any route of any number of other
|
||
intermediate gateways to reach the next address in the route.
|
||
|
||
Must be copied on fragmentation. Appears at most once in a
|
||
datagram.
|
||
|
||
Strict Source and Record Route
|
||
|
||
+--------+--------+--------+---------//--------+
|
||
|10001001| length | pointer| route data |
|
||
+--------+--------+--------+---------//--------+
|
||
Type=137
|
||
|
||
The strict source and record route (SSRR) option provides a
|
||
means for the source of an internet datagram to supply routing
|
||
information to be used by the gateways in forwarding the
|
||
datagram to the destination, and to record the route
|
||
information.
|
||
|
||
The option begins with the option type code. The second octet
|
||
is the option length which includes the option type code and the
|
||
length octet, the pointer octet, and length-3 octets of route
|
||
data. The third octet is the pointer into the route data
|
||
indicating the octet which begins the next source address to be
|
||
processed. The pointer is relative to this option, and the
|
||
smallest legal value for the pointer is 4.
|
||
|
||
A route data is composed of a series of internet addresses.
|
||
Each internet address is 32 bits or 4 octets. If the pointer is
|
||
greater than the length, the source route is empty (and the
|
||
|
||
|
||
|
||
[Page 19]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
recorded route full) and the routing is to be based on the
|
||
destination address field.
|
||
|
||
If the address in destination address field has been reached and
|
||
the pointer is not greater than the length, the next address in
|
||
the source route replaces the address in the destination address
|
||
field, and the recorded route address replaces the source
|
||
address just used, and pointer is increased by four.
|
||
|
||
The recorded route address is the internet module's own internet
|
||
address as known in the environment into which this datagram is
|
||
being forwarded.
|
||
|
||
This procedure of replacing the source route with the recorded
|
||
route (though it is in the reverse of the order it must be in to
|
||
be used as a source route) means the option (and the IP header
|
||
as a whole) remains a constant length as the datagram progresses
|
||
through the internet.
|
||
|
||
This option is a strict source route because the gateway or host
|
||
IP must send the datagram directly to the next address in the
|
||
source route through only the directly connected network
|
||
indicated in the next address to reach the next gateway or host
|
||
specified in the route.
|
||
|
||
Must be copied on fragmentation. Appears at most once in a
|
||
datagram.
|
||
|
||
Record Route
|
||
|
||
+--------+--------+--------+---------//--------+
|
||
|00000111| length | pointer| route data |
|
||
+--------+--------+--------+---------//--------+
|
||
Type=7
|
||
|
||
The record route option provides a means to record the route of
|
||
an internet datagram.
|
||
|
||
The option begins with the option type code. The second octet
|
||
is the option length which includes the option type code and the
|
||
length octet, the pointer octet, and length-3 octets of route
|
||
data. The third octet is the pointer into the route data
|
||
indicating the octet which begins the next area to store a route
|
||
address. The pointer is relative to this option, and the
|
||
smallest legal value for the pointer is 4.
|
||
|
||
A recorded route is composed of a series of internet addresses.
|
||
Each internet address is 32 bits or 4 octets. If the pointer is
|
||
|
||
|
||
[Page 20]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
greater than the length, the recorded route data area is full.
|
||
The originating host must compose this option with a large
|
||
enough route data area to hold all the address expected. The
|
||
size of the option does not change due to adding addresses. The
|
||
intitial contents of the route data area must be zero.
|
||
|
||
When an internet module routes a datagram it checks to see if
|
||
the record route option is present. If it is, it inserts its
|
||
own internet address as known in the environment into which this
|
||
datagram is being forwarded into the recorded route begining at
|
||
the octet indicated by the pointer, and increments the pointer
|
||
by four.
|
||
|
||
If the route data area is already full (the pointer exceeds the
|
||
length) the datagram is forwarded without inserting the address
|
||
into the recorded route. If there is some room but not enough
|
||
room for a full address to be inserted, the original datagram is
|
||
considered to be in error and is discarded. In either case an
|
||
ICMP parameter problem message may be sent to the source
|
||
host [3].
|
||
|
||
Not copied on fragmentation, goes in first fragment only.
|
||
Appears at most once in a datagram.
|
||
|
||
Stream Identifier
|
||
|
||
+--------+--------+--------+--------+
|
||
|10001000|00000010| Stream ID |
|
||
+--------+--------+--------+--------+
|
||
Type=136 Length=4
|
||
|
||
This option provides a way for the 16-bit SATNET stream
|
||
identifier to be carried through networks that do not support
|
||
the stream concept.
|
||
|
||
Must be copied on fragmentation. Appears at most once in a
|
||
datagram.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 21]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
Internet Timestamp
|
||
|
||
+--------+--------+--------+--------+
|
||
|01000100| length | pointer|oflw|flg|
|
||
+--------+--------+--------+--------+
|
||
| internet address |
|
||
+--------+--------+--------+--------+
|
||
| timestamp |
|
||
+--------+--------+--------+--------+
|
||
| . |
|
||
.
|
||
.
|
||
Type = 68
|
||
|
||
The Option Length is the number of octets in the option counting
|
||
the type, length, pointer, and overflow/flag octets (maximum
|
||
length 40).
|
||
|
||
The Pointer is the number of octets from the beginning of this
|
||
option to the end of timestamps plus one (i.e., it points to the
|
||
octet beginning the space for next timestamp). The smallest
|
||
legal value is 5. The timestamp area is full when the pointer
|
||
is greater than the length.
|
||
|
||
The Overflow (oflw) [4 bits] is the number of IP modules that
|
||
cannot register timestamps due to lack of space.
|
||
|
||
The Flag (flg) [4 bits] values are
|
||
|
||
0 -- time stamps only, stored in consecutive 32-bit words,
|
||
|
||
1 -- each timestamp is preceded with internet address of the
|
||
registering entity,
|
||
|
||
3 -- the internet address fields are prespecified. An IP
|
||
module only registers its timestamp if it matches its own
|
||
address with the next specified internet address.
|
||
|
||
The Timestamp is a right-justified, 32-bit timestamp in
|
||
milliseconds since midnight UT. If the time is not available in
|
||
milliseconds or cannot be provided with respect to midnight UT
|
||
then any time may be inserted as a timestamp provided the high
|
||
order bit of the timestamp field is set to one to indicate the
|
||
use of a non-standard value.
|
||
|
||
The originating host must compose this option with a large
|
||
enough timestamp data area to hold all the timestamp information
|
||
expected. The size of the option does not change due to adding
|
||
|
||
|
||
[Page 22]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
timestamps. The intitial contents of the timestamp data area
|
||
must be zero or internet address/zero pairs.
|
||
|
||
If the timestamp data area is already full (the pointer exceeds
|
||
the length) the datagram is forwarded without inserting the
|
||
timestamp, but the overflow count is incremented by one.
|
||
|
||
If there is some room but not enough room for a full timestamp
|
||
to be inserted, or the overflow count itself overflows, the
|
||
original datagram is considered to be in error and is discarded.
|
||
In either case an ICMP parameter problem message may be sent to
|
||
the source host [3].
|
||
|
||
The timestamp option is not copied upon fragmentation. It is
|
||
carried in the first fragment. Appears at most once in a
|
||
datagram.
|
||
|
||
Padding: variable
|
||
|
||
The internet header padding is used to ensure that the internet
|
||
header ends on a 32 bit boundary. The padding is zero.
|
||
|
||
3.2. Discussion
|
||
|
||
The implementation of a protocol must be robust. Each implementation
|
||
must expect to interoperate with others created by different
|
||
individuals. While the goal of this specification is to be explicit
|
||
about the protocol there is the possibility of differing
|
||
interpretations. In general, an implementation must be conservative
|
||
in its sending behavior, and liberal in its receiving behavior. That
|
||
is, it must be careful to send well-formed datagrams, but must accept
|
||
any datagram that it can interpret (e.g., not object to technical
|
||
errors where the meaning is still clear).
|
||
|
||
The basic internet service is datagram oriented and provides for the
|
||
fragmentation of datagrams at gateways, with reassembly taking place
|
||
at the destination internet protocol module in the destination host.
|
||
Of course, fragmentation and reassembly of datagrams within a network
|
||
or by private agreement between the gateways of a network is also
|
||
allowed since this is transparent to the internet protocols and the
|
||
higher-level protocols. This transparent type of fragmentation and
|
||
reassembly is termed "network-dependent" (or intranet) fragmentation
|
||
and is not discussed further here.
|
||
|
||
Internet addresses distinguish sources and destinations to the host
|
||
level and provide a protocol field as well. It is assumed that each
|
||
protocol will provide for whatever multiplexing is necessary within a
|
||
host.
|
||
|
||
|
||
[Page 23]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
Addressing
|
||
|
||
To provide for flexibility in assigning address to networks and
|
||
allow for the large number of small to intermediate sized networks
|
||
the interpretation of the address field is coded to specify a small
|
||
number of networks with a large number of host, a moderate number of
|
||
networks with a moderate number of hosts, and a large number of
|
||
networks with a small number of hosts. In addition there is an
|
||
escape code for extended addressing mode.
|
||
|
||
Address Formats:
|
||
|
||
High Order Bits Format Class
|
||
--------------- ------------------------------- -----
|
||
0 7 bits of net, 24 bits of host a
|
||
10 14 bits of net, 16 bits of host b
|
||
110 21 bits of net, 8 bits of host c
|
||
111 escape to extended addressing mode
|
||
|
||
A value of zero in the network field means this network. This is
|
||
only used in certain ICMP messages. The extended addressing mode
|
||
is undefined. Both of these features are reserved for future use.
|
||
|
||
The actual values assigned for network addresses is given in
|
||
"Assigned Numbers" [9].
|
||
|
||
The local address, assigned by the local network, must allow for a
|
||
single physical host to act as several distinct internet hosts.
|
||
That is, there must be a mapping between internet host addresses and
|
||
network/host interfaces that allows several internet addresses to
|
||
correspond to one interface. It must also be allowed for a host to
|
||
have several physical interfaces and to treat the datagrams from
|
||
several of them as if they were all addressed to a single host.
|
||
|
||
Address mappings between internet addresses and addresses for
|
||
ARPANET, SATNET, PRNET, and other networks are described in "Address
|
||
Mappings" [5].
|
||
|
||
Fragmentation and Reassembly.
|
||
|
||
The internet identification field (ID) is used together with the
|
||
source and destination address, and the protocol fields, to identify
|
||
datagram fragments for reassembly.
|
||
|
||
The More Fragments flag bit (MF) is set if the datagram is not the
|
||
last fragment. The Fragment Offset field identifies the fragment
|
||
location, relative to the beginning of the original unfragmented
|
||
datagram. Fragments are counted in units of 8 octets. The
|
||
|
||
|
||
[Page 24]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
fragmentation strategy is designed so than an unfragmented datagram
|
||
has all zero fragmentation information (MF = 0, fragment offset =
|
||
0). If an internet datagram is fragmented, its data portion must be
|
||
broken on 8 octet boundaries.
|
||
|
||
This format allows 2**13 = 8192 fragments of 8 octets each for a
|
||
total of 65,536 octets. Note that this is consistent with the the
|
||
datagram total length field (of course, the header is counted in the
|
||
total length and not in the fragments).
|
||
|
||
When fragmentation occurs, some options are copied, but others
|
||
remain with the first fragment only.
|
||
|
||
Every internet module must be able to forward a datagram of 68
|
||
octets without further fragmentation. This is because an internet
|
||
header may be up to 60 octets, and the minimum fragment is 8 octets.
|
||
|
||
Every internet destination must be able to receive a datagram of 576
|
||
octets either in one piece or in fragments to be reassembled.
|
||
|
||
The fields which may be affected by fragmentation include:
|
||
|
||
(1) options field
|
||
(2) more fragments flag
|
||
(3) fragment offset
|
||
(4) internet header length field
|
||
(5) total length field
|
||
(6) header checksum
|
||
|
||
If the Don't Fragment flag (DF) bit is set, then internet
|
||
fragmentation of this datagram is NOT permitted, although it may be
|
||
discarded. This can be used to prohibit fragmentation in cases
|
||
where the receiving host does not have sufficient resources to
|
||
reassemble internet fragments.
|
||
|
||
One example of use of the Don't Fragment feature is to down line
|
||
load a small host. A small host could have a boot strap program
|
||
that accepts a datagram stores it in memory and then executes it.
|
||
|
||
The fragmentation and reassembly procedures are most easily
|
||
described by examples. The following procedures are example
|
||
implementations.
|
||
|
||
General notation in the following pseudo programs: "=<" means "less
|
||
than or equal", "#" means "not equal", "=" means "equal", "<-" means
|
||
"is set to". Also, "x to y" includes x and excludes y; for example,
|
||
"4 to 7" would include 4, 5, and 6 (but not 7).
|
||
|
||
|
||
|
||
[Page 25]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
An Example Fragmentation Procedure
|
||
|
||
The maximum sized datagram that can be transmitted through the
|
||
next network is called the maximum transmission unit (MTU).
|
||
|
||
If the total length is less than or equal the maximum transmission
|
||
unit then submit this datagram to the next step in datagram
|
||
processing; otherwise cut the datagram into two fragments, the
|
||
first fragment being the maximum size, and the second fragment
|
||
being the rest of the datagram. The first fragment is submitted
|
||
to the next step in datagram processing, while the second fragment
|
||
is submitted to this procedure in case it is still too large.
|
||
|
||
Notation:
|
||
|
||
FO - Fragment Offset
|
||
IHL - Internet Header Length
|
||
DF - Don't Fragment flag
|
||
MF - More Fragments flag
|
||
TL - Total Length
|
||
OFO - Old Fragment Offset
|
||
OIHL - Old Internet Header Length
|
||
OMF - Old More Fragments flag
|
||
OTL - Old Total Length
|
||
NFB - Number of Fragment Blocks
|
||
MTU - Maximum Transmission Unit
|
||
|
||
Procedure:
|
||
|
||
IF TL =< MTU THEN Submit this datagram to the next step
|
||
in datagram processing ELSE IF DF = 1 THEN discard the
|
||
datagram ELSE
|
||
To produce the first fragment:
|
||
(1) Copy the original internet header;
|
||
(2) OIHL <- IHL; OTL <- TL; OFO <- FO; OMF <- MF;
|
||
(3) NFB <- (MTU-IHL*4)/8;
|
||
(4) Attach the first NFB*8 data octets;
|
||
(5) Correct the header:
|
||
MF <- 1; TL <- (IHL*4)+(NFB*8);
|
||
Recompute Checksum;
|
||
(6) Submit this fragment to the next step in
|
||
datagram processing;
|
||
To produce the second fragment:
|
||
(7) Selectively copy the internet header (some options
|
||
are not copied, see option definitions);
|
||
(8) Append the remaining data;
|
||
(9) Correct the header:
|
||
IHL <- (((OIHL*4)-(length of options not copied))+3)/4;
|
||
|
||
|
||
[Page 26]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
TL <- OTL - NFB*8 - (OIHL-IHL)*4);
|
||
FO <- OFO + NFB; MF <- OMF; Recompute Checksum;
|
||
(10) Submit this fragment to the fragmentation test; DONE.
|
||
|
||
In the above procedure each fragment (except the last) was made
|
||
the maximum allowable size. An alternative might produce less
|
||
than the maximum size datagrams. For example, one could implement
|
||
a fragmentation procedure that repeatly divided large datagrams in
|
||
half until the resulting fragments were less than the maximum
|
||
transmission unit size.
|
||
|
||
An Example Reassembly Procedure
|
||
|
||
For each datagram the buffer identifier is computed as the
|
||
concatenation of the source, destination, protocol, and
|
||
identification fields. If this is a whole datagram (that is both
|
||
the fragment offset and the more fragments fields are zero), then
|
||
any reassembly resources associated with this buffer identifier
|
||
are released and the datagram is forwarded to the next step in
|
||
datagram processing.
|
||
|
||
If no other fragment with this buffer identifier is on hand then
|
||
reassembly resources are allocated. The reassembly resources
|
||
consist of a data buffer, a header buffer, a fragment block bit
|
||
table, a total data length field, and a timer. The data from the
|
||
fragment is placed in the data buffer according to its fragment
|
||
offset and length, and bits are set in the fragment block bit
|
||
table corresponding to the fragment blocks received.
|
||
|
||
If this is the first fragment (that is the fragment offset is
|
||
zero) this header is placed in the header buffer. If this is the
|
||
last fragment ( that is the more fragments field is zero) the
|
||
total data length is computed. If this fragment completes the
|
||
datagram (tested by checking the bits set in the fragment block
|
||
table), then the datagram is sent to the next step in datagram
|
||
processing; otherwise the timer is set to the maximum of the
|
||
current timer value and the value of the time to live field from
|
||
this fragment; and the reassembly routine gives up control.
|
||
|
||
If the timer runs out, the all reassembly resources for this
|
||
buffer identifier are released. The initial setting of the timer
|
||
is a lower bound on the reassembly waiting time. This is because
|
||
the waiting time will be increased if the Time to Live in the
|
||
arriving fragment is greater than the current timer value but will
|
||
not be decreased if it is less. The maximum this timer value
|
||
could reach is the maximum time to live (approximately 4.25
|
||
minutes). The current recommendation for the initial timer
|
||
setting is 15 seconds. This may be changed as experience with
|
||
|
||
|
||
[Page 27]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
this protocol accumulates. Note that the choice of this parameter
|
||
value is related to the buffer capacity available and the data
|
||
rate of the transmission medium; that is, data rate times timer
|
||
value equals buffer size (e.g., 10Kb/s X 15s = 150Kb).
|
||
|
||
Notation:
|
||
|
||
FO - Fragment Offset
|
||
IHL - Internet Header Length
|
||
MF - More Fragments flag
|
||
TTL - Time To Live
|
||
NFB - Number of Fragment Blocks
|
||
TL - Total Length
|
||
TDL - Total Data Length
|
||
BUFID - Buffer Identifier
|
||
RCVBT - Fragment Received Bit Table
|
||
TLB - Timer Lower Bound
|
||
|
||
Procedure:
|
||
|
||
(1) BUFID <- source|destination|protocol|identification;
|
||
(2) IF FO = 0 AND MF = 0
|
||
(3) THEN IF buffer with BUFID is allocated
|
||
(4) THEN flush all reassembly for this BUFID;
|
||
(5) Submit datagram to next step; DONE.
|
||
(6) ELSE IF no buffer with BUFID is allocated
|
||
(7) THEN allocate reassembly resources
|
||
with BUFID;
|
||
TIMER <- TLB; TDL <- 0;
|
||
(8) put data from fragment into data buffer with
|
||
BUFID from octet FO*8 to
|
||
octet (TL-(IHL*4))+FO*8;
|
||
(9) set RCVBT bits from FO
|
||
to FO+((TL-(IHL*4)+7)/8);
|
||
(10) IF MF = 0 THEN TDL <- TL-(IHL*4)+(FO*8)
|
||
(11) IF FO = 0 THEN put header in header buffer
|
||
(12) IF TDL # 0
|
||
(13) AND all RCVBT bits from 0
|
||
to (TDL+7)/8 are set
|
||
(14) THEN TL <- TDL+(IHL*4)
|
||
(15) Submit datagram to next step;
|
||
(16) free all reassembly resources
|
||
for this BUFID; DONE.
|
||
(17) TIMER <- MAX(TIMER,TTL);
|
||
(18) give up until next fragment or timer expires;
|
||
(19) timer expires: flush all reassembly with this BUFID; DONE.
|
||
|
||
In the case that two or more fragments contain the same data
|
||
|
||
|
||
[Page 28]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
either identically or through a partial overlap, this procedure
|
||
will use the more recently arrived copy in the data buffer and
|
||
datagram delivered.
|
||
|
||
Identification
|
||
|
||
The choice of the Identifier for a datagram is based on the need to
|
||
provide a way to uniquely identify the fragments of a particular
|
||
datagram. The protocol module assembling fragments judges fragments
|
||
to belong to the same datagram if they have the same source,
|
||
destination, protocol, and Identifier. Thus, the sender must choose
|
||
the Identifier to be unique for this source, destination pair and
|
||
protocol for the time the datagram (or any fragment of it) could be
|
||
alive in the internet.
|
||
|
||
It seems then that a sending protocol module needs to keep a table
|
||
of Identifiers, one entry for each destination it has communicated
|
||
with in the last maximum packet lifetime for the internet.
|
||
|
||
However, since the Identifier field allows 65,536 different values,
|
||
some host may be able to simply use unique identifiers independent
|
||
of destination.
|
||
|
||
It is appropriate for some higher level protocols to choose the
|
||
identifier. For example, TCP protocol modules may retransmit an
|
||
identical TCP segment, and the probability for correct reception
|
||
would be enhanced if the retransmission carried the same identifier
|
||
as the original transmission since fragments of either datagram
|
||
could be used to construct a correct TCP segment.
|
||
|
||
Type of Service
|
||
|
||
The type of service (TOS) is for internet service quality selection.
|
||
The type of service is specified along the abstract parameters
|
||
precedence, delay, throughput, and reliability. These abstract
|
||
parameters are to be mapped into the actual service parameters of
|
||
the particular networks the datagram traverses.
|
||
|
||
Precedence. An independent measure of the importance of this
|
||
datagram.
|
||
|
||
Delay. Prompt delivery is important for datagrams with this
|
||
indication.
|
||
|
||
Throughput. High data rate is important for datagrams with this
|
||
indication.
|
||
|
||
|
||
|
||
|
||
[Page 29]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
Reliability. A higher level of effort to ensure delivery is
|
||
important for datagrams with this indication.
|
||
|
||
For example, the ARPANET has a priority bit, and a choice between
|
||
"standard" messages (type 0) and "uncontrolled" messages (type 3),
|
||
(the choice between single packet and multipacket messages can also
|
||
be considered a service parameter). The uncontrolled messages tend
|
||
to be less reliably delivered and suffer less delay. Suppose an
|
||
internet datagram is to be sent through the ARPANET. Let the
|
||
internet type of service be given as:
|
||
|
||
Precedence: 5
|
||
Delay: 0
|
||
Throughput: 1
|
||
Reliability: 1
|
||
|
||
In this example, the mapping of these parameters to those available
|
||
for the ARPANET would be to set the ARPANET priority bit on since
|
||
the Internet precedence is in the upper half of its range, to select
|
||
standard messages since the throughput and reliability requirements
|
||
are indicated and delay is not. More details are given on service
|
||
mappings in "Service Mappings" [8].
|
||
|
||
Time to Live
|
||
|
||
The time to live is set by the sender to the maximum time the
|
||
datagram is allowed to be in the internet system. If the datagram
|
||
is in the internet system longer than the time to live, then the
|
||
datagram must be destroyed.
|
||
|
||
This field must be decreased at each point that the internet header
|
||
is processed to reflect the time spent processing the datagram.
|
||
Even if no local information is available on the time actually
|
||
spent, the field must be decremented by 1. The time is measured in
|
||
units of seconds (i.e. the value 1 means one second). Thus, the
|
||
maximum time to live is 255 seconds or 4.25 minutes. Since every
|
||
module that processes a datagram must decrease the TTL by at least
|
||
one even if it process the datagram in less than a second, the TTL
|
||
must be thought of only as an upper bound on the time a datagram may
|
||
exist. The intention is to cause undeliverable datagrams to be
|
||
discarded, and to bound the maximum datagram lifetime.
|
||
|
||
Some higher level reliable connection protocols are based on
|
||
assumptions that old duplicate datagrams will not arrive after a
|
||
certain time elapses. The TTL is a way for such protocols to have
|
||
an assurance that their assumption is met.
|
||
|
||
|
||
|
||
|
||
[Page 30]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
Options
|
||
|
||
The options are optional in each datagram, but required in
|
||
implementations. That is, the presence or absence of an option is
|
||
the choice of the sender, but each internet module must be able to
|
||
parse every option. There can be several options present in the
|
||
option field.
|
||
|
||
The options might not end on a 32-bit boundary. The internet header
|
||
must be filled out with octets of zeros. The first of these would
|
||
be interpreted as the end-of-options option, and the remainder as
|
||
internet header padding.
|
||
|
||
Every internet module must be able to act on every option. The
|
||
Security Option is required if classified, restricted, or
|
||
compartmented traffic is to be passed.
|
||
|
||
Checksum
|
||
|
||
The internet header checksum is recomputed if the internet header is
|
||
changed. For example, a reduction of the time to live, additions or
|
||
changes to internet options, or due to fragmentation. This checksum
|
||
at the internet level is intended to protect the internet header
|
||
fields from transmission errors.
|
||
|
||
There are some applications where a few data bit errors are
|
||
acceptable while retransmission delays are not. If the internet
|
||
protocol enforced data correctness such applications could not be
|
||
supported.
|
||
|
||
Errors
|
||
|
||
Internet protocol errors may be reported via the ICMP messages [3].
|
||
|
||
3.3. Interfaces
|
||
|
||
The functional description of user interfaces to the IP is, at best,
|
||
fictional, since every operating system will have different
|
||
facilities. Consequently, we must warn readers that different IP
|
||
implementations may have different user interfaces. However, all IPs
|
||
must provide a certain minimum set of services to guarantee that all
|
||
IP implementations can support the same protocol hierarchy. This
|
||
section specifies the functional interfaces required of all IP
|
||
implementations.
|
||
|
||
Internet protocol interfaces on one side to the local network and on
|
||
the other side to either a higher level protocol or an application
|
||
program. In the following, the higher level protocol or application
|
||
|
||
|
||
[Page 31]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
program (or even a gateway program) will be called the "user" since it
|
||
is using the internet module. Since internet protocol is a datagram
|
||
protocol, there is minimal memory or state maintained between datagram
|
||
transmissions, and each call on the internet protocol module by the
|
||
user supplies all information necessary for the IP to perform the
|
||
service requested.
|
||
|
||
An Example Upper Level Interface
|
||
|
||
The following two example calls satisfy the requirements for the user
|
||
to internet protocol module communication ("=>" means returns):
|
||
|
||
SEND (src, dst, prot, TOS, TTL, BufPTR, len, Id, DF, opt => result)
|
||
|
||
where:
|
||
|
||
src = source address
|
||
dst = destination address
|
||
prot = protocol
|
||
TOS = type of service
|
||
TTL = time to live
|
||
BufPTR = buffer pointer
|
||
len = length of buffer
|
||
Id = Identifier
|
||
DF = Don't Fragment
|
||
opt = option data
|
||
result = response
|
||
OK = datagram sent ok
|
||
Error = error in arguments or local network error
|
||
|
||
Note that the precedence is included in the TOS and the
|
||
security/compartment is passed as an option.
|
||
|
||
RECV (BufPTR, prot, => result, src, dst, TOS, len, opt)
|
||
|
||
where:
|
||
|
||
BufPTR = buffer pointer
|
||
prot = protocol
|
||
result = response
|
||
OK = datagram received ok
|
||
Error = error in arguments
|
||
len = length of buffer
|
||
src = source address
|
||
dst = destination address
|
||
TOS = type of service
|
||
opt = option data
|
||
|
||
|
||
|
||
[Page 32]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Specification
|
||
|
||
|
||
|
||
When the user sends a datagram, it executes the SEND call supplying
|
||
all the arguments. The internet protocol module, on receiving this
|
||
call, checks the arguments and prepares and sends the message. If the
|
||
arguments are good and the datagram is accepted by the local network,
|
||
the call returns successfully. If either the arguments are bad, or
|
||
the datagram is not accepted by the local network, the call returns
|
||
unsuccessfully. On unsuccessful returns, a reasonable report must be
|
||
made as to the cause of the problem, but the details of such reports
|
||
are up to individual implementations.
|
||
|
||
When a datagram arrives at the internet protocol module from the local
|
||
network, either there is a pending RECV call from the user addressed
|
||
or there is not. In the first case, the pending call is satisfied by
|
||
passing the information from the datagram to the user. In the second
|
||
case, the user addressed is notified of a pending datagram. If the
|
||
user addressed does not exist, an ICMP error message is returned to
|
||
the sender, and the data is discarded.
|
||
|
||
The notification of a user may be via a pseudo interrupt or similar
|
||
mechanism, as appropriate in the particular operating system
|
||
environment of the implementation.
|
||
|
||
A user's RECV call may then either be immediately satisfied by a
|
||
pending datagram, or the call may be pending until a datagram arrives.
|
||
|
||
The source address is included in the send call in case the sending
|
||
host has several addresses (multiple physical connections or logical
|
||
addresses). The internet module must check to see that the source
|
||
address is one of the legal address for this host.
|
||
|
||
An implementation may also allow or require a call to the internet
|
||
module to indicate interest in or reserve exclusive use of a class of
|
||
datagrams (e.g., all those with a certain value in the protocol
|
||
field).
|
||
|
||
This section functionally characterizes a USER/IP interface. The
|
||
notation used is similar to most procedure of function calls in high
|
||
level languages, but this usage is not meant to rule out trap type
|
||
service calls (e.g., SVCs, UUOs, EMTs), or any other form of
|
||
interprocess communication.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 33]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
APPENDIX A: Examples & Scenarios
|
||
|
||
Example 1:
|
||
|
||
This is an example of the minimal data carrying internet datagram:
|
||
|
||
|
||
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
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|Ver= 4 |IHL= 5 |Type of Service| Total Length = 21 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Identification = 111 |Flg=0| Fragment Offset = 0 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Time = 123 | Protocol = 1 | header checksum |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| source address |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| destination address |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| data |
|
||
+-+-+-+-+-+-+-+-+
|
||
|
||
Example Internet Datagram
|
||
|
||
Figure 5.
|
||
|
||
Note that each tick mark represents one bit position.
|
||
|
||
This is a internet datagram in version 4 of internet protocol; the
|
||
internet header consists of five 32 bit words, and the total length of
|
||
the datagram is 21 octets. This datagram is a complete datagram (not
|
||
a fragment).
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 34]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
Example 2:
|
||
|
||
In this example, we show first a moderate size internet datagram (452
|
||
data octets), then two internet fragments that might result from the
|
||
fragmentation of this datagram if the maximum sized transmission
|
||
allowed were 280 octets.
|
||
|
||
|
||
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
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|Ver= 4 |IHL= 5 |Type of Service| Total Length = 472 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Identification = 111 |Flg=0| Fragment Offset = 0 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Time = 123 | Protocol = 6 | header checksum |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| source address |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| destination address |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| data |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| data |
|
||
\ \
|
||
\ \
|
||
| data |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| data |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
Example Internet Datagram
|
||
|
||
Figure 6.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 35]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
Now the first fragment that results from splitting the datagram after
|
||
256 data octets.
|
||
|
||
|
||
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
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|Ver= 4 |IHL= 5 |Type of Service| Total Length = 276 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Identification = 111 |Flg=1| Fragment Offset = 0 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Time = 119 | Protocol = 6 | Header Checksum |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| source address |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| destination address |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| data |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| data |
|
||
\ \
|
||
\ \
|
||
| data |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| data |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
Example Internet Fragment
|
||
|
||
Figure 7.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 36]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
And the second fragment.
|
||
|
||
|
||
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
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|Ver= 4 |IHL= 5 |Type of Service| Total Length = 216 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Identification = 111 |Flg=0| Fragment Offset = 32 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Time = 119 | Protocol = 6 | Header Checksum |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| source address |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| destination address |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| data |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| data |
|
||
\ \
|
||
\ \
|
||
| data |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| data |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
Example Internet Fragment
|
||
|
||
Figure 8.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 37]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
Example 3:
|
||
|
||
Here, we show an example of a datagram containing options:
|
||
|
||
|
||
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
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|Ver= 4 |IHL= 8 |Type of Service| Total Length = 576 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Identification = 111 |Flg=0| Fragment Offset = 0 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Time = 123 | Protocol = 6 | Header Checksum |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| source address |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| destination address |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Opt. Code = x | Opt. Len.= 3 | option value | Opt. Code = x |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Opt. Len. = 4 | option value | Opt. Code = 1 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Opt. Code = y | Opt. Len. = 3 | option value | Opt. Code = 0 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| data |
|
||
\ \
|
||
\ \
|
||
| data |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| data |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
Example Internet Datagram
|
||
|
||
Figure 9.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 38]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
APPENDIX B: Data Transmission Order
|
||
|
||
The order of transmission of the header and data described in this
|
||
document is resolved to the octet level. Whenever a diagram shows a
|
||
group of octets, the order of transmission of those octets is the normal
|
||
order in which they are read in English. For example, in the following
|
||
diagram the octets are transmitted in the order they are numbered.
|
||
|
||
|
||
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
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| 1 | 2 | 3 | 4 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| 5 | 6 | 7 | 8 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| 9 | 10 | 11 | 12 |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
Transmission Order of Bytes
|
||
|
||
Figure 10.
|
||
|
||
Whenever an octet represents a numeric quantity the left most bit in the
|
||
diagram is the high order or most significant bit. That is, the bit
|
||
labeled 0 is the most significant bit. For example, the following
|
||
diagram represents the value 170 (decimal).
|
||
|
||
|
||
0 1 2 3 4 5 6 7
|
||
+-+-+-+-+-+-+-+-+
|
||
|1 0 1 0 1 0 1 0|
|
||
+-+-+-+-+-+-+-+-+
|
||
|
||
Significance of Bits
|
||
|
||
Figure 11.
|
||
|
||
Similarly, whenever a multi-octet field represents a numeric quantity
|
||
the left most bit of the whole field is the most significant bit. When
|
||
a multi-octet quantity is transmitted the most significant octet is
|
||
transmitted first.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 39]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 40]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
GLOSSARY
|
||
|
||
|
||
|
||
1822
|
||
BBN Report 1822, "The Specification of the Interconnection of
|
||
a Host and an IMP". The specification of interface between a
|
||
host and the ARPANET.
|
||
|
||
ARPANET leader
|
||
The control information on an ARPANET message at the host-IMP
|
||
interface.
|
||
|
||
ARPANET message
|
||
The unit of transmission between a host and an IMP in the
|
||
ARPANET. The maximum size is about 1012 octets (8096 bits).
|
||
|
||
ARPANET packet
|
||
A unit of transmission used internally in the ARPANET between
|
||
IMPs. The maximum size is about 126 octets (1008 bits).
|
||
|
||
Destination
|
||
The destination address, an internet header field.
|
||
|
||
DF
|
||
The Don't Fragment bit carried in the flags field.
|
||
|
||
Flags
|
||
An internet header field carrying various control flags.
|
||
|
||
Fragment Offset
|
||
This internet header field indicates where in the internet
|
||
datagram a fragment belongs.
|
||
|
||
GGP
|
||
Gateway to Gateway Protocol, the protocol used primarily
|
||
between gateways to control routing and other gateway
|
||
functions.
|
||
|
||
header
|
||
Control information at the beginning of a message, segment,
|
||
datagram, packet or block of data.
|
||
|
||
ICMP
|
||
Internet Control Message Protocol, implemented in the internet
|
||
module, the ICMP is used from gateways to hosts and between
|
||
hosts to report errors and make routing suggestions.
|
||
|
||
|
||
|
||
|
||
[Page 41]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Glossary
|
||
|
||
|
||
|
||
Identification
|
||
An internet header field carrying the identifying value
|
||
assigned by the sender to aid in assembling the fragments of a
|
||
datagram.
|
||
|
||
IHL
|
||
The internet header field Internet Header Length is the length
|
||
of the internet header measured in 32 bit words.
|
||
|
||
IMP
|
||
The Interface Message Processor, the packet switch of the
|
||
ARPANET.
|
||
|
||
Internet Address
|
||
A four octet (32 bit) source or destination address consisting
|
||
of a Network field and a Local Address field.
|
||
|
||
internet datagram
|
||
The unit of data exchanged between a pair of internet modules
|
||
(includes the internet header).
|
||
|
||
internet fragment
|
||
A portion of the data of an internet datagram with an internet
|
||
header.
|
||
|
||
Local Address
|
||
The address of a host within a network. The actual mapping of
|
||
an internet local address on to the host addresses in a
|
||
network is quite general, allowing for many to one mappings.
|
||
|
||
MF
|
||
The More-Fragments Flag carried in the internet header flags
|
||
field.
|
||
|
||
module
|
||
An implementation, usually in software, of a protocol or other
|
||
procedure.
|
||
|
||
more-fragments flag
|
||
A flag indicating whether or not this internet datagram
|
||
contains the end of an internet datagram, carried in the
|
||
internet header Flags field.
|
||
|
||
NFB
|
||
The Number of Fragment Blocks in a the data portion of an
|
||
internet fragment. That is, the length of a portion of data
|
||
measured in 8 octet units.
|
||
|
||
|
||
|
||
[Page 42]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Glossary
|
||
|
||
|
||
|
||
octet
|
||
An eight bit byte.
|
||
|
||
Options
|
||
The internet header Options field may contain several options,
|
||
and each option may be several octets in length.
|
||
|
||
Padding
|
||
The internet header Padding field is used to ensure that the
|
||
data begins on 32 bit word boundary. The padding is zero.
|
||
|
||
Protocol
|
||
In this document, the next higher level protocol identifier,
|
||
an internet header field.
|
||
|
||
Rest
|
||
The local address portion of an Internet Address.
|
||
|
||
Source
|
||
The source address, an internet header field.
|
||
|
||
TCP
|
||
Transmission Control Protocol: A host-to-host protocol for
|
||
reliable communication in internet environments.
|
||
|
||
TCP Segment
|
||
The unit of data exchanged between TCP modules (including the
|
||
TCP header).
|
||
|
||
TFTP
|
||
Trivial File Transfer Protocol: A simple file transfer
|
||
protocol built on UDP.
|
||
|
||
Time to Live
|
||
An internet header field which indicates the upper bound on
|
||
how long this internet datagram may exist.
|
||
|
||
TOS
|
||
Type of Service
|
||
|
||
Total Length
|
||
The internet header field Total Length is the length of the
|
||
datagram in octets including internet header and data.
|
||
|
||
TTL
|
||
Time to Live
|
||
|
||
|
||
|
||
|
||
[Page 43]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
Glossary
|
||
|
||
|
||
|
||
Type of Service
|
||
An internet header field which indicates the type (or quality)
|
||
of service for this internet datagram.
|
||
|
||
UDP
|
||
User Datagram Protocol: A user level protocol for transaction
|
||
oriented applications.
|
||
|
||
User
|
||
The user of the internet protocol. This may be a higher level
|
||
protocol module, an application program, or a gateway program.
|
||
|
||
Version
|
||
The Version field indicates the format of the internet header.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 44]
|
||
|
||
|
||
September 1981
|
||
Internet Protocol
|
||
|
||
|
||
|
||
REFERENCES
|
||
|
||
|
||
|
||
[1] Cerf, V., "The Catenet Model for Internetworking," Information
|
||
Processing Techniques Office, Defense Advanced Research Projects
|
||
Agency, IEN 48, July 1978.
|
||
|
||
[2] Bolt Beranek and Newman, "Specification for the Interconnection of
|
||
a Host and an IMP," BBN Technical Report 1822, Revised May 1978.
|
||
|
||
[3] Postel, J., "Internet Control Message Protocol - DARPA Internet
|
||
Program Protocol Specification," RFC 792, USC/Information Sciences
|
||
Institute, September 1981.
|
||
|
||
[4] Shoch, J., "Inter-Network Naming, Addressing, and Routing,"
|
||
COMPCON, IEEE Computer Society, Fall 1978.
|
||
|
||
[5] Postel, J., "Address Mappings," RFC 796, USC/Information Sciences
|
||
Institute, September 1981.
|
||
|
||
[6] Shoch, J., "Packet Fragmentation in Inter-Network Protocols,"
|
||
Computer Networks, v. 3, n. 1, February 1979.
|
||
|
||
[7] Strazisar, V., "How to Build a Gateway", IEN 109, Bolt Beranek and
|
||
Newman, August 1979.
|
||
|
||
[8] Postel, J., "Service Mappings," RFC 795, USC/Information Sciences
|
||
Institute, September 1981.
|
||
|
||
[9] Postel, J., "Assigned Numbers," RFC 790, USC/Information Sciences
|
||
Institute, September 1981.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[Page 45]
|
||
|