📄 rfc760.txt
字号:
|00000011| length | source route | +--------+--------+--------+---------//--------+ Type=3 The source route option provides a means for the source of an internet datagram to supply routing information to be used by the gateways in forwarding the datagram to the destination. The option begins with the option type code. The second octet is the option length which includes the option type code and the length octet, as well as length-2 octets of source route data. A source route is composed of a series of internet addresses. Each internet address is 32 bits or 4 octets. The length defaults to two, which indicates the source route is empty and the remaining routing is to be based on the destination address field. If the address in destination address field has been reached and this option's length is not two, the next address in the source route replaces the address in the destination address field, and is deleted from the source route and this option's length is reduced by four. (The Internet Header Length Field must be changed also.) Must be copied on fragmentation. Return Route +--------+--------+--------+---------//--------+ |00000111| length | return route | +--------+--------+--------+---------//--------+ Type=7 The return route option provides a means to record the route of an internet datagram. The option begins with the option type code. The second octet is the option length which includes the option type code and the length octet, as well as length-2 octets of return route data. A return route is composed of a series of internet addresses. The length defaults to two, which indicates the return route is empty.[Page 18] January 1980 Internet Protocol Specification When an internet module routes a datagram it checks to see if the return route option is present. If it is, it inserts its own internet address as known in the environment into which this datagram is being forwarded into the return route at the front of the address string and increments the length by four. Not copied on fragmentation, goes in first fragment only. Stream Identifier +--------+--------+---------+--------+ |00001000|00000010| Stream ID | +--------+--------+---------+--------+ Type=8 Length=4 This option provides a way for the 16-bit SATNET stream identifier to be carried through networks that do not support the stream concept. Must be copied on fragmentation. General Error Report +--------+--------+--------+--------+--------+----//----+ |00100001| length |err code| id | | +--------+--------+--------+--------+--------+----//----+ Type=33 The general error report is used to report an error detected in processing an internet datagram to the source internet module of that datagram. The "err code" indicates the type of error detected, and the "id" is copied from the identification field of the datagram in error, additional octets of error information may be present depending on the err code. If an internet datagram containing the general error report option is found to be in error or must be discarded, no error report is sent. ERR CODE: 0 - Undetermined Error, used when no information is available about the type of error or the error does not fit any defined class. Following the id should be as much of the datagram (starting with the internet header) as fits in the option space. 1 - Datagram Discarded, used when specific information is [Page 19] January 1980Internet ProtocolSpecification available about the reason for discarding the datagram can be reported. Following the id should be the original (4-octets) destination address, and the (1-octet) reason. Reason Description ------ ----------- 0 No Reason 1 No One Wants It - No higher level protocol or application program at destination wants this datagram. 2 Fragmentation Needed & DF - Cannot deliver with out fragmenting and has don't fragment bit set. 3 Reassembly Problem - Destination could not reassemble due to missing fragments when time to live expired. 4 Gateway Congestion - Gateway discarded datagram due to congestion. The error report is placed in a datagram with the following values in the internet header fields: Version: Same as the datagram in error. IHL: As computed. Type of Service: Zero. Total Length: As computed. Identification: A new identification is selected. Flags: Zero. Fragment Offset: Zero. Time to Live: Sixty. Protocol: Same as the datagram in error. Header Checksum: As computed. Source Address: Address of the error reporting module. Destination Address: Source address of the datagram in error. Options: The General Error Report Option. Padding: As needed. Not copied on fragmentation, goes with first fragment. Internet Timestamp +--------+--------+--------+--------+--------+--------+ |01000100|00000100| time in milliseconds | +--------+--------+--------+--------+--------+--------+ Type=68 Length=6 The data of the timestamp is a 32 bit time measured in milliseconds.[Page 20] January 1980 Internet Protocol Specification Not copied on fragmentation, goes with first fragment Satellite Timestamp +--------+--------+--------+--------+--------+--------+ |01000101|00000100| time in milliseconds | +--------+--------+--------+--------+--------+--------+ Type=69 Length=6 The data of the timestamp is a 32 bit time measured in milliseconds. Not copied on fragmentation, goes with first fragment Padding: variable The internet header padding is used to ensure that the internet header ends on a 32 bit boundary. The padding is zero.3.2. Discussion The implementation of a protocol must be robust. Each implementation must expect to interoperate with others created by different individuals. While the goal of this specification is to be explicit about the protocol there is the possibility of differing interpretations. In general, an implementation should be conservative in its sending behavior, and liberal in its receiving behavior. That is, it should be careful to send well-formed datagrams, but should accept any datagram that it can interpret (e.g., not object to technical errors where the meaning is still clear). The basic internet service is datagram oriented and provides for the fragmentation of datagrams at gateways, with reassembly taking place at the destination internet protocol module in the destination host. Of course, fragmentation and reassembly of datagrams within a network or by private agreement between the gateways of a network is also allowed since this is transparent to the internet protocols and the higher-level protocols. This transparent type of fragmentation and reassembly is termed "network-dependent" (or intranet) fragmentation and is not discussed further here. Internet addresses distinguish sources and destinations to the host level and provide a protocol field as well. It is assumed that each protocol will provide for whatever multiplexing is necessary within a host. [Page 21] January 1980Internet ProtocolSpecification Addressing The 8 bit network number, which is the first octet of the address, has a value as specified in reference [6]. The 24 bit local address, assigned by the local network, should allow for a single physical host to act as several distinct internet hosts. That is, there should be mapping between internet host addresses and network/host interfaces that allows several internet addresses to correspond to one interface. It should also be allowed for a host to have several physical interfaces and to treat the datagrams from several of them as if they were all addressed to a single host. Address mappings between internet addresses and addresses for ARPANET, SATNET, PRNET, and other networks are described in reference [4]. Fragmentation and Reassembly. The internet identification field (ID) is used together with the source and destination address, and the protocol fields, to identify datagram fragments for reassembly. The More Fragments flag bit (MF) is set if the datagram is not the last fragment. The Fragment Offset field identifies the fragment location, relative to the beginning of the original unfragmented datagram. Fragments are counted in units of 8 octets. The fragmentation strategy is designed so than an unfragmented datagram has all zero fragmentation information (MF = 0, fragment offset = 0). If an internet datagram is fragmented, its data portion must be broken on 8 octet boundaries. This format allows 2**13 = 8192 fragments of 8 octets each for a total of 65,536 octets. Note that this is consistent with the the datagram total length field. When fragmentation occurs, some options are copied, but others remain with the first fragment only. Every internet module must be able to forward a datagram of 68 octets without further fragmentation. This is because an internet header may be up to 60 octets, and the minimum fragment is 8 octets. Every internet destination must be able to receive a datagram of 576 octets either in one piece or in fragments to be reassembled.[Page 22] January 1980 Internet Protocol Specification The fields which may be affected by fragmentation include: (1) options field (2) more fragments flag (3) fragment offset (4) internet header length field (5) total length field (6) header checksum If the Don't Fragment flag (DF) bit is set, then internet fragmentation of this datagram is NOT permitted, although it may be discarded. This can be used to prohibit fragmentation in cases where the receiving host does not have sufficient resources to reassemble internet fragments. General notation in the following pseudo programs: "=<" means "less than or equal", "#" means "not equal", "=" means "equal", "<-" means "is set to". Also, "x to y" includes x and excludes y; for example, "4 to 7" would include 4, 5, and 6 (but not 7). Fragmentation Procedure The maximum sized datagram that can be transmitted through the next network is called the maximum transmission unit (MTU). If the total length is less than or equal the maximum transmission unit then submit this datagram to the next step in datagram processing; otherwise cut the datagram into two fragments, the first fragment being the maximum size, and the second fragment being the rest of the datagram. The first fragment is submitted to the next step in datagram processing, while the second fragment is submitted to this procedure in case it still too large. Notation: FO - Fragment Offset IHL - Internet Header Length MF - More Fragments flag TL - Total Length OFO - Old Fragment Offset OIHL - Old Internet Header Length OMF - Old More Fragments flag OTL - Old Total Length NFB - Number of Fragment Blocks MTU - Maximum Transmission Unit [Page 23] January 1980Internet ProtocolSpecification Procedure: IF TL =< MTU THEN Submit this datagram to the next step in datagram processing ELSE To produce the first fragment: (1) Copy the original internet header; (2) OIHL <- IHL; OTL <- TL; OFO <- FO; OMF <- MF; (3) NFB <- (MTU-IHL*4)/8; (4) Attach the first NFB*8 data octets; (5) Correct the header: MF <- 1; TL <- (IHL*4)+(NFB*8); Recompute Checksum; (6) Submit this fragment to the next step in datagram processing; To produce the second fragment: (7) Selectively copy the internet header (some options are not copied, see option definitions); (8) Append the remaining data; (9) Correct the header: IHL <- (((OIHL*4)-(length of options not copied))+3)/4; TL <- OTL - NFB*8 - (OIHL-IHL)*4); FO <- OFO + NFB; MF <- OMF; Recompute Checksum; (10) Submit this fragment to the fragmentation test; DONE. Reassembly Procedure For each datagram the buffer identifier is computed as the concatenation of the source, destination, protocol, and identification fields. If this is a whole datagram (that is both the fragment offset and the more fragments fields are zero), then any reassembly resources associated with this buffer identifier are released and the datagram is forwarded to the next step in datagram processing. If no other fragment with this buffer identifier is on hand then reassembly resources are allocated. The reassembly resources consist of a data buffer, a header buffer, a fragment block bit table, a total data length field, and a timer. The data from the fragment is placed in the data buffer according to its fragment offset and length, and bits are set in the fragment block bit table corresponding to the fragment blocks received. If this is the first fragment (that is the fragment offset is zero) this header is placed in the header buffer. If this is the last fragment ( that is the more fragments field is zero) the total data length is computed. If this fragment completes the datagram (tested by checking the bits set in the fragment block table), then the datagram is sent to the next step in datagram[Page 24] January 1980 Internet Protocol Specification processing; otherwise the timer is set to the maximum of the current timer value and the value of the time to live field from this fragment; and the reassembly routine gives up control.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -