计算机网络(五),TCP四次挥手
目录
1.TCP四次挥手详情
2.为什么会有TIME-WAIT状态
3.为什么需要四次握手才能断开连接
4.服务器出现大量CLOSE_WAIT的原因
五、TCP四次挥手
1.TCP四次挥手详情

(1)一开始双方都属于已连接状态
(2)客户端发送一个报文段:FIN=1,seq=u。FIN表示连接关闭请求,seq是之前最后一个发送的数据的标号+1。客户端进入关闭等待状态1(FIN-WAIT-1)
(3)服务端接收到关闭连接请求之后,通知程序需要关闭连接,然后返回一个报文段:ACK=1,seq=v,ack=u+1。这里标志位ACK=1表示确认号(ack)有效seq表示当前数据包顺序号,ack表示顺序号为u的数据包已经确认接受,请求数据号为u+1数据。状态变为关闭等待状态(CLOSE-WAIT)
(4)客户端接收到数据之后进入关闭等待状态2(FIN-WAIT2)
(5)服务器端发送报文段:FIN=1,ACK=1,seq=w,ack=u+1,用来关闭服务端到客户的数据传送,服务端进入一个LAST-ACK状态
(6)Client收到FIN之后,Client进入时间等待状态(2MSL之后关闭连接)接着发送一个报文段:ACK=1,seq=u+1,ack=w+1,Server进入CLOSED状态,完成四次挥手
2.为什么会有TIME-WAIT状态
(1)确保有足够的时间让对方收到ACK包
(2)避免新旧连接混淆
3.为什么需要四次握手才能断开连接
TCP连接是全双工的,服务端可以发送数据到客户端,客户端也可以发送数据到服务端,发送方和接收方都需要两次挥手才能关闭
4.服务器出现大量CLOSE_WAIT的原因
出现原因:(1)客户端一直请求关闭连接,服务端发送的数据对方接受不到(2)我方忙于读和写没有及时关闭
解决方法:(1)程序有bug,检查代码(2)检查配置
计算机网络(五),TCP四次挥手的更多相关文章
- 计算机网络之tcp四次挥手
TCP的四次挥手(Four-Way Wavehand)1.前言对于"三次握手"我们耳熟能详,因为其相对的简单.但是,我们却不常听见“四次挥手”,就算听过也未必能详细地说明白它的具体 ...
- TCP四步挥手的各种状态转换图
对于TCP四步挥手时的各种状态转换,网上有很多资料.但是有很多描述不是很容易理解,甚至是描述错误,不如这篇文章里http://www.cnblogs.com/Jessy/p/3535612.html# ...
- TCP四次挥手
TCP 四次挥手 TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake).客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close ...
- TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手
这是一个很有意思的问题~ 首先,我们要知道TCP是全双工的,即客户端在给服务器端发送信息的同时,服务器端也可以给客户端发送信息.而半双工的意思是A可以给B发,B也可以给A发,但是A在给B发的时候,B不 ...
- Java网络编程学习A轮_03_抓包分析TCP四次挥手
参考资料: http://www.jellythink.com/archives/705 示例代码: https://github.com/gordonklg/study,socket module ...
- TCP四次挥手断开连接详解
TCP四次挥手. 数据传输结束后,通信的双方都可释放连接.现在A和B都处于ESTABLISHED状态.A的应用程序先向TCP发出连接释放报文段,主动关闭TCP连接.A把连接释放报文段的首部FIN置为1 ...
- 被面试官问懵:TCP 四次挥手收到乱序的 FIN 包会如何处理?
摘要:收到个读者的问题,他在面试的时候,被搞懵了,因为面试官问了他这么一个网络问题. 本文分享自华为云社区<TCP 四次挥手收到乱序的 FIN 包会如何处理?>,作者:小林coding . ...
- 详解TCP四次挥手(断开TCP连接过程)
在讲述TCP四次挥手,即断开TCP连接的过程之前,需要先介绍一下TCP协议的包结构. TCP协议包结构: 这里只对涉及到四次挥手过程的字段做解释 (1) 序号(Sequence number) 我们通 ...
- 计算机网络 TCP 四次挥手过程和状态变迁
客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态. 服务端收到该报文后,就向客户端发送 ACK 应答报 ...
随机推荐
- learning_git_from_Liao
安装 windows git 直接去官网就行,地址如下: https://git-scm.com 安装完成后,在开始菜单里找到"Git"->"Git Bash&qu ...
- PTA(Basic Level)1037.在霍格沃茨找零钱
如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易.& ...
- Serialize and Deserialize N-ary Tree
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- IIS7多站点ssl配置及http自动跳转到https
SSL证书配置参考如下: http转https实战教程iis7.5 window08 IIS7安装多域名SSL证书绑定443端口 关键是修改C:\Windows\System32\inetsrv\co ...
- ssh配置互信不成功,两台服务器有一台需要输入密码
在客户现场,某国产平台,配置机器互信时发现,A可以免密访问B,而B不能免密访问A,且B不能免密访问B,进行了下面的几个处理后搞定. 1)确定目录权限:/root/ 755/root/.ssh 700/ ...
- Oracle-DDL 1- 表管理
DDL-数据定义语句: 一.表管理 1.create 创建表-- 必须有创建表的权限和表空间-- 表名必须以字母开头,可以包含数字和符号,不能是系统关键字 /*create table 表名(列名1 ...
- 在Ubuntu上安装Hive
1.下载hive2.3.5 解压缩并改名为hive目录,放到/usr/local下(注意权限) sudo mv apache-hive-2.3.5-bin /usr/local/hive 2.修改目录 ...
- jdbc简单使用
1.代码 import java.sql.*; public class DBUtil { public static void main(String[] args) throws ClassNot ...
- 解决jsp无法用el表达式的问题
在写springMVC的项目时,用jsp去前端展示数据,期间遇到了一个问题就是无法用el表达式. 最后排除一切之后发现是因为自己maven项目里web.xml的版本问题. 我的maven项目web.x ...
- java中jar包的使用
1:在工程目录下新建一个文件lib 导入jar包在里面 2:在jar包上右键 ——>build path——>add to bulid path OK!