TCP四次挥手原因

TCP四次挥手原因客户端发了一个FIN501(0)ACK701,然后服务端回了一个ACK502。。此时客户端就处于半关闭状态。至于半关闭的话,还得详细解释一下:刚开始(左边)客户端和服务端(右边)都可以互相进行通信,都能进行发送数据和接收数据,但当客户端处于半关闭时,就变成了下面这样(此图只是举个例子,没必要纠结图)这图想表达的就是,客户端(左边)只能进行接收数据,而不能发送数据,服务端(右边)能进行发送数据和接收数据这种是通过什么机制实现的呢?因为一个套接字(左右方框均可看成.

大家好,又见面了,我是你们的朋友全栈君。

当 客户端发了一个FIN 501(0)
客户端发了一个FIN 501(0) ACK 701 ,然后服务端回了一个ACK502 。。此时客户端就处于半关闭状态。

至于半关闭的话,还得详细解释一下:

在这里插入图片描述
刚开始(左边)客户端和服务端(右边)都可以互相进行通信,都能进行 发送数据和接收数据,但当 客户端处于半关闭时,就变成了下面这样

在这里插入图片描述

(此图只是举个例子,没必要纠结图)这图想表达的就是,客户端(左边)只能进行接收数据,而不能发送数据, 服务端(右边)能进行发送数据和接收数据

这个半关闭状态是什么时候有的呢?在代码层面来理解:
当我们服务端的read函数返回0,说明客户端的数据已经到结尾了,然后客户端半关闭事件喽

当服务端close返回的时候,说明4次挥手成功,连接关闭喽。

这种是通过什么机制实现的呢?
因为一个 套接字(左右方框均可看成一个套接字) 中有两个缓冲区,一个读缓冲区,一个写缓冲区

在这里插入图片描述
当一个套接字处于半关闭状态时,也就代表,关闭了写缓冲区,读缓冲区依然开启。所以利用这个套接字依然能进行读数据,但是不能写数据,这就是半关闭状态。。相同概念,所以客户端和服务端各自都来关一次,就4次挥手

接下来两次挥手
在这里插入图片描述

综合起来就是:
在这里插入图片描述
这里大家是不是还会有一个小疑问?半关闭后的客户端为什么还能发送ACK呢?
在这里插入图片描述

半关闭并非关 套接字,而是关缓冲区!!!也就是关掉内核的写缓冲区,也就是客户端不会再向服务端写数据了,但是客户端与服务端之间的连接还在的呀,仔细看这图,所以可以返回ACK应答的

总结如下:

三次握手:
主动放松连接请求端,发送SYN标志位,请求建立连接。携带序号,数据字节数(0),滑动窗口大小
被动接受连接请求端,发送ACK标志位,同时携带SYN请求标志位。携带序号,确认序号,数据字节数(0),滑动窗口大小
主动发起连接请求端,发送 ACK标志位,应答服务器连接请求。携带确认序号。

四次挥手:
主动关闭连接请求端,发送FIN标志位。
被动关闭连接请求端,应答ACK标志位。 ————–半关闭完成

被动关闭连接请求端,发送FIN标志位。
主动关闭连接请求端,应答ACK标志位。 —————-连接全部关闭

滑动窗口:
发送给连接对端,本端的缓冲区大小(实时),保证数据不会丢失。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146108.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 返回给前端的json,long转string

    返回给前端的json,long转stringpackagecom.zhidianfan.ydusermanager.config;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.fasterxml.jackson.databind.module.SimpleModule;importcom.fasterxml.jackson.databind.ser.s…

    2022年5月14日
    57
  • errorcode=-4499 sqlstate=08001_math方法

    errorcode=-4499 sqlstate=08001_math方法java.sql.SQLException:java.lang.ClassCastException:java.math.BigIntegercannotbecasttojava.lang.Long

    2022年9月10日
    0
  • 2015.7.3, 杭州……产品级敏捷案例研究[通俗易懂]

    2015.7.3, 杭州……产品级敏捷案例研究

    2022年2月4日
    40
  • mcu单片机开发_AVR单片机

    mcu单片机开发_AVR单片机关于单片机(MCU)最强科普

    2022年10月8日
    0
  • 数据挖掘应用研究案例精选合集[通俗易懂]

    数据挖掘应用研究案例精选合集[通俗易懂]数据挖掘应用研究案例精选合集数据挖掘(英语:Datamining),掌握数据挖掘技能,金矿就在您的脚下。基于数据挖掘技术的精确智能营销随着大数据、移动应用等的快速发展,已经越来越重要,企业对这方面人才需求缺口也越来越大。本文集主要从数据挖掘应用演讲案例方向介绍了数据挖掘的实际应用,从宏观角度帮助你了解什么是数据挖掘。阅读全文和小伙伴们一起来吐槽

    2022年6月16日
    27
  • nginx负载均衡原理

    nginx负载均衡原理负载均衡在服务端开发中算是一个比较重要的特性。因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就可以分发给后台服务端(backendservers,后面简称backend)来做复杂的计算、处理和响应,并且在业务量增加的时候可以方便地扩容后台服务器。负载均衡可以分为硬件负载均衡和软件负载均衡…

    2022年6月24日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号