socket断开连接的四次握手及常见过程解析
TCP消息头的控制位
URG:紧急指针字段有效
ACK:确认头部字段有效
PSH:强制函数
RST:重置链接
SYN:同步系列号码
FIN:再没有来自发送者的数据
TCP连接过程的各种状态及意义
LISTEN:等待任何从远端TCP和端口的连接请求
SYN-SENT:发送一个连接请求以后等待一个匹配的连接请求
SYN-RECEIVED:发送一个连接请求并收到匹配的连接请求以后等待连接请求被确认
ESTABLISHED:表示一个打开的连接,接收的数据可以传递给用户,连接的数据传输的正常阶段
FIN-WAIT-1:等待远端的TCP连接终止请求,或者等待之前发送的连接终止请求确认
FIN-WAIT-2:等待远端TCP的连接终止请求
CLOSE-WAIT:等待本地用户的连接终止请求
CLOSING:等待远端的TCP连接终止请求确认
LAST-ACK:等待发送给远端的TCP连接终止请求的确认(包括字节的连接终止请求确认)
TIME-WAIT:等待足够的时间以确认远端TCP收到它的连接终止请求的确认
CLOSED:不在连接状态
四次握手协议的过程以及状态变化
1.A端发送FIN通知B端关闭,A端进入WAIT-1状态
2.B端收到FIN后发送给A端FIN消息以及回复A端FIN的ACK消息,同时进入CLOSE状态
3.A端收到B端的FIN和FIN-ACK消息以后切换至CLOSE状态,A端回复B端的FIN-ACK消息以后进入WAIT-2状态
4.B端收到A端的FIN-ACK消息后进入最后的等待阶段,会等待2MSL时长,保证数据全部传送和接收,之后才是真正关闭
三次握手的作用
防止老的重复连接发起导致的混乱,RST消息就是为了处理这种特殊的消息,在同步状态和非同步状态收到RST的TCP端采取不同的措施
TCP的半打开状态
TCP连接的两端没有数据交互,且其中一端异常关闭(比如服务器断电,应用程序异常终止不算异常关闭,操作系统会在fd变为0时自动关闭socket,完成四次握手),此时对端并不知道链接已关闭,这种场景叫做半打开连接。半打开连接中保持打开的一端向socket发送任何数据都会导致收到一个RST消息,RST消息期望收到消息的一端关闭连接。
关闭一个连接时如何确保数据已经全部发送或者接收?
用户需要持续读取数据直到TCP告诉用户已经没有数据可读,手动关闭连接后,TCP仍会保持一段时间,保证用户的数据全部送达,这个期间需要持续从关闭的连接读取数据。
socket断开连接的四次握手及常见过程解析的更多相关文章
- Linux Socket过程详细解释(包括三次握手建立连接,四次握手断开连接)
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web 服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠s ...
- TCP三次握手连接与四次握手断开
http://blog.csdn.net/whuslei/article/details/6667471(三次握手与四次握手) 1. TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机. 如 ...
- 为什么建立TCP连接需要三次握手,为什么断开TCP连接需要四次握手,TIME_WAIT状态的意义
为什么建立TCP连接需要三次握手? 原因:为了应对网络中存在的延迟的重复数组的问题 例子: 假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达ser ...
- 利用tcpdump抓包工具监控TCP连接的三次握手和断开连接的四次挥手
TCP传输控制协议是面向连接的可靠的传输层协议,在进行数据传输之前,需要在传输数据的两端(客户端和服务器端)创建一个连接,这个连接由一对插口地址唯一标识,即是在IP报文首部的源IP地址.目的IP地址, ...
- tcp断开连接,4次握手,为什么wireshark 只能抓到3个包?
用wireshark 抓包,看看tcp 断开连接的过程. 以前书上说tcp断开连接,4次握手,可我为什么wireshark 只能抓到3个包? 百度一下,别人也有类似的疑问. [求助]书上和网上的资料 ...
- TCP\IP三次握手连接,四次握手断开分析
TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...
- HTTP 三次握手 建立连接 和 四次握手断开连接
三次握手建立连接 第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机: 第二次握手:主机B收到请求后要确 ...
- socket中TCP的三次握手连接和四次握手释放
三次握手连接 A: 我进来了啊 B:(有人来了安排个位子)回复:好的你进来吧 A:好的: 客户端向服务器发送一个SYN J 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 客户 ...
- TCP断开连接(四次挥手)
四次挥手 ACK建立连接之后都为1. 1.A发送释放连接报文段,FIN=1. 2.B收到并回复确认,TCP进入半关闭状态,即此时B能向A发送,但是A无法向B发送数据. 3.当B传输完所有数据之后,发送 ...
随机推荐
- UVa 10791 (唯一分解) Minimum Sum LCM
题意: 输入n,求至少两个正整数,使得这些数的最小公倍数为n且和最小. 分析: 设n的分解式为,很显然单独作为一项,和最小. 这里有两个小技巧: 从2开始不断的除n,直到不能整除为止.这样就省去了素数 ...
- [转] Jquery滚动加载
原文地址:http://hi.baidu.com/vipxiaofan/item/9eb927b795671f77254b0985 另外一个asp.net的例子:http://blog.csdn.ne ...
- 当前,思路+进展+idea+下一步要做的工作
1.在phy+版本中,downweighting操作后,是如何计算相关系数的. 2.这里的算法的自适应,体现在哪里?3.在引入PCA之后,这里有一个维度的选择的过程,这个标准是如何定义的? 4.在NP ...
- Android如何调用第三方SO库
问题描述:Android如何调用第三方SO库:已知条件:SO库为Android版本连接库(*.so文件),并提供了详细的接口说明:已了解解决方案:1.将SO文件直接放到libs/armeabi下,然后 ...
- DDOS的攻击原理和防护指南
我们现在来分析DDOS的攻击原理. 首先,DDOS是英文Distributed Denial of Service的缩写,意思是分布式拒绝服务.拒绝服务又是什么意思呢?就是采取一些垃圾数据包来阻塞网站 ...
- codeforces 691F Couple Cover 暴力
分析:开一个300w的数组,统计,然后nlogn统计每个值在在序对第一个出现有多少种情况 时间复杂度:O(nlogn) n在3e6数量级 #include<cstdio> #include ...
- 细雨学习笔记:Jmeter测试计划最基本的元素
测试计划-用户组下最基本的元素: 1)HTTP请求默认值 2)HTTP Cookie 管理器(有些操作需要登录后才能访问,用户信息记录在Cookie中,各请求之间就可以共享Cookie了) 3)请求S ...
- Selenium2Library系列 keywords 之 _SelectElementKeywords 之 page_should_contain_list(self, locator, message='', loglevel='INFO')
def page_should_contain_list(self, locator, message='', loglevel='INFO'): """Verifies ...
- ubuntu下php5扩展mysqli
看网上说的都是自己编译源码,试了一下其实这样就可以了 sudo apt-get instal php5-mysql
- Dictionary<实体,List<实体>>的比较
当Dictionary中Key为实体时,进行用ContainsKey比较会发现,就算Model为一样但是结果比较为不存在: 故用以下代码即可,现将Keys转换ToArray(),再用数组的Contai ...