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标志位。 —————-连接全部关闭

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • WIN32 API —— 最简单的Windows窗口封装类[通俗易懂]

    WIN32 API —— 最简单的Windows窗口封装类[通俗易懂]1开发语言抉择1.1关于开发Win32程序的语言选择C还是C++在决定抛弃MFC,而使用纯Win32API开发Window桌面程序之后,还存在一个语言的选择,这就是是否使用C++。C+

  • 学习BoundsChecker

    对C++程序不熟悉,但是因为工作需要,要对一些程序进行测试分析,找出是否有内存泄露情况。在网上找到了大家比较推崇的BoundsChecker,安装后开始看软件自带的手册,为了让更多的同事一起学习,要将全英文的手册翻译成中文,在这个学习过程中,也把成果不断贴出来大家分享吧!今天先贴手册的目录                                                Boun

  • 8个最高效的Python爬虫框架,你用过几个?

    8个最高效的Python爬虫框架,你用过几个?小编收集了一些较为高效的Python爬虫框架。分享给大家。1.ScrapyScrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。项目地址:https://scrapy.org/2.PySpiderpyspider是一个用python实…

  • Alex 的 Hadoop 菜鸟教程: 第5课 YARN 安装以及helloworld (基于centos的CDH)

    Alex 的 Hadoop 菜鸟教程: 第5课 YARN 安装以及helloworld (基于centos的CDH)根据cdh官方文档的教程做一个简单的例子,但是cdh的教程写的不严谨,有很多坑等着你去跳,所以我改造了一下写成了这篇文章

  • 【180609】经典SQL语句大全(CHM)

    【180609】经典SQL语句大全(CHM)收集我们在平时使用SQL时的一些语法语句汇集,比如创建、备份、删除数据库的SQL脚本,这些当然是比较简了,还有复杂点的像备份、创建索引、复合SQL语句、创建视图、高级运算查询、EXCEPT运算符、INTERSECT运算符、使用外连接、SQL分组、复制或拷贝表、在线视图查询、存储过程调用、清理SQL、找重复记录等,另附有一些SQL经典技巧,比如精简SQL语句、压缩数据库、检查备份集、日志清除、数…

发表回复

您的电子邮箱地址不会被公开。

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