网络协议 您所在的位置:网站首页 mtu主机W5等级保养多久进行 网络协议

网络协议

2024-07-15 15:06| 来源: 网络整理| 查看: 265

MTU

Maximum Transmission Unit,最大传输单元,指的是数据链路层的最大payload,由硬件网卡设置MTU,是一个硬性限制 留给网络层的数据长度(以太网的有效载荷:Payload)只有 [64 -18, 1518 - 18] = [46, 1500] 留给传输层数据只有:[46-20, 1500-20] = [26, 1480] TCP 协议头占了 20 Byte, UDP 协议头占了 8 Byte(TCP 之所以协议头比 UDP 大,因它功能比较多:可靠、流速控制、自动分包等 TCP 可以传的用户数据实际上只有 [26 - 20, 1480 - 20] = [6, 1460] UDP 没有协商的能力,所以它只能直接把用户发送的数据,传给网络层(IP层),由网络层来进行分片。用 UDP 协议发送,那么如果网络发生了波动,丢失了某个 IP 包分片, 对于 UDP 而言, 它没有反馈丢失了哪个分片给发送方的能力,这就意味着:50k 的数据全都丢失了,如果需要重传,就得再次完整的传递这 50k 的数据。UDP 协议头有 2 byte 表示长度的字段。所以实际 UDP 数据包的长度不能超过65507字节(65,535 − 8字节UDP报头 − 20字节IP头部)所以如果一个应用采用 UDP 来通讯,一般都会特意控制下单个包体的大小,从而提高传输效率。 TCP 是流数据,没有该限制,而 TCP 只会重传这一个丢失的分片包。 tcpdump可以看到分片的情况,udp header只出现在一个ip分片中。(第一个,后面是ip-proto-17)(icmp也是,后面是ip-proto-1,1/17是协议号)

拓展

tcp/ip 协议栈Linux源码分析一 IPv4分片报文重组分析 Q&A tcpdump抓包是在tcp分片重组之前?看到的是很大的包1500字节包含链路层的头部和尾部吗?——不包含。MTU里包含802.1Q的头部VLAN tag吗?——包含。当网卡配置VLAN tag时,VLAN tag + Data 08:00:27:3b:d9:78, ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 64, id 35178, offset 0, flags [DF], proto ICMP (1), length 1500) 10.164.16.57 > 10.164.16.54: ICMP echo request, id 1419, seq 1, length 1480 分片(fragmentation)

icmp 的 payload=1473(两个包 : (第一个包:以太包长度1514,IP包长度1500,ICMP payload:1472) +,第二个包:以太包长度:60,IP包长:21,ICMP payload:1)

[root@network ~]# ping 30.0.1.8 -s 1473 05:29:28.845150 08:00:27:51:c8:85 > 08:00:27:94:16:65, ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 64, id 18292, offset 0, flags [+], proto ICMP (1), length 1500) 30.0.1.6 > 30.0.1.8: ICMP echo request, id 64616, seq 1, length 1480 05:29:28.845159 08:00:27:51:c8:85 > 08:00:27:94:16:65, ethertype IPv4 (0x0800), length 60: (tos 0x0, ttl 64, id 18292, offset 1480, flags [none], proto ICMP (1), length 21) 30.0.1.6 > 30.0.1.8: ip-proto-1

第二个包涉及到以太网最小帧长=64字节,只有一个Byte=c0的负载,后面的全0为padding 在这里插入图片描述

iperf tcpdump fa:16:3e:69:88:12 > fa:16:3e:3f:c5:b6, ethertype IPv4 (0x0800), length 58: 172.31.3.27.40761 > 172.31.1.160.5201: UDP, length 16 MTU 对 TCP 的影响

TCP 的一个数据报不可能无限大,还是受制于 MTU,TCP 单个数据报的最大消息长度,称为 MSS。 TCP 在建立连接的过程中,双方会进行 MSS 协商。最理想的情况下,MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度受限于数据链路层的 MTU)。双方在发送 SYN 的时候会在 TCP 的头部写入字节能支持的 MSS 值,然后双方得知对方的 MSS 值之后,选择较小的作为最终 MSS,MMS 的值就在 TCP 首部的 40 字节变长选项中(kind=2)。MTU 通过限制 MSS(单个数据报的最大消息长度) 的取值,来限制单个 TCP 包的长度

MTU 和 MSS 的关系

MSS: Maxitum Segment Size 最大分段大小,是传输层概念, 在建立TCP连接过程, 双方的SYN 报文中定义的 , 通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。为 TCP 数据包每次传输的最大数据分段大小。后面的数据传输都是按照确定的MSS进行传输。 MSS会根据物理接口的MTU计算得出 (MSS=MTU-IP头长度-TCP头长度) 为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460。通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。

MSS的主要作用是限制另一端主机发送的数据的长度,同时,主机本身也控制自己发送数据报的长度,这将使以较小MTU连接到一个网络上的主机避免分段。

对于一个以太网来说,TCP的最大报文段长度即MSS一般是1460字节(1500(MTU) - 20(IP head) - 20(TCP head) = 1460 Byte),减去12字节的TCP timestamp option,留给TCP正文数据是 1448字节 。另外,TCP流量控制采用了滑动窗口机制,发送窗口的大小要小于min(接收端通告的接收窗口大小,发送端拥塞窗口大小)。 Linux 2.6.39内核之前的TCP实现中,发送端初始拥塞窗口为3,单位是MSS (server机器内核版本未知,估计是2.6.39以前的)。也就是说TCP连接建立后,初始拥塞窗口限制第一次发送的数据长度要小于等于 1448 * 3 = 4344 字节,所以客户端 第一次recv 调用只收到了4344字节 数据。 在这里插入图片描述

路径 MTU 重要的不是两台主机所在网络的 M T U 的值,重要的是两台通信主机路径中的最小 MTU。它被称作路径 MTU。两台主机之间的路径 MTU不一定是个常数。它取决于当时所选择的路由。而选路不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此路径MTU在两个方向上不一定是一致的。traceroute 程序也是用这个方法来确定到达目的节点的路径 MTU

路径 MTU 发现机制: 在这里插入图片描述

Neutron 中的那些 MTU

在这里插入图片描述 在这里插入图片描述

global_physnet_mtu ,底层物理网络的MTU。Neutron使用这个值来计算所有虚拟网络组件的MTU。对于flat网络和VLAN网络,neutron直接使用这个值而不作修改。对于VXLAN等overlay网络,neutron会自动从这个值中减去 overlay 协议的开销(比如 vxlan=50)。默认为1500,这是以太网的标准值。 在这里插入图片描述 # Default network MTU value when not configured DEFAULT_NETWORK_MTU = 1500 physical_network_mtus,物理网络与MTU值的映射列表。映射的格式是: 。这种映射允许指定与默认的 global_physnet_mtu 值不同的物理网络 MTU 值。 在这里插入图片描述 path_mtu,在使用 overlay/tunnel 协议时,可以穿越底层物理网络基础设施而不产生碎片的IP数据包的最大尺寸(MTU)。 这个选项允许指定一个与默认的global_physnet_mtu值不同的物理网络MTU值。(如果配置了该值,计算overlay/tunnel 类型的mtu时以此为准,若未配置,则使用global_physnet_mtu的值来计算overlay/tunnel 类型的网络的mtu) 在这里插入图片描述 报文格式 Ethernet Ⅱ 以太帧

在这里插入图片描述

在tcpdump -ne的输出中,第一个length指的是链路层帧的长度,即链路层帧的数据部分的长度,不包括链路层帧头和帧尾的长度。在以太网中,链路层帧的最小长度是64字节,最大长度是1518字节。如果链路层帧的数据部分长度小于64字节,则会被填充到64字节。如果链路层帧的数据部分长度大于1518字节,则会被拆成多个帧进行传输。

为什么我抓包看到的length的最大长度为1514呢?

你提到的长度为1514是因为在以太网中,链路层帧的数据部分最大长度为1500字节。加上链路层帧头和帧尾的长度,链路层帧的总长度最大为1518字节。因此,当你使用tcpdump抓取以太网数据包时,显示的第一个length字段的最大值为1514字节。这是因为tcpdump会排除链路层帧头和帧尾的长度,只显示链路层帧的数据部分长度。

为什么我抓包看到的length的最小长度为58呢?而不是所谓的64B

你提到的长度为58是因为在以太网中,链路层帧的最小长度为64字节,但是这个长度包括链路层帧头和帧尾的长度。链路层帧头的长度为14字节,帧尾的长度为4字节(FCS校验码)。因此,链路层帧的数据部分最小长度为46字节(64 - 14 - 4),而不是64字节。

当你使用tcpdump抓取以太网数据包时,显示的第一个length字段的最小值为58字节,这是因为tcpdump会将链路层帧头和帧尾的长度都计入到了length字段中。因此,即使链路层帧的数据部分长度小于46字节,tcpdump也会显示一个至少为58字节的length值。

在这里插入图片描述

在这里插入图片描述 各Type值对应的协议

值协议0x0800Internet Protocol (IP) [RFC894]0x0801X.75 Internet0x0805X.25 Level 30x0806Address Resolution Protocol (ARP)[RFC7042]0x0808Frame Relay ARP [RFC1701]0x8000IS-IS0x8035Reverse Address Resolution Protocol (RARP) [RFC903]0x8137Novell NetWare IPX/SPX (old)0x8138Novell, Inc.0x8100IEEE Std 802.1Q - Customer VLAN Tag Type0x814CSNMP over Ethernet [RFC1089]0x86DDIP Protocol version 6 (IPv6) [RFC7042]0x8808IEEE Std 802.3 - Ethernet Passive Optical Network (EPON) [RFC7042]0x880BPoint-to-Point Protocol (PPP) [RFC7042]0x880CGeneral Switch Management Protocol (GSMP)0x8847MPLS (multiprotocol label switching) label stack - unicast [RFC 3032]0x8848MPLS (multiprotocol label switching) label stack - multicast [RFC 3032]0x8863PPP over Ethernet (PPPoE) Discovery Stage [RFC2516]0x8864PPP over Ethernet (PPPoE) Session Stage [RFC2516]0x888EIEEE Std 802.1X - Port-based network access control0x88A8IEEE Std 802.1Q - Service VLAN tag identifier (S-Tag)0x88B7IEEE Std 802 - OUI Extended Ethertype0x88C7IEEE Std 802.11 - Pre-Authentication (802.11i)0x88CCIEEE Std 802.1AB - Link Layer Discovery Protocol (LLDP)0x88E5IEEE Std 802.1AE - Media Access Control Security0x88F5IEEE Std 802.1Q - Multiple VLAN Registration Protocol (MVRP)0x88F6IEEE Std 802.1Q - Multiple Multicast Registration Protocol (MMRP) 标准描述IEEE 802.3Carrier sense multiple access with collision detection (CSMA/CD) access method and physical layer specificationsIEEE 802.3aeMedia Access Control (MAC) Parameters, Physical Layers, and Management parameters for 10Gb/s OperationRFC 894A Standard for the Transmission of IP Datagrams over Ethernet NetworksRFC 1042A Standard for the Transmission of IP Datagrams over IEEE 802 Networks VLAN 帧格式

IEEE 802.1Q标准对Ethernet帧格式进行了修改,在源MAC地址字段和协议类型字段之间加入4字节的802.1Q Tag。 VLAN帧最小帧长为64字节。

图1 VLAN帧格式 在这里插入图片描述 在这里插入图片描述

标准描述RFC 3069VLAN Aggregation for Efficient IP Address AllocationIEEE 802.1QIEEE Standards for Local and Metropolitan Area Networks : Virtual Bridged Local Area Networks

TCP 可以传的用户数据实际上只有 [26 - 20, 1480 - 20] = [6, 1460] 在这里插入图片描述 UDP 可以传的用户数据实际上只有 [26 - 8, 1480 -8] = [18, 1472] 在这里插入图片描述

网络性能

网络性能

在Linux中常见的网络性能指标如下 带宽 表示链路的最大传输速率,单位是b/s 比特/秒,在位服务器选网卡时,带宽就是最核心的参考指标,常用的带宽有1000M,10G,40G,100G等网络带宽测试,测试的不是带宽,而是网络吞吐量,Linux服务器的网络吞吐量一般会比带宽小,而对交换机等专门的网络设备来说,吞吐量一般会接近带宽吞吐量,表示没有丢包时最大的数据传输速率,单位通常是b/s比特/秒,或B/s字节/秒,吞吐量受带宽的限制,吞吐量/带宽也是该网络链路的使用率延迟,表示从网络请求发出后,一直到收到远端响应所需要的时间延迟,这个指标在不同场景中有不同含义,它可以表示建立连接需要的时间(TCP握手延时),或者一个数据包往返所需时间RTTPPS,Packet Per Second,表示已网络包为单位的传输速率,PPS通常用来评估网络的转发能力,基于Linux服务器的转发,很容易受到网络包大小的影响(交换机通常不会受太大影响,交换机可以线性转发)PPS,通常用在需要大量转发的场景中,而对TCP或者Web服务器来说,更多会用并发连接数和每秒请求数(QPS Query per Second)等指标,他们更能反映实际应用程序的性能 网络测试基准

Linux网络基于TCP/IP协议栈,不同协议层的行为不同,在测试之前,根据应用程序基于的协议层进行针对性网络性能评估,比如: 基于HTTP或HTTPS的Web应用程序,属于应用层,需要我们测试HTTP/HTTPS的性能 大多数游戏服务器,为了支持更大的同时在线人数,通常会基于TCP或UDP,与客户端交互,这时就需要测试TCP/UDP的性能 针对把Linux作为一个软交换机或路由器来用的场景,需要关注网络包的处理能力PPS,重点关注网络层的转发性能 低层协议是其上的各层网络协议的基础,低层协议的性能,也就决定了高层网络性能

PPS包转发率

传输过程中,帧之间有间距(12个字节),每个帧前面还有前导(7个字节)、帧首界定符(1个字节)。 帧理论转发率= BitRate/8 / (帧前导+帧间距+帧首界定符+报文长度)

在这里插入图片描述

以太网链路的最大帧速率和吞吐量计算

在这里插入图片描述

最大吞吐量(最大帧大小:1538B,最大以太帧大小:1518B)

最大的以太网吞吐量是通过单个传输节点实现的,当以太网帧处于最大大小时,该传输节点不会发生任何冲突。

以太网的帧开销是18字节,目的MAC(6)+源MAC(6)+Type(2)+CRC(4)。局域网规定IP最大传输单元1500字节,实际上加上以太网帧的18字节,再加上8B就是1518字节

最大帧率(最小帧大小:84B,最小以太帧:64B,最小以太网帧有效载荷:46B)

以太网是无连接的,不可靠的服务,采用尽力传输的机制。IEEE标准,一个碰撞域内,最远的两台机器之间的round-trip time 要小于512bit time.(来回时间小于512位时,所谓位时就是传输一个比特需要的时间)。这也是我们常说的一个碰撞域直径。512个位时,也就是64字节的传输时间,如果以太网数据包大于或等于64个字节,就能保证碰撞信号到达A的时候,数据包还没有传完。这就是为什么以太网要最小64个字节,同样,在正常的情况下,碰撞信号应该出现在64个字节之内,这是正常的以太网碰撞,如果碰撞信号出现在64个字节之后,叫 late collision。这是不正常的。 在这里插入图片描述

PPS 理论上限

Mbps 即 Milionbit pro second(百万位每秒); Kbps 即 Kilobit pro second(千位每秒); bps 即 bit pro second(位每秒); 1Mbps=1000 000bps

百兆端口线速包转发率=100Mbps/672=0.1488095Mpps,约等于0.14881Mpps,14万pps 千兆端口线速包转发率=1000Mbps/672=1.488095Mpps,约等于1.4881Mpps,148万pps 万兆端口线速包转发率=10000Mbps/(848bit)=14.88095Mpps,约等于14.881Mpps,1488万pps 2500M1000*1000/8/1538=20万pps # 麒麟系统到达20万pps时,ksoftirqd 就达到100%了 在这里插入图片描述

arrival为每个数据包之间的时间间隔。

基线测试

在性能测试中首先要做的是建立基线(Baseline),这样后续的调整才会有一个参考标准。值得注意的是,在测试基线的时候,一定要保证系统工作在正常的状态下。

在这里插入图片描述 在这里插入图片描述

这是通常用来衡量带宽的单位,指每秒钟传输的二进制位数; 而通常软件上显示的速度则是指每秒种传输的字节数(Byte)通常用B(大写)表示;MB即百万字节也称兆字节;KB即千字节;B即字节; 之间关系为1MB=1024KB=1024*1024B; 1B=8b; 1M带宽即指1Mbps=1000Kbps=1000/8KBps=125KBps。因此1M的带宽下载的速度一般不会超过125KB每秒。 2M、3M带宽分别是250KBps、375KBps; 2M、3M带宽的下载速度分别不会超过250KB、375KB每秒。 假设要对10kbps进行换算,则有 10kbps=10000bps=0.01Mpbs. 数据传输速率的衡量单位K是十进制含义,但数据存储的K是2进制含义。 1kbit/s就是1000bit/s,而KB是1024个字节,注意KB和kbit的区别,另外,数据传输速率的单位是bit/s 记作:bps 。 **1kbps=1000bps,1Mbps=1000,000bps. **1Mbps与 1m/s 是有区别的,1m/s指的是是1024KB/S 而1Mbps指的是1000/8KB/S也就是125KB/S, 记住K和k是没区别的 ,区别在于bps属于位每秒的单位,而m/s ,KB/S这两个属于字节每秒的单位,一字节等于8位,即1k=8b

ref

http://023wg.com/message/message/cd_feature_link-layer.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有