• 计算机网络概念入门(十一)


    正文

    1.FIN=》表示想关掉连接

    2.TCP-释放连接-4次挥手

    客户端(client)服务器(Server )
    连接已经建立连接已经建立

    在这里插入图片描述


    客户端(client)服务器(Server )
    终止等待1关闭等待

    在这里插入图片描述


    客户端(client)服务器(Server )
    终止等待2最后确认
    时间等待

    在这里插入图片描述


    客户端(client)服务器(Server )
    关闭关闭

    在这里插入图片描述

    3.TCP-释放连接-疑问

    =》为什么释放连接的时候,需要4次挥手?
    —>TCP是全双工模式
    —>第1次挥手:当主机1发出FIN报文端时,
    表示主机1告诉主机2,主机1已经没有数据要发送了,但是,此时主机1还是可以接受来自主机2的数据.
    —>第2次挥手:当主机2返回ACK报文端时,
    表示主机2已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1
    —>第3次挥手:当主机2也发送了FIN报文段时,
    表示主机2告诉主机1,主机2已经没有数据要发送了
    —>第4次挥手:当主机1返回ACK报文段时,
    表示主机1已经知道主机2没有数据了。随后正式断开整个TCP连接

    —>4次挥手是双向关闭的意思,你关我,我关你的意思;
    前2次是关掉左边发右边的,后2次是关掉右边发左边的

    =》TCP/IP协议栈在设计上,允许任何一方先断开请求。只不过上边演示的是client主动断开连接

    4.TCP-释放连接-状态解读

    =》FIN-WAIT-1:表示想主动关闭连接
    —>向双方发送了FIN报文,此时进入FIN-WAIT-1状态

    =》CLOSE-WAIT:表示在等待关闭
    —>当双方发送FIN给自己,自己会回应一个ACK报文给对方,此时进入到CLOSE-WAIT状态
    —>在此状态下,需要考虑自己是否还有数据要发送给对方,如果没有,发送FIN报文给对方

    =》FIN-WAIT-2:只要对方发送ACK确认后,主动方就会处于FIN-WAIT-2状态,然后等待对方发送FIN报文

    =》CLOSING:一种比较罕见的例外状态
    —>表示你发送FIN报文后,并没有收到双方的ACK报文,反而却也收到了对方的FIN报文
    —>如果对方几乎在同时准备关闭连接的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态
    —>表示双方都正在关闭SOCKET连接

    =》LAST-ACK:被动关闭一方在发送FIN报文后,最后等待对方的ACK报文
    —>当收到ACK报文后,即可进入CLOSED状态了

    =》TIME-WAIT:表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可进入CLOSE状态
    —>如果FIN-WAIT-1状态下,收到了对方同时带FIN状态和ACK标志的报文时,
    可以直接进入到FIN-WAIT状态,而无须进过FIN-WAIT-2状态

    =》CLOSED:关闭状态

    =》由于状态时间比较短暂,所以很难用netstat命令看到,比如SYN-RCVD、FIN-WAIT-1等

    5.TCP-释放连接-细节

    =》TCP/IP协议栈在设计上,允许任何一方先发起断开请求。上边演示的是client主动要求断开连接

    =》client发送ACK后,需要有个TIME-WAIT阶段,等待一段时间后,再真正关闭连接(就是发完ACK之后,还要等,看看自己的ACK是否送达,如果送达了,那没事了,如果没送达,Server还会重新发一个FIN)
    —>一般是等待2倍的MSL,
    (MSL是最大分段生存期的意思),
    MSL是TCP报文在Internet上最大生存时间
    —>每个具体的TCP实现都必须选择一个确定的MSL值,RFC1122“建议是2分钟”

    =》如果client发送ACK马上就释放了,然后又因为网络原因,Server没有收到client的ACK,Server就会重发FIN
    —>这时可能出现的情况是:
    ①client没有任何响应,服务器那边会干等,甚至多次重发FIN,浪费资源
    ②client有个新的应用程序刚好分配了同一个端口号,新的应用程序收到FIN后马上开始执行断开连接的操作,本来它可能是想跟个Server建立连接的

    6.四次挥手的细节

    =》前2次挥手,和后2次挥手之间然后可以互传数据

    7.TCP-释放连接-抓包

    =》有时候在使用抓包工具,有可能只会看到“3次”“挥手”
    —>这其实是将2、3次挥手合并

    =》当Server接受到client的FIN时,如果Server后面也没有数据要发给client了
    —>这时,Server就可以将第2、3次挥手合并,同时告诉client两件事,
    ①已经知道client没有数据要发,
    ②Server已经没有数据要发了

    在这里插入图片描述

    视频教程

    11.TCP_释放连接

    下集预告

    Socket补充_域名

  • 相关阅读:
    GeoServer源码运行(数据目录+数据库)
    PG学习笔记(PostgreSQL)
    (ICCV 2021) Hierarchical Aggregation for 3D Instance Segmentation
    一个工作7年JAVA工程师面试总结:掌握这些技术,offer拿到手软
    Pandas数据分析23——pandas时间偏移和周期
    C#语言的由来与发展历程
    1008hw/
    9.Eureka服务发现+Ribbon+RestTemplate服务调用
    MySQL 数据类型和搜索引擎
    2022年最新河北建筑八大员(机械员)模拟考试题库及答案
  • 原文地址:https://blog.csdn.net/weixin_52668597/article/details/125856304