目录
一、以太网协议
1. 认识以太网
2. 协议格式
二、 MAC地址
1. 认识MAC地址
2. 对比MAC地址与IP地址
三、ARP协议
1. 认识ARP协议
2. ARP协议的作用
3. ARP协议的工作流程
4. ARP欺骗攻击
四、MTU
1. 认识MTU
2. MTU对IP协议的影响(了解)
3. MTU对TCP协议的影响
4. MTU对UDP协议的影响
一、以太网协议
1. 认识以太网
(1)以太网不是一种具体的网络,而是一种技术标准。其中既包含了数据链路层的内容,也包含了一些物理层的内容。比如:规定了网络拓扑结构、访问控制方式,传输速率等。
(2)以太网中的网线必须使用双绞线,传输速率有10M、100M,1000M等。
(3)以太网是当前应用最为广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN等。
2. 协议格式
48位对端MAC地址,48位源端MAC地址,16位上层协议,数据,32位数据帧尾。
48位对端&源端MAC地址:
描述了相邻的两个指定物理硬件设备。
16位上层协议类型:
描述的是以太网帧中数据所使用的协议,用于数据分用时协议选择。
32位数据帧尾:
包含了校验和(CRC校验码)。
二、 MAC地址
1. 认识MAC地址
MAC地址:物理硬件地址
(1)MAC地址是每一块网卡在出厂时设定的地址,固定且不可修改(早期)。(虚拟机中的MAC地址不是真实的MAC地址,可能会产生冲突)
(2)MAC地址用来识别数据链路层中相邻的节点。
(3)MAC地址长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示。
2. 对比MAC地址与IP地址
IP地址:描述的是路途总体的起点和终点。
MAC地址:描述的是路途上的每一个区间的起点和终点。
三、ARP协议
1. 认识ARP协议
ARP协议是介于数据链路层和网络层之间的一个协议,作用就是通过IP地址获取指定设备的MAC地址。
2. ARP协议的作用
ARP协议建立了主机IP地址和MAC地址的映射关系:
(1)在网络通讯时,源端主机的应用程序知道对端主机的IP地址和端口号,但是不知道对端主机的硬件地址。
(2)数据包是先被网卡接收到,再去处理上层协议,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。
(3)所以在通讯前,必须先获得目的主机的硬件地址。
3. ARP协议的工作流程
(1)广播ARP请求,将目的端MAC地址设置为全1(广播地址),其中包含了自己的IP地址和MAC地址,以及指定设备的IP地址。
(2)收到ARP请求的主机,会验证目标IP地址与自己是否一致:一致,则组织ARP响应,填充自己的MAC地址进行回复;不一致,则丢弃。
(3)主机获取到指定主机的MAC地址后,会在arp缓存表中临时存储起来(默认保存30分钟)。
4. ARP欺骗攻击
在局域网中有个恶意主机,不断的给局域网每个主机大量的进行发送ARP响应,覆盖主机上的ARP映射表,告诉主机自己是网关,然后给网关发送ARP响应,告诉自己是主机。
解决方法:设置防火墙,添加局域网的MAC白名单等方式。
四、MTU
1. 认识MTU
MTU:链路层限制的最大传输单元,以太网默认是1500字节。
(1)以太网帧中的数据长度规定,最小为46字节,最大为1500字节。若ARP数据包的长度不足46字节,需要在后面补填充位。
(2)最大值1500字节称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU。
(3)若一个数据包从以太网路由到拨号链路上,数据包长度大于了拨号链路的MTU,则需要对数据包进行分片。
(4)不同的数据链路层标准的MTU不同。
2. MTU对IP协议的影响(了解)
由于数据链路层MTU的限制,对较大的IP数据包需要进行分包:
(1)将较大的IP包分成多个小包,并给每个小包打上标签。
(2)每个小包IP协议头的16位标识(id)都是相同的。
(3)每个小包的IP协议头的3位标志字段中,第2位置0,标识允许分片,第3位来表示结束标记(当前是最后一个小包,则置1,否则置0)。
(4)到达对端时,再将这些小包按序重组,拼接到一起后再交付给传输层。
(5)一旦这些小包中任意一个包丢失,接收端就会重组失效,但是IP层不会负责进行数据重传。
3. MTU对TCP协议的影响
回顾一下TCP协议:
(1)TCP的一个数据报不能无限大,也是受限于MTU。TCP的单个数据报的最大信息长度,称为MSS。
(2)TCP在建立连接的过程中,通信双方就会协商MSS。
(3)最理想的情况下,MSS的值正好是IP不会被分片处理的最大长度(这个长度,仍然是受限于数据链路层的MTU)。
(4)双方在发送SYN的时候会在TCP头部写入自己所能支持的MSS值。
(5)双方得知对方的MSS值后,会选择较小的值作为最终的MSS。
TCP通信时,程序员通常不用过多考虑:
因为MSS就是根据MTU计数得到的。tcp在传输层发送数据时,就是从缓冲区中取出不大于MSS大小的数据进行封装报头,然后进行传输。(在网络层不会出现数据分片)
MSS = MTU - 最小IP报头大小 - 最小TCP报头大小
4. MTU对UDP协议的影响
回顾一下UDP协议:
(1)一旦UDP携带的数据超过1472字节(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报。
(2)这多个IP数据报一旦有任意一个丢失,都会引起接收端网络层重组失败。也就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就会大大增加。
UDP通信时,不存在MSS协商过程,只要数据报整体大小小于64k就可以进行传输,但是在网络层会因为大于MTU而导致数据分片,分片后的数据到达对端主机后就需要进行分片重组,而一旦有一个分片有问题,整个数据报文就会被丢弃。
所以程序员需要最好在应用层就考虑到更多的要素,如果数据过大,就要最好在应用层分包,分包大小需要考虑MTU,尽可能的减少分片可能。