数据链路层:解决的是在局域网中将数据从主机A送到B
数据在传输层叫数据段,网络层叫数据报,数据链路层叫数据帧。
以太网
以太网帧格式
以太网帧格式如下所示:
1.MAC地址一般占48个bit位为6个字节。MAC地址是可以标识唯一一台主机的地址,因为MAC地址是根据网卡序号,网卡序号是唯一确定的(网卡出厂时固定)。
2.怎么分离MAC地址(报头与有效载荷)?
通过MAC帧我们可以知道MAC报头与有效载荷定长。
3.MAC帧怎么决定将有效载荷交付给上层具体哪个协议呢?
根据MAC报头中的类型决定。
真正在网络上跑的数据都是MAC帧。
4.MAC帧解决点到点的问题。
5.局域网的通信原理关键词:MAC地址、碰撞域、目的IP地址不发生变化、同一局域网中所有设备均能收到发送端发送的数据,对比MAC地址后不符合直接丢弃即可。
6.类型:
0800表示IP报文;
0806代表里面放的是ARP,MAC帧最大一次可发送1500字节,同时MAC帧也有最小发送标准,若报文小于MAC帧最小发送量时,就是用PAD填充,但该填充无意义只是占位让其正常发送即可,后面进行解报引用时关注报头即有效载荷即可。
0835代表里面放的是RARP。
7.帧末尾是CRC校验码。
8.源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固定的。
同一局域网数据从主机A到主机B封装分用过程:
在同一局域网中将数据从主机A传输到主机B时,主机A将数据从应用层到链路层封装后放置网络中,同一局域网中的所有主机的数据链路层均收到了该数据,此时所有主机将MAC报文中的目的地址与自身IP地址相比较,若不同则丢弃该报文即可,若相同(某一台)则在链路层通过报头有效载荷定长将其分离,然后根据类型传送给上层;假u设传输到网络层的IP协议,根据总长度将报头与有效载荷分离,再根据报头中的8位协议将数据传送给上层;假设传输到传输层的TCP协议,根据TCP首部长度/首部基本单位即可知道TCP报头长度,可将报头与有效载荷分离,再根据目的端口号将数据上传给上层;假设传输到应用层的HTTP协议,HTTP协议根据空行将报头与有效载荷分离,根据报头中的content-length获得有效载荷长度即可。
广域网中将数据从主机A到主机B过程:
主机A判断目的IP地址不在该局域网中,故要将数据首先发送到最近的路由器中。首先主机A要将数据从应用层到数据链路层进行封装后放置网络中,其他主机对该报文丢弃;路由器对比MAC帧中MAC地址后解报分用,解报到网络层时查看报头属性中的目的IP地址与子网掩码进行按位与对比路由表后将报文封装(添加新的MAC帧)而后将数据传输到下一个路由器(实现NAT技术,此时MAC源地址与目的MAC地址发生改变,目的IP地址不改变),直到某一路由器通过对比路由表发现目的主机跟自己在同一局域网时,此时因为只知道目的主机的IP地址而不知道其MAC地址(因MAC地址一直在变 ,又因为在网络上跑的均是MAC帧所以必须直到目的主机的MAC地址),此时通过ARP协议可以通过目的主机的IP地址直到该主机的MAC地址,知道MAC地址后路由器封装MAC帧将其传输到主机B然后进行解报分用即可。
MAC地址
1.MAC地址用来识别数据链路层中相连的节点;
2.长度为48位及6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
3.在网卡出厂时确定不可修改,mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,是模拟出来的,但也有网卡支持用户配置mac地址)
IP地址VSMAC地址
IP地址描述的是路途总体的起点和终点;MAC地址描述的是路途上的每一个区间的起点和终点。
MTU:可以修改,但一般都是用默认值
MTU相当于发送快递时对包裹尺寸的限制,这个限制是不同的数据链路对应的物理层产生的限制。
1.以太网帧中的数据长度规定最小46字节,最大1500字节;当ARP数据包的长度不够46字节时要在后面补填充位(PAD)。
2.最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
3.如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU时需要对数据包进行分片(IP进行分片);
4.不同的数据链路层标准的MTU是不同的。
MTU与MSS关系:MTU-IP报头-TCP报头=MSS
特殊情况:分片并不一定在传输层进行,也有可能路由器MTU小进行报文分片,或者是在整个发送的路途中都在分片最终进行重装。但一般情况下建议不要分片,增加丢包率。
MTU对IP协议的影响
MTU限制每次报文发送大小,若报文大小大于MTU则IP进行分片,但会增加丢包率。当分片丢失时,TCP进行重传即可。一般情况下不建议分片,由传输层决定。
MTU对UDP协议的影响
对整个报文增加丢包率,建议不要分片。但若丢包可通过UDP报头中的16位的校验和检测得到。
MTU对TCP协议的影响
**为了减少分片,TCP在建立连接过程中,通信双方会进行MSS协商。**最理想的情况,MSS的值正好是在IP不会被分片处理的最大长度(这个长度依然是受制于数据链路层的MTU),**双方在发送SYN时会在TCP头部写入自己能支持的MSS值,然后双方得知对方的MSS值后选择较小的作为最终MSS,**MSS的值就是在TCP首部的40字节变长选项中(kind=2)
ARP协议:作用是将IP地址转为MAC地址(因在局域网中通信时必须要知道目标主机的MAC地址)
ARP协议流程:当路由器只知道局域网中某台主机的IP地址时,首先在局域网中广播本路由器的MAC地址、IP地址和目的主机IP地址,所有主机将目的主机IP地址和自身IP地址比较,若不同直接丢弃;若相同则向发送端单独发送目的主机的MAC地址。之后,路由器将数据发送到目的主机即可。**
ARP协议理论上属于链路层(因在局域网中)
ARP数据报格式
ARP不携带数据,是操作系统自己内部发的。
1.我们可从ARP报格式看到有效载荷长度为28字节,小于MAC帧最小发送量,故需要填充。
2.怎样将MAC帧首部与有效载荷分离呢? 定长
3.怎么交付于上层呢?根据类型(0806)将MAC帧首部去掉,将有效载荷(28+字节)交与ARP层(属于MAC帧的一部分,数据链路层)。
4.MAC怎么区分有效载荷与填充部分?有效载荷定长
具体使用ARP请求填写举例
ARP具体实施过程:将ARP填写完之后添加CRC就可广播至局域网中,所有主机都对其受理,均先进行解报分用查看帧类型,之后每个主机将该MAC帧交至ARP,根据op判断该MAC帧为请求还是应答,之后将目的IP地址与本机IP地址进行对比,若不同直接丢弃(在ARP中),若相同则发送ARP应答。路由器接收到应答时,提取发送端以太网位置,而后将MAC帧封装(再次填写请求ARP)将IP报文发送,最后目的主机解报分用。
具体使用ARP应答填写举例
ARP缓存:将路由器与目的主机获得的ARP暂时维护,但时间不会太久。
在linux中可通过#arp -a命令行得到与自己主机在同一局域网中的其他主机的IP地址和MAC地址,但若有一台主机跟你的主机在同一局域网但通过#arp -a并没有得到其地址时,可通过#ping +该主机的IP地址(相当于向该主机发消息),然后再使用#arp -a命令行就可看到。
本文章转发,源文章地址:https://blog.csdn.net/weixin_42617262/article/details/88854058