RFC 1332
The PPP Internet Protocol Control Protocol (IPCP)
RFC 1332: The PPP Internet Protocol Control Protocol (IPCP) π
- Who wrote it: G. McGregor from Merit, under the Network Working Group π
- Category: IAB standards track protocol π₯
- Date: May 1992 πΈ
- Obsoletes: RFC 1172, so this one replaces it π¦
- Updates: nothing listed π
Status of this Memo β¨
Okay so this RFC is an IAB standards track protocol for the whole Internet community, and it's basically asking everyone to talk about it and suggest improvements π«Ά For the current standardization state, check the latest "IAB Official Protocol Standards" list. And distribution of this memo is unlimited, so share it with everyone π
Abstract π¦
PPP (the Point-to-Point Protocol) [1] is the standard way to wrap up Network Layer protocol info and send it over point-to-point links π It also has an extensible Link Control Protocol and a whole family of Network Control Protocols (NCPs) for setting up and configuring different network-layer protocols. Iconic π
This document defines the NCP that sets up and configures the Internet Protocol [2] over PPP. It also explains how to negotiate and use Van Jacobson TCP/IP header compression [3] with PPP π
This RFC was produced by the Point-to-Point Protocol Working Group of the Internet Engineering Task Force (IETF) π
Table of Contents π
1. Introduction .......................................... 1
2. A PPP Network Control Protocol (NCP) for IP ........... 2
2.1 Sending IP Datagrams ............................ 2
3. IPCP Configuration Options ............................ 4
3.1 IP-Addresses .................................... 5
3.2 IP-Compression-Protocol ......................... 6
3.3 IP-Address ...................................... 8
4. Van Jacobson TCP/IP header compression ................ 9
4.1 Configuration Option Format ..................... 9
APPENDICES ................................................... 11
A. IPCP Recommended Options .............................. 11
SECURITY CONSIDERATIONS ...................................... 11
REFERENCES ................................................... 11
ACKNOWLEDGEMENTS ............................................. 11
CHAIR'S ADDRESS .............................................. 12
AUTHOR'S ADDRESS ............................................. 12
1. Introduction π§
Okay so PPP has three main components, and they're all giving teamwork π
- A method for encapsulating datagrams over serial links.
- A Link Control Protocol (LCP) for establishing, configuring, and testing the data-link connection.
- A family of Network Control Protocols (NCPs) for establishing and configuring different network-layer protocols.
Before anything else, each end of the PPP link has to send LCP packets to configure and test the data link. Once the link is up and any optional facilities have been negotiated (as LCP needs), PPP has to send NCP packets to pick and configure one or more network-layer protocols. After each chosen network-layer protocol is configured, its datagrams can finally go over the link π«Ά
The link stays configured until explicit LCP or NCP packets shut it down, or until something outside the protocol happens, like an inactivity timer running out or a network administrator stepping in π
2. A PPP Network Control Protocol (NCP) for IP π
The IP Control Protocol (IPCP) is in charge of configuring, enabling, and disabling the IP protocol modules on both ends of the point-to-point link β¨ It uses the same packet exchange mechanism as the Link Control Protocol (LCP). IPCP packets can't be exchanged until PPP has reached the Network-Layer Protocol phase, and any IPCP packets that show up before that phase should be silently discarded π
IPCP is basically the same as the Link Control Protocol [1], with a few differences:
Data Link Layer Protocol Field π
Exactly one IPCP packet is encapsulated in the Information field of a PPP Data Link Layer frame when the Protocol field is type hex 8021 (IP Control Protocol) π₯
Code field π
Only Codes 1 through 7 are used: Configure-Request, Configure-Ack, Configure-Nak, Configure-Reject, Terminate-Request, Terminate-Ack and Code-Reject. Any other Code should be treated as unrecognized, and it should result in a Code-Reject π
Timeouts β³
IPCP packets can't be exchanged until PPP has reached the Network-Layer Protocol phase. An implementation should be ready to wait for Authentication and Link Quality Determination to finish before it times out waiting for a Configure-Ack or any other response. It's suggested that an implementation only give up after user intervention or after a configurable amount of time π«Ά
Configuration Option Types π¦
IPCP has its own distinct set of Configuration Options, which are defined below π
2.1. Sending IP Datagrams π
Before any IP packets can be communicated, PPP has to reach the Network-Layer Protocol phase, and the IP Control Protocol has to reach the Opened state πΈ
Exactly one IP packet is encapsulated in the Information field of a PPP Data Link Layer frame when the Protocol field is type hex 0021 (Internet Protocol) β¨
The maximum length of an IP packet sent over a PPP link is the same as the maximum length of the Information field of a PPP data link layer frame. Larger IP datagrams must be fragmented as necessary. If a system wants to avoid fragmentation and reassembly, it should use the TCP Maximum Segment Size option [4] and MTU discovery [5] π§
3. IPCP Configuration Options π
IPCP Configuration Options let you negotiate the Internet Protocol parameters you want π IPCP uses the same Configuration Option format defined for LCP [1], just with its own separate set of options.
The most up-to-date values of the IPCP Option Type field are listed in the most recent "Assigned Numbers" RFC [6]. Right now they're assigned like this:
1 IP-Addresses
2 IP-Compression-Protocol
3 IP-Address
3.1. IP-Addresses π
Description πΈ
This option has been deprecated, and it's not it anymore bestie π Implementation experience showed that it's hard to make negotiation converge in every case with this option. RFC 1172 [7] has info for implementations that need backwards compatibility. The IP-Address Configuration Option replaces this one, and it's the one you should use π
This option SHOULD NOT be sent in a Configure-Request if a Configure-Request has already been received that includes either an IP-Addresses or IP-Address option. This option MAY be sent if a Configure-Reject is received for the IP-Address option, or if a Configure-Nak is received with an IP-Addresses option appended π¦
Support for this option MAY be removed once the IPCP protocol status advances to Internet Draft Standard π
3.2. IP-Compression-Protocol β¨
Description π
This Configuration Option lets you negotiate a specific compression protocol. By default, compression is not enabled π«Ά
Here's a summary of the IP-Compression-Protocol Configuration Option format. The fields go from left to right π
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 | Length | IP-Compression-Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+
Type π
2
Length π
= 4
IP-Compression-Protocol π₯
This field is two octets long and says which compression protocol you want. Its values are always the same as the PPP Data Link Layer Protocol field values for that same compression protocol.
The most up-to-date values of the IP-Compression-Protocol field are listed in the most recent "Assigned Numbers" RFC [6]. Right now they're assigned like this:
Value (in hex) Protocol
002d Van Jacobson Compressed TCP/IP
Data π§
This field is zero or more octets and holds any extra data the particular compression protocol needs π
Default π
No compression protocol enabled.
3.3. IP-Address π¦
Description π
This Configuration Option lets you negotiate the IP address used on the local end of the link. The sender of the Configure-Request can say which IP address it wants, or it can ask the peer to supply that info. The peer does this by NAKing the option and returning a valid IP address π
If negotiation about the remote IP address is needed, and the peer didn't include the option in its Configure-Request, the option SHOULD be appended to a Configure-Nak. The IP address value given has to be acceptable as the remote IP address, or it has to ask the peer to provide the info πΈ
By default, no IP address is assigned π«Ά
Here's a summary of the IP-Address Configuration Option format. The fields go from left to right β¨
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 | Length | IP-Address
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IP-Address (cont) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type π§
3
Length π
6
IP-Address π
The four-octet IP-Address is the local address the sender of a Configure-Request wants. If all four octets are set to zero, that means the sender is asking the peer to supply the IP-Address info π₯
Default π
No IP address is assigned.
4. Van Jacobson TCP/IP header compression π
Van Jacobson TCP/IP header compression shrinks TCP/IP headers down to as few as three bytes. That's a huge win on slow serial lines, especially for interactive traffic π
The IP-Compression-Protocol Configuration Option is used to say you're able to receive compressed packets. If you want bi-directional compression, each end of the link has to request this option separately π«Ά
When transmitting IP packets, the PPP Protocol field gets set to these values:
Value (in hex)
0021 Type IP. The IP protocol is not TCP, or the packet is a
fragment, or cannot be compressed.
002d Compressed TCP. The TCP/IP headers are replaced by the
compressed header.
002f Uncompressed TCP. The IP protocol field is replaced by
the slot identifier.
4.1. Configuration Option Format β¨
okay so this is the actual config option that negotiates Van Jacobson TCP/IP header compression π§ the fields go left to right, so read it like a timeline bestie π
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 | Length | IP-Compression-Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Max-Slot-Id | Comp-Slot-Id |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Here's the breakdown π
Type is 2 πΈ
Length is 6 πΈ
IP-Compression-Protocol is 002d (hex) for Van Jacobson Compressed TCP/IP headers π¦
Max-Slot-Id is one octet and tells you the maximum slot identifier. It's one less than the actual number of slots, since the slot identifier goes from zero up to Max-Slot-Id. So the math is a little sneaky π
Note: there may be implementations that have problems with only one slot (Max-Slot-Id = 0). See the discussion in reference [3]. The example implementation in [3] will only work with 3 through 254 slots. Be careful, bestie π
Comp-Slot-Id is one octet and says whether the slot identifier field may be compressed π
0: the slot identifier must not be compressed. All compressed TCP packets must set the C bit in every change mask, and must include the slot identifier. π1: the slot identifier may be compressed. β¨
The slot identifier must not be compressed if the PPP link level has no way to tell the decompression module about a reception error. Resyncing after errors depends on receiving a packet with the slot identifier, so this one is lowkey critical π See the discussion in reference [3] for the full tea β
A. IPCP Recommended Options π
The following Configuration Options are recommended π«Ά
- IP-Compression-Protocol: with at least 4 slots, usually 16 slots. π₯
- IP-Address: only on dial-up lines. π
Security Considerations π
Security issues are not discussed in this memo. Not gonna lie, that's a whole vibe check, so keep this in mind when you implement it π
References π
[1] Simpson, W., "The Point-to-Point Protocol", RFC 1331, May 1992.
[2] Postel, J., "Internet Protocol", RFC 791, USC/Information Sciences Institute, September 1981.
[3] Jacobson, V., "Compressing TCP/IP Headers", RFC 1144, January 1990.
[4] Postel, J., "The TCP Maximum Segment Size Option and Related Topics", RFC 879, USC/Information Sciences Institute, November 1983.
[5] Mogul, J., and S. Deering, "Path MTU Discovery", RFC 1191, November 1990.
[6] Reynolds, J., and J. Postel, "Assigned Numbers", RFC 1060, USC/Information Sciences Institute, March 1990.
[7] Perkins, D., and R. Hobby, "Point-to-Point Protocol (PPP) initial configuration options", RFC 1172, August 1990.
Acknowledgments π«Ά
Some of the text in this document came from RFCs 1171 & 1172, by Drew Perkins of Carnegie Mellon University, and by Russ Hobby of the University of California at Davis. Iconic of them π
Thanks to Van Jacobson for the expanded IP-Compression option, which he shared at SIGCOMM '90 β¨
Bill Simpson helped with the document formatting π
Chair's Address π¦
The working group can be contacted via the current chair:
Brian Lloyd
Lloyd & Associates
3420 Sudbury Road
Cameron Park, California 95682
Phone: (916) 676-1147
EMail: brian@ray.lloyd.com
Author's Address π
Questions about this memo can also be directed to:
Glenn McGregor
Merit Network, Inc.
1071 Beal Avenue
Ann Arbor, MI 48109-2103
Phone: (313) 763-1203
EMail: Glenn.McGregor@Merit.edu
π¦ where this page comes from
- ietf: rfc1332 1992-05
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms