如何知道 PPP 帧的长度?

网络工程 层2 购买力
2021-07-06 21:02:36

接收方如何确定 PPP 帧的长度(不是 PPPoE 或 PPPoA)? PPP 帧的结构不显示长度字段。当然,在帧的末尾有一个 2 字节的校验和,后跟一个魔术字节,但这几乎是防碰撞的。

2个回答

当然,有一个 2 字节的校验和后跟一个魔术字节,但这几乎是防碰撞的。

魔术字节的出现被转义。有两种类型的转义使用,称为“字符填充”和“位填充”。

https://technet.microsoft.com/en-us/library/cc957975.aspx

PPP 报头以 16 位协议 ID 开头。你需要先看看那个,才能知道如何解释其余的。

如果协议 id 是 LCP/IPCP/IPv6CP,则标头结构通常如下所示:

struct PPP {
    uint16_t protocolId;
    uint8_t code;
    uint8_t identifier;
    uint16_t length; // <= network-encoded length field
};

如果协议 id 是 IPv4 或 IPv6,则 IP 标头紧跟在协议 id 之后。IPv4 和 IPv6 的报头中都有一个长度字段。

我不熟悉 HDLC 帧,但我假设您是从套接字接收它们的。套接字读取/接收功能将为您提供每个传入帧的大小。因此,您也可以将其用于验证目的。