RFC 1332

The PPP Internet Protocol Control Protocol (IPCP)

πŸ“… published May 1992, from ietf

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 πŸ’…

  1. A method for encapsulating datagrams over serial links.
  2. A Link Control Protocol (LCP) for establishing, configuring, and testing the data-link connection.
  3. 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 β˜•


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