TCP连接机制及状态转换
source link: https://chegva.com/2096.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
TCP连接机制及状态转换
TCP header
TCP半连接和全连接
客户端最后一次发送 ACK包后进入 TIME_WAIT 状态,而不是直接进入 CLOSED 状态关闭连接,这是为什么呢?
TCP 是面向连接的传输方式,必须保证数据能够正确到达目标机器,不能丢失或出错,而网络是不稳定的,随时可能会毁坏数据,所以机器A每次向机器B发送数据包后,都要求机器B”确认“,回传ACK包,告诉机器A我收到了,这样机器A才能知道数据传送成功了。如果机器B没有回传ACK包,机器A会重新发送,直到机器B回传ACK包。
客户端最后一次向服务器回传ACK包时,有可能会因为网络问题导致服务器收不到,服务器会再次发送 FIN 包,如果这时客户端完全关闭了连接,那么服务器无论如何也收不到ACK包了,所以客户端需要等待片刻、确认对方收到ACK包后才能进入CLOSED状态。那么,要等待多久呢?
数据包在网络中是有生存时间的,超过这个时间还未到达目标主机就会被丢弃,并通知源主机。这称为报文最大生存时间(MSL,Maximum Segment Lifetime)。TIME_WAIT 要等待 2MSL 才会进入 CLOSED 状态。ACK 包到达服务器需要 MSL 时间,服务器重传 FIN 包也需要 MSL 时间,2MSL 是数据包往返的最大时间,如果 2MSL 后还未收到服务器重传的 FIN 包,就说明服务器已经收到了 ACK 包。
TIME_WAIT状态调优
[root@iZ2ze0cnscbfbls4uyfd1qZ /proc/sys/net/ipv4]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7412
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 65535
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
#设为1,time_wait占用的sockek链接快速回收,对外的服务器不打开,使用NAT请求时间戳不一致可能会造成故障
[root@iZ2ze0cnscbfbls4uyfd1qZ /proc/sys/net/ipv4]# cat tcp_tw_recycle
0
#time_wait占用的sockek链接可以重复使用,前提是先要打开时间戳
[root@iZ2ze0cnscbfbls4uyfd1qZ /proc/sys/net/ipv4]# cat tcp_tw_reuse
1
#打开时间戳,可以判断数据是老的还是新的
[root@iZ2ze0cnscbfbls4uyfd1qZ /proc/sys/net/ipv4]# cat tcp_timestamps
1
1.TCP Socket
文件实在太多,可以通过加 IP
来解决。
2.生产中CLOSE_WAIT
很多说明程序写的有问题。
Recommend
-
9
ip tcp_metric, 链路状态历史 2018-07-30 01:35:00 /proc/sys/net/ipv4/tcp_no_metrics_save https://www.linux.org/docs/man8/ip-...
-
13
TCP拥塞控制窗口有效性验证机制 2015-12-08 15:49:00 blog.csdn.net/zhangskd/article/details/7609465 问题1:当发送方长时间受到应用程序的限制,不能发送数据时,会使拥塞窗口无效。TCP是根据拥塞窗口来...
-
7
处理对象的多种状态及其相互转换——状态模式(五) 5 使用环境...
-
6
6 状态模式总结 状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的细节对于客户端而言是透明的,方便了客户端的使用。在实际开发中,状态模式具有较高的使用...
-
11
处理对象的多种状态及其相互转换——状态模式(四) 4 共享状态
-
10
处理对象的多种状态及其相互转换——状态模式(三) 3 完整解决方...
-
2
V2EX › 程序员 TCP 握手中,怎么理解从 LISTEN 转换到 SYN_SENT? amiwrong123
-
6
当TIME_WAIT状态的TCP正常挥手,收到SYN后… 原创 华为云开发者社区 2022-03-03 14:53:32...
-
4
TCP和HTTP中的KeepAlive机制总结文章来源:infoq陈德伟什么是KeepAliveKeepAlive可以简单理解为一种状态保持或重用机制,比如当一条连接建立后,我们不想它立刻被关闭,如果实现了KeepAlive机制,就可以通过它来实现连接的保...
-
4
TCP/IP详解--TCP连接中time_wait状态过多 发表于 2019-09-10...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK