当前位置: 首页 > 编程日记 > 正文

TCP连接的状态转换图深度剖析

TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。

1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

2)第二次握手:服务器B收到SYN包,必须确认客户ASYNACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

3)第三次握手:客户端A收到服务器BSYNACK包,向服务器B发送确认包ACKACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

图1 TCP三次握手建立连接

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。

3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

TCP采用四次挥手关闭连接如图2所示。

图2  TCP四次挥手关闭连接

1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACKSYNACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

参考:

《TCP/IP详解-卷1》第18章《TCP连接的建立与终止》

相关文章:

ASP.Net中的TreeView控件中对节点的上移和下移操作

Web中的TreeView中的没有PreNode和NextNode属性。 但它的集合属性中有一个IndexOf属性,从而能够找到它的前一个节点知后一个节点。 TreeView中要么只有一个根节点;要么没有根节点,都是并列排的,这个要判断。 这里主要是用了递归&a…

大数据流通存隐忧 产业信任体系亟待建立

就在今年10月,始于美国东部的“DDoS攻击”席卷了整个美国,引起了人们对数据安全的恐慌,大数据安全问题逐渐暴露。在第三届世界互联网大会的大数据分论坛上,中国科学院秘书长邓麦村在致辞中指出,如何突破大数据关键技术…

ImageNet十年,AI数据标注如何蓬勃发展?

2016 年,AlphaGo 战胜李世石,成为新一代 AI 浪潮的重要里程碑事件。 经此一役,很多人都认识到了算法和算力对 AI 发展的重要性,确忽略了另一个重要因素:数据。 2009 年,时任斯坦福大学任助理教授的李飞飞…

关于webservice的异步调用简单实例

于webservice的异步调用简单实例无论在任何情况下&#xff0c;被调用方的代码无论是被异步调用还是同步调用的情况下&#xff0c;被调用方的代码都是一样的&#xff0c; 下面&#xff0c;我们就以异步调用一个webservice 为例作说明。这是一个webservice <WebMethod(Descrip…

理解NSAttributedString

An NSAttributedString object manages character strings and associated sets of attributes (for example, font and kerning) that apply to individual characters or ranges of characters in the string. 这句话就是对这个类的一个最简明扼要的概括。NSAttributedString…

Redis集群两种配置方式

2019独角兽企业重金招聘Python工程师标准>>> 第一种使用&#xff1a;JedisCluster <bean id"jedisPoolConfig" class"redis.clients.jedis.JedisPoolConfig"><property name"maxTotal" value"30" /><proper…

调用API弹出打印机属性对话框

调用api弹出打印机属性对话框 Author:vitoriatangFrom:Internet.NET Framework封装了很多关于打印的对话框&#xff0c;比如说PrintDialog, PageSetupDialog. 但是有的时候我们还需要关心打印机属性对话框&#xff0c;那么就可以调用API来解决这个问题。有几个API函数与之相关P…

Oracle DBA学习互联网化的内容

搞了多年的Oracle数据库维护&#xff0c;近几年来&#xff0c;个人感觉基本都在舒适区&#xff0c;技术上没啥进步。而且由于个人资料或者学习方法的限制&#xff0c;Oracle数据库技术上再想精进感觉事倍功半。2013年开始&#xff0c;去IOE的声势搞得轰轰烈烈&#xff0c;mysql…

离不开深度学习的自动驾驶

作者 | 小白来源 | 小白学视觉头图 | 下载于视觉中国深度学习在整个自动驾驶技术的各个部分中进行了应用&#xff0c;例如在感知&#xff0c;预测和计划中都有应用。同时&#xff0c;深度学习也可以用于制图&#xff0c;这是高级自动驾驶的关键组成部分。拥有准确的地图对于自动…

IOS -- base64编码

在iOS7以后可以用NSData自带的base64EncodedStringWithOptions进行编解码&#xff1a; 方法如下&#xff1a; - (NSString *)encodeToBase64String:(UIImage *)image {return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64Charact…

OpenCV持久化(二)

如何利用OpenCV持久化自己的数据结构&#xff1f;我们来看看OpenCV中的一个例子。 MyData.hpp定义自己的数据结构MyData如下: #ifndef MYDATA_HPP #define MYDATA_HPP#include <opencv2/core/core.hpp> #include <iostream> #include <string>using namespac…

Excel、Exchange和C#

摘要&#xff1a;Eric Gunnerson 将向您介绍如何使用 Outlook、Excel 和 C# 创建自定义的日历&#xff0c;该日历可以提供适用于短期项目和长期项目的清晰明了的版式。 下载 csharp05152003_sample.exe 示例文件&#xff08;英文&#xff09;。 虽然一月份已经过去了&#x…

这个宝藏工具,给你一种黑客般的感觉

明天要交作业了&#xff0c;吴检正在宿舍熬夜爆肝拼命敲代码&#xff0c;劈里啪啦的键盘声和咔咔的鼠标声格外嘈杂&#xff0c;室友陈琛瞥了一眼&#xff0c;背过身&#xff0c;沉沉睡去&#xff0c;留下他一人在深夜无尽的黑暗中&#xff0c;断断续续却又没有尽头的咔咔声中凌…

LSTM神经网络

LSTM是什么 LSTM即Long Short Memory Network&#xff0c;长短时记忆网络。它其实是属于RNN的一种变种&#xff0c;可以说它是为了克服RNN无法很好处理远距离依赖而提出的。 我们说RNN不能处理距离较远的序列是因为训练时很有可能会出现梯度消失&#xff0c;即通过下面的公式训…

用C#实现在PowerPoint文档中搜索文本

用编程的方式根据对象模型很容易实现在Word、Excel文档中搜索文本&#xff0c;在PowerPoint里面也同样如此&#xff0c;使用对象模型有助于我们了解office的文档结构。 搜索的思路和方法基本是一样的&#xff0c;用PowerPoint应用程序对象打开指定的文档&#xff0c;用文档对象…

雷军的最后一次 重 大 创 业

这是我人生最后一次重大创业项目。我愿意押上人生全部的声誉&#xff0c;亲自带队&#xff0c;为小米汽车而战&#xff01;——雷军作者 | Carol头图 | 下载于视觉中国出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;3月29日19:30&#xff0c;小米春季新品发布会拉…

shell之冒号的作用

冒号&#xff1a; &#xff1a;在shell中是一种命令&#xff0c;意思是总是为真&#xff0c;但是却不做任何操作&#xff0c;即总是为真的空命令eg:[rootlocalhost ~]# ${abc:t1}-bash: t1: command not found[rootlocalhost ~]# : ${abc:t1}[rootlocalhost ~]# echo $abct1[ro…

关于epel源的配置

EPEL&#xff0c;即Extra Packages for Enterprise Linux&#xff0c;这个软件仓库里有很多非常常用的软件,而且是专门针对RHEL设计的&#xff0c;对RHEL标准yum源是一个很好的补充&#xff0c;完全免费使用&#xff0c;由Fedora项目维护&#xff0c;所以如果你使用的是RHEL&am…

C#如何在Form中嵌入并且操作Excel表格

网上比较多讲述如何操作excel表的文章&#xff0c;但都是启动excel的窗口来打开excel数据文件。有时候需要把excel表嵌入到自己程序的form中&#xff0c;给客户一个不用切换窗口的操作界面&#xff0c;似乎更好。这在vc中用ole技术很容易实现&#xff0c;但是在c#中方法就不一样…

自研芯片架构 ,这家中国公司发布DPU芯片计划

近日,专注于智能计算领域的DPU芯片和解决方案公司中科驭数发布了其下一代DPU芯片计划&#xff0c;将基于自研的KPU&#xff08;Kernel Processing Unit&#xff09;芯片架构&#xff0c;围绕网络协议处理、数据库和大数据处理加速、存储运算、安全加密运算等核心功能&#xff0…

QQ超时不能刷新好友接收发送信息

如果您在其它电脑登录时正常&#xff0c;只在本地出现此种情况&#xff0c;可能与您本机的设置及网络限制有关&#xff0c;建议您先确保安装的是我司的官方版本&#xff0c;然后再搜索并删除您的QQ号码文件夹&#xff08;会丢失聊天记录&#xff0c;请注意备份&#xff09;&…

JavaStuNote 4

装箱(inbox)和拆箱(outbox) 代表了类类型和基本类型之间的转换行为。 手动版本号&#xff1a; Integer b new Integer(10); Int a b.intValue; 自己主动版本号&#xff1a; Integer b30; Integer bnew Integer(30); Int ab; int a b.intValue(); 由于基本类型…

把Doc文档转换成HTML等其它格式

利用microsoft Word 9.0 Object Library可以在页面中对Doc文档进行格式转换。有关Word对象的一些方法可以参考Open和Save。下面是进行转换的代码[C#]&#xff1a; /// <summary>/// WordToHtml 的摘要说明。/// 首先要添加引用&#xff1a;Microsoft Word 9.0 Object Li…

如何学好Python?相信很多人都做错了!

Python入门从哪开始&#xff0c;以我的过往经验&#xff0c;发现很多的教程都是这样讲的&#xff1a;先介绍 Python 的基本语法规则、list、dict、tuple 等数据结构&#xff0c;然后再介绍字符串处理和正则表达式&#xff0c;介绍文件等IO操作.... 就这样一点一点往下说。然而这…

艾麦捷科技-铂金小猪新年致辞

2019独角兽企业重金招聘Python工程师标准>>> 光阴似箭&#xff0c;2013年是匆忙的一年&#xff0c;艾麦捷科技从最初的“笑谈”到现在上线&#xff0c;招财猪进销存管理软件从无到有&#xff0c;到现在多次更新&#xff0c;无一不是在匆忙中完成的&#xff0c;尽管很…

C#开源框架整理

Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单。通过Linq To JSON可以快速的读写Json&#xff0c;通过JsonSerializer可以序列化你的.Net对象。让你轻松实现.Net中所有类型(对象,基本数据类型 …

提供一个基于.NET的加密/解密算法

提供一个基于.NET SymmetricAlgorithm 类的、带私钥的加密/解密算法的包装类。使用方法&#xff1a; symmcrypto de new SymmCrypto(SymmCrypto.SymmProvEnum.DES);Response.Write(x.Decrypting(de.Encrypting("ok","yyy"),"yyy")); 类的实现…

ubuntu修改IP

一、使用命令设置Ubuntu的ip地址1. 设置IP sudo ifconfig eth0 203.171.239.155 netmask 255.255.255.224 这样就算设置好了网卡eth0的IP地址和子网掩码2. 设置网关 sudo route add default gw 203.171.239.1293. 设置DNS 修改/etc/resolv.conf&#xff0c;在其中加入 nameserv…

Arm 十年重磅发布 v9 架构,不受 EAR 约束,未来将覆盖 3000 亿颗芯片

整理 | 伍杏玲出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;随着 AI、大数据、IoT 技术的相互渗透&#xff0c;人们对数据的要求也越来越高&#xff0c;如何提供普适专用、安全而强大的处理能力的架构&#xff1f;Arm 为这个答案准备十年。近日&#xff0c;Arm 推出…

HDU 6051 - If the starlight never fade | 2017 Multi-University Training Contest 2

/* HDU 6051 - If the starlight never fade [ 原根,欧拉函数 ] | 2017 Multi-University Training Contest 2 题意&#xff1a;给定 m,p, p 是素数设 f(i) 是 满足 (xy)^i ≡ x^i mod p 的 (x,y) 对数 且 1 ≤ x ≤ p-1 , 1 ≤ y ≤ m 求 ∑[1≤i≤p-1] i*f(i)限制&#xff…