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传输完所有数据之后,发送 ...
随机推荐
- Request.Querystring中文乱码问题解决
现象:近期项目中用到查询字符串传值,如果传递的是英文一切正常,但是传递中文时,使用request.querystring[]得到的是乱码. 原因:不知道为什么,可能是编码不一致问题 解决方法1:修改w ...
- [转] Asp.net Report Viewer 简单实例
原文链接:http://www.aspsnippets.com/Green/Articles/ASPNet-Report-Viewer-control-Tutorial-with-example.as ...
- LeetCode Contains Duplicate (判断重复元素)
题意: 如果所给序列的元素不是唯一的,则返回true,否则false. 思路: 哈希map解决. class Solution { public: bool containsDuplicate(vec ...
- noip2008提高组题解
第一题:笨小猴 模拟 第二题:火柴棒等式 搜索 深搜不用说,确定出两个加数然后判断能否拼出等式. 枚举确实不太好搞,因为枚举范围不确定,太大了容易超时,太小了容易漏解.不过这题的数据貌似很温和,我 ...
- Control File (二)重建CONTROLFILE --- NORESETLOG
create controlfile --- noresetlog 由于丢失control01.ctl alter_karl.log 中显示: -------------------------- ...
- TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流
目前建立在TCP协议上的网络协议特别多,有telnet,ssh,有ftp,有http等等.这些协议又可以根据数据吞吐量来大致分成两大类:(1)交互数据类型,例如telnet,ssh,这种类型的协议在大 ...
- codeforces 687D Dividing Kingdom II 带权并查集(dsu)
题意:给你m条边,每条边有一个权值,每次询问只保留编号l到r的边,让你把这个图分成两部分 一个方案的耗费是当前符合条件的边的最大权值(符合条件的边指两段点都在一个部分),问你如何分,可以让耗费最小 分 ...
- Python--类使用
类使用的几个注意点: 1. 类的语法结构:2. __init__(self),3. __metaclass__=type, (新式类)4. super(subclassname, self).__in ...
- C#汉字转换拼音技术详解
C#汉字转换拼音技术详解(高性能) 下面将源代码贴出.public static class ChineseToPinYin { private sta ...
- html 5 canvas 绘制太极demo
一个练习canvas的小案例.其中若有小问题,欢迎大神拍砖……^_* 代码效果预览地址:http://code.w3ctech.com/detail/2500. <div class=" ...