文章目录
- 数据链路层
- 以太网数据帧
数据链路层
主要的协议:以太网
以太网数据帧
目的地址+源地址
通过6个字节来表示源地址和目的地址,这个比IPv4更长,这里的地址称为mac地址
mac地址做到了每个网卡都是唯一的(网卡出场的时候就写死了),所以我们可以通过mac地址确定唯一的主机
IP地址和mac地址的功能
IP用来表示一个传输过程中的起点和终点,(不考虑NAT的情况,一个IP数据报中的源IP和目的IP是固定的)
mac用来表示传输过程中,任意两个相邻点之间的地址(一个以太网帧,在每次转发过程中,源mac和目的mac都会改变
类型
类型不同表示后面的数据搭载不同的值
如果是0800 就是一个完整的IP数据报
如果是0806,那就是一个ARP请求
如果是8035,那就是一个RARP请求
CRC
帧尾就是一个基于CRC算法的校验和
循环冗余算法和(把数据的每个字节依次进行累加(溢出就溢出了))
图中的46-1500 为MTU
MTU 表示一个以太网数据帧能承载的数据范围 范围取决于硬件设备
其他硬件设备,对应的数据链路层协议,可能不一样,MTU也不一样
如果数据报超过了MTU怎么办?
IP层的分包操作 :ip层的分包,其实不是给ip的报头64k准备的,更多的是为了适应数据链路层的MTU
MTU对IP协议的影响
由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。
- 将较大的IP包分成多个小包,并给每个小包打上标签;
- 每个小包IP协议头的 16位标识(id) 都是相同的;
- 每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0);
- 到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;
- 一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数据;
MTU对UDP协议的影响
让我们回顾一下UDP协议:
- 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报。
- 这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败。那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。
MTU对于TCP协议的影响
让我们再回顾一下TCP协议:
- TCP的一个数据报也不能无限大,还是受制于MTU。TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size);
- TCP在建立连接的过程中,通信双方会进行MSS协商。
- 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)。
- 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。
- 然后双方得知对方的MSS值之后,选择较小的作为最终MSS。
- MSS的值就是在TCP首部的40字节变长选项中(kind=2);
MSS:TCP中在IP不分包的前提下,最多搭载多少载荷
MTU也取决于TCP和IP的报头
分包的开销还是有,MSS对于TCP起到一个提示效果.如果当前传输TCP的数据不超过MSS的时候,是属于最高效的状态
ARP报文
ARP报文并不是用来传输数据的,只是起到一个辅助的效果
路由器这样的设备在转发数据的时候,首先拿到的是一个IP地址(目的IP),通过IP地址来决定接下来这个数据咋走(从哪个端口出去,发到哪个设备上),因此就得决定,接下来封装的以太网数据帧的 目的mac 是啥需要 根据ARP协议就建立起IP->mac这样的映射关系.
IP->mac映射关系的建立:当设备启动的时候,就会向局域网中,广播ARP报文,每个设备收到之后,都会给出一个应答,应答的信息中包含了自己的IP和mac,发起广播的一方,就可以根据这些回应建立起映射表
例如,老师需要统计学生的信息,老师会在班群里喊一声,让学生将个人信息私聊交给老师,
同学们听到老师的消息之后,就会将自己的信息发送给老师,老师就会根据收到的信息,制作一个映射表