0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么建链接要3次握手,断链接需要4次挥手?

Linux爱好者 来源:Jack 作者:Linux爱好者 2020-11-12 15:36 次阅读

首先处理这个问题,我们要知道一些网络知识,要知道tcp那些事,比如说三次握手,和四次挥手......很多人会问,为什么建链接要3次握手,断链接需要4次挥手?让我们一起看下下面的流程图:

首先,是三次握手:

首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

然后是中间部分:两者之间可以传输数据了

再次,下面的断开链接:【注意】中断连接端可以是Client端,也可以是Server端。

假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。

所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。

Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

那么可以这么理解,当client进入time_wait的等待时间是2个MSL

让我们看一下一台linux服务器的网络状态:

# netstat -an | awk '/^tcp/ {++State[$NF]}END{for(key in State)print key " " State[key]}'LAST_ACK 7LISTEN 9SYN_RECV 2CLOSE_WAIT 125ESTABLISHED 1070FIN_WAIT1 17FIN_WAIT2 247CLOSING 4TIME_WAIT 25087

对于网站来说,这样的time_wait略显偏高, 也就是说大量的关闭操作在等待2个MSL后结束,正常我们的tcp 端口是65535个,如果并发再高一些,可能会大量的socket不能及时被释放,从而导致性能下降,所以我们可以通过linux内核进行一些网络调整比如,开启socket重用和快速回收:

net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_max_tw_buckets = 5000net.ipv4.tcp_max_syn_backlog = 8192net.ipv4.tcp_keepalive_time = 1200net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.tcp_syncookies = 1

表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1

表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1

表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

系统tcp_timestamps缺省就是开启的,所以当tcp_tw_recycle被开启后,实际上这种行为就被激活了.如果服务器身处NAT环境,安全起见,通常要禁止tcp_tw_recycle,至于TIME_WAIT连接过多的问题,可以通过激活tcp_tw_reuse来缓解。

net.ipv4.tcp_max_tw_buckets = 5000

表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为 5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

net.ipv4.tcp_max_syn_backlog = 8192

表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_keepalive_time = 1200

表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。

net.ipv4.ip_local_port_range = 1024-65000

表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

# netstat -an | awk '/^tcp/ {++State[$NF]}END{for(key in State)print key " " State[key]}' LAST_ACK140 LISTEN9 SYN_RECV7 CLOSE_WAIT2 ESTABLISHED972 FIN_WAIT121 FIN_WAIT2152 CLOSING2 TIME_WAIT682

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11322

    浏览量

    209878
  • 服务器
    +关注

    关注

    12

    文章

    9239

    浏览量

    85679
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1374

    浏览量

    79153

原文标题:Linux TCP 状态 TIME_WAIT 过多的处理

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何监测TCP三握手过程

    在计算机网络中,传输控制协议(TCP)是确保数据可靠传输的关键协议之一。TCP通过三握手过程来建立两个端点之间的连接,这个过程对于网络通信的稳定性和安全性至关重要。 TCP三握手
    的头像 发表于 01-06 09:20 169次阅读

    TCP三握手与负载均衡的配置

    在计算机网络中,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过三握手(Three-way Handshake)建立连接,确保数据的可靠传输。而负载均衡(Load
    的头像 发表于 01-06 09:15 181次阅读

    TCP三握手如何影响网络性能

    在计算机网络中,TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过三握手过程来建立两个网络实体之间的连接,确保数据传输的可靠性和顺序性。 TCP三握手的过程 SYN
    的头像 发表于 01-06 09:13 172次阅读

    TCP三握手的常见问题及解决方案

    TCP三握手(Three-way Handshake)是TCP(传输控制协议)建立连接时的一个过程,它确保了两个端点在开始通信之前都准备好了。这个过程包括三通信:SYN(同步),SYN-ACK
    的头像 发表于 01-06 09:11 243次阅读

    TCP三握手与连接建立的关系

    在计算机网络中,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它负责在两个主机之间建立、维护和终止连接,确保数据的可靠传输。TCP连接的建立过程是通过三握手
    的头像 发表于 01-06 09:09 176次阅读

    TCP三握手安全性分析

    TCP(传输控制协议)的三握手是建立可靠连接的重要机制,它确保了通信双方在数据传输前的连接状态是可靠和准确的。然而,从安全性的角度来分析,TCP三握手并非无懈可击,以下是对其安全性
    的头像 发表于 01-03 18:10 455次阅读

    TCP三握手与UDP的区别

    、连接管理、可靠性、效率等方面有着显著的区别。 1. TCP三握手 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在数据传输之前,TCP需要建立一个连接,这个过程被称为“三
    的头像 发表于 01-03 17:35 343次阅读

    TCP三握手的基本原理

    在计算机网络中,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保了数据在网络中传输的可靠性和顺序性。为了建立两个网络实体之间的通信,TCP使用一种称为“三握手
    的头像 发表于 01-03 17:25 455次阅读

    TCP三握手协议的作用

    在计算机网络中,数据的传输需要在发送方和接收方之间建立一个稳定的连接,以确保数据的完整性和顺序。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它通过三握手协议来建立
    的头像 发表于 01-03 17:15 311次阅读

    TCP三握手的详细过程

    TCP(传输控制协议)三握手是一种在互联网上建立一个可靠的、有序的和错误检测能力的连接的方法。这个过程确保了两个设备(通常是客户端和服务器)在数据传输开始之前能够相互确认对方的存在和状态。以下
    的头像 发表于 01-03 17:11 335次阅读

    DHCP 四握手

    DHCP的四握手过程大白话大致如下: 客户端:刚开机,还没有IP地址,哪位佬能给个IP? 这个过程中,客户端就是一个网络小白,它也不知道自己IP是多少,就开始喊话,问有没有DHCP服务器能给它分配
    的头像 发表于 12-25 10:11 144次阅读

    简述TCP协议的三握手机制

    TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它主要用于在IP网络中进行数据传输。TCP协议的三握手
    的头像 发表于 08-16 10:57 1114次阅读

    链接与硬链接的区别

    链接又叫符号链接,和原文件不是一个文件,类似Windows的快捷方式,如果原始文件被删除,所有指向它的符号链接也就都被破坏了
    的头像 发表于 04-19 10:09 1232次阅读
    软<b class='flag-5'>链接</b>与硬<b class='flag-5'>链接</b>的区别

    说说TCP三握手的过程?为什么是三而不是两、四

    说说TCP三握手的过程?为什么是三而不是两、四? TCP三
    的头像 发表于 02-04 11:03 712次阅读

    TCP协议连接的三握手

    通过三握手,客户端与服务端能够确保彼此的网络连接是可用的。客户端发起的SYN报文和服务端返回的SYN+ACK报文都包含了对方的初始序列号和通信能力信息,通过互相确认这些信息,双方确认彼此的能力和正确性。
    的头像 发表于 02-03 16:44 1388次阅读
    TCP协议连接的三<b class='flag-5'>次</b><b class='flag-5'>握手</b>