tcp连接加深

详细图解: https://leetcode-cn.com/circle/discuss/b4PW9S/

三次握手

dail

四次挥手

dail

标识符含义

建立连接(客户端B和服务器A通信)
关闭连接(客户端B和服务器A通信)
TIME_WAIT作用
TIME_WAIT过多

socket编程

socket

socket编程流程

这里需要注意的是,服务端调用 accept 时,连接成功了会返回一个已完成连接的socket,后续用来传输数据。 所以,监听的 socket 和真正用来传送数据的 socket,是「两个」 socket,一个叫作监听 socket,一个叫作已完成连接 socket。 Linux内核中会维护两个队列:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  

主要配置(/etc/sysctl.conf)

#对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃,不应该大于255,默认值是5,对应于180秒左右时间   
net.ipv4.tcp_syn_retries=2  
#net.ipv4.tcp_synack_retries=2  
#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为300秒  
net.ipv4.tcp_keepalive_time=1200  
net.ipv4.tcp_orphan_retries=3  
#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间  
net.ipv4.tcp_fin_timeout=30    
#表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。  
net.ipv4.tcp_max_syn_backlog = 4096  
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭  
net.ipv4.tcp_syncookies = 1  
  
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭  
net.ipv4.tcp_tw_reuse = 1  
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭  
net.ipv4.tcp_tw_recycle = 1  
  
##减少超时前的探测次数   
net.ipv4.tcp_keepalive_probes=5   
##优化网络设备接收队列   
net.core.netdev_max_backlog=3000   

## 关闭延迟ACK
## 这样的问题就是每个TCP数据包都会有一个ACK包,增加了网络的包量
root权限下把/proc/sys/net/ipv4/tcp_no_delay_ack文件的值修改成1即可。

支付宝打赏 微信打赏

您的打赏是对我最大的鼓励!

Table of Contents