![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络相关
文章平均质量分 93
wen-pan
是程序猿一只呀
展开
-
一台服务器最大能支持多少条TCP连接
来控制,默认大小是128,当两台机器离的非常近,但是建立连接的并发又非常高时,可能会导致半连接队列或全连接队列溢出,进而导致server端丢弃握手包。上面讨论的都是进建立连接的理想情况,在现实中如果有频繁的数据收发和处理(比如:压缩、加密等),那么一台服务器能支撑1000连接都算好的了,所以一台服务器能支撑多少连接还要结合具体的场景去分析,不能光靠理论值去算。,所以Linux系统基于安全角度考虑(比如:有用户进程恶意的打开无数的文件描述符,那不得把系统搞奔溃了),在多个位置都限制了可打开的。原创 2022-11-06 16:59:34 · 6156 阅读 · 3 评论 -
从内核角度看网络包发送流程
释放掉RingBuffer中的数组对skb的引用(注意:此时RingBuffer里的数组虽然放弃了对skb的引用,但是该skb并不会被立即清除,因为TCP有重传机制,必须要保证收到了对方的ack应答后再彻底删除该skb,如果没有收到对方的ack,那么传输层还可以重传该skb)通过上面的两种发送数据时拷贝的对比,可以看出sendfile相比与传统的方式,一次数据发送流程中,少了一次【CPU拷贝】,两次【态的切换】,在需要发送的数据较大的情况下,这里便是性能的提升点。能,sendfile就是这么干的。原创 2022-11-05 21:46:44 · 2776 阅读 · 0 评论 -
从内核角度看TCP三次握手
这里主要是介绍socket里的【全连接队列】和【半连接队列】结构,所以socket里的其他属性结构就不详细展示了(比如:发送队列,等待队列等),可以看到【全连接队列】和【半连接队列】在socket中的结构如下。如果在【第一次握手】的时候,server端收到client端的SYN包后,如果全连接队列满了或者半连接队列满了,那么该握手请求便会被server端【直接丢弃】,那么client端如何处理?理解了上面的listen和connect的作用后,我们便可以从内核角度整体的来看一下三次握手的过程了!原创 2022-11-05 19:35:37 · 949 阅读 · 0 评论