数据链路层Mac协议与ARP协议
Mac帧
如何将有效载荷和报头分离?
根据固定大小
报头固定大小,按报头大小分离
如何分用?
类型为0800,代表为IP报文,应该交给网络层IP协议
目的地址 原地址为Mac地址
局域网通信
局域网发出的报文是先跟自己的主机的网络号匹配的,才知道到底是发到自己的局域网中,还是外网。
例如一个报文Mac起始地址为192.168.4.5,目标地址为192.168.4.6
先与发送的主机的子网掩码按位与,得到网络号192.168.4.0,我们主机的网络号为192.168.4,
一个局域网网络号是相同的
所以我们知道是发送到我们这台主机的子网中的。
于是将该报文发送到该子网中,所有该子网中的自己都收到了消息,但是一对比发现不是发给自己的,于是将该报文丢弃
知道匹配到MacE。
我们只知道了MacE的ip地址,但是我们不知到MacE的Mac地址,报文也就匹配不到MacE
根据目标IP地址,得到目标Mac地址 —— ARP协议 地址解析协议
在一个局域网内,一台主机发出的消息该网内所有主机都能收到消息,但是要判断是不是发送给自己,如果不是,直接丢弃
碰撞问题
a.局域网中,任何时刻,只允许一台主机发送数据
b.如果同时发送,就会发生数据碰撞问题
一个子网通常叫做碰撞域
所以得有碰撞检测,和碰撞避免
主机越多,碰撞概率越高,这也能解释为什么一个局域网中主机中太多了,造成碰撞的消息越多,网速就越慢
交换机的引入相对的解决了一些数据碰撞的问题
MTU
为什么要有mtu呢?
发送长数据,通过的网络发生碰撞的概率也就越大。
重传一个mtu大小的报文损耗也比重传一个大数据的损耗要低得多
MSS
MSS 是 TCP 协议中的一个选项,用于在 TCP 连接建立时,通过三次握手过程由发送端和接收端协商确定每个数据报文段的最大数据长度(不包括TCP头部)。这个值的主要目的是为了减少数据包在网络中的分片,从而提高传输效率。默认情况下,MSS 通常设置为 1460 字节。
MSS是IP协议不会被分片的最大数据大小
我们双方主机由于MTU可能不同 MSS也一定不同,一般是取最小的MSS通信
ARP协议
ARP是在数据链路层的协议
细节结论;
1.主机A收到ARP结果,会将ARP结果缓存起来,——有时间限制
2.任何一台主机都有可能既收到ARP请求,也一定去发送过ARP应答,
a.硬件类型指链路层网络类型,1为以太网;
b.协议类型指要转换的地址类型,0x0800为IP地址:
c.硬件地址长度对于以太网地址为6字节;
d.协议地址长度对于和IP地址为4字节
e.op字段为1表示ARP请求,op字段为2表示ARP应答。
MAC报文 ARP请求
FFFF..FF 广播地址
FFFFFF..FF 由于是不知道ipH的MAC地址的所以目的以太网地址填为FFFFFF..FF
因为是广播地址,所以所有该局域网内的主机都会处理该MAC报文,但是发现类型为0806,ARP请求,到ARP解析后,发现目的ip为 ipH,所以会丢弃该报文
MACH收到该报文后,先看到的是op字段,要先辨别这哥ARP是请求还是应答
然后再看ipH,发现是自己这台主机。此时构建ARP应答
这个应答所有人也都会收到,但是当发现目的MAC地址为macA,直接在MAC协议层将该报文丢弃,走不到ARP协议
抓包
根据网络号,做一个循环,ping所有的地址,得到别人的地址,再根据arp得到mac地址,再用抓包工具监控