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
    +关注

    关注

    88

    文章

    11817

    浏览量

    219549
  • 服务器
    +关注

    关注

    14

    文章

    10358

    浏览量

    91754
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1433

    浏览量

    83772

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    烟草包装线上的一协议握手:网关如何打通EtherCAT与Modbus RTU

    烟草包装线上的一“协议握手”:网关如何打通EtherCAT与Modbus RTU 去年在某卷烟厂的包装车间,一台倍福CX5140控制器与威纶通HMI之间出现了“对话障碍”——PLC走的是高速
    的头像 发表于 04-20 15:52 51次阅读
    烟草包装线上的一<b class='flag-5'>次</b>协议<b class='flag-5'>握手</b>:网关如何打通EtherCAT与Modbus RTU

    高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案

    与实战经验,拆解两种主流 API 开发路径,附完整代码与避坑方案。 一、核心背景:为什么需要 API 实现链接解析? 淘宝商品链接包含num_iid(商品唯一标识)等关键参数,但直接从 URL 中提取数据存在两大痛点:
    的头像 发表于 04-13 16:23 131次阅读

    怎么理解TCP三握手和四挥手

    作为运维工程师,无论是排查网络故障、分析日志,还是配置负载均衡器,都需要对 TCP 协议有深入理解。很多"疑难杂症"的根源,往往在于对 TCP 状态转换和连接管理理解不够透彻。
    的头像 发表于 04-10 16:42 803次阅读

    TCP/IP(Socket)协议深度剖析

    TCP/IP协议作为互联网通信的基础架构,其核心机制Socket编程承载着全球数据交换的使命。本文将深入剖析这一协议的七层架构、三握手与四挥手的精妙设计、流量控制与拥塞控制的动态平
    的头像 发表于 03-03 17:06 793次阅读

    TCP三握手与四挥手的详细过程

    TCP 三握手和四挥手,大概是网络领域被问烂了的面试题。但真正能把状态变迁、序列号变化、抓包细节讲清楚的人并不多。很多人背了八股文,一到生产环境看 Wireshark 抓包就懵了
    的头像 发表于 02-25 10:38 434次阅读

    RDMA设计14:连接管理模块设计

    至 CONNECT 状态,创建连接流程类似 TCP/IP 三握手流程;如果为断开连接则跳转至 DISCONNECT 状态,断开连接流程类似 TCP/IP 四挥手流程。当连接信息缓存
    发表于 12-30 16:51

    TCP的三握手

    ,Server进入SYN_RCVD状态。 (3)第三握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server
    发表于 12-02 07:16

    Vivado浮点数IP核的握手信号

    和给出握手信号。在RISC v架构中每个模块(包括FPU)的握手信号都有一个i_valid、i_ready,FPU内部需要三个输入数据的握手信号、一个输出结果的
    发表于 10-24 07:01

    根据标题获取商品链接评论接口的技术实现

    ​  在电商数据分析和竞品监控场景中, 根据商品标题精准获取商品链接及评论数据 是核心需求。下面将分步骤解析技术实现方案: 一、技术架构设计   graph TD A[商品标题输入] -- >
    的头像 发表于 10-20 16:03 807次阅读
    根据标题获取商品<b class='flag-5'>链接</b>评论接口的技术实现

    飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接

    1.静态链接静态链接通过静态库进行链接,生成的目标程序中包含运行需要的所有库,可以直接运行,不过就是文件比较大。静态库是汇编产生的.o文件的集合,一般以.a文件形式出现。gcc在使用静
    发表于 10-17 09:07

    拼多多商品推广链接生成API:社交裂变的转化追踪利器

    ​ 在社交电商时代,拼多多通过 商品推广链接生成API 为商家提供了精准的流量转化解决方案。该工具不仅简化了社交裂变活动的落地,更实现了全链路转化效果追踪,成为提升营销效率的核心引擎。 一、核心
    的头像 发表于 09-08 16:22 999次阅读
    拼多多商品推广<b class='flag-5'>链接</b>生成API:社交裂变的转化追踪利器

    ReviewHub:实现Booster与设计工具端无缝链接的评审协作平台

    其“无缝链接”特性,彻底打破传统评审壁垒,实现设计与评审的深度融合与实时同步,打造高效、流畅的协作体验。产品特点ReviewHub以无缝链接Booster轻量级原
    的头像 发表于 06-04 11:46 992次阅读
    ReviewHub:实现Booster与设计工具端无缝<b class='flag-5'>链接</b>的评审协作平台

    公司在机器人全产业链接会 FAIR plus 2025 的精彩呈现

    公司在机器人全产业链接会 FAIR plus 2025 的精彩呈现
    的头像 发表于 05-07 11:14 647次阅读
    公司在机器人全产业<b class='flag-5'>链接</b>会 FAIR plus 2025 的精彩呈现

    消谐装置与二消谐装置区别、一消谐器与二消谐器的区别

    消谐器与二消谐器是电力系统中用于抑制谐振过电压的不同装置,主要区别如下: 安装位置:一消谐器串联于电压互感器(PT)一侧中性点与地之间,直接承受高电压;二
    的头像 发表于 05-07 09:58 4904次阅读
    一<b class='flag-5'>次</b>消谐装置与二<b class='flag-5'>次</b>消谐装置区别、一<b class='flag-5'>次</b>消谐器与二<b class='flag-5'>次</b>消谐器的区别

    思岚科技携三大核心产品亮相2025机器人全产业链接

    此前,2025年4月24日-26日,深圳福田会展中心8号馆内人潮涌动,由深圳市机器人协会主办的FAIR plus 2025机器人全产业链接会迎来巅峰时刻。
    的头像 发表于 04-30 14:03 1211次阅读