城关区建设局网站,连云港网站建设培训班,优化网站制作公司好吗,天津服务设计这篇是混合《Linux性能优化实战》以及 《Wireshark网络分析就这么简单》的一些关于Linux 网络的学习概念和知识点笔记 #xff0c;主要记录网络传输流程以及对于TCP和UDP传输的一些影响因素 Linux 网络传输流程
借用一张倪朋飞先生的《Linux性能优化实战》课程中的图片 接收流… 这篇是混合《Linux性能优化实战》以及 《Wireshark网络分析就这么简单》的一些关于Linux 网络的学习概念和知识点笔记 主要记录网络传输流程以及对于TCP和UDP传输的一些影响因素 Linux 网络传输流程
借用一张倪朋飞先生的《Linux性能优化实战》课程中的图片 接收流程
网卡收到网络数据包加入到收包队列网卡将网络包写入DMA缓冲区通知中断处理程序CPU硬中断锁定DMA缓冲区将网络包拷贝到内核数据结构 sk_buff 缓冲区清空并解锁当前DMA缓冲区通知软中断通知内核收到了新的网络帧内核协议栈从缓冲区中取出网络帧在链路层检查报文合法性找出上层协议类型ipv4/ipv6去掉帧头帧尾交给网络层网络层取出IP头判断网络走向 本机的取出上层协议TCP/UDP去掉IP头交给传输层非本机转发传输层取出TCP或者UDP头根据 源 IP、源端口、目的 IP、目的端口 四元组作为标识找出对应的 Socket并把数据拷贝到 Socket 的接收缓存中应用程序就可以使用 Socket 接口读取到新接收到的数据
发送流程
应用程序通过调用 Socket API比如 sendmsg系统调用发送网络包这是一个系统调用所以会陷入到内核态的套接字层中套接字层会把数据包放到 Socket 发送缓冲区中网络协议栈从 Socket 发送缓冲区中取出数据包传输层依据协议增加TCP或UDP头网络层增加IP头通过路由寻找下一条IP并按照MTU大小分片分片后的网络包再送到网络接口层进行物理寻址找下一条MAC地址增加帧头和帧尾软中断通知驱动程序发包队列有新的网络帧需要发送驱动通过DMA从发送队列读取网络帧并通过物理网卡发送出去 TCP的一些网络影响因素
一些小概念
接收窗口Receiver Window
接收窗口表示接收方TCP缓冲区可容纳的数据量。
发送方不能发送超过接收窗口大小的数据以确保接收方有足够的时间处理数据。接收窗口大小由接收方TCP发送给发送方的窗口大小更新。
发送窗口Sender Window
发送窗口表示发送方TCP缓冲区可容纳的数据量。
接收方不能发送超过发送窗口大小的数据以确保发送方有足够的时间发送数据。发送窗口大小由发送方TCP发送给接收方的窗口大小更新。
一般由接收方的接收窗口和发送方的发送窗口的较小值决定另外网络的影响也会导致发送窗口变化
MSS 最大分段大小Maximum Segment Size
MSS表示TCP报文段的最大长度。
每个TCP连接都有一个MSS值它取决于网络的最大传输单元MTU。发送方将数据分割为适当大小的报文段以确保数据可以在TCP连接上可靠传输。
MTU 最大传输单元Maximum Transmission Unit
MTU表示网络中每个数据包的最大大小。
MTU值取决于所使用的网络和协议。在TCP/IP协议栈中MTU通常等于接收窗口大小以确保TCP数据可以在单个数据包中传输。
延迟确认
描述
在发送包时接收方延迟确认可以实现多个包一块确认减少确认包的数量减轻网络负担
缺点
在丢包较多的情况下会导致大量的超时重传极大的影响网络性能建议开启SACK提供重传效率接收窗口很小时由于运输车很小还要延迟确认就会导致大量堆积应该立即配送
过滤
wireshark 的过滤条件
tcp.analysis.ack_rtt 0.2 tcp.len0 获取超过200毫秒的确认包
Nagle算法
描述
在发送的数据还未被确认前新的小包将会被收集凑满一个MSS或者收到确认后发送
与延迟确认的区别
Nagle算法没有明显的时间规律凑满一个MSS或者收到确认后发送如果是收到确认包立即发送就可以判断是Nagle了
关于拥塞
刚开始建立连接时拥塞窗口都设定的比较小在慢启动阶段拥塞会指数型增长直到碰到临界窗口值在临界窗口值往上就会降低增长速度避免触碰网络拥塞碰到拥塞后会有超时丢包现象该阶段没有数据传输称为超时重传时间RTO超时重传后会重新进入慢启动阶段并调整临界值所以超时重传极大影响网络性能 Richard Stevens临界值设为上次发生拥塞的发送窗口的一半RFC5681 发生拥塞时没被确认的数据量的一半并不能小于2个MSS
超时重传
拥塞发生后发送方发现发出去的包不像往常一样得到确认了不过考虑收不到确认包可能是网络延迟导致所以等待一段时间再判断迟迟未收到就认定丢包了只能重传称为超时重传。
发出原始包到重传这个包的这段时间称为超时重传时间RTO。
快速重传
当发送方接受到3个或以上重复确认Dup ACK时就意识到相应的包丢了从而立即重传这些包
一些优化建议
没有拥塞时发送窗口越大性能越好。所以在没有带宽限制的时候应该尽量增大接收窗口如果经常发生拥塞限制发送窗口能提高网络性能因为重传对性能的影响极大超时重传对性能影响最大因为有一段RTO重传时间没有任何数据传输并且会将拥塞窗口设定为1MSS所以要尽量避免超时重传快速重传对性能影响相对较小因为没有等待时间并且拥塞窗口减小幅度不大SACK和NewReno有利于提高重传效率提高传输效率 早期TCP 丢包后面的包都重传效率极低NewReno 接收方推理出丢掉的包一个一个请求重传SACK 将目前接收到的包反馈给发送方ACK提示丢掉的包 例如SACK9748-9912 ACK8820 表示8820到9748之间的包未收到丢包对极小文件的影响比大文件严重因为读写一个小文件的包数量很少所以丢包可能也触发不到3个Dup ACK只能等待超时重传而大文件更容易触发快速重传 MTU 影响判定
1、如果是防火墙阻止会丢包但是在三次握手时就会丢弃而不是握手后访问丢弃
2、网络拥塞会丢包但一段时间后会恢复
3、只丢大包不丢小包可能是MTU导致的特别是1460字节的临界值时
4、ping serverip -l 1472 -f 可以测试MTU是否是1500字节
如果报错说被丢弃可能链路上存在较小的MTU考虑调整MTU 关于UDP
1、UDP不管双方的MTU大小发送方负责分片接收方负责将分片组装会消耗资源和影响性能
2、UDP没有重传机制丢包由应用层处理丢了就要全部重传而TCP仅需重传丢的包
3、分片机制不安全容易被攻击如果分片的每个包都有More fragment的flag1表示还有分片0表示没有所以如果被大量发送flag为1的UDP包就可能导致资源耗尽 LSOLarge Segment Offload 大量传输减负
描述
为缓解CPU压力把部分工作offload交给网卡处理
工作方式
TCP层将大于MSS的数据直接传给网卡网卡负责分段处理
传统方式
TCP层根据MSS分段CPU负责再交给网卡处理
位置
Windows 的配置方式
网卡》属性》配置》高级》大量传输减负