目录
- 1.MTU
- 1.认识MTU
- 2.MTU对IP协议的影响
- 3.MTU对UDP协议的影响
- 4.MTU对TCP协议的影响
- 2.ARP协议
- 0.情景铺垫
- 1.ARP协议的作用
- 2.能不能根据路由器 + 该报文的目标IP,确认清楚这个IP一定在它的子网当中?
- 3.以太网协议(MAC帧)与ARP协议之间有什么关系?
- 4.ARP协议的工作流程
- 5.ARP协议的格式
- 6.ARP看起来至少进行一次请求和一次应答,是不是每一次发送数据都要这么干?
- 7.是不是只在目标主机最终的子网中进行ARP,其他地方会不会发生ARP呢?
1.MTU
1.认识MTU
- 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位
- 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
- 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)
- 不同的数据链路层标准的MTU是不同的
2.MTU对IP协议的影响
- 由于数据链路层MTU的限制,对于较大的IP数据包要进行分包
- 将较大的IP包分成多个小包,并给每个小包打上标签
- 每个小包IP协议头的16位标识(ID)都是相同的
- 每个小包的IP协议头的3位标志字段中
- 第2位置0,表示允许分片
- 第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0)
- 到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层
- 一旦这些小包中任意一个小包丢失,接收端的重组就会失败,但是IP层不会负责重新传输数据
3.MTU对UDP协议的影响
- 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报
- 这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败
- 那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了
4.MTU对TCP协议的影响
-
对TCP的影响和UDP是一样的,只不过TCP会重传,但是毕竟也是会消耗资源的,所以尽量还是不要分片
- 因为MAC帧的规定而导致的网路层发生分片,就会增加丢包概率
- 而为了减少这样的情况,那么此时就应该让IP报文将自身交付给MAC帧时(充当MAC帧的有效载荷的时候)长度不要超过1500,也就是IP报文整体大小不要超过1500
-
IP协议要发多大的数据,不由IP协议决定,IP协议就是一个跑腿的,真正的决策(一次发送多大的数据、发多少、丢包了怎么办)是由传输层决定的,所以IP协议也没有办法
-
所以此时因该能够让TCP单次发送报文的时候,报文的大小不要超过某一个数字:MSS(Maximum segment size,最大段尺寸)
- MTU = 1500 = IP
- IP有效载荷 = 1500 - IP报头长度(20) = TCP + 数据 = 1480
- 数据 = 1480 - TCP报头长度(20) = 1460
- MSS不能大于1460
-
TCP在建立连接的过程中,通信双方会进行MSS协商
- 在最开始的时候,一个数据都没有发,因为这个MTU有可能会变化,其次发送方也想让接收方知道,其单次发送一个报文的大小 – MSS的大小(为了更顺畅的进行通讯)
- 所以在进行建立链接的时候,双方就会进行MSS的协商,也就是三次握手的时候,除了会协商双方的接收能力,也会进行协商双方单个报文的大小,尽量减少数据发送体积的问题
- 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)
- 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值
- MSS的值就是在TCP首部的40字节变长选项中(kind = 2)
- 然后双方得知对方的MSS值之后,选择较小的作为最终MSS
-
总结:
- 以上也说明了**分片不是主流,**因为当它们在建立握手的过程中的时候,交换了双方的MSS,而做了这个工作,双方在进行后续的通讯的时候,其中的数据报文的大小也就不会再出现分片问题了
2.ARP协议
- 虽然在这里介绍ARP协议,但是需要强调,ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议
0.情景铺垫
- 对于入口路由器只有F的目标IP地址:
- IP = 目标网路 + 目标主机 --> 必须知道F的MAC地址 --> 如果没有MAC地址,入口路由器就没有办法在数据连路层封装MAC帧
- 如果只知道目标主机的IP地址,而不知道对方的MAC地址,也是没办法的
- 也就是说,需要在同一个网段中通过目标IP,得知对方的MAC地址 --> ARP协议(地址解析协议)
- 而因为其是在同一个网段中,所以其是一个局域网协议
1.ARP协议的作用
- ARP协议建立了主机IP地址和MAC地址的映射关系
- 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址
- 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃
- 因此在通讯前必须获得目的主机的硬件地址
2.能不能根据路由器 + 该报文的目标IP,确认清楚这个IP一定在它的子网当中?
- 100%能做到,因为当一个报文送来的时候,它的目的IP是知道的,然后可以根据查路由表获取到目标网络,然后再和当前网络所对应的路由表目的网络做比较,来确定报文是否已经到达目标网络
- 最终确定到达目标网络,再根据整体的IP地址,再根据ARP协议获取目标主机F所对应的MAC地址因为(前面已经确定该目标IP一定属于当前网段中),获取到之后再封装MAC帧,于是便可以将数据转给主机F了
3.以太网协议(MAC帧)与ARP协议之间有什么关系?
-
二者属于在同一个大层(数据链路层),但是在同一个大层里面分为了不同的层次
- **上层:**属于局域网协议,ARP协议
- **最底层:**以太网协议,(最典型)MAC帧
-
这就是为什么以太网帧当中有一个帧类型,它用来表述的要么是ARP、要么是网络层中的协议
4.ARP协议的工作流程
- 源主机发出ARP请求,询问"IP地址是192.168.0.1的主机的硬件地址是多少",并将这个请求广播到本地网段
- 以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播
- 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中
- 每台主机都维护一个ARP缓存表,可以用arp -a命令查看
- 缓存表中的表项有过期时间(一般为20分钟)
- 如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
- 总结:
- 先广播
- 再一对一进行发送
- 所有逻辑都是封装成MAC帧,在局域网当中完成
5.ARP协议的格式
- **硬件类型:**这次要进行ARP时,对应的局域网的网络种类/网络的标准/网络的类型
- 一般固定1:以太网
- **协议类型:**要转换的地址类型
- 如:想将IP转换为MAC地址…….
- 一般固定0x0800:为IP地址(未来想将IP转换为MAC地址)
- **硬件地址长度:**对于以太网地址固定为6字节
- **协议地址长度:**对于IP地址固定为4
- 前四个为固定写法,重点是后面的字段
- op字段:
- 为1表示ARP请求
- 为2表示ARP应答
- **发送端以太网地址:**发送主机的MAC地址
- **发送端IP地址:**发送主机的IP地址
- 目的以太网地址:
- ARP请求时:因为目的就是获得目的以太网地址,所以不知道为全F(二进制全1)
- ARP应答时:为当初发送请求的MAC地址
- **目的IP地址:**目标主机的IP地址
- 为什么需要OP字段?
- 任何一个主机可能之前向目标主机发送过ARP请求,也就注定了未来会收到对应的ARP应答
- 任何一台主机,也可能被别人发起ARP请求
- 所以对于一台主机来讲,其在正常工作的时候即可能对外发送ARP,也可能收到ARP
- 局域网中:
- 任何一台主机收到ARP的时候,可能是一个应答,也可能是一个请求
- 所以需要op进行区分
6.ARP看起来至少进行一次请求和一次应答,是不是每一次发送数据都要这么干?
- 并不需要,因为一般ARP请求成功之后,请求方会暂时将IP和MAC的映射关系暂时保存下来,往后请求时会直接使用缓存当中的IP和MAC的映射关系,拿着MAC地址封装MAC帧,然后进行转发
- 其中这个保存是有时间的
- 比如说:15分钟。如果超时了,操作系统内核自动将该缓存对应的条目去掉
- 设置时间原因:当前的目标主机,可能会重启/关机,然后又来一台主机,导致局域网分配的时候重新分配IP地址,如果此时的MAC地址不更新的话,就无法发送数据**(此IP对应了上一台主机的MAC地址)**
7.是不是只在目标主机最终的子网中进行ARP,其他地方会不会发生ARP呢?
- 会,ARP的过程随时可能在网络路径中发生,一个子网中发送主机的缓存中就有可能没有目标主机的MAC地址,这个时候需要使用ARP是再正常不过的,不过正是有缓存的存在,ARP在使用中并不是大量的
- 其实不光是ARP随时可能在路径中发生,IP分片也是
- 因为数据包在进行路由的时候,整个一条的链路上,每一台主机规定的MTU有可能并不是一样大的
- 假设发送主机发送的数据大小是1500,而路径上的路由器,有可能对应的MTU比较小,最终也可能在路上进行分片(一般特别少)
- 因为一般中间路由器都是运营商设置的,所以他们的设置也是精良减少分片,但是并不能说是被彻底的排除了