TCP的协议文档对TCP的一些规定:文档名称-RFC793 

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断开连接的四次握手及常见过程解析的更多相关文章

  1. Linux Socket过程详细解释(包括三次握手建立连接,四次握手断开连接)

    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web 服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠s ...

  2. TCP三次握手连接与四次握手断开

    http://blog.csdn.net/whuslei/article/details/6667471(三次握手与四次握手) 1. TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机. 如 ...

  3. 为什么建立TCP连接需要三次握手,为什么断开TCP连接需要四次握手,TIME_WAIT状态的意义

    为什么建立TCP连接需要三次握手? 原因:为了应对网络中存在的延迟的重复数组的问题 例子: 假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达ser ...

  4. 利用tcpdump抓包工具监控TCP连接的三次握手和断开连接的四次挥手

    TCP传输控制协议是面向连接的可靠的传输层协议,在进行数据传输之前,需要在传输数据的两端(客户端和服务器端)创建一个连接,这个连接由一对插口地址唯一标识,即是在IP报文首部的源IP地址.目的IP地址, ...

  5. tcp断开连接,4次握手,为什么wireshark 只能抓到3个包?

    用wireshark 抓包,看看tcp 断开连接的过程.  以前书上说tcp断开连接,4次握手,可我为什么wireshark 只能抓到3个包? 百度一下,别人也有类似的疑问. [求助]书上和网上的资料 ...

  6. TCP\IP三次握手连接,四次握手断开分析

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

  7. HTTP 三次握手  建立连接 和  四次握手断开连接

    三次握手建立连接    第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机: 第二次握手:主机B收到请求后要确 ...

  8. socket中TCP的三次握手连接和四次握手释放

    三次握手连接 A: 我进来了啊 B:(有人来了安排个位子)回复:好的你进来吧 A:好的: 客户端向服务器发送一个SYN J 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 客户 ...

  9. TCP断开连接(四次挥手)

    四次挥手 ACK建立连接之后都为1. 1.A发送释放连接报文段,FIN=1. 2.B收到并回复确认,TCP进入半关闭状态,即此时B能向A发送,但是A无法向B发送数据. 3.当B传输完所有数据之后,发送 ...

随机推荐

  1. ZJ2008树的统计(树链剖分)

    type node1=record go,next:longint;end; node2=record l,r,mx,sum:longint;end; var i,x,y,n,q,tmp,cnt,sz ...

  2. poj 1986 Distance Queries(LCA:倍增/离线)

    计算树上的路径长度.input要去查poj 1984. 任意建一棵树,利用树形结构,将问题转化为u,v,lca(u,v)三个点到根的距离.输出d[u]+d[v]-2*d[lca(u,v)]. 倍增求解 ...

  3. HDU 3749 Financial Crisis 经济危机(点双连通分量)

    题意: 给一个图n个点m条边(不一定连通),接下来又q个询问,询问两个点是为“不相连”,“仅有一条路径可达”,“有两条及以上的不同路径可达”三种情况中的哪一种.注:两条以上的路径指的是路径上的点连1个 ...

  4. ORACLE 远程连接数据库

    通过运行->cmd->sqlplus/nolog 登录sqlplus时,突然间提示“sqlplus不是内部或外部命令,也不 是可运行的程序或批处理文件”,如下图: 分析后感觉不可能啊,因为 ...

  5. 【大数阶乘】NYOJ-28

    大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?   输入 输入一个整数 ...

  6. 【WEB小工具】jQuery函数

    jQuery-API帮助文档:Click here jQuery简介 jQuery是JavaScript框架,jQuery也是JavaScript代码.使用jQuery要比直接使用JavaScript ...

  7. 【转】第一次使用Android Studio时你应该知道的一切配置

    原文网址:http://www.cnblogs.com/smyhvae/p/4390905.html [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.c ...

  8. w3c盒子模型与ie盒子模型

    盒子模型是css的专有名词,用来描述页面设置中的各种属性,如内容(content).填充(padding).边框(border).边界(margin),由于这些属性拼在一起,与日常生活中的“盒子”很相 ...

  9. 反转链表 --剑指offer

    题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反正后链表的头结点. #include<stdio.h> #include<malloc.h> typedef str ...

  10. DevExpress控件使用小结 z

    .TextEditor(barEditItem)取文本 string editValue = barEditItem1.EditValue.ToString(); //错误,返回null string ...