引言
- 在TCP/IP协议中,链路层为IP层提供服务:发送和接收数据报。不同的网络硬件类型(有线局域网、有限语音网络、无线网络、蜂窝网络),有不同的链路层。
- 链路层的PDU通常叫帧。范围从几字节到几千字节,这个范围上限称为最大传输单元MTU。
以太网和 IEEE 802 局域网
以太网这个术语通常指一套标准,以太网的网络结构通常如图所示:
CSMA/CD
- 多个站(计算机)使用同一个电缆,为了防止信息发送的碰撞现象,所以我们需要对每个站的以太网接口实现一种分布式算法,来控制每个站的数据发送。CSMA/CD应运而生,他的全称是:带冲突检测的载波侦听多路访问。
- 采用CSMA/CD,一个站首先检测网络上正在发送的信号,并在网络空闲时发送自己的帧。万一两个站同时检测到网络空闲,碰巧同时发送,发生重叠的电信号称为一次碰撞。遇到这种情况CSMA/CD的解决方法是:每个站等待一个随机时间,然后再次尝试发送。最终每个站会得到机会发送,或者在尝试一定次数后超时。采用CSMA/CD,在任何时候,网络中只能有一个帧在传输。CSMA/CD正式名称称为MAC(介质访问控制)协议。
- 具体做法:
- 一个帧完全占领信道至少要经过两倍的端到端时延。目前以太网中将这个时延设为一个定值:512比特时间。也就是意味着:实际链路的端到端时延的二倍要小于512比特时间。这个时延称为征用期。
- 发送前不断检测信道,如果为空,则等待帧最小间隔(96比特时间,帧最小间隔为了让刚收到帧的站有时间来处理刚刚收到的帧,以及清理缓存等),期间如果信道还是空闲,则发送数据。
- 如果持续发送超过征用期,则占领信道,不可能发生碰撞。
- 如果在征用期内收到其他站发来的数据包,则发生碰撞,两端立刻停止发送,并发送48比特(或32比特)的人工干扰信号,以便让所有用户知道发生了碰撞。这个人工干扰信号需要经过一个端到端时延才能到另一方。
- 发送人工干扰信号后,立刻执行退避算法。即等待一个时延后(随机数×征用期)再次检测信道。如果空闲则等待一个帧最小间隔后发送(其实就是重复上面那步)。
- 上述步骤如果退避16次后,宣布发送超时,丢弃该帧并向上层汇报。
以太网帧格式
下图表示链路层PDU的格式:
我按照出现的顺序来介绍:
- 前导字段:被接收器用于确定一个帧的到达时间,并确定编码位之间的时间量。因为以太网是一个异步的局域网(各个站的时钟不同)。
- SFD:帧起始分隔符,帧的开始标志,被接收器用来“恢复时钟”。固定值0xAB。
- 目的地址(DST):帧的接收者,也可以支持多个站点,例如广播(ARP协议)、组播(ICMPv6协议)。
- 源地址(SRC):帧的发送者地址。
- 类型字段或长度字段:用于确定头部后面的数据类型和长度。常见值:IPv4(0x0800)、IPv6(0x86DD)、ARP(0x0806)。基本帧64~1518字节。Q标签帧(类型字段为0x8100):64~1522字节。信封帧:64~2000字节。
以上字段称为帧头。
- 标签:如QoS指示符(服务质量)。包含由其他 IEEE 标准定义的各种协议字段。
- 数据区或有效载荷部分:存放高层的PDU。最大传输单元也是指这里,并不是指整个帧。
- 填充:当数据区的长度不足64k时,用来保证帧的长度满足最小长度要求。
以下字段称为帧尾
- 循环冗余检验(FCS):判断数据传输是否有误。下文会详细介绍。
帧校验序列/循环冗余检验
- 最后一个字段(FCS),提供了帧的完整性检查。方法如下:
- 循环冗余校验(CRC)字段位于尾部,有32位,要使用一个 n 位的CRC检测数据传输错误,被检查的信息首先要追加 n** 位的0形成扩展消息。然后去除以一个( n+1 )位的值,这个值也成为生成多项式。除完之后所得余数的二进制反码就是CRC**。
- 值得注意的是,CRC 使用的是 mod 2 二进制除法计算余数。与四则运算不同,模2加法是不带进位的二进制加法运算,模2减法是不带借位的二进制减法运算。该计算结果的反码放置在帧的 CRC 或 FCS 字段中。在接受到数据之后,接收方执行相同的算法,得到结果,判断与存放在 FCS 字段的值是否匹配。如果两者不匹配,帧可能在传输过程中受损,通常被丢弃。
一个例子:
帧大小
以太网帧有最大和最小尺寸,这个大小只对帧中的数据区而言,最小64字节,最大根据帧的类型来确定。
虚拟局域网
- 随着交换式以太网使用越来越多,位于同一以太网中的主机数目越来越多。这样的好处是如何主机都可以与其他主机通信,但是这样也会带来一些安全问题。所以我们要杜绝这种现象。
- IEEE 采用虚拟局域网(VLAN)的功能来区分同一以太网中的主机流量。即在帧的标签字段上添加VLAN ID来区别来自不同主机的帧。正是由于这种分隔,连在同一个交换机但在不同 VLAN 中的两台主机,它们之间的流量需要一台路由器来传递。
- 那么我们怎么为站分配 VLAN 呢
1.基于端口分配
2.基于MAC地址分配 (如果MAC地址改变将不好管理)
3.基于IP地址
网桥和交换机
- 随着以太网的发展,网速不断的提升,基于竞争传输介质的CSMA/CD协议已经逐渐的淡出历史舞台。取而代之的是:局域网中每个线路不共享,提供星形拓扑结构。通过以太网交换机实现,如图所示:
- 交换机为以太网中的每个站提供同时发送和接收收据的服务,称为全双工以太网。一次一个方向的称为半双工以太网。
- 交换机本质上是高性能的网桥。
- 每个站使用一条专用的线路连接到一个交换机端口,在这种情况下,以太网以全双工方式运行,不需要使用 CSMA/CD 算法。
- 交换机可以通过交换机端口级联来形成更大的以太网。这种端口叫做“上行端口”,说白了就是交换机连交换机。
- 多接口的计算机也可当成交换机。
互连、交换机学习
图中交换机A和B互连成一个扩展局域网。
每个网桥对连接到它上的站的MAC地址“学习”后,最终每个交换机会知道每个站可以由哪个端口到达。每个交换机会把这些地址信息存在自己的数据库中。
但是交换机不是天才,刚开启的交换机的数据库是空的,因此它不知道除自己之外的任何站的位置。因此它就要学习,我们来介绍这个学习过程:
- 当一个新开启交换机收到目的地不是自己的帧时,它知道这个帧从哪来,要到哪里去,但是它不知道这个帧要去的地方怎么走,所以它将为此帧目的端口之外的每个端口创建一个副本,并从每个端口发送帧的副本。(既然不知道怎么走,那我每个地方都发一遍,总有一个是对的)。然后记录来源端口的信息。
- 比如主机A通过端口1连接Switch,主机B通过端口2连接Switch,还有很多端口连接了其他主机。A向B发包,交换机的1端口收到后,由于没有B的信息,所以它向除了1端口以外的端口发送这个包的副本,并记录下端口1与主机A相连。
- 如果交换机不学习的话,那么每条帧都如此发送,这必将导致不必要的开销。所以学习能力可以显著的降低这个开销,这也是一个网络交换机所必备的本领。
- 由于站可能出现异动、网卡更换、MAC 地址改变等各种情况,所以过滤数据库中的一个 MAC 地址可以通过某端口访问这条信息也不能假设是永远正确的。为了解决这个问题,过滤数据库使用一个计时器(通常是五分钟)。如果在这个有效期内,没有再次看到某条目的地址,则将这个条目删除。
生成树协议STP
因为以太网中不只有一个网桥同时运行,当以太网中存在两个以上网桥时。可能会形成很多的循环帧。我们来看这个例子:
假设这个图中的机台交换机同时被打开,它们的数据库为空。当S站发送一个帧时,交换机B在端口7,8,9复制该帧。这些副本分别在交换机A,D,C被接收。交换机A在2,3端口发送副本,交换机D在22,20端口发送副本,交换机C在端口13,14发送副本。这样就产生了双向传输,这种广播风暴现象显然是“费力不讨好”,于是生成树协议就诞生啦!它的大概思路是,通过禁用某些端口,来避免拓扑环路。如下图所示:
- 黑色粗线代表生成树,可以看出没有拓扑环路。
- 一个网路拓扑相当于一个图,可能有很多生成树,STP协议可以找出一个较优的生成树。
STP中端口的状态
- 阻塞状态:一个网络拓扑初始化时,各个端口会进入阻塞状态。不进行地址学习,数据转发或BPDU发送。但是会监控、接收BPDU。
- 当处于阻塞状态下的端口需要被包含在根桥路径上时,或者经过最大时间时,它会转变为侦听状态。
- 侦听状态:在侦听状态下,该端口现在允许发送BPDU,但不学习地址或转发数据。
- 经过15秒的转发延迟(delay)后,端口进入学习状态。
- 学习状态:这里允许执行除转发数据之外的所有过程。
- 经过15秒的转发延迟(delay)后,端口进入转发状态。
- 转发状态:什么都能做的状态。
- 禁用状态:什么都不能做的状态。
STP中端口扮演的角色
两个重要的角色,附上英文好好揣摩。
- 根端口(root bridge):在生成树的边(edge)上,朝向根网桥的端口。
- ports at the end of an edge on the spanning tree headed toward the root.
- 指定端口(designated port):处于转发状态,作为从附加网段(attached segment)到根的最小路径上的端口。
- ports in the forwarding state acting as the port on the least-cost path to the root from the attached segment.
BPDU
BPDU:网桥协议数据单元,是STP在形成和维护生成树过程中所使用的帧。在一个生成树开始建立时,只有根网桥才能发送BPDU,如果后来有拓扑变化等情况,其他网桥也可以发送特殊类型的BPDU。
- 前导字段:略。
- SFD帧起始标志:略。
- DST:BPDU总是被发送至01:80:C2:00:00:00,并且不会通过一个未修改的网桥转发。
- SRC:传统以太网帧头部的一部分。这里略过。
- L/C(长度/类型):传统以太网帧头部的一部分。这里略过。
- LLC/SNAP:此头部由802.1定义,针对BPDU设置为常数0x424203,STP用LLC(逻辑链路控制)封装。并非所有 BPDU都用LLC/SNAP封装,但这是很常见的选项。
- 协议Prot:给出协议的ID号,BPDU中被设置成0。
- 版本Vers:被设置成0或2,取决于使用STP还是RSTP。
- 类型Type:与版本字段类似。
- 标志Flags:包含拓扑变化(TC)和拓扑变化确认(TCA)位。附加位详解如下:
- TC:一位。
- P(建议):1位。
- 端口角色:2位,00 为未知,01 为替代or备份,10 为根端口,11 为指定端口。
- L(学习):1位。
- F(转发):1位。
- A(协议):1位。
- TCA:1位。
- 根ID:给出发送方使用的根网桥标识符。用来确定根网桥。
- 根路径成本:到达根ID字段中指定的网桥的路径计算成本,用于计算生成树算法。
- 网桥ID:交换机的6字节的MAC地址,以及前面一个2字节的优先级字段。优先级的值可以通过管理软件来设置,强制要求生成树以某个特定网桥为根网桥。
- PID:是端口标识符(端口ID)和端口号(有发送帧给出)的集合。
- 消息有效期MsgA:此字段不像其他与时间相关的字段一样是一个固定值。根网桥发送BPDU时将该字段设置为0。任何接收BPDU的桥将在其非根端口上发送帧,该字段增加1。实质上,该字段用作计数器,给出在接收BPDU之前已经处理的桥的数量。
- 最大有效期MaxA:指出 BPDU 超时的期限,默认为 20 秒。在端口上接收到BPDU时,其包含的信息被保存在存储器中(内存),并参与到STP算法的执行中,直到超时,超时是发生在(MaxA – MsgA)。如果在这个时间段内根端口没有接收到另一个 BPDU,根网桥被宣布“死亡”,重新开始根网桥选举过程。
- 欢迎时间:表示BPDU帧发送间隔。
- 转发延迟:典型为 15 秒 给出在学习和收听状态下等待所花费的时间。延迟是为了等待整个生成树的同步、MAC 表的刷新。
- FCS:略。
建立生成树
第一个工作是选举根网桥。根网桥是在网络中网桥ID标识符最小(优先级和 MAC 地址结合)的网桥。具体步骤:
- 当一个网桥初始化时,都假设自己是根网桥。用自己的网桥 ID 字段作为根 ID字段,发送 BPDU 消息。
- 如果某个网桥检测到一个 根 ID 更小的消息,则立即停止发送自己的帧,并基于接受到的那个更小的 ID 构造下一步要发送的BPDU。
- 大概意思就是,如果有人比我小,我就服从于他,并且帮他宣传他是最小的。
- 如果一个BPDU传遍了整个网络,那么具有其中根ID的网桥被选为根网桥。
引用一个具体的例子来说明这个过程:
一群猴子要选出一个猴王出来,一开始,所有猴子都觉得自己能当猴王。假设有三只猴子 A、B、C:
- B 先向 A 发出挑战(交换机 B 用自己的 ID 发送 BPDU 给 A)
- 然而可惜的是, B 失败了(交换机 A 发送过来的 BPDU 中根 ID 字段比自己的要小),这样 B 就会承认 A 比较厉害,此后不再会挑战 A 的权威。(之后是基于 A 的更小的 ID 构造 BPDU,而不是发送自己的网桥 ID 了)
- B 不仅向 A 俯首称臣了,还要向隔壁的 C 传达:A 是目前最厉害的猴子!(以后发送的 BPDU 中的根 ID 字段是 A 的 mac 地址)
- 如果“A 是目前最厉害的猴子”这个消息传遍整个了猴群,那么 A 就当选了猴王。
下面来看一个实例:
点到点协议PPP
- PPP实际上是一个协议集合,不单单是一个协议。
- PPP是用于在两个节点之间,建立直接连接的数据链路层通信协议。PPP操作只关注一条链路的两端,不需要像MAC协议那样处理共享资源访问问题
- PPP协议建立链接的基本方法称为LCP(链路控制协议)。LCP建立基本链路之后,用于为各种网络层协议建立网络层链路。
PPP基本帧格式
PPP帧是基于高级数据链路协议(HDLC)建立的,PPP帧的格式也与HDLC相似。
- 前后标志:用于标记一个帧的开始和结束,固定值0x7E。当这个标志出现在帧内部,这时就出现了一些小问题,有两种解决办法,分别针对于PPP工作在异步链路和同步链路。
- 对于异步链路:PPP使用字符填充,用0x7D5E来替换帧中出现的0x7E,称为转义字符。如果转义字符出现在帧的内容中,则用0x7D5D替换。在接收时,接收方用0x7E替换接收的0x7D5E,用0x7D替换接收的0x7D5D。
- 对于同步链路:PPP使用位填充,标志位的位模式为:01111110,连续的6个1出现。在除了标志位的任何地方,在连续的5个1之后加一个0。
- 地址字段:PPP采用了HDLC的地址字段,在HDLC中地址字段用来指定哪个站正在处理。但是由于PPP只关心一个目的地,这个字段被设为定制0xFF(所有站)。
- 控制字段:HDLC控制字段用于指示帧序列和重传行为。由于链路层的可靠性功能不依靠PPP协议实现。所以控制字段设置为定值0x03。
- 协议字段:PPP帧可以携带不同种的信息类型。PPP帧的协议字段指示正在传输的数据的类型。
- 0x0000~0x00FF范围中的值包括大多数流行的网络层协议。
- 0x8000~0xBFFF中的值指关联NCP的数据。
- 0xC000~0XEFFF的协议值标识控制协议,如LCP。
- 数据字段:PPP帧携带的数据。
- 填充字段:略。
- FCS字段:用于检测数据错误。
链路控制协议LCP
链路控制协议(LCP)构成了互联网协议族中的点对点协议(PPP)的一部分。 在建立PPP通信时,发送和接收设备都发送LCP分组以确定随后的数据传输的标准。
LCP帧是在PPP帧上进行了简单的封装。
- 协议字段:固定值0xC021,表识LCP帧。
- 代码字段:给出请求或响应的操作类型。配置请求(按排序从 0x01 递增到 0X0D)、配置ACK、配置NACK 、配置REJECT 、终止请求 、终止ACK 、代码REJECT 、协议REJECT 、回送请求 、回送应答 、放弃请求 、标识 、剩余时间。
- ACK 标识接受一组选项,NACK 表明部分拒绝。
- REJECT 完全拒绝一个或多个选项。
- 配置消息使得链路两端开始基本配置过程,建立商定的选项。
- 终止消息可以清除一条链路
- 回送可由 LCP 在一条活跃的链路上随时交换,验证对方的操作。
- 放弃请求,用于性能测试,指示对方丢弃没有相应的分组。
- 标识字段:标识、剩余时间用于管理目的:了解对方的系统类型,指出链路建立的时间。
- 长度字段:LCP分组的字节长度。长度字段是LCP协议特有,PPP协议不支持这个字段。
魔术数字
如果一个工作站处于环回模式,这时会使点到点链路出现一个常见问题。魔术字(发送方选择的任意数字)是在链路建立过程中比较重要的一个参数,这个参数是在Config-Request里面被协商的,主要的作用是防止环路。LCP 通过发送魔术数字,查看是否立即返回相同类型的信息。如果是的话,视为检测到环回,并可能需要进行维护。
PPP状态机
- 链路不可用阶段:PPP链路都需从这个阶段开始和结束。
- 链路建立阶段:是PPP协议最关键和最复杂的阶段。这是在数据链路层进行。该阶段主要是发送一些配置报文来配置数据链路,这些配置的参数不包括网络层协议所需的参数。在这个阶段主要是通过LCP协议进行链路参数的配置。
- 验证阶段:多数情况下的链路两端设备是需要经过认证后才进入到网络层协议阶段,缺省情况下链路两端的设备是不进行认证的。在该阶段支持PAP 和 CHAP两种认证方式,验证方式的选择是依据在链路建立阶段双方进行协商的结果。
- 网络层协议阶段:一旦PPP完成了前面几个阶段,每种网络层协议(IP、IPX和AppleTalk)会通过各自相应的网络控制协议进行配置,每个NCP 协议可在任何时间打开和关闭。
- 网络终止阶段:PPP能在任何时候终止链路。当载波丢失、授权失败、链路质量检测失败和管理员人为关闭链路等情况均会导致链路终止。PPP 的除了不可用阶段,任何一种状态都可以立即进入网络终止阶段。
LCP工作流程
LCP 用于建立 PPP 链路 ,商定各方选项。典型的过程包括:配置请求、配置确认、认证交换、数据交换、终止交换。因为 PPP 是一个包括很多部分的通用协议,所以一条链路的建立和终止之间可以发生很多其他种类的操作。
- 配置请求: 一般而言在进入链路建立阶段时,通信双方无论哪一端都会连续发送几个配置请求报文(Config-Request报文),而这几个请求报文的数据域可能是完全一样的,而仅仅是它们的标识域不同罢了。通常一个配置请求报文的ID是从0x01开始逐步加1的,当对端接收到该配置请求报文后,无论使用何种报文(回应报文可能是Config-Ack、Config-Nak和Config-Reject三种报文中的一种)来回应对方,当通信设备收到回应后就可以将该回应与发送时的进行比较来决定下一步的操作。当配置请求报文的发送端收到Config-Ack报后,则会从当前阶段进入到下一个阶段。
- 认证:一旦底层协议表明一个关联变成活跃(例如调制解调器检测到载波),则认为这个链路已经被建立。然后,如果链接需要被认证(一般来说是要的),例如拨号到一个 ISP 时,需要一些额外的信息交换(用户名、密码),以验证链路上一方 or 双方的身份。
- 当接收Config-Request报文的一端能识别发送端所发送过来的所有配置参数选项,但对部分配置参数选项数据域中的内容不认可时,接收端将会给对端回应一个Config-Nak报文,(注意,是能够识别,只是对部分参数内容不认可,所以不是Config-Reject报文)。然而当接收端收到Config-Nak报文后,会重新发送Config-Request报文,而这个Config-Request报文与上一次所发送的Config-Request报文区别在于那些被对端不认可的配置参数选项的内容被填写到刚刚协商完后再次发送的Config-Request报文中。
- 当接收Config-Request报文的一端不能识别所有的发送端发送过来的配置参数选项时,此时接收端将会向对端回一个Config-Reject报文,该报文中的数据域只携带那些不能识别的配置参数选项(当配置参数选项的类型域不识别时)。当对端接收到Config-Reject报文后,同样会再次发送一个Config-Request报文,这个配置请求报文与上一次发送的区别在于将不可识别的那些配置参数选项给删除了。
- 链路终止:分为Terminate-Request和Terminate-Reply两种报文。LCP报文中提供了一种机制来关闭一个点对点的连接,想要关断链路的一端会持续发送Terminate-Request报文,直到收到一个Terminate-Reply为止。接收端一旦收到了一个Terminate-Request报文后,必须回应一个Terminate-Reply报文,同时等待对端先将链路断开后,再完成本端的所有断开的操作。LCP的链路终止报文的数据域与链路配置报文的数据域不一样,链路终止报文中无需携带各配置参数选项。当接收到Terminate-Reply报文才会做链路终止操作。当底层协议或硬件表明一个关联停止(例如载波消失),或发生了链路终止请求,并从对方接收到确认终止响应,则这个链路已被终止。
PPP认证
在一条 PPP链路处于网络状态前,通常需要使用某种认证机制(身份验证),识别建立链路的对方身份。
- 密码认证协议(PAP):最简单、安全性最低的认证方案就是PAP。非常简单,就是一方请求另一方发送一个明文密码。由于未加密,容易被轻易捕获。
- PAP分组翔LCP分组那样编码,协议字段设置为0xC023.
- 由于安全性低,不建议使用。
- 查询-握手认证协议(CHAP):一个随机值从认证方发送到另一方。通过一种特殊的单向(不可逆)功能,将一个随机值和共享密钥(通常由密码生成)结合形成响应中的一个数字。在接受到这个响应之后,认证方能更可靠地验证对方密钥是否正确。不会以明文方式传输密钥或者密码。每次使用不同的随机值,窃听者即使可能捕捉到这个值,也无法通过重放来欺骗对方。
- CHAP中的C代表Challenge挑战的意思即验证方会首先发起挑战:你把密码告诉我,这是第一次握手;然后被验证方才会将密码告知验证方,这是第二次握手;最后验证方反馈验证结果,这是第三次握手。而PAP则只有后两次握手,另外PAP的密码是明文,CHAP的是密文。
- CHAP认证第一步:主认证方发送挑战信息【01(此报文为认证请求)、id(此认证的序列号)、随机数据、主认证方认证用户名】,被认证方接收到挑战信息,根据接收到主认证方的认证用户名到自己本地的数据库中查找对应的密码(如果没有设密码就用默认的密码),查到密码再结合主认证方发来的id和随机数据根据MD5算法算出一个Hash值。
- CHAP认证第二步:被认证方回复认证请求,认证请求里面包括【02(此报文为CHAP认证响应报文)、id(与认证请求中的id相同)、Hash值、被认证方的认证用户名】,主认证方处理挑战的响应信息,根据被认证方发来的认证用户名,主认证方在本地数据库中查找被认证方对应的密码(口令)结合id找到先前保存的随机数据和id根据MD5算法算出一个Hash值,与被认证方得到的Hash值做比较,如果一致,则认证通过,如果不一致,则认证不通过。
- CHAP认证第三步:认证方告知被认证方认证是否通过。
网络控制协议
- 在 LCP 完成链路建立和确认之后,该链路每端都进入网络状态。然后就可以开始使用一个或多个的 NCP(Network Control Protocol,NCP 网络控制协议)来进行网络层的相关协商。
头部压缩
PPP线路的拨号速度一直很慢,在上面传输的分组大部分采用TCP/IP协议,所以他们都包含有TCP和IP的头部。由于同一TCP连接上的分组之间变化不大,其他高层协议的行为相似。我们可以把这些高层协议的头部压缩(或消除),从而减少传输字节数,达到加快传输速度的目的。
环回
在很多情况下,客户机可能希望用 Internet 协议来与同一计算机上的服务器通信。为了实现这个目标,大多是实现一种工作在网络层的环回能力。
- 使用一个虚拟的还回网络接口来实现。它像一个真正的网络接口,但实际上是一个由操作系统提供的专门的软件。
- 以 127 开头的IPv4地址就是为了这个目的而保留。类UNIX系统为环回接口分配的地址是127.0.0.1(IPv6为::1),分配的名称是localhost。Linux中,环回接口被称为** lo**。
- 发送到环回接口的IP数据报不会出现在任何网络中。
MTU
以太网帧有最小和最大尺寸。
- 最小帧要求有 64 字节,有效载荷长度最小为48长度。当有效载荷较短,就需要填充一些字节(都是 0),确保达到最小长度。
- 最小长度对使用 CSMA/CD的以太网来说很重要,如果帧太小意味着传输速度过快。当某个站检测到碰撞时,可能会发生这个帧已经传输完的情况,不知道是哪个帧发生了冲突。
- 传统以太网最大帧长度是1518字节。选择这个值也是有折衷的:如果一个帧发生了错误,那么只需要重传 1.5 KB 就好。
因为以太网有最大长度限制,所以携带高层协议PDU的长度是有限制的。不仅是以太网,在很多链路层网络中都有这个特点。链路层的这种特征叫做最大传输单元(MTU)。 - 本地链路的 MTU 对会话期间数据报的大小有直接影响。当两台主机跨越多种网络通信时,每种不同的链路可能有不同大小的 MTU。因此,在包含所有链路的整个网络路径上,最小的 MTU 叫做 路径 MTU。
- 如果 IP 需要发送一个数据报,大小大于链路层MTU,则IP通过分片将数据报分解成较小的部分,使每个分片都小于 MTU。分片会在 IP 协议中详细讨论。