• TCP-4次挥手小记


    简介

    本篇读完需要10分钟,读完能了解:

    1. TCP4次挥手

    2. 为什么要4次挥手

    3. TIME_WAIT等待2MSL的原因

    4. TCP故障检测

    相关阅读

    目录

    断开连接过程(4次挥手)

    在这里插入图片描述

    TIPS

    三次挥手会有什么问题
    B向A发送链接释放报文(FIN=1,ACK=1)后直接断开连接,如果A没有收到这个FIN数据包,A就会一直处于FINT-WAIT-2状态
    等待2MSL(最大报文段生存时间)原因
    网络不可靠的情况,会出现最后一个ACK丢失。B如果没有收到ACK,将不断重复发送FIN片段。A会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么A会重发ACK并再次等待2MSL。2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
    如果已经建立了连接,但是客户端突然出现故障了怎么办?
    TCP还设有一个keepalive计时器,服务器每收到一次客户端的请求后都会重新Reset这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

    TIME_WAIT扩展

    场景: 在高并发短连接的TCP服务器上,当服务器处理完请求后立刻主动正常关闭连接。这个场景下会出现大量socket处于TIME_WAIT状态。如果客户端的并发量持续很高,此时部分客户端就会显示连接不上。
    查询现象: netstat -ant|awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}’

    LAST_ACK 14

    SYN_RECV 348

    ESTABLISHED 70

    FIN_WAIT1 229

    FIN_WAIT2 30

    CLOSING 33

    TIME_WAIT 18122
    处理: 编辑内核文件/etc/sysctl.conf,加入以下内容: 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,表示关闭。 net.ipv4.tcp_fin_timeout
    修改系默认的 TIMEOUT 时间 然后执行 /sbin/sysctl -p 让参数生效.

  • 相关阅读:
    uniapp小程序解决不能上传文件/图片问题
    知识图谱04——openGL与ubuntu22.04
    使用 @NoRepositoryBean 简化数据库访问
    【组件攻击链】一文看懂 Spring 全家桶各类 RCE 漏洞
    1.nginx学习
    解决方案 | 法大大电子签为物流行业发展提速提效
    ES7,ES8
    vue中动态引入图片为什么要是require, 你不知道的那些事
    leetcode 76. 最小覆盖子串
    mac苹果电脑删除顽固残留软件图标
  • 原文地址:https://blog.csdn.net/qq_21078159/article/details/126777273