一、以太网协议
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,尽可能的减少分片可能。