IEN 186 1 June 1981
PROPOSED DCEC IP SPECIFICATION
prepared by
Mary M. Bernstein
System Development Corporation
2500 Colorado Avenue
Santa Monica, CA 90406
(213) 820-4111
Abstract
This document specifies the Internet Protocol (IP) which supports
the interconnection of communication subnetworks. The document
includes an introducion to IP with a model of operation, a defin-
ition of services provided to users, and a description architec-
tural and environmental requirements. The protocol service
interfaces and mechanisms are specified using an abstract state
machine model.
System Development Corporation
1 June 1981 IEN 186
FOREWORD
This document has been submitted to the DCEC for consideration as
a standard specification of the Internet Protocol. The document
incorporates the organization and specification techniques
presented in the DCEC Protocol Specification Guidelines. This is
a preliminary version; a revised version is to be released in
December 1981. Any comments regarding completeness and con-
sistency or suggestions for improvement of this document are wel-
comed.
Mary M. Bernstein
System Development Corporation
2500 Colorado Avenue
Santa Monica, CA 90406
(213) 820-4111
ARPANET: brnstein@dti
CONTENTS
1. OVERVIEW................................................. 1
1.1 Scenario............................................ 4
2. DESCRIPTION OF SERVICES PROVIDED TO UPPER LAYERS......... 6
2.1 Datagram Service.................................... 6
2.2 Virtual Network Services............................ 6
2.3 Error Reporting Service............................. 7
3. UPPER LAYER SERVICE/INTERFACE SPECIFICATION.............. 8
3.1 Interaction Primitives.............................. 8
3.1.1 Service Request Primitives 8
3.1.2 Service Response Primitives 9
3.2 Abstract Machine Definition of Upper Level Services
and Interaction Discipline.......................... 10
3.2.1 Machine Identifier 10
3.2.2 State Diagram 11
3.2.3 State Vector 11
3.2.4 State Machine Data Structures 11
3.2.5 Event List 12
3.2.6 Events and Actions 12
4. DESCRIPTION OF LOWER LAYER SERVICE REQUIREMENTS.......... 14
4.1 Data Transfer....................................... 14
4.2 Error Reporting..................................... 14
5. LOWER LAYER SERVICE/INTERFACE SPECIFICATION.............. 15
5.1 Interaction Primitives.............................. 15
5.1.1 Service Request Primitives 15
5.1.2 Service Response Primitives 16
5.2 Abstract Machine Definition of Lower Level Services
and Interaction Discipline.......................... 16
5.2.1 Machine Identifier 16
5.2.2 State Diagram 17
5.2.3 State Vector 17
5.2.4 State Machine Data Structures 17
5.2.5 Event List 17
5.2.6 Events and Actions 18
6. MECHANISM SPECIFICATION.................................. 19
6.1 Overview of IP Mechanisms........................... 19
6.1.1 Routing Mechanism 19
6.1.2 Fragmentation and Reassembly 21
6.1.3 Checksum 22
6.1.4 Time To Live 23
6.1.5 Type of Service 23
6.1.6 Data Options 23
6.1.7 Error Report Datagrams 24
6.2 Internet Protocol Header Format..................... 26
6.2.1 Version 26
6.2.2 Internet Header Length 26
6.2.3 Type of Service 27
6.2.4 Total Length 27
6.2.5 Identification 27
6.2.6 Flags 28
6.2.7 Fragment Offset 28
6.2.8 Time to Live 28
6.2.9 Protocol 28
6.2.10 Header Checksum 29
6.2.11 Source Address 29
6.2.12 Destination Address 29
6.2.13 Padding 29
6.2.14 Options 29
6.2.15 Specific Option Definitions 31
6.2.16 Error Report Datagrams 33
6.3 Extended State Machine Representation............... 35
6.3.1 State Machine Identification 35
6.3.2 State Machine Diagram 35
6.3.3 State Vector 36
6.3.4 State Machine Data Structures 37
6.3.5 Event List 39
6.3.6 State Machine Events and Actions 39
7. EXECUTION ENVIRONMENT REQUIREMENTS....................... 72
7.1 Inter-process communication......................... 72
7.2 Timing.............................................. 72
8. BIBLIOGRAPHY............................................. 73
9. GLOSSARY................................................. 74
System Development Corporation
1 June 1981 -1- IEN 186
1. OVERVIEW
This document specifies the Internet Protocol (IP) which supports
the interconnection of communication subnetworks. The document
introduces the Internet Protocol's role and purpose, defines the
services provided to users, and specifies the mechanisms needed
to support those services. This document also defines the ser-
vices required of the lower protocol layer, describes the upper
and lower interfaces, and outlines the operating system primi-
tives needed for implementation. In addition, a glossary of
terms and a set of appendices discussing certain aspects of IP
are included. The reader is assumed to be familiar with the DCEC
Architecture Report which presents a protocol architecture model
for DoD communication services[1]. This document incorporates
the organization and specification techniques presented in the
DCEC Protocol Specification Guidelines[2].
The Internet Protocol is designed to interconnect packet-switched
communication subnetworks to form an internetwork. IP transmits
blocks of data, called internet datagrams, from sources to desti-
nations throughout the internet. Sources and destinations are
hosts located on either the same subnetwork or connected subnet-
works. IP is purposely limited in scope to provide the basic
functions necessary to deliver a block of data. Each internet
datagram is an independent entity unrelated to any other internet
datagram. IP does not create connections or logical circuits.
IP has no mechanisms to promote data reliability, flow control,
sequencing, or other services commonly found in host-to-host pro-
tocols.
+------+ +-----+ +------+ +-----+
|Telnet| | FTP | | EFTP | ... | |
+------+ +-----+ +------+ +-----+
| | | |
+-----+ +-----+ +-----+
| TCP | | UDP | ... | |
+-----+ +-----+ +-----+
| | |
+--------------------------------+
| HOST INTERNET PROTOCOL |
+--------------------------------+
|
+------------------------+
| Subnetwork Protocol |
+------------------------+
1. Example Host Protocol Hierarchy
This document specifies a host IP. In the DoD architectural
model, a host IP resides between transport layer and the lower
System Development Corporation
1 June 1981 -2- IEN 186
network sublayer in each internet host. In each gateway, a site
interconnecting two or more subnets, an IP resides above two or
more subnetwork entities. In a gateway, IP is closely coupled to
the Gateway to Gateway Protocol (GGP) to form a gateway IP. A
gateway IP supports many of the same functions as a host IP, but
provides additional services such as maintenance of current
internet topology data. Throughout the remainder of the docu-
ment, a host IP is simply referred to as IP.
GATEWAY INTERNET PROTOCOL
+-----------------------------------+
| Gateway-Gateway Protocol |
+- - - - - - - - - - - - - - - - - -+
| Internet Protocol |
+-----------------------------------+
| | |
+---------+ +---------+ +---------+
|subnet 1 | |subnet 2 | ... |subnet i |
| protocol| | protocol| | protocol|
+---------+ +---------+ +---------+
| | |
ARPANET local net public net
2. Example Gateway Protocol Hierarchy
A protocol in an upper layer passes data to IP for delivery. IP
packages the data as an internet datagram and passes it to the
local subnetwork protocol for transmission across the local sub-
net. If the destination host is on the local subnet, IP sends
the datagram through the subnet directly to that host. If the
destination host is on a connected subnet, IP sends the datagram
to an appropriate gateway. The gateway, in turn, sends the
datagram through the next subnet to the destination host, or to
another gateway.
Thus, datagrams move from one IP module to another through an
interconnected set of subnetworks until the destination is
reached. The sequence of IP modules handling the datagram in
transit is called the gateway route. The gateway route is dis-
tinct from the lower level node-to-node route supplied by a par-
ticular subnetwork. The gateway route is based on the destina-
tion internet address. The IP modules share common rules for
interpreting internet addresses to perform internet routing.
In transit, datagrams may traverse a subnetwork whose maximum
packet size is smaller than the size of the datagram. To handle
this, IP provides fragmentation and reassembly mechanisms. The
gateway at the smaller-packet subnet fragments the original
datagram into pieces, called datagram fragments, small enough for
transmission. The IP module in the destination host reassembles
System Development Corporation
1 June 1981 -3- IEN 186
the datagram fragments to reproduce the original datagram.
IP can support a diverse set of upper layer protocols (ULPs). A
transport protocol with real-time requirements, such as the Net-
work Voice Protocol (NVP), can make use of IP's datagram service
directly. A transport protocol providing ordered reliable
delivery, such as TCP, can build additional mechanisms on top of
IP's basic datagram service. Also, IP's delivery service can be
customized in some ways to suit the special needs of an upper
layer protocol. For example, a pre-defined gateway route, called
a source route, can be supplied for an individual datagram. Each
IP module forwards the datagram according to the source route
instead of using only the independent routing mechanism.
The Internet Protocol shares a common history with the Transmis-
sion Control Protocol, first described in [3]. Later, IP and TCP
were separated and specified as two distinct protocols in [4] and
[5]. A wide range of technical, legal, and political issues
associated with subnetwork interconnection is presented in [6].
Alternative approaches to internetting, including the CCITT
Recommendation X.75 and the PUP architecture, are introduced and
compared in in [7], [8], and [9]. Certain aspects of fragmenta-
tion and routing are are discussed in [10], and [11]. [12] and
[13] contain current address mappings and assigned numbers used
in network protocol implementations.
System Development Corporation
1 June 1981 -4- IEN 186
1.1 Scenario
The following scenario illustrates the model of operation for
transmitting a datagram from one upper layer protocol to another.
The scenario is purposely simple so that IP's basic operation is
not obscured by the details of interface parameters or header
fields.
A ULP in host A is to send data to a peer protocol in host B on
another subnetwork. In this case, the source and destination
hosts are on subnetworks directly connected by a gateway.
HOST A HOST B
---------------- ------------------
| Sending | | Receiving |
| Upper Layer | | Upper Layer |
| Protocol | GATEWAY | Protocol |
| \ | ------------------ | / |
| IP Module | | IP Module | | IP Module |
| \ | | / \ | | / |
| SNP-1 | | SNP-1 SNP-2 | | SNP-2 |
---------------- ------------------ ------------------
\ / \ /
Local Subnet 1 Local Subnet 2
Basic Model of Operation
a. The sending ULP passes its data to the IP module, along with
the destination internet address and other parameters.
b. The IP module prepares an IP header and attaches the ULP's
data to form an internet datagram. Then, the IP module
determines a local subnetwork address from the destination
internet address. In this case, it is the address of the
gateway to the destination subnetwork. The internet
datagram along with the local subnet address is passed to
the local subnetwork protocol (abbreviated as SNP).
c. The SNP creates a local subnetwork header and attaches it to
the datagram forming a subnetwork packet. The SNP then
transmits the packet across the local subnet.
System Development Corporation
1 June 1981 -5- IEN 186
<========= subnetwork packet =========>
+------+---------+---------/ /--------+
| * | * | * |
+--:---+----:----+----:---/ /---------+
: : :
: : :
: : ULP data
: IP header
:
subnetwork header
d. The packet arrives at the gateway connecting the first and
second subnetworks. The SNP of the first subnet strips off
the local subnetwork header and passes the remainder to the
IP module.
e. The IP module determines from the destination internet
address in the IP header that the datagram is intended for a
host in the second subnet. The IP module then derives a
local subnetwork address for the destination host. That
address is passed along with the datagram to the SNP of the
second subnetwork for delivery.
f. The second subnet's SNP builds a local subnetwork header and
appends the datagram to form a packet for the second subnet-
work. That packet is transmitted across the second subnet
to the destination host.
g. The SNP of the destination host strips off the local subnet-
work header and hands the remaining datagram to the IP
module.
h. The IP module determines that the datagram is bound for a
ULP within this host. The data portion of the datagram, the
source internet address, and other option parameters are
passed to the ULP.
Delivery of data across the internet is complete.
System Development Corporation
1 June 1981 -6- IEN 186
2. DESCRIPTION OF SERVICES PROVIDED TO UPPER LAYERS
This section describes the services offered by the Internet Pro-
tocol to upper layer protocols (ULPs). The goals of this section
are to provide the motivation for protocol mechanisms and a
definition of the functions provided by this protocol.
The services provided by IP are:
o intact internet datagram service
o virtual network service
o error reporting service
A description of each service follows.
2.1 Datagram Service
The Internet Protocol shall provide a datagram service between
homogeneous upper layer protocols in an internet environment. A
datagram service is characterized by data delivery to the desti-
nation with non-zero probability; some data may possibly be lost.
Also, a datagram service does not necessarily preserve the
sequence in which data is supplied by the source upon delivery at
the destination.
IP shall deliver received data to a destination ULP in the same
form as sent by the source ULP. IP shall discard datagrams when
insufficient resources are available for processing. IP does not
detect datagrams lost or discarded by the subnetwork layer.
As part of the delivery service, IP insulates upper layer proto-
cols from subnetwork specific characteristics. For example, IP
maps internet addresses supplied by ULPs into local addresses
used by the local subnetwork. Also, IP hides any packet-size
restrictions of subnetworks along the transmission path within
the internet.
2.2 Virtual Network Services
IP shall provide to upper layer protocols the ability to select
virtual network service parameters. IP shall provide a standard
command set for the ULPs to indicate the services desired. Thus,
the ULPs can tune certain properties of IP and the underlying
subnetworks to customize the transmission service according to
their needs.
The virtual network parameters fall into two categories: service
quality parameters and service options. Service quality
System Development Corporation
1 June 1981 -7- IEN 186
parameters influence the transmission service provided by the
subnetworks; service options are additional functions provided
by IP. A brief description of each follows:
o Service Quality Parameters
- Precedence : attempts preferential treatment for high
importance datagrams
- Transmission Mode : datagram vs. stream. Stream mode
attempts to minimize delay and delay dispersion through
reservation of network resources
- Reliability : attempts to minimize data loss and error rate
- Speed : attempts prompt delivery
- Resource Tradeoff : indicates relative importance of speed
vs. reliability.
o Service Options
- Security Labelling : identifies datagram for compart-
mented hosts
- Source Routing : selects set of gateway IP modules to visit
in transit
- Route Recording : records gateway IP modules encountered in
transit
- Stream Identification : names reserved resources used for
stream service
- Time Stamping : records time information
- Don't Fragment : marks a datagram as an indivisible unit
2.3 Error Reporting Service
IP shall provide error reports to the upper layer protocols indi-
cating errors detected in providing the above services. In
addition, certain errors detected by lower layer protocols shall
be passed to the ULPs. These reports indicate several classes of
errors including invalid arguments, insufficient resources, and
transmission errors. The errors that IP must report to ULPs have
not been defined. IP's error reporting responsibilities need
further examination.
System Development Corporation
1 June 1981 -8- IEN 186
3. UPPER LAYER SERVICE/INTERFACE SPECIFICATION
This section specifies the IP services provided to upper layer
protocols and the interface through which these services are
accessed. The first part defines the interaction primitives and
interface parameters for the upper interface. The second part
contains the abstract machine specification of the upper layer
services and interaction discipline.
3.1 Interaction Primitives
An interaction primitive defines the purpose and content of
information exchanged between two protocol layers. Primitives
are grouped into two classes based on the direction of informa-
tion flow. Information passed downward, in this case from a ULP
to IP, is called a service request primitive. Information passed
upward, in this case from IP to a ULP, is called a service
response primitive. Interaction primitives need not occur in
pairs. That is, a request does not necessarily elicit a
"response"; a "response" may occur independently of a request.
The information associated with an interaction primitive falls
into two categories: parameters and data. The parameters
describe the data and indicate how the data is to be treated.
The data is not examined or modified. The format of the parame-
ters and data is implementation dependent and therefore not
specified.
A given IP implementation may have slightly different interaction
primitives imposed by the execution environment or system design
factors. In those cases, the primitives can be modified to
include more information or additional primitives can be defined
to satisfy system requirements. However, all IPs must provide at
least the interaction primitives specified below to guarantee
that all IP implementations can support the same protocol hierar-
chy.
3.1.1 Service Request Primitives
A single service request primitive supports IP's datagram ser-
vice, the SEND primitive.
3.1.1.1 SEND
The SEND primitive contains complete control information for each
unit of data to be delivered. IP accepts in a SEND at least the
following information:
o source address - internet address of ULP sending data
System Development Corporation
1 June 1981 -9- IEN 186
o destination address - internet address of ULP to receive data
o protocol - name of the recipient ULP
o type of service indicators - relative transmission quality
associated with unit of data
- precedence - one of five levels : (P1, P2, P3, P4, P5 )
where P1 <= P2 <= P3 <= P4 <= P5
- reliability - one of four levels : (R1, R2, R3, R4)
where R1 <= R2 <= R3 <= R4
- speed - one of two levels : (S1, S2) where S1 <= S2
- resource trade-off - speed or reliability : (T1, T2)
where T1 = speed, T2 = reliability
- transmission mode - stream or datagram : (M1, M2) where
M1 = stream, M2 = datagram
o identifier - value distinguishing this portion of data from
others sent by this ULP.
o don't fragment indicator - flag showing whether IP can fragment
data to accomplish delivery
o time to live - value in seconds indicating maximum lifetime of
data within the internet
o data length - size of data being transmitted
o option data - options requested by ULP from following list:
security, source routing, return routing, stream identification,
or time stamp. (See section 6.2.14.)
o data - present when data length is greater than zero.
3.1.2 Service Response Primitives
A single service response primitive supports IP's datagram ser-
vice, the DELIVER primitive.
3.1.2.1 DELIVER
The DELIVER primitive contains the data passed by a source ULP in
a SEND, along with addressing, quality of service, and option
information. IP passes in a DELIVER at least the following
information:
o source address - internet address of sending ULP
System Development Corporation
1 June 1981 -10- IEN 186
o destination address - internet address of the recipient ULP
o protocol - name of recipient ULP as supplied by the sending ULP
o type of service indicators - relative transmission quality
associated with unit of data
- precedence - one of five levels : (P1, P2, P3, P4, P5 )
where P1 <= P2 <= P3 <= P4 <= P5
- reliability - one of four levels : (R1, R2, R3, R4)
where R1 <= R2 <= R3 <= R4
- speed - one of two levels : (S1, S2) where S1 <= S2
- resource trade-off - speed or reliability : (T1, T2)
where T1 = speed, T2 = reliability
- transmission mode - stream or datagram : (M1, M2) where
M1 = stream, M2 = datagram
o data length - number of octets of received data (possibly zero)
o option data - options requested by source ULP from following
list: security, source routing, return routing, stream identifi-
cation, or time stamps. (See section 6.2.14.)
o data - present when data length is greater than zero.
In addition, a DELIVER may contain error reports from IP either
together with parameters and data listed above, or, independently
of that information. This area needs further examination and
definition.
3.2 Abstract Machine Definition of Upper Level Services and
Interaction Discipline
The abstract machine defines the behavior of the entire service
machine from the perspective of the upper layer protocol. An
abstract machine definition is composed of a machine identifier,
a state diagram, a state vector, a set of data structures, an
event list, and an events and actions correspondence.
3.2.1 Machine Identifier
Each upper interface state machine is uniquely identified by the
four values:
o source address
o destination address
System Development Corporation
1 June 1981 -11- IEN 186
o protocol
o identifier
3.2.2 State Diagram
The upper interface state machine has a single state which never
changes. No diagram is needed.
3.2.3 State Vector
The upper interface state machine has a single state which never
changes. No state vector is needed.
3.2.4 State Machine Data Structures
No data structures are used for the upper interface state
machine. However, the following abbreviations are used to refer
to parameters of the interaction primitives:
S = source internet address
D = destination internet address
P = protocol identifier
TOS = type of service where
p(i) = one of the precedence levels (P1, P2, P3, P4, P5)
(Note: read p(i) as "p sub i")
r(i) = one of the reliability levels (R1, R2, R3, R4)
s(i) = one of the speed levels (S1, S2)
t(i) = one of the resource trade-offs (T1, T2)
m(i) = one of the transmission modes (M1, M2)
ID = data identifier
TTL = time to live value
DF = don't fragment flag
Opts = the set of desired options including zero or more
of the following:
sr = source route
rr = return route
sl = security labelling
sid = stream identifier
its = internet timestamp
sts = satellite timestamp
Data = data unit for delivery
L = length of data unit
t = time of event initiation
N = time elapsed during transmission
System Development Corporation
1 June 1981 -12- IEN 186
3.2.5 Event List
The events are drawn from the interaction primitives specified in
section 3.1 above. An event is composed of a service primitive
and an abstract timestamp to indicate the time of event initia-
tion. The event list:
1. SEND( S, D, P, TOS(p(i), r(i), s(i), t(i), m(i)), ID, TTL,
DF, Opts(sr, rr, sl, sid, its, sts), Data, L) at time t
2. NULL - Although no service request is issued by ULP, certain
conditions within IP or lower layers produce a service
response.
3.2.6 Events and Actions
The following section defines the set of possible actions eli-
cited by each event.
EVENT = SEND( S, D, P, TOS(p(i), r(i), s(i), t(i), m(i)), ID, TTL, DF,
Opt(sr, rr, sl, sid, its, sts), Data, L ) at time t
Actions:
1. DELIVER Data at time t+N to protocol P at destination D
with all of the following properties:
a. The time elapsed during data transmission satisfies
the time-to-live limit, i.e. N <= TTL.
b. The quality of data transmission is at least
equal to the relative levels specified by
TOS(p(i), r(i), s(i), t(i), m(i)).
c. if (DF = TRUE)
then IP fragmentation has not occurred in transit.
d. if (Opts contains sr)
then Data has visited in transit at least the nodes
named by source route provided in SEND.
e. if (Opts contains rr)
then the list of nodes visited in transit is
delivered with Data.
f. if (Opts contains sl)
then the security label is delivered with Data.
g. if (Opts contains sid)
System Development Corporation
1 June 1981 -13- IEN 186
then the stream identifier is delivered with Data
h. if (Opts contains its)
then the internet timestamp is delivered with Data
j. if (Opts contains sts)
then the satellite timestamp is delivered with Data
OR,
2. DELIVER to protocol P at source S indicating one of
the following error conditions:
a. destination D unreachable
b. protocol P unreachable
c. if (DF = TRUE)
then fragmentation needed but prohibited
d. if (Opts contains any option)
then parameter problem with option.
OR,
3. no action
EVENT = NULL
Actions:
1. DELIVER to protocol P at source S indicating
the following error condition:
a. error conditions in subnet layer
System Development Corporation
1 June 1981 -14- IEN 186
4. DESCRIPTION OF LOWER LAYER SERVICE REQUIREMENTS
This section describes the minimal services required of the sub-
network layer.
The services required are:
o transparent data transfer between hosts within a subnetwork
o error reporting
A description of each service follows.
4.1 Data Transfer
The subnetwork layer must provide a transparent data transfer
between hosts within a single subnetwork. Only the data to be
delivered, and the necessary control and addressing information
should be required as input from IP. Intranet routing and sub-
network operation shall be handled by the subnetwork layer
itself.
The subnetwork need not be a reliable communications medium.
Data should arrive with non-zero probability at a destination.
Data may not necessarily arrive in the same order as it was sup-
plied to the subnetwork layer, nor is data guaranteed to arrive
error free.
4.2 Error Reporting
The subnetwork layer shall provide reports to IP indicating
errors from the subnetwork and lower layers as feasible.
The specific error requirements of the subnetwork layer have not
been defined. This area needs further examination.
System Development Corporation
1 June 1981 -15- IEN 186
5. LOWER LAYER SERVICE/INTERFACE SPECIFICATION
This section specifies the minimal subnetwork protocol services
required by IP and the interface through which those services are
accessed. The first part defines the interaction primitives and
their parameters for the lower interface. The second part con-
tains the abstract machine specification of the lower layer ser-
vices and interaction discipline.
5.1 Interaction Primitives
An interaction primitive defines the purpose and contents of
information exchanged between two protocol layers. Two kinds of
primitives, based on the direction of information flow, are
defined. Service requests pass information downward; service
responses pass information upward. These primitives need not
occur in pairs, nor in a synchronous manner. That is, a request
does not necessarily elicit a "response"; a "response" may occur
independently of a request.
The information associated with an interaction primitive falls
into two categories: parameters and data. The parameters
describe the data and indicate how the data is to be treated.
The data is not examined or modified. The format of interaction
primitive information is implementation dependent and so is not
specified.
A given IP implementation may have slightly different interfaces
imposed by the nature of the subnetwork or execution environment.
Under such circumstances, the primitives can be modified to
include more parameters or include additional primitives can be
defined. However, all IPs must provide at least the interface
specified below to guarantee that all IP implementations can sup-
port the same protocol hierarchy.
5.1.1 Service Request Primitives
A single service request primitive is required from the SNP, a
SNP_SEND primitive.
5.1.1.1 SNP_SEND
The SNP_SEND contains an IP datagram, a destination, and parame-
ters describing the desired transmission quality. The SNP
receives in an SNP_SEND at least the following information:
o local destination address - local subnetwork address of desti-
nation host or gateway
o type of service indicators - relative transmission quality
associated with the datagram
System Development Corporation
1 June 1981 -16- IEN 186
- precedence - one of five levels : (P1, P2, P3, P4, P5 )
where P1 <= P2 <= P3 <= P4 <= P5
- reliability - one of four levels : (R1, R2, R3, R4)
where R1 <= R2 <= R3 <= R4
- speed - one of two levels : (S1, S2) where S1 <= S2
- resource trade-off - speed or reliability : (T1, T2)
where T1 = speed, T2 = reliability
- transmission mode - stream or datagram : (M1, M2) where
M1 = stream, M2 = datagram
o length - size of the datagram
o datagram
5.1.2 Service Response Primitives
One service request primitive is required to support IP's
datagram service, the SNP_DELIVER primitive.
5.1.2.1 SNP_DELIVER
The SNP_DELIVER contains only a datagram which is an independent
entity containing all the information needed by IP. An IP
receives in an SNP_DELIVER at least the following information:
o datagram
In addition, a SNP_DELIVER may contain error reports from the
SNP, either together with a datagram or independently of one.
This area needs further examination and definition.
5.2 Abstract Machine Definition of Lower Level Services and
Interaction Discipline
The abstract state machine defines the behavior of the entire
service machine with respect to the lower layer protocol. An
abstract machine definition is composed of a machine identifier,
a state diagram, a state vector, a set of data structures, an
event list, and an events and actions correspondence.
5.2.1 Machine Identifier
Each lower interface state machine is uniquely identified by the
four values:
System Development Corporation
1 June 1981 -17- IEN 186
o source address
o destination address
o protocol
o identification
5.2.2 State Diagram
The lower interface state machine has a single state which never
changes. No diagram is needed.
5.2.3 State Vector
No state vector is needed for the lower interface state machine.
5.2.4 State Machine Data Structures
No data structures are used for the lower interface state
machine. However, the following abbreviations are used to refer
to parameters of the interaction primitives:
LD = local subnetwork destination address
TOS = type of service where
p(i) = one of the precedence levels (P1, P2, P3, P4, P5)
(Note: read p(i) as "p sub i")
r(i) = one of the reliability levels (R1, R2, R3, R4)
s(i) = one of the speed levels (S1, S2)
t(i) = one of the resource trade-offs (T1, T2)
m(i) = one of the transmission modes (M1, M2)
L = datagram length
5.2.5 Event List
The events are drawn from the interactions primitives specified
in section 5.1 above. An event is composed of a service primi-
tive with its parameters and data.
1. SNP_SEND( LD, TOS(p(i), r(i), s(i), t(i), m(i)), L,
Datagram)
2. NULL - Although IP issues no service request, certain condi-
tions within the subnet layer elicit a service response.
System Development Corporation
1 June 1981 -18- IEN 186
5.2.6 Events and Actions
The following section defines the set of possible actions eli-
cited by each event.
EVENT = SNP_SEND( LD, TOS(p(i), r(i), s(i), t(i), m(i)), L, Datagram)
ACTIONS:
1. SNP_DELIVER Datagram to IP at local destination LD with
all of the following properties:
a. The quality of data transmission is at least
equal to the relative levels specified by
TOS(p(i), r(i), s(i), t(i), m(i)).
OR,
2. no action
EVENT = NULL
ACTIONS:
1. SNP_DELIVER to IP indicating the following error condition:
a. error conditions within the subnet layer
System Development Corporation
1 June 1981 -19- IEN 186
6. MECHANISM SPECIFICATION
This section defines the mechanisms supporting the services
offered by IP. The first subsection motivates the specific
mechanisms chosen and discusses the underlying philosophy of
those choices. The second subsection defines the format and use
of the IP header fields. The last subsection specifies the peer
protocol interactions with a state machine model.
6.1 Overview of IP Mechanisms
The IP mechanisms are motivated by the IP services, described in
section 2:
o intact datagram delivery service
o virtual network service
o error reporting service
Each service could be supported by any of a set of mechanisms.
The selection of mechanisms is guided by design standards includ-
ing simplicity, generality, flexibility, and efficiency. The
following mechanism descriptions identify the service or services
supported, discuss the design criteria used in selection, and
explain how the mechanisms work.
6.1.1 Routing Mechanism
IP contains an adaptive routing mechanism to support the delivery
service. The routing mechanism uses the internet addressing
scheme and internet topology data to direct datagrams along the
best path between source and destination. The mechanism provides
routing options for ULPs needing the flexibility to select or
record routes and routing information.
A distinction is made between names, addresses, and routes. A
name indicates the object sought independently of physical loca-
tion. An address indicates where the object is. A route indi-
cates how to get there. It is the task of the upper layer proto-
cols to map from names to addresses. The internet protocol maps
from internet addresses to local subnet addresses to perform
routing through the internet. It is the task of lower layer pro-
tocols to map from the local subnet addresses to routes through
local subnetworks.
Internet addresses have a fixed length of four octets (32 bits).
An internet address begins with a one octet network number and
ends with a three octet REST field. The REST field usually con-
tains a local subnetwork address. However, alternate schemes for
use of this field can extend the address range to allow more sub-
networks on the internet.
System Development Corporation
1 June 1981 -20- IEN 186
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 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/ /+-+-+-+-+
| NETWORK | REST |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-/ /-+-+-+-+-+
The 24-bit REST field, assigned by each local subnetwork, should
allow for a single physical host to act as several distinct
internet hosts. That is, there should exist a mapping between
internet host addresses and subnetwork/host interfaces that
allows several internet addresses to correspond to one interface.
A host should be allowed to have several physical interfaces
(i.e. multi-homing) and to treat the datagrams from several of
them as if they were all addressed to a single host.
To route a datagram, an IP module examines the NETWORK field of
the internet address indicating the destination for the datagram.
If the network number is the same as the IP module's subnetwork,
the module uses the REST field of the internet address to derive
the local subnet address of the destination host. If the network
number doesn't match, the module determines a local subnet
address of a gateway on the best path to the destination subnet-
work. In turn, the gateway IP module derives the next local sub-
net address to either a host or gateway. In this way, the
datagram is relayed through the internet to the destination host.
In a static environment, the routing algorithm is straightfor-
ward. However, internet topology tends to change due to hardware
or software failure, host availability, or heavy traffic load
conditions. So, each host and gateway IP along the gateway route
also uses its current knowledge of internet topology to make
routing decisions.
6.1.1.1 Routing Options
IP provides a mechanism, called source routing, to override the
gateway's independent routing decisions. This mechanism allows
an upper layer protocol to influence the gateway route a datagram
traverses. The ULP can pass a list of internet addresses, called
a source route, along with a datagram. Each address on the list
is an intermediate destination. The source IP module uses its
normal routing mechanism to transmit the datagram to the first
address on the list. At that address, the first entry is removed
from the list, and the next address becomes the datagram's desti-
nation. When the last entry of the list is removed, the normal
destination address field becomes the final destination.
For testing or diagnostic purposes, a ULP can acquire a
datagram's gateway route by using a mechanism called return rout-
ing. The sending ULP indicates that a record of the route is to
be accumulated in transit. Then, as gateway IP module on the
System Development Corporation
1 June 1981 -21- IEN 186
gateway route relays the datagram, it adds its address to the
return list. The destination ULP receives the original datagram
along with the return list containing the gateway route.
6.1.2 Fragmentation and Reassembly
IP contains a fragmentation mechanism to break a large datagram
into smaller datagrams. This is a more general solution for
overcoming differences between subnetwork capacity than legislat-
ing a restrictive datagram size small enough for every subnetwork
on the internet. This mechanism can be overriden using the
"don't fragment" option to prevent fragmentation. IP also con-
tains a reassembly mechanism which reverses the fragmentation to
enable delivery of intact data portions.
When an IP module encounters a datagram that is too big to be
transmitted through a subnetwork, it applies its fragmentation
mechanism. First, the module divides the data portion of the
datagram into two or more pieces. The data must be broken on 8-
octet boundaries. For each piece, it then builds a datagram
header containing the identification, addressing, and options
information needed. Fragmentation data is adjusted in the new
headers to correspond to the data's relative position within the
original datagram. The result is a set of small datagrams,
called fragments, each carrying a portion of the data from the
original large datagram. Section 6.3.7.8 defines the fragmenta-
tion algorithm.
Each fragment is handled independently until the destination IP
module is reached. The fragments may follow different gateway
routes as internet topology and traffic conditions change. They
are also subject to further fragmentation if 'smaller-packet'
subnetworks are subsequently traversed.
Every IP module must be able to forward a datagram of 68 octets
without further fragmentation. This size allows for a header
length of up to 60 octets and the minimum data length of 8
octets.
To reassemble fragments into the original datagram, an IP module
combines all those received having the same value for the iden-
tification, source address, destination address, and protocol.
IP allocates reassembly resources when a "first-to-arrive" frag-
ment is recognized. Based on the fragmentation data in the
header, the fragment is placed in a reassembly area relative to
its position in the original datagram. When all the fragments
have been received, the IP module passes the data in its original
form to the destination ULP.
All hosts must be prepared to accept datagrams of up to 576
octets (whether they arrive whole or in fragments). It is recom-
mended that hosts only send datagrams larger than 576 octets if
System Development Corporation
1 June 1981 -22- IEN 186
they have assurance that the destination is prepared to accept
the larger datagrams. The number 576 is selected to allow a rea-
sonable amount of data 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 maximum internet header size is 60 octets, and a
typical internet header is 20 octets, allowing a margin for
headers of upper layer protocols.
Because the subnetwork may be unreliable, some fragments making
up a complete datagram can be lost. IP uses the "time-to-live"
data (explained in section 6.1.4 below) to set a timer on the
reassembly process. If the timer expires before all the frag-
ments have been collected, IP discards the partially reassembled
datagram.
Only the destination IP module should perform reassembly. This
recommendation is intended to reduce gateway overhead and minim-
ize the chance of deadlock[3]. However, reassembly by private
agreement between gateways is transparent to the rest of the
internet and is allowed.
A ULP can prevent its data from being broken into smaller pieces
during transmission. IP provides an override mechanism to prohi-
bit fragmentation called "Don't Fragment." Any internet datagram
marked "don't fragment" cannot be fragmented by an IP module
along the gateway route under any circumstances. If an IP module
cannot deliver such a datagram to its destination without frag-
menting it, the module discards the datagram and returns an error
to the source IP. (Please note that fragmentation, transmission,
and reassembly at the subnetwork layer is transparent to IP and
can be used at any time.)
6.1.3 Checksum
IP assumes the subnetwork layer to be unreliable regardless of
the actual subnetwork protocol present. So, IP provides a check-
sum mechanism supporting the delivery service to protect the IP
header from transmission errors. The data portion is not covered
by the IP checksum.
An IP module recomputes the checksum each time the IP header is
changed. Changes occur during time-to-live reductions, option
updates (both explained below), and fragmentation. The checksum
is currently a simple one's complement algorithm, and experimen-
tal evidence indicates its adequacy. However, the algorithm is
provisional and may be replaced by a CRC procedure, depending on
future experience.
System Development Corporation
1 June 1981 -23- IEN 186
6.1.4 Time To Live
As mentioned in the routing discussion above, a datagram's
transmission path is subject to changes in internet topology and
traffic conditions. Inadvertently, a datagram might be routed on
a circuitous path to arrive at its destination after a consider-
able delay. Or, a datagram could loop through the same IP
modules without making real progress towards its destination.
Such "old datagrams" reduce internet bandwidth and waste process-
ing time.
To prevent these problems, IP provides a mechanism to limit the
lifetime of a datagram, called time-to-live. Along with the
other sending parameters, a ULP specifies a maximum datagram
lifetime in second units. Each IP module on the gateway route
decreases the time-to-live value carried in the IP header. If an
IP module receives an expired datagram, it discards the datagram.
The lifetime limit is in effect until the datagram's data is
delivered to the destination ULP. That is, if a datagram is
fragmented during transmission, it can still expire during the
reassembly process. Section 6.3.4.3 defines the reassembly algo-
rithm use of the time-to-live data.
6.1.5 Type of Service
In support of the virtual network service, the type of service
mechanism allows upper layer protocols to select the transmission
quality. IP passes the type of service (TOS) command set for
service quality to the SNP where it is mapped into subnetwork-
specific transmission parameters. Not every subnetwork supports
all transmission services, but each SNP on the delivery path
should make a best effort to match the available subnet services
to the desired service quality.
The TOS command set includes precedence level, reliability level,
speed level, resource trade-off, and transmission mode. Several
subnetworks offer a precedence service where treating high pre-
cedence traffic is processed before other traffic. A few net-
works offer a stream service, whereby one can achieve low delay
and constant datagram interarrival time by reserving network
resources. Another choice involves a low-delay vs. high relia-
bility trade-off. Usually subnetworks invoke more complex and
delay producing mechanisms as the need for reliability increases.
6.1.6 Data Options
Motivated by the virtual network service, IP provides a mechan-
ism, called options, to carry certain identification and timing
data in a standard manner through the internet. The use of this
mechanism by the ULPs is optional, as the name implies, but all
options must be supported by each IP implementation. No perfor-
mance penalty is exacted from other services because the option
System Development Corporation
1 June 1981 -24- IEN 186
data requires no additional processing by IP; it is simply passed
on to the receiving ULP.
The data options carry three kinds of information: security,
stream identification, and timing. The security data is used by
DOD hosts needing to transmit security and TCC (closed user
groups) parameters through the internet in a standard manner.
The stream identification option provides a way for a SATNET
stream identifier to be carried both through stream-oriented sub-
networks and subnets not supporting the stream concept. The tim-
ing data, useful for testing and diagnostics, includes internet
timestamps and satellite timestamps.
6.1.7 Error Report Datagrams
The error reporting service motivates a mechanism to generate and
process error information. The error mechanism uses the datagram
delivery service to transfer the errors between IP modules.
An IP module encounters errors from three sources: ULPs, SNPs,
and other IP modules. Errors from the first two appear across
IP's interfaces and are handled on the same medium. But errors
from IP modules are found in or caused by datagrams and are
reported to the source IP module in an "error report datagram."
An error report datagram is composed of a minimal IP header and a
data portion to carry error information. An error report
datagram is distinguished from normal datagrams by the protocol
field being equal to the Gateway-Gateway Protocol's identif-
ier[13]. The error information includes a general error type, an
error code, related error information, and portions of the dis-
carded or erroneous datagram causing the report. The errors
reported include:
a. Destination Unreachable - A gateway or host IP cannot
deliver a datagram.
- subnet unreachable - A gateway IP cannot determine a
route to the destination subnetwork.
- host unreachable - A gateway IP cannot determine a
route to the destination host.
- protocol unreachable - The IP module at the destination
address cannot deliver to the unknown or inactive pro-
tocol.
- port unreachable - The IP module at the destination
address cannot deliver to the unknown or inactive port.
System Development Corporation
1 June 1981 -25- IEN 186
- fragmentation needed but DF set - A host or gateway
cannot deliver a datagram because fragmentation is
required but is prohibited by the don't fragment flag.
b. Time Exceeded - A datagram has exceeded its allowed life-
time.
- in transit - A gateway or host finds the time to live
field in the datagram header is zero. The datagram is
discarded.
- during reassembly - The destination host cannot com-
plete reassembly within the time-to-live time limit due
to missing fragments.
c. Parameter Problem - A gateway or host cannot deliver the
datagram because of some problem with the header parameters.
- Problem with an option - An option is either not sup-
ported or incorrect. The third octet of the data por-
tion contains the option type of the problem option.
d. Source Quench - A gateway has discarded a datagram due to
congestion. This report request the source host to cut back
the rate at which it is sending traffic to that destination.
e. Redirect - A gateway has received a datagram from a host on
an attached subnet, but must forward it to another gateway
on the same subnet. This message requests the source IP to
send subsequent datagrams with the same destination to the
other gateway. The address of the other gateway appears in
octets 4-7.
f. Echo - A host or gateway may use this report to establish
connectivity.
g. Type 0 : Echo Reply - A host or gateway responds to a previ-
ous Echo.
System Development Corporation
1 June 1981 -26- IEN 186
6.2 Internet Protocol Header Format
A summary of the contents of the IP 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IP Header Format
Note that each tick mark represents one bit position. Each field
description below includes its name, an abbreviation, and the
field size. Where applicable, the units, the legal range of
values, and a default value appears.
6.2.1 Version
abbrev: VER field size: 4 bits
The Version field indicates the format of the IP header. This
document describes version 4.
6.2.2 Internet Header Length
abbrev: IHL field size: 4 bits
units : 4-octets range : 5 - 15 default : 5
Internet Header Length is the length of the IP 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.
System Development Corporation
1 June 1981 -27- IEN 186
6.2.3 Type of Service
abbrev: TOS field size: 8 bits
The Type of Service field contains the IP parameters describing
the quality of service desired for this datagram.
0 1 2 3 4 5 6 7
+-----+-----+-----+-----+-----+-----+-----+-----+
| | | | | |
| PRECEDENCE | STRM|RELIABILITY| S/R |SPEED|
| | | | | |
+-----+-----+-----+-----+-----+-----+-----+-----+
Bits 0-2: Precedence.
Bit 3: Stream or Datagram.
Bits 4-5: Reliability.
Bit 6: Speed over Reliability.
Bits 7: Speed.
PRECEDENCE STRM RELIABILITY S/R SPEED
111-Flash Override 1-STREAM 11-highest 1-speed 1-high
110-Flash 0-DTGRM 10-higher 0-rlblt 0-low
10X-Immediate 01-lower
01X-Priority 00-lowest
00X-Routine
6.2.4 Total Length
abbrev: TL field size: 16 bits
units: octets range : 20 - 65,535 default: 20
Total Length is the length of the datagram, measured in octets,
including header portion and the data portion of the datagram.
6.2.5 Identification
abbrev: ID field size : 16 bits
A identifying value used to associate fragments of a datagram.
This value is usually supplied by the sending ULP as an interface
parameter. If not, IP generates datagram identifications which
are unique for each sending ULP.
System Development Corporation
1 June 1981 -28- IEN 186
6.2.6 Flags
abbrev: - field size : 3 bits
This field contains the control flags "don't fragment" which
prohibits IP fragmentation and "more fragments" which helps to
identify fragments.
0 1 2
+---+---+---+
| | D | M |
| 0 | F | F |
+---+---+---+
Bit 0: reserved, must be zero
Bit 1: Don't Fragment This Datagram (DF).
Bit 2: More Fragments Flag (MF).
6.2.7 Fragment Offset
abbrev: FO field size : 13 bits
units : 8-octet groups range : 0 - 8191 default : 0
This field indicates the positions of this fragment's data rela-
tive to the beginning of the data carried in the original
datagram. Both a complete datagram and a first fragment has this
field set to zero. Section 6.1.2 describes the fragmentation
mechanism.
6.2.8 Time to Live
abbrev : TTL field size : 8 bits
units : seconds range : 0 - 255(=4.25 mins) default : 15
This field indicates the maximum time the datagram is allowed to
remain in the internet. If the value of this field drops to
zero, the datagram should be destroyed. Section 6.1.4 describes
the time-to-live mechanism.
6.2.9 Protocol
abbrev : PROT field size : 8 bits
This field indicates which ULP is to receive the data portion of
the datagram. The numbers assigned to common ULPs are specified
in [13].
System Development Corporation
1 June 1981 -29- IEN 186
6.2.10 Header Checksum
abbrev : - field size : 16 bits
This field contains the checksum covering the IP header. The
checksum mechanism is described in section 6.1.3.
6.2.11 Source Address
abbrev : source field size : 32 bits
This field contains the internet address of the datagram's source
host. The first octet is the Source Network, and the following
three octets are the Source Subnetwork Address. Internet
addressing is discussed in section 6.1.1.
6.2.12 Destination Address
abbrev : dest field size : 32 bits
This field contains the internet address of the datagram's desti-
nation host. The first octet is the Destination Network, and the
following three octets are the Destination Subnetwork Address.
Internet addressing is discussed in section 6.1.1.
6.2.13 Padding
abbrev : - field size : variable (8 to 24 bits)
The IP header padding is used to ensure that the IP header ends
on a 32-bit boundary. The padding field is set to zero.
6.2.14 Options
abbrev : - field size : variable
The option field is variable in length depending on the number
and type of options associated with the datagram. The options
mechanisms are discussed in sections 6.1.1 and 6.1.6.
Options may have two possible formats:
a. a single octet of option-type, or
b. a variable length string containing:
1. an option-type octet,
System Development Corporation
1 June 1981 -30- IEN 186
2. an option-length octet - counting the option-type octet
and option-length octet as well as the option-data
octets, and
3. the actual option-data octets.
The option-type octet is viewed as having 3 fields:
0 1 2 3 4 5 6 7
+--+--+--+--+--+--+--+--+
|CF|CLASS| NUMBER |
+--+--+--+--+--+--+--+--+
bit 0 - copy flag, if set the option is copied into
every fragment if fragmentation occurs.
bits 1-2 - option class
bits 3-7 - option number
The option classes are:
0 = control
1 = internet error
2 = debugging and measurement
3 = reserved for future use
The following internet options are defined:
COPY CLASS NUMBER LENGTH DESCRIPTION
---- ----- ------ ------ -----------
0 0 0 - End of Option list: This option occupies
only 1 octet; it has no length octet.
0 0 1 - No Operation: This option occupies only 1
octet; it has no length octet.
1 0 2 4 Security: Used to carry Security, and user
group (TCC) information compatible with DOD
requirements.
1 0 3 var. Source Routing: Used to route the datagram
based on information supplied by the source.
0 0 7 var. Return Route: Used to record the route a
datagram takes.
1 0 8 4 Stream ID: Used to carry the stream
identifier.
0 2 4 6 Internet Timestamp.
0 2 5 6 Satellite Timestamp.
System Development Corporation
1 June 1981 -31- IEN 186
6.2.15 Specific Option Definitions
Each option format is defined below. "Option type" indicates the
value of the option-type octet, and "length" indicates the value
of the length-octet if appropriate.
6.2.15.1 End of Option List
option type : 0 option length : N/A
This one octet option marks the end of the option list when it
does not coincide with the four-octet boundary indicated by the
IP header length. This field 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 IP
header. This option may be introduced or deleted upon fragmenta-
tion as needed.
6.2.15.2 No Operation
option type : 1 option length : N/A
This option may be used between options, for example, to align
the beginning of a subsequent option on a 32 bit boundary. This
option may be introduced or deleted upon fragmentation as needed.
6.2.15.3 Security
option type : 130 option length : 4
This option provides a way for hosts to send security and TCC
(closed user groups) parameters through subnetworks in a standard
manner. The format for this option is as follows:
System Development Corporation
1 June 1981 -32- IEN 186
0 1 2 3
01234567 89012345 67890123 45678901
+--------+--------+--------+--------+
|Opt.Type| Length |xxxxxxSS| TCC |
+--------+--------+--------+--------+
bits 0-7 : Option Type - described above
bits 8-15 : Length - described above
bits 16-21 : Not Used - must be zero
bits 22-23 : SS - security, specifies security level:
11-top secret
10-secret
01-confidential
00-unclassified
bits 24-31 : TCC - transmission control code, provides
a means to compartmentalize traffic
and define controlled communities
of interest among subscribers.
(This format is subject to change according to DOD requirements.)
6.2.15.4 Source Route
option type : 131 option length : variable
The source route option provides a means for the source ULP of a
datagram to supply routing information to be used by IP modules
along the gateway route.
The option begins with the option type code. The second octet is
the option length which includes the option type octet, the
length octet, and the source route list. A source route list is
composed of one or more internet addresses. Each internet
address is 4 octets long. When the source route list is empty,
the option is removed from the datagram and the remaining routing
is based on the destination address field. The source route
option is described in section 6.1.1.
6.2.15.5 Return Route
option type : 7 option length : variable
The return route option provides a way to record a datagram's
route.
The option begins with the option type code. The second octet is
the option length which includes the option type code, the length
octet, and the return route list. A return route list is com-
posed of a series of internet addresses. The return route option
is described in section 6.1.1.
System Development Corporation
1 June 1981 -33- IEN 186
6.2.15.6 Stream Identifier
option type : 136 option length : 4
This option provides a way for 16-bit stream identifier to be
carried through the internet for use by subnetworks supporting
the stream concept such as the SATNET.
6.2.15.7 Internet Timestamp
option type : 68 option length : 10
The internet address of the "stamper" is followed by a 32-bit
time measured in milliseconds. Time zero is defined as January
1, 1980, GMT modulo 2^32 (=49.71 days).
6.2.15.8 Satellite Timestamp
option type : 69 option length : 10
The internet address of the "stamper" is followed by a 32-bit
time measured in milliseconds. Time zero is defined as January
1, 1980, GMT modulo 2^32 (=49.71 days).
6.2.16 Error Report Datagrams
An error report datagram informs source IPs of erroneous or dis-
carded datagrams. Such a datagram is identified by its protocol
field being equal to the GGP identifier[13]. An error report
datagram is made up of a minimal IP header and a data portion
carrying error information. The first octet of the data portion
contains the error type octet. The next two octets hold addi-
tional error information which depends on the error type. The
fourth octet is not used. Beginning with the fifth octet, the
erroneous datagram's header and first 64 data octets may appear.
System Development Corporation
1 June 1981 -34- IEN 186
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | | Not Used |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
\ Header + 64 data octets from erroneous or discarded datagram \
\ \
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Error Datagram Data Portion
The error types and related error information are defined below:
Type Code Description
---- ---- ----------
3 0 Destination Unreachable due to unreachable subnetwork.
3 1 Dest. Unreachable due to unreachable host.
3 2 Dest. Unreachable due to unreachable or unknown
protocol.
3 3 Dest. Unreachable due to unreachable or inactive port.
3 5 Dest. Unreachable due to fragmentation needed but
prohibited by don't fragment flag.
11 0 Time Exceeded in transit.
11 1 Time Exceeded during reassembly.
12 0 Parameter Problem due to incorrect or unsupported
option.
4 - Source Quench due to congestion and discarded datagram
in a gateway.
5 - Redirect due to more direct path via alternate gateway.
Octets 4-7 carry the address of the alternate
gateway. The redirected datagram follows at octet 8.
8 - Echo used to establish internet topology. No
erroneous datagram carried in data portion.
0 - Echo Reply responds to previous echo. No erroneous
datagram carried in data portion.
System Development Corporation
1 June 1981 -35- IEN 186
6.3 Extended State Machine Representation
The IP protocol mechanism is defined by a state machine represen-
tation made up of a set of states, a set of transitions between
states, and a set of input events causing the state transitions.
In addition, a state machine has an initial state whose values
are assumed at state machine instantiation.
6.3.1 State Machine Identification
Each datagram is an independent unit. Therefore, one state
machine instance exists for each datagram. Each datagram is
uniquely named by the four values:
o+ source address
o+ destination address
o+ protocol
o+ identification
6.3.2 State Machine Diagram
The following diagram depicts a simplified IP state machine.
System Development Corporation
1 June 1981 -36- IEN 186
send or receive a complete datagram
__
| |
| v
* * * * * *
* *
* INACTIVE *
* *
* * * * * *
| ^
receive | |receive complete datagram,
fragment| | or final fragment,
| | or reassembly timeout
v |
* * * * * *
* *
* REASSEMBLING *
* *
* * * * * *
| ^
|__|
receive
fragments
6.3.3 State Vector
A state vector consists of the following elements :
o+ STATE NAME = (inactive, reassembling)
o+ REASSEMBLY RESOURCES = control information and storage
needed to reassemble fragments into the original datagram,
including:
- reassembly map : a representation of each 8-octet unit
of data and its relative location within the original
datagram.
- timer : value of the reassembly timer in unit seconds
ranging from 0 to 255.
- total data length : size of the data carried in
datagram being reassembled.
- header : storage area for the header portion of the
datagram being reassembled.
System Development Corporation
1 June 1981 -37- IEN 186
- data : storage area for the data portion of the
datagram being reassembled.
A state machine's initial state is inactive with unused reassem-
bly resources.
6.3.4 State Machine Data Structures
The IP state machine references certain data areas corresponding
to the state vector, and each interaction primitive : SEND,
DELIVER, SNP_SEND, and SNP_DELIVER. For clarity in the events
and actions section, data structures are declared in Ada for
these data areas. However, a data structure may be partially
typed or completely untyped where specific formats or data types
are implementation dependent.
6.3.4.1 state_vector
The definition of an IP state vector appears section 6.3.1 above.
A state_vector structure is declared as:
type state_vector_type is
record
state_name : (INACTIVE, REASSEMBLING);
reassembly_map
timer
total_data_length
header
data
end record;
6.3.4.2 from_ULP
The from_ULP structure holds the interface parameters and data
associated with the SEND primitive, as specified in section
3.1.1. The from_ULP structure is declared as:
type from_ULP_type is
record
source_addr
destination_addr
protocol
type_of_service
identifier
time_to_live
dont_fragment
length
data
options
end record;
System Development Corporation
1 June 1981 -38- IEN 186
6.3.4.3 to_ULP
The to_ULP structure holds interface parameters and data associ-
ated with the DELIVER primitive, as specified in section 3.1.2.
The to_ULP structure is declared as:
type to_ULP_type is
record
source_addr
destination_addr
protocol
type_of_service
length
data
options
error
end record;
6.3.4.4 from_SNP
The from_SNP structure holds the interface parameters and
datagram associated with the SNP_DELIVER primitive, as specified
in section 5.2.2. The from_SNP structure is declared as:
type from_SNP_type is
record
local_destination_addr
dtgm: datagram_type;
error
end record;
The dtgm element is itself a structure as specified below.
6.3.4.5 to_SNP
The to_SNP structure holds the data and parameters associated
with the SNP_SEND primitive specified in section 5.2.1. The
to_SNP structure is declared as:
type to_SNP_type is
record
local_destination_addr
type_of_service_indicators
length
dtgm: datagram_type;
end record;
The dtgm element is itself a structure as specified below.
specified below.
System Development Corporation
1 June 1981 -39- IEN 186
6.3.4.6 dtgm
A dtgm structure holds a datagram made up of a header portion and
a data portion as specified in section 6.2. A dtgm structure is
declared as:
type datagram_type is
record
version : HALF_OCTET;
header_length : HALF_OCTET;
type_of_service : OCTET;
total_length : TWO_OCTETS;
identification : TWO_OCTETS;
dont_frag_flag : BOOLEAN;
more_frag_flag : BOOLEAN;
fragment_offset : ONE_N_FIVE_EIGHTHS_OCTETS;
time_to_live : OCTET;
protocol : OCTET;
header_checksum : TWO_OCTETS;
source_addr : FOUR_OCTETS;
destination_addr : FOUR_OCTETS;
options : option_type;
data : array(1..DATA_LENGTH) of INTEGER;
end record;
subtype HALF_OCTET is INTEGER range 0..15;
subtype OCTET is INTEGER range 0..255;
subtype ONE_N_FIVE_EIGHTHS_OCTETS is INTEGER range 0..8191;
subtype TWO_OCTETS is INTEGER range 0..65535;
subtype FOUR_OCTETS is INTEGER range 0..4294967296;
6.3.5 Event List
The following list defines the set of possible events in an IP
state machine:
a. SEND from ULP - A ULP passes interface parameters and data
to IP for delivery across the internet.
b. SNP_DELIVER from SNP - SNP passes to IP a datagram received
from subnetwork protocol.
c. TIMEOUT - The timing mechanism provided by the execution
environment indicates a previously specified time interval
has elapsed.
6.3.6 State Machine Events and Actions
This section is organized in three parts. The first part con-
tains a decision table representation of state machine events and
System Development Corporation
1 June 1981 -40- IEN 186
actions. The decision tables are organized by state; each table
corresponds to one event.
The second part specifies the decision functions appearing at the
top of each column of a decision table. These functions examine
attributes of the event and the state vector to return a set of
decision results. The results become the elements of each
column. A "--" element represents a "don't care" condition where
a decision result does not determine the action procedure chosen.
The third section specifies action procedures appearing at the
right of every row. Each row of the decision table combines the
decision results to determine appropriate event processing.
These procedures specify event processing algorithms in detail.
6.3.6.1 Events and Actions Decision Tables
STATE = INACTIVE
================
EVENT = SEND from ULP
=============================
| ULP |where | need | can |
|params| to | to | frag |
|valid | | frag | |
=============================
| NO | -- | -- | -- |error to ULP(PARAM_PROBLEM)
---------------------------------------------------------
| YES | ULP | -- | -- |local delivery
---------------------------------------------------------
| YES | IP | -- | -- | **illegal
---------------------------------------------------------
| YES |REMOTE| NO | -- |build&send
---------------------------------------------------------
| YES |REMOTE| YES | NO |error to ULP(CAN'T FRAGMENT)
---------------------------------------------------------
| YES |REMOTE| YES | YES |fragment&send
---------------------------------------------------------
Comments:
A ULP passes data to IP for internet delivery. IP validates the
interface parameters, determines the destination, and dispatches
the ULP data to its destination.
System Development Corporation
1 June 1981 -41- IEN 186
STATE = INACTIVE
================
EVENT = DELIVER from SNP
====================================
|check-| SNP | TTL |where | a |
| sum |params|valid | to | frag |
|valid |valid | | | |
====================================
| NO | -- | -- | -- | -- |discard
------------------------------------------------------------------
| YES | NO | -- | -- | -- |error to source(PARAM_PROBLEM)
------------------------------------------------------------------
| YES | YES | NO | -- | -- |error to source(EXPIRED_TTL)
------------------------------------------------------------------
| YES | YES | YES | ULP | NO |remote delivery
------------------------------------------------------------------
| YES | YES | YES | ULP | YES |reassemble;STATE:=REASSEMBLING
------------------------------------------------------------------
| YES | YES | YES | IP | NO |analyze
------------------------------------------------------------------
| YES | YES | YES | IP | YES |reassemble;STATE:=REASSEMBLING
------------------------------------------------------------------
| YES | YES | YES |REMOTE| -- |error to source(HOST_UNREACH)
------------------------------------------------------------------
Comments:
The SNP has delivered datagram from another IP. IP validates the
datagram header, and either delivers the data from a complete
datagram to its destination within the host or begins reassembly
for a datagram fragment.
System Development Corporation
1 June 1981 -42- IEN 186
STATE = REASSEMBLING
====================
EVENT = DELIVER from SNP
===========================================
|check-| SNP | TTL |where | a |reass.|
| sum |params|valid | to | frag | done |
|valid |valid | | | | |
===========================================
| NO | -- | -- | -- | -- | -- |discard
--------------------------------------------------------------------------
| YES | NO | -- | -- | -- | -- |error to source(PARAM_PROBLEM)
--------------------------------------------------------------------------
| YES | YES | NO | -- | -- | -- |error to source(EXPIRED_TTL)
--------------------------------------------------------------------------
| YES | YES | YES | ULP | NO | -- |remote delivery;state:=INACTIVE
--------------------------------------------------------------------------
| YES | YES | YES | ULP | YES | NO |reassemble
--------------------------------------------------------------------------
| YES | YES | YES | ULP | YES | YES |reass delivery;state:=INACTIVE
--------------------------------------------------------------------------
| YES | YES | YES | IP | NO | -- |analyze;state:=INACTIVE
--------------------------------------------------------------------------
| YES | YES | YES | IP | YES | NO |reassemble
--------------------------------------------------------------------------
| YES | YES | YES | IP | YES | YES |analyze;state:=INACTIVE
--------------------------------------------------------------------------
| YES | YES | YES |REMOTE| -- | -- |error to source(HOST_UNREACH)
--------------------------------------------------------------------------
Comment:
The SNP has delivered a datagram associated to an earlier received datagram
fragment. IP validates the header and either continues the reassembly
process with the datagram fragment or delivers the data from the completed
datagram to its destination within the host.
EVENT = TIMEOUT
reassembly timeout; state:=INACTIVE
-----------------------------------
Comment:
The time-to-live period of the datagram being reassembled has elapsed.
The incomplete datagram is discarded; the source IP is informed.
System Development Corporation
1 June 1981 -43- IEN 186
6.3.6.2 Decision Functions
The following functions examine information contained in inter-
face parameters, interface data, and the state vector to make
decisions. These decisions can be thought of as further refine-
ments of the event and/or state. The functions return values
represent the possible decisions.
6.3.6.2.1 checksum valid
The checksum_valid function examines an incoming datagram's
header to determine whether it is free from transmission errors.
The data effects of this function are:
- Data examined only:
from_SNP.dtgm.version from_SNP.dtgm.fragment_offset
from_SNP.dtgm.header_length from_SNP.dtgm.time_to_live
from_SNP.dtgm.type_of_service from_SNP.dtgm.protocol
from_SNP.dtgm.total_length from_SNP.dtgm.source_addr
from_SNP.dtgm.identification from_SNP.dtgm.destination_addr
from_SNP.dtgm.dont_frag_flag from_SNP.dtgm.options
from_SNP.dtgm.more_frag_flag from_SNP.dtgm.padding
- Return values:
NO -- checksum did not check indicating header fields
contain errors
YES -- checksum was consistent
The algorithm:
--The checksum algorithm is the 16-bit one's complement
--of the one's complement sum of all 16-bit words in
--the IP header. For purposes of computing the checksum,
--the checksum field is set to zero.
--implementation dependent action
System Development Corporation
1 June 1981 -44- IEN 186
6.3.6.2.2 ULP_params_valid
The ULP_params_valid function examines the interface parameters
received from a ULP to see if all values are within legal ranges
and desired options are supported.
The data effects of this function are:
- Data examined only:
from_ULP.time_to_live
from_ULP.options
- Return values:
NO - some value is illegal or a desired option is not supported.
YES - examine values are within legal ranges and desired
options can be supported.
The algorithm:
if (
--The time-to-live value must be greater than zero to
--allow IP to transmit it at least once.
(from_ULP.time_to_live < 0 )
or --The options requested should be checked for consistency.
--implementation dependent action
or --Check other implementation dependent values.
)
then return NO
else return YES;
end if;
System Development Corporation
1 June 1981 -45- IEN 186
6.3.6.2.3 SNP_params_valid
The SNP_params_valid function examines the interface parameters
and the datagram received from the local subnetwork protocol to
see if all values are within legal ranges and no errors have
occured.
The data effects of this function are:
- Data examined only:
from_SNP.dtgm.version from_SNP.dtgm.source_addr
from_SNP.dtgm.header_length from_SNP.dtgm.destination_addr
from_SNP.dtgm.total_length from_SNP.dtgm.options
from_SNP.dtgm.protocol other information/errors from SNP
- Return values:
NO - some value or values are illegal or an error has occured
YES - examined values are within legal ranges and no
errors have occured
The algorithm:
if ( --The current IP header version number is 4.
(from_SNP.dtgm.version /= 4)
--The minimal IP header is 5 32-bit units in length.
or (from_SNP.dtgm.header_length < 5)
--The smallest legal datagram contains only a header and is
--20 octets in length.
or (from_SNP.dtgm.total_length < 20)
--The legal protocol identifiers are provided in [13].
or (from_SNP.dtgm.protocol is not one of the acceptable identifiers)
--The legal network address mappings are provided in [12].
or (from_SNP.dtgm.source_addr is not an acceptable address)
--The legal network address mappings are provided in [12].
or (from_SNP.dtgm.destination_addr is not an acceptable address)
)
then return NO
elseif (any implementation dependent values received from the
SNP are illegal or indicate error conditions)
then return NO
else return YES; --Otherwise, all values look good.
endif;
System Development Corporation
1 June 1981 -46- IEN 186
endif;
System Development Corporation
1 June 1981 -47- IEN 186
6.3.6.2.4 where to
The where_to function determines the destination of the incoming
datagram by examining the address fields and options fields of
the datagram header.
The data effects of this function are:
- Data examined only:
from_SNP.dtgm.destination_addr
from_SNP.dtgm.protocol
from_SNP.dtgm.options
- Return values:
ULP - destination is an upper layer protocol at this location
IP - destination is this IP module
REMOTE - destination is some remote location
The algorithm:
--The source route influences the datagram's gateway route.
if ((from_SNP.dtgm.options contains the source routing option)
then return REMOTE;
endif;
--Examine the destination address field of the datagram header.
if ((from_SNP.dtgm.destination_addr /= this site's address)
then
--It's destined for another site.
return REMOTE
else
--It's destined for this site.
if (from_SNP.dtgm.protocol = the IP identifier)
then return IP
else
--Verify existence of addressed ULP at this location.
if (from_SNP.dtgm.protocol exists here)
then return ULP
end if;
end if;
end if;
System Development Corporation
1 June 1981 -48- IEN 186
6.3.6.2.5 TTL valid
The TTL_valid function examines the IP header time-to-live field
of an incoming datagram to determine whether the datagram has
exceeded its allowed lifetime.
The data effects of this function are:
- Data examined only:
from_SNP.dtgm.time_to_live
- Return values:
NO - the datagram has expired
YES - the datagram has some life left in it
The algorithm:
--Decrement from_SNP.dtgm.time_to_live field by the maximum
--of either the amount of time elapsed since the last IP module
--handled this datagram (if known) or one second.
if (( from_SNP.dtgm.time_to_live
- maximum(number of seconds elapsed since last IP, 1))
<= 0 )
then return NO
else return YES;
System Development Corporation
1 June 1981 -49- IEN 186
6.3.6.2.6 a frag
The a_frag function examines certain fields in an incoming
datagram's header to determine whether the datagram is a fragment
of a larger datagram.
The data effects of this algorithm are:
- Data examined only:
from_SNP.dtgm.fragment_offset
from_SNP.dtgm.more_frag_flag
- Return values:
NO - the datagram has not been fragmented
YES - the datagram is a part of a larger datagram
The algorithm:
if ((from_SNP.dtgm.fragment_offset = 0) --contains the beginning
and (from_SNP.dtgm.more_frag_flag = 0)) --and the end of the data
then return NO --therefore it is an unfragmented datagram
else return YES; --otherwise it contains only a portion of the data
--and is a fragment.
System Development Corporation
1 June 1981 -50- IEN 186
6.3.6.2.7 reassembly done
The reassembly_done function examines the incoming datagram and
the reassembly resources to determine whether the final fragment
has arrived to complete the datagram being reassembled.
The data effects of this function are:
Data examined only:
state_vector.reassembly_map from_SNP.dtgm.more_frag_flag
state_vector.total_length from_SNP.dtgm.header_length
from_SNP.dtgm.fragment_offset from_SNP.dtgm.total_length
- Return values:
NO - more fragments are needed to complete reassembly
YES - this is the only fragment needed to complete reassembly
The algorithm:
--The total data length of the original datagram, as computed from
--"tail" fragment, must be known before completion is possible.
if (state_vector.total_data_length = 0)
then
--Check incoming datagram for "tail."
if (from_SNP.dtgm.more_frag_flag = FALSE)
then
--Compute total data length and see if data in
--this fragment fills out reassembly map.
if (reassembly map from 0 to
(((from_SNP.dtgm.total_length - --total data
(from_SNP.dtgm.header_length*4)+7)/8) -- length
+7)/8 is set )
then return YES;
end if;
else
--Reassembly cannot be complete if total data length unknown.
return NO;
end if;
else --Total data length is already known. See if data
--in this fragment fills out reassembly map.
if ( all reassembly map from 0 to
(state_vector.total_data_length+7)/8 is set)
then return YES; --final fragment
else return NO; --more to come
end if;
end if;
System Development Corporation
1 June 1981 -51- IEN 186
6.3.6.2.8 need to frag
The need_to_frag function examines the interface parameters and
data from a ULP to determine whether the data can be transmitted
as a single datagram or must be transmitted as two or more
datagram fragments.
The data effects of this function are:
- Data examined only:
from_ULP.length
from_ULP.options
- Return values:
NO - one datagram is small enough for the subnetwork
YES - datagram fragments are needed to carry the data
The algorithm:
--Compute the datagram's length based on the length of data,
--the length of options, and the standard datagram header size.
if (( from_ULP.length + (number of bytes of option data) + 20 )
> maximum transmission unit of the local subnetwork )
then return YES
else return NO;
end if;
6.3.6.2.9 can frag
The can_frag function examines the don't fragment flag of the
interface parameters allows fragmentation.
The data effects of this function are:
- Data examined only:
from_ULP.dont_fragment
- Return values:
NO - don't fragment flag is set preventing fragmentation
YES -don't fragment flag is NOT set to allow fragmentation
The algorithm:
if (from_ULP.dont_fragment = TRUE)
then return NO
else return YES
end if;
System Development Corporation
1 June 1981 -52- IEN 186
6.3.6.3 Decision Table Actions
6.3.6.3.1 compute_checksum
The compute_checksum procedure calculates a checksum value for a
datagram header so that transmission errors can be detected by a
destination IP.
The data effects of this procedure are:
- Data examined:
to_SNP.dtgm.version to_SNP.dtgm.fragment_offset
to_SNP.dtgm.header_length to_SNP.dtgm.time_to_live
to_SNP.dtgm.type_of_service to_SNP.dtgm.protocol
to_SNP.dtgm.total_length to_SNP.dtgm.source_addr
to_SNP.dtgm.identification to_SNP.dtgm.destination_addr
to_SNP.dtgm.dont_frag_flag to_SNP.dtgm.options
to_SNP.dtgm.more_frag_flag to_SNP.dtgm.padding
- Data modified:
to_SNP.dtgm.checksum
The procedure:
--The checksum algorithm is the 16-bit one's complement of
--the one's complement sum of all 16-bit words
--in the IP header. For purposes of computing the checksum,
--the checksum field is set to zero.
--implementation dependent action
System Development Corporation
1 June 1981 -53- IEN 186
6.3.6.3.2 reassemble
The reassemble procedure reconstructs an original datagram from
datagram fragments. The data effects of this procedure are:
- Data examined:
from_SNP.dtgm
- Data modified:
state_vector.reassembly_map state_vector.header
state_vector.timer state_vector.data
state_vector.total_data_length
The procedure:
--A local variable is introduced to make the computations more clear.
--data_in_frag equals the number of octets of data in received fragment.
data_in_frag := (from_SNP.dtgm.total_length
-from_SNP.dtgm.header_length*4);
--Put data in its relative position in the data area of the state vector.
state_vector.data[from_SNP.dtgm.fragment_offset*8..
from_SNP.dtgm.fragment_offset*8+data_in_frag] :=
from_SNP.dtgm.data[0..data_in_frag-1];
--Fill in the corresponding entries of the reassembly map representing
--each 8-octet unit of received data.
for j in (from_SNP.dtgm.fragment_offset)..
(from_SNP.dtgm.fragment_offset + data_in_frag + 7)/8) loop
state_vector.reassembly_map[j] := 1;
end loop;
--Compute the total datagram length from the "tail-end" fragment.
if (from_SNP.dtgm.more_frag_flag = FALSE)
then state_vector.header.total_data_length :=
from_SNP.dtgm.fragment_offset*8 + data_in_frag;
end if;
--Record the header of the "head-end" fragment.
if (from_SNP.dtgm.fragment_offset = 0)
then state_vector.header := from_SNP.dtgm;
end if;
--Reset the reassembly timer if its current value is less than the
--time-to-live field of the received datagram.
System Development Corporation
1 June 1981 -54- IEN 186
state_vector.timer := maximum(
from_SNP.dtgm.time_to_live, state_vector.timer);
A reassembly algorithm may vary according to implementation con-
cerns, but each one must meet these requirements:
1. Every destination IP module must have the capacity to
receive a datagram 576 octets in length, either in one piece
or in fragments to be reassembled.
2. The header of the fragment with
from_SNP.dtgm.fragment_offset equal to zero (i.e. the
"head-end" fragment) becomes the header of the reassembling
datagram.
3. The total length of the reassembling datagram is calculated
from the fragment with from_SNP.dtgm.more_frag_flag equal to
zero (i.e. the "tail-end" fragment).
4. A reassembly timer is associated with each datagram being
reassembled. The current recommendation for the initial
timer setting is 15 seconds. Note that the choice of this
parameter value is related to the buffer capacity available
and the data rate of the subnetwork. That is, data rate mul-
tiplied by timer value equals reassembly capacity
(e.g.10Kb/s X 15secs = 150Kb).
5. As each fragment arrives, the reassembly timer is reset to
the maximum of state_vector.reassembly_resources.timer and
from_SNP.dtgm.time_to_live in the incoming fragment.
6. If the reassembly timer expires, the datagram being reassem-
bled is discarded. Also, an error datagram is returned to
the source IP to report the "time exceeded during reassem-
bly" error.
System Development Corporation
1 June 1981 -55- IEN 186
6.3.6.3.3 build&send
The build&send procedure builds an outbound datagram in the
to_SNP structure from the interface parameters and data in
from_ULP and passes it to the SNP for transmission across the
subnet.
The data effects of this procedure are:
- Data examined:
from_ULP.source_addr from_ULP.time_to_live
from_ULP.destination_addr from_ULP.dont_fragment
from_ULP.protocol from_ULP.options
from_ULP.type_of_service from_ULP.length
from_ULP.identifier from_ULP.data
- Data modified:
to_SNP.dtgm to_SNP.type_of_service_indicator
to_SNP.length to_SNP.local_destination_addr
The algorithm:
--Fill in each IP header field with information from from_ULP or
--standard values.
to_SNP.dtgm.version := 4; --Current IP version is 4.
to_SNP.dtgm.type_of_service := from_ULP.type_of_service;
--If ID is not given by ULP, the IP must supply its own.
to_SNP.dtgm.identification := from_ULP.identifier;
to_SNP.dtgm.dont_frag_flag := from_ULP.dont_fragment;
to_SNP.dtgm.more_frags_flag := 0;
to_SNP.dtgm.fragment_offset := 0;
to_SNP.dtgm.time_to_live := from_ULP.time_to_live;
to_SNP.dtgm.protocol := from_ULP.protocol;
to_SNP.dtgm.source_addr := from_ULP.source_address;
to_SNP.dtgm.destination_addr := from_ULP.destination_address;
to_SNP.dtgm.options := from_ULP.options;
to_SNP.dtgm.padding := (as needed to end the IP header
four octet boundary);
to_SNP.dtgm.header_length := 5 + (number of bytes of option data)/4;
to_SNP.dtgm.total_length := (to_SNP.dtgm.header_length)*4
+ (from_ULP.length);
--Call compute_checksum to to compute and set the checksum.
compute_checksum;
--And, fill in the data portion of the datagram.
System Development Corporation
1 June 1981 -56- IEN 186
to_SNP.dtgm.data[0..from_ULP.length -1] := from_ULP.data[0..
from_ULP.length-1];
--Set the type of service and length fields for the SNP.
to_SNP.type_of_service_indicator := to_SNP.dtgm.type_of_service;
to_SNP.length := to_SNP.dtgm.total_length;
--Call the route procedure to determine a local destination
--from the internet destination address supplied by the ULP.
route;
--Request the execution environment to pass the contents of to_SNP
--to the local subnetwork protocol for transmission.
TRANSFER to_SNP to the SNP.
NOTE: The format of the from_ULP elements is unspecified allowing an
implementor to assign data types for the interface parameters.
If those data types differ from the IP header types,
the assignment statements above become type conversions.
System Development Corporation
1 June 1981 -57- IEN 186
6.3.6.3.4 route
The route procedure examines the destination address and options
fields of an outbound datagram in to_SNP to determine a local
destination address.
The data effects of this procedure are:
- Data examined:
to_SNP.dtgm.destination_addr
to_SNP.dtgm.options
- Data modified:
to_SNP.local_destination_addr
The procedure:
--The source routing option influences the path of the datagram.
--If that option is present, use the top of the source route list
--as the destination; otherwise use the header's destination
--address field.
if (source routing present in options)
then destination := (first address on source route list)
else destination := to_SNP.dtgm.destination_addr;
endif;
if (the network id field of destination matches the network id
of the local subnet protocol )
then
--Translate the REST field of destination into the subnetwork
--address of the destination on this subnet.
--implementation dependent action
else
--Find the appropriate gateway and its subnetwork address
--based on the network id field of the destination.
--implementation dependent action
end if;
--Set the local destination interface parameter.
to_SNP.local_destination_addr := (subnetwork address found above);
System Development Corporation
1 June 1981 -58- IEN 186
6.3.6.3.5 local delivery
The local_delivery procedure moves the interface parameters and
data in the from_ULP structure to the to_ULP structure and
delivers it to an in-host ULP.
The data effects of this procedure are:
- Data examined:
from_ULP.destination_addr from_ULP.length
from_ULP.source_addr from_ULP.data
from_ULP.protocol from_ULP.options
from_ULP.type_of_service
- Data modified:
to_ULP.source_addr to_ULP.length
to_ULP.destination_addr to_ULP.data
to_ULP.protocol to_ULP.options
to_ULP.type_of_service
The procedure:
--Move the interface parameters and data from the input
--structure, from_ULP, directly to the output structure, to_ULP,
--for delivery to a local ULP.
from_ULP.destination_addr := to_ULP.destination_addr;
from_ULP.source_addr := to_ULP.source_addr;
from_ULP.protocol := to_ULP.protocol;
from_ULP.type_of_service := to_ULP.type_of_service;
from_ULP.length := to_ULP.length;
from_ULP.data := to_ULP.data;
from_ULP.options := to_ULP.options;
--Request the execution environment to pass the contents of to_SNP
--to the local subnet protocol for transmission.
TRANSFER to_ULP to to_ULP.protocol.
System Development Corporation
1 June 1981 -59- IEN 186
6.3.6.3.6 remote delivery
The remote_delivery procedure decomposes a datagram arriving from
a remote IP into interface parameters and data and delivers them
to the destination ULP.
The data effects of this procedure are:
- Data examined:
from_SNP.dtgm.source_addr from_SNP.dtgm.total_length
from_SNP.dtgm.destination_addr from_SNP.dtgm.header_length
from_SNP.dtgm.protocol from_SNP.dtgm.data
from_SNP.dtgm.type_of_service from_SNP.dtgm.options
- Data modified:
to_ULP.destination_addr to_ULP.length
to_ULP.source_addr to_ULP.data
to_ULP.protocol to_ULP.options
to_ULP.type_of_service
The algorithm:
to_ULP.destination_addr := from_SNP.dtgm.destination_addr;
to_ULP.source_addr := from_SNP.dtgm.source_addr;
to_ULP.protocol := from_SNP.dtgm.protocol;
to_ULP.type_of_service := from_SNP.dtgm.type_of_service;
to_ULP.length := from_SNP.dtgm.total_length -
from_SNP.dtgm.header_length*4;
to_ULP.data := from_SNP.dtgm.data;
to_ULP.options := from_SNP.dtgm.options;
NOTE: The format of the to_ULP elements is unspecified allowing an
implementor to assign data types for the interface parameters.
If those data types differ from the IP header types,
the assignment statements above become type conversions.
System Development Corporation
1 June 1981 -60- IEN 186
6.3.6.3.7 reassembled delivery
The reassembled_delivery procedure decomposes the datagram that
has been reassembled in the state vector into interface parame-
ters and data, then delivers them to a ULP.
The data effects of this procedure are:
- Data examined:
state_vector.header.destination_addr
state_vector.header.source_addr
state_vector.header.protocol
state_vector.header.type_of_service
state_vector.header.header_length
state_vector.header.total_length
state_vector.header.options
state_vector.data
- Data modified:
to_ULP.destination_addr to_ULP.length
to_ULP.source_addr to_ULP.data
to_ULP.protocol to_ULP.options
to_ULP.type_of_service
The procedure:
to_ULP.destination_addr := state_vector.header.destination_addr;
to_ULP.source_addr := state_vector.header.source_addr;
to_ULP.protocol := state_vector.header.protocol;
to_ULP.type_of_service := state_vector.header.type_of_service;
to_ULP.length := state_vector.header.total_length;
- state_vector.header.header_length*4;
to_ULP.options := state_vector.header.options;
to_ULP.data := state_vector.data;
System Development Corporation
1 June 1981 -61- IEN 186
6.3.6.3.8 fragment&send
The fragment&send procedure breaks data that is too big to be
transmitted through the subnetwork as a single datagram into
smaller pieces for transmission in several datagrams.
The data effects of the procedure are:
- Data examined only:
from_ULP.source_addr from_ULP.length
from_ULP.destination_addr from_ULP.data
from_ULP.protocol from_ULP.options
from_ULP.type_of_service
- Data modified:
to_SNP.dtgm to_SNP.type_of_service_indicators
to_SNP.length to_SNP.local_destination_address
Some "local variables" are used to make the procedure clearer:
number_of_fragments -- number of small datagrams created from
user data
data_per_fragment -- the number of octets in each small datagram
number_frag_blocks -- the number of 8-octet blocks in each small
datagram
data_in_last_frag -- the number of octets in the last datagram
The procedure:
--Compute the fragmentation variables.
--The amount of data per fragment equals the max datagram size less
--the length of the datagram header.
data_per_fragment := maximum subnet transmission unit
- (20 + number of bytes of option data);
number_frag_blocks := data_per_fragment/8;
number_of_fragments := (from_ULP.length + (data_per_fragment-1))
/ data_per_fragment;
data_in_last_frag := from_ULP.length modulo data_per_fragment;
--Create the first fragment and transmit it to the SNP.
to_SNP.dtgm.version := 4;
to_SNP.dtgm.header_length := 5 + (number bytes of option data/4);
to_SNP.dtgm.total_length := to_SNP.dtgm.header_length
System Development Corporation
1 June 1981 -62- IEN 186
+ data_per_fragment;
to_SNP.dtgm.identifier := from_ULP.identification;
to_SNP.dtgm.dont_frag_flag := from_ULP.dont_fragment;
to_SNP.dtgm.more_frag_flag := TRUE;
to_SNP.dtgm.fragment_offset := 0;
to_SNP.dtgm.time_to_live := from_ULP.time_to_live;
to_SNP.dtgm.protocol := from_ULP.protocol;
to_SNP.dtgm.source_addr := from_ULP.source_addr;
to_SNP.dtgm.destination_addr := from_ULP.destination_addr;
to_SNP.dtgm.options := from_ULP.options;
to_SNP.dtgm.padding := (as needed to end header on 4-octet boundary);
to_SNP.dtgm.data[0..data_per_fragment-1] :=
from_ULP.data[0..data_per_fragment-1];
--Set the datagram's header checksum field.
compute_checksum;
--Call route to determine the subnetwork address of the destination.
route;
--Also set the length and type of service indicators.
to_SNP.length := to_SNP.dtgm.total_length;
to_SNP.type_of_service_indicators := to_SNP.dtgm.type_of_service;
--Request the execution environment to pass the first fragment
--to the SNP.
TRANSFER to_SNP to the local subnetwork protocol.
--Format and transmit successive fragments.
for j in 1..number_of_fragments-1 loop
--The header fields remain the same as in the first fragment,
--EXCEPT for:
if ("copy" flag present in any options)
then --put ONLY "copy" options into options fields and
--adjust length fields accordingly.
to_SNP.dtgm.options := (options with "copy" flag);
to_SNP.dtgm.header_length := 5 +
(number of copy options octets/4);
else --only standard datagram header present
to_SNP.dtgm.header_length := 5;
endif;
System Development Corporation
1 June 1981 -63- IEN 186
--Append data and set fragmentation fields.
if (j /= number_of_fragments-1)
then --middle fragment(s)
to_SNP.dtgm.more_frag_flag := TRUE;
to_SNP.dtgm.fragment_offset := j*number_frag_blocks;
to_SNP.dtgm.total_length := to_SNP.dtgm.header_length
+ data_per_fragment;
to_SNP.dtgm.data[0..data_per_fragment-1] :=
from_ULP.data[j*data_per_fragment..
(j*data_per_fragment + data_per_fragment-1)];
else --last fragment
to_SNP.dtgm.more_frag_flag := FALSE;
to_SNP.dtgm.fragment_offset := j*number_frag_blocks;
to_SNP.dtgm.total_length := to_SNP.dtgm.header_length*4
+ data_in_last_frag;
to_SNP.dtgm.data[0..data_in_last_frag-1] :=
from_ULP[j*data_per_fragment..
(j*data_per_fragment+ data_in_last_frag-1)];
end if;
--Call checksum to set the datagram's header checksum field.
checksum;
--Call route to determine the subnetwork address of the destination.
route;
--Also set the length and type of service indicators.
to_SNP.length := to_SNP.dtgm.total_length;
to_SNP.type_of_service_indicators := to_SNP.dtgm.type_of_service;
--Request the execution environment to pass this fragment
--to the SNP.
TRANSFER to_SNP to the local subnetwork protocol.
end loop;
A fragmentation algorithm may vary according to implementation
concerns but every algorithm must meet the following require-
ments:
1. A datagram must not be fragmented if dtgm.dont_frag_flag is
true.
2. Data must be broken on 8-octet boundaries.
System Development Corporation
1 June 1981 -64- IEN 186
3. The minimum fragment size is 68 octets.
4. The first fragment must contain all options carried by the
original datagram, except padding and no-op octets.
5. The security, source routing, and stream identification
options (i.e. marked with "copy" flag) must be carried by
all fragments, if present in the original datagram.
6. The first fragment must have to_SNP.dtgm.fragment_offset set
to zero.
7. All fragments, except the last, must have
to_SNP.dtgm.more_frag_flag set true.
8. The last fragment must have the to_SNP.dtgm.more_frag_flag
set false.
System Development Corporation
1 June 1981 -65- IEN 186
6.3.6.3.9 analyze
The analyze procedure examines datagrams addressed to IP contain-
ing error reports from other IP modules. In general, error han-
dling is implementation dependent. However, guidelines are pro-
vided to identify classes of errors and suggest appropriate
actions. The errors and error formats are defined in section
6.2.15.
The data effects of this procedure are:
- Data examined:
from_SNP.dtgm.protocol
from_SNP.data
- Data modified:
implementation dependent
For simplicity, it is assumed that the data area can be accessed
as a byte array.
The algorithm:
--Examine the first and second octets in the data portion
--of the error datagram to identify the error reported.
case from_SNP.dtgm[1] of
when 3 => --Destination Unreachable Message
--The errors in the "unreachable" class should
--should be passed to the ULP indicating data delivery
--to the destination is unlikely if not impossible.
case from_SNP.dtgm[2] of
when 0 => --net unreachable
when 1 => --host unreachable
when 2 => --protocol unreachable
when 3 => --port unreachable
when 5 => --fragmentation needed and don't fragment
--flag set
end case;
when 11 => --Time Exceeded Message
System Development Corporation
1 June 1981 -66- IEN 186
--The "time-out" class of errors are usually not passed to the
--ULP but should be recorded for network monitoring uses.
case from_SNP.dtgm[2] of
when 0 => --Time to live exceeded in transit
when 1 => --Fragment reassembly time exceeded
end case;
when 12 => --Parameter Problem Message
--This error is generated by a gateway IP to indicate
--a problem in the options field of a datagram header.
when 4 => --Source Quench Message
--This message indicates that a datagram has been
--discarded for congestion control. The ULP should
--be informed so that traffic can be reduced.
when 5 => --Redirect Message
--This message should result in a routing table update
--by the IP module. It is not passed to the ULP.
when 8 => --Echo Datagram
--Use of this message is implementation dependent.
when 0 => --Echo Reply Datagram
--Use of this message is implementation dependent.
end case;
System Development Corporation
1 June 1981 -67- IEN 186
6.3.6.3.10 error to ULP
The error_to_ULP procedure returns an error report to a ULP which
has passed invalid parameters or has requested a service that
cannot be provided.
The data effects of this procedure are:
- Parameters:
error_param : (PARAM_PROBLEM, CAN'T_FRAGMENT,
NET_UNREACH, HOST_UNREACH,
PROTOCOL_UNREACH, PORT_UNREACH);
- Data examined:
implementation dependent
- Data modified:
to_ULP.error
implementation dependent parameters
The algorithm:
--The format of error reports to a ULP is implementation
--dependent. However, included in the report should be
--a value indicating the type of error, and some information
--to identify the associated data or datagram.
to_ULP.error := error_param;
--implementation dependent action
System Development Corporation
1 June 1981 -68- IEN 186
6.3.6.3.11 error to source
The error_to_source procedure formats and returns an error report
to the source of an erroneous or expired datagram.
The data effects of this procedure are:
- Parameters:
error_param : (PARAM_PROBLEM, EXPIRED_TTL,
HOST_UNREACH, PROTOCOL_UNREACH);
- Data examined:
from_SNP.dtgm
- Data modified:
to_SNP.dtgm to_SNP.local_destination_addrs
to_SNP.length to_SNP.type_of_service_indicators
The algorithm:
--Format and transmit an error datagram to the source IP.
to_SNP.dtgm.version := 4; --standard IP version
to_SNP.dtgm.header_length := 5; --standard header size
to_SNP.dtgm.type_of_service := 0; --least quality of service
to_SNP.dtgm.identification := select new value;
to_SNP.dtgm.more_frag_flag := FALSE;
to_SNP.dtgm.dont_frag_flag := FALSE;
to_SNP.dtgm.fragment_offset := 0;
to_SNP.dtgm.time_to_live := 60; --or value large enough to
--allow delivery
to_SNP.dtgm.protocol := 3; --Gateway-Gateway Protocol ID
to_SNP.dtgm.source_addr := from_SNP.dtgm.destination_addr;
to_SNP.dtgm.destination_addr := from_SNP.dtgm.source_addr;
--The data section carries the error message in the first four
--bytes, and the header and first 64 bytes of data of the
--bad datagram.
case error_param of
where PARAM_PROBLEM =>
to_SNP.dtgm.data[0] := 12; --Gateway type = Parameter Problem
to_SNP.dtgm.data[1] := 0; --Code = problem with option
where EXPIRED_TTL =>
to_SNP.dtgm.data[0] := 11; --Gateway type = Time Exceeded
to_SNP.dtgm.data[1] := 0; --Code = TTL exceed in transit
System Development Corporation
1 June 1981 -69- IEN 186
where HOST_UNREACH =>
to_SNP.dtgm.data[0] := 3; --Gateway type = Dest. Unreachable
to_SNP.dtgm.data[1] := 1; --Code = host unreachable
where PROTOCOL_UNREACH =>
to_SNP.dtgm.data[0] := 3; --Gateway type = Dest. Unreachable
to_SNP.dtgm.data[1] := 2; --Code = protocol unreachable
end case;
--Below, N is assumed to be the length of the bad datagram's header
--plus the first 64 bytes of its data section ( 84 <= N <= 124);
to_SNP.dtgm.data[4..N+3] := from_SNP.dtgm[0..N-1];
to_SNP.dtgm.total_length := to_SNP.header_length*4 + N;
--Compute checksum, determine the route for the error datagram,
--the type of service indicators, and the datagram size for the SNP.
compute_checksum;
to_SNP.type_of_service_indicators := 0;
to_SNP.length := to_SNP.dtgm.total_length;
route;
--Request the execution environment to pass the contents of to_SNP
--to the local subnet protocol for transmission.
TRANSFER to_SNP to the SNP.
System Development Corporation
1 June 1981 -70- IEN 186
6.3.6.3.12 reassembly timeout
The reassembly_timeout procedure generates an error datagram to
the source IP informing it of the datagram's expiration during
reassembly.
The data effects of the procedure are:
- Data examined:
state_vector.header
state_vector.data
- Data modified:
to_SNP.dtgm
to_SNP.length
to_SNP.type_of_service_indicators
to_SNP.local_destination_addrs
The algorithm:
--Format and transmit an error datagram to the source IP.
to_SNP.dtgm.version := 4; --standard IP version
to_SNP.dtgm.header_length := 5; --standard header size
to_SNP.dtgm.type_of_service := 0; --least quality of service
to_SNP.dtgm.identification := new value selected;
to_SNP.dtgm.more_frag_flag := FALSE;
to_SNP.dtgm.dont_frag_flag := FALSE;
to_SNP.dtgm.fragment_offset := 0;
to_SNP.dtgm.time_to_live := 60;
to_SNP.dtgm.protocol := 3; --Gateway-Gateway Protocol ID
to_SNP.dtgm.source_addr := state_vector.header.destination_addr;
to_SNP.dtgm.destination_addr := state_vector.header.source_addr;
--The data section carries the error message in the first four
--bytes, and the header and first 64 bytes of data of the
--timed-out datagram.
to_SNP.dtgm.data[0] := 12; --Gateway type = Time Exceeded
to_SNP.dtgm.data[1] := 1; --Code = fragment reassembly timeout
--Below, N is assumed to be the length of the expired datagram's header
--plus the first 64 bytes of its data section ( 84 <= N <= 124 ).
to_SNP.dtgm.data[4..N+3] := state_vector.data[0..N-1];
to_SNP.dtgm.total_length := to_SNP.header_length*4 + N;
--Compute checksum, determine the route for the error datagram,
--the type of service indicators, and the datagram size for the SNP.
System Development Corporation
1 June 1981 -71- IEN 186
compute_checksum;
to_SNP.type_of_service_indicators := 0;
to_SNP.length := to_SNP.dtgm.total_length;
route;
--Request the execution environment to pass the contents of to_SNP
--to the local subnet protocol for transmission.
TRANSFER to_SNP to the SNP.
System Development Corporation
1 June 1981 -72- IEN 186
7. EXECUTION ENVIRONMENT REQUIREMENTS
This section describes the facilities required of an execution
environment for proper implementation and operation of the Inter-
net Protocol. Throughout this document, the environmental model
portrays each protocol as an independent process. Within this
model, the execution environment must provide two facilities:
inter-process communication and timing.
7.1 Inter-process communication
The execution environment must provide an inter-process communi-
cation facility to enable independent processes to exchange
variable-length units of information, called messages. For IP's
purposes, the IPC facility is not required to preserve the order
of messages.
IP uses the IPC facility to exchange interface parameters and
data with upper layer protocols across its upper interface and
the subnetwork protocol across the lower interface. Sections 3
and 5 specify these interfaces.
7.2 Timing
The execution environment must provide a timing facility that
maintains a real-time clock with units no coarser than 1 mil-
lisecond. A process must be able to set a timer for a specific
time period and be informed by the execution environment when the
time period has elapsed. A process must also be able to cancel a
previously set timer.
Two IP mechanisms use the timing facility. The internet times-
tamp carries timing data in millisecond units. The reassembly
mechanism uses timers to limit the lifetime of a datagram being
reassembled. In the mechanism specification this facility is
called TIMEOUT.
System Development Corporation
1 June 1981 -73- IEN 186
8. BIBLIOGRAPHY
1. "DCEC Protocols Standardization Program Preliminary Archi-
tecture Report" TM-7038/200/00, Contract No. DCA100-80-C-
0044, February 1981.
2. "Protocol Specification Guidelines", TM-7038/204/00, Con-
tract No. DCA100-80-C-0044, June 1981.
3. V. Cerf and R. Kahn, "A Protocol for Packet Network Inter-
connection", IEEE Transactions on Communications, May 1974.
4. J. Postel (ed.), "DoD Standard Internet Protocol", Defense
Advanced Research Projects Agency, Information Processing
Techniques Office, RFC760, IEN128, January 1980.
5. J. Postel (ed.), "DoD Standard Transmission Control Proto-
col", Defense Advanced Research Projects Agency, Information
Processing Techniques Office, RFC761, IEN129, January 1980.
6. V. Cerf and P. Kirstein, "Issues in Packet-Network Intercon-
nection", Proceedings of the IEEE, November 1978, pp.1386-
1408.
7. P.T. Kelly, "Public Packet Switched Data Networks, Interna-
tional Plans and Standards", Proceedings of the IEEE,
November 1978, pp.1539-1549.
8. D. Boggs, J. Shoch, E. Taft, and R. Metcalfe, "Pup: An
Internetwork Architecture", IEEE Transactions on Communica-
tions, April 1980, pp.612-624.
9. J. Postel, "Internetwork Protocol Approaches", IEEE Transac-
tions on Communications, April 1980, pp.604-611.
10. J. Shoch, "Inter-Network Naming, Addressing, and Routing",
COMPCON, IEEE Computer Society, Fall 1978.
11. J. Shoch, "Packet Fragmentation in Inter-Network Protocols",
Computer Networks, vol.3, no.1, February 1979.
12. J. Postel, "Address Mappings", IEN 115, USC/Information Sci-
ences Institute, August 1979.
13. J. Postel, "Assigned Numbers", RFC 762, IEN 127,
USC/Information Sciences Institute, January 1980.
System Development Corporation
1 June 1981 -74- IEN 186
9. GLOSSARY
Destination
An IP header field containing an internet address indicating
where a datagram is to be sent.
datagram
A self-contained package of data carrying enough information to
be routed from source to destination without reliance on earlier
exchanges between source or destination and the transporting sub-
network.
datagram fragment
The result of fragmenting a datagram, also simply referred to as
a fragment. A datagram fragment carries a portion of data from
the larger original, and a copy of the original datagram header.
The header fragmentation fields are adjusted to indicate the
fragment's relative position within the original datagram.
datagram service
A datagram, defined above, delivered in such a way that the
receiver can determine the boundaries of the datagram as it was
entered by the source. A datagram is delivered with non-zero
probability to the desired destination. The sequence in which
datagrams are entered into the subnetwork by a source is not
necessarily preserved upon delivery at the destination.
DF
Don't Fragment flag: An IP header field that when set true prohi-
bits an IP module from fragmenting a datagram to accomplish
delivery.
fragmentation
The process of breaking the data within a datagram into smaller
pieces and attaching new internet headers to form smaller
datagrams.
Fragment Offset
A field in the IP header marking the relative position of a
datagram fragment within the larger original datagram.
gateway
A device, or pair of devices, which interconnect two or more sub-
networks enabling the passage of data from one subnetwork to
another. In this architecture, a gateway usually contains an IP
module, a Gateway-to-Gateway Protocol (GGP) module, and a subnet-
work protocol module (SNP) for each connected subnetwork.
header
Collection of control information transmitted with data between
peer entities.
System Development Corporation
1 June 1981 -75- IEN 186
host
A computer which is a source or destination of messages from the
point of view of the communication subnetwork.
Identification
An IP header field used in reassembling fragments of a datagram.
IHL
Internet Header Length: an IP header field indicating the number
of 32-bit words making up the internet header.
Internet address
A four octet (32 bit) source or destination address composed of a
Network field and a REST field. The latter usually contains a
local subnetwork address.
internet datagram
The package exchanged between a pair of IP modules. It is made
up of an IP header and a data portion.
local address
The address of a host within a subnetwork. The actual mapping of
an internet address onto local subnetwork addresses is quite gen-
eral, allowing for many to one mappings.
local subnetwork
The subnetwork directly attached to host or gateway.
MF
More Fragments flag: an IP header field indicating whether a
datagram fragment contains the end of a datagram.
module
An implementation, usually in software, of a protocol or other
procedure.
MTU
Maximum Transmission Unit: a subnetwork dependent value which
indicates the largest datagram that a subnetwork can handle.
octet
An eight bit byte.
Options
The optional set of fields at the end of the IP header used to
carry control or routing data. An Options field may contain
none, one, or several options, and each option may be one to
several octets in length. The options allow ULPs to customize
IP's services. The options are also useful in testing situations
to carry diagnostic data such as timestamps.
System Development Corporation
1 June 1981 -76- IEN 186
packet
The unit of data transmitted by a packet-switched network. A
packet usually contains nested control information and data from
the upper layer protocols using the subnetwork.
packet network
A network based on packet-switching technology. Messages are
split into small units (packets) to be routed independently on a
store and forward basis. This packetizing pipelines packet
transmission to effectively use circuit bandwidth.
Padding
An IP header field, an octet in length, inserted after the last
option field to ensure that the data portion of a datagram begins
on a 32-bit word boundary. The Padding field value is zero.
Protocol
An internet header field used to identify the upper layer proto-
col that is the source and destination of the data within an IP
datagram.
Precedence
One of the service quality parameters provided by the type of
service mechanism. Precedence is a relative measure of datagram
importance. This parameter can be set to one of five levels:
routine, priority, immediate, flash, or flash override. It
appears as a three bit field within the Type of Service field in
the IP header.
reassembly
The process of piecing together datagram fragments to reproduce
the original large datagram. Reassembly is based on fragmentation
data carried in their IP headers.
Reliability
One of the service quality parameters provided by the type of
service mechanism. The reliability parameter can be set to one
of four levels: lowest, lower, higher, or highest. It appears as
a two bit field within the Type of Service field in the IP
header.
reliability
A quality of data transmission defined as guaranteed, ordered
delivery.
Rest
The three octet field of the internet address usually containing
a local address.
segment
The unit of data exchanged by TCP modules. This term may also be
used to describe the unit of exchange between any transport
System Development Corporation
1 June 1981 -77- IEN 186
protocol modules.
Source
An IP header field containing the internet address of the
datagram's point of origin.
stream delivery service
The special handling required for a class of volatile periodic
traffic typified by voice. The class requires the maximum
acceptable delay to be only slightly larger than the minimum pro-
pagation time, or requires the allowable variance in packet
interarrival time to be small.
SNP
SubNetwork Protocol: the protocol residing in the subnetwork
layer below IP which provides data transfer through the local
subnet. In some systems, an adaptor module must be inserted
between IP and the subnetwork protocol to reconcile their dis-
similar interfaces.
TCP
Transmission Control Protocol: a transport protocol providing
connection-oriented, end-to-end reliable data transmission in
packet-switched computer subnetworks and internetworks.
TCP segment
The unit of data exchanged between TCP modules (including the TCP
header).
Total Length
An IP header field containing the number of octets in an internet
datagram, including both the IP header and the data portion.
Type of Service
An IP header field containing the transmission quality parame-
ters: precedence level, reliability level, speed level, resource
trade-off (precedence vs. reliability), and transmission mode
(datagram vs. stream). This field is used by the type of service
mechanism which allows ULPs to select the quality of transmission
for a datagram through the internet.
ULP
Upper Layer Protocol: any protocol above IP in the layered proto-
col hierarchy that uses IP. This term includes transport layer
protocols, presentation layer protocols, session layer protocols,
and application programs.
user
A generic term identifying a process or person employing a proto-
col. In IP's case, this term may describe a transport protocol,
a presentation layer protocol, a session layer protocol, or an
application program.
System Development Corporation
1 June 1981 -78- IEN 186
Version
An IP header field indicating the format of the IP header.