gEf拜客生活常识网第一次拷贝操作是内核申请完 skb 之后,这时候会将用户传递进来的 buffer 里的数据内容都拷贝到 skb 中。如果要发送的数据量比较大的话,这个拷贝操作开销还是不小的。gEf拜客生活常识网
第二次拷贝操作是从传输层进入网络层的时候,每一个 skb 都会被克隆一个新的副本出来。网络层以及下面的驱动、软中断等组件在发送完成的时候会将这个副本删除。传输层保存着原始的 skb,在当网络对方没有 ack 的时候,还可以重新发送,以实现 TCP 中要求的可靠传输。gEf拜客生活常识网
第三次拷贝不是必须的,只有当 IP 层发现 skb 大于 MTU 时才需要进行。会再申请额外的 skb,并将原来的 skb 拷贝为多个小的 skb。gEf拜客生活常识网
这里插入个题外话,大家在网络性能优化中经常听到的零拷贝,我觉得这有点点夸张的成分。TCP 为了保证可靠性,第二次的拷贝根本就没法省。如果包再大于 MTU 的话,分片时的拷贝同样也避免不了。gEf拜客生活常识网
总结了很多有关于java面试的资料,希望能够帮助正在学习java的小伙伴。由于资料过多不便发表文章,创作不易,望小伙伴们能够给我一些动力继续创建更好的java类学习资料文章,gEf拜客生活常识网
请多多支持和关注小作,别忘了点赞+评论+转发。右上角私信我回复【03】即可领取免费学习资料谢谢啦!gEf拜客生活常识网

gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
gEf拜客生活常识网
原文出处:https://mp.weixin.qq.com/s/TpLuyYoLp3x5ODCTI7HQ4wgEf拜客生活常识网