1.TCP建立连接,三次握手

建立的TCP连接可靠的连接,必须经过三次握手建立连接才能正式通信彼此传输数数据。

客户端请求服务端建立连接

第一次握手:客户给服务发送一个请求报文SYN, 客户端的状态置SYN_SENT状态

第二次握手:服务端在收到客户端发过来的SYN请求报文后,开始给客户端发送ACK报文和SYN报文,状态置为SYN_RECE

第三次握手:客户端口收到服务端口过来的SYN报文和ACK报文后,状态由原来的SYN_SENT状态变为ESTABLISHED;并且给服务发送一个ACK报文告知对方已经送到服务端发送的SYN报文,服务端收到报文后,由原来的SYN_RECE变为ESTABLISHED

至此客户到服务端,服务端到客户端的双向连接建立好了并且处理ESTABLISHED。双方可以进行数据交换了。

2.TCP断开连接,四次挥手。

当客户端把所有数据传送完毕的时候,给服务端口送一个FIN报文,告知服务端:我这边没有数据可传,希望关闭客户端到服务端方向的连接。之后其状态由原来的

ESTABLISHED 变为FIN_WAIT_1,;

服务端收到客户的FIN报文后,送一个ACK报文给客户端,告知“我服务端知道你客户端口已经没有数据可传,但是我这边什么关闭连接,还需要等我的数据传完;如果我这里数据也传送完了,我也会给发送一个FIN报文。”。此时服务端发送ACK报文后,状态由之前的ESTABLISHED 变为CLOSE_WAIT

客户端端收到服务的ACK报文,将FIN_WAIT_1置FIN_WAIT_2,同时,继续等来的服务发送FIN报文。

当服务端数据传送也完毕的后,开始给客户端发送FIN包,发送FIN包后,其状态CLOSE_WAIT置为LAST_ACK

客户端口收到了服务的发过来的FIN包后,又给服务端发送ACK。发送ACK后,状态由原来的FIN_WAIT_2置为TIME_WAIT,客户在经过2MSL 时间进入CLOSE状态

服务端口收到客户端发送的ACK后,由LAST_ACK也进入CLOSE

3.TCP迁移状态:

LISTEN:服务端已经启动一个socket,其状态处于监听状态,等待客户发起请求连接。

ESTABLISHED:客户端和服务端经过三次握手建立,两个方向上连接状态都建立,状态置为ESTABLISHED

客户端状态变迁:(主动端)

FIN_WAIT_1: 发送FIN给服务端口。

FIN_WAIT_2:收到服务端的ACK报文

TIME_WAIT :收到服务端发过来的FIN报文,发送ACK报文给服务端口。主动关闭连接端,接收到服务(TIME_WAIT是主动端关闭)之后进入2MSL时间的等待

CLOSE:2MSl过后,关闭进入初始化状态。

服务端状态变迁:(服务端)

CLOSE_WAIT:收到客户端FIN报文,给客户端发送ACK状态后,表示知道客户端要关闭连接请求,服务端可能数据还没有传送完,所以处于等

等待关闭状态。(CLOSE_WAIT是被动端关闭)

LAST_ACK:服务端数据传输完毕,发送FIN报文给客户端,同时等待客户端发ACK报文状态

CLOSE:收到客户端ACK报文后,进入初始化状态

连接是双方建立的。发送数据的端客户也转变为接受数据的服务端口,服务端和客户角色是相互转换的

4.MSL时间:

MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间IP数据包将在网络中消失 。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒

TIME_WAIT状态维持时间

TIME_WAIT状态维持时间是两个MSL时间长度,也就是在1-4分钟。Windows操作系统就是4分钟。

5.用于统计当前各种状态的连接的数量的命令

#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

返回结果如下:

LAST_ACK 14

SYN_RECV 348

ESTABLISHED 70

FIN_WAIT1 229

FIN_WAIT2 30

CLOSING 33

TIME_WAIT 18122

学习参考资料 TIME_WAIT状态原理分析:http://elf8848.iteye.com/blog/1739571

学习参考资料 TIME_WAIT状态过多解决方法:http://blog.sina.com.cn/s/blog_8e5d24890102w9yi.html

TCP三次握手连接和TCP四次挥手及大量TIME_WAIT解决方法:的更多相关文章

  1. TCP三次握手,数据传输,四次挥手

    TCP包结构 一个TCP包结构如下: 一个TCP包主要由TCP包头和数据部分组成,包头固定部分为20字节,选项和数据部分根据实际情况设置为4N(N可以为0)字节. 1.16bit源端口和目的端口号,它 ...

  2. iOS 开发:TCP三次握手连接

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握 ...

  3. TCP三次握手连接

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握 ...

  4. TCP ,UDP概念和TCP三次握手连接 的知识点总结

    OSI 计算机网络7层模型 TCP/IP四层网络模型 传输层提供应用间的逻辑通信(端到端),网络层提供的是主机到主机的通信,传输层提供的是可靠服务. TCP 中常说的握手指的是:连接的定义和连接的建立 ...

  5. 详解TCP三次握手(建立TCP连接过程)

    在讲述TCP三次握手,即建立TCP连接的过程之前,需要先介绍一下TCP协议的包结构. 这里只对涉及到三次握手过程的字段做解释 (1) 序号(Sequence number) 我们通过 TCP 协议将数 ...

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

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

  7. Python--day30--tcp协议(建立链接三次握手,断掉链接四次挥手)和UDP协议

    TCP协议: tcp是可靠的,面向连接的.建立全双工通信. 建立链接的三次握手 链接一旦建立一定是全双工工通信,必然是双方通信. UDP协议: TCP协议和UDP协议的对比: QQ使用的是UDP,因为 ...

  8. Linux网络编程一、tcp三次握手,四次挥手

    一.TCP报文格式 (图片来源网络) SYN:请求建立连接标志位 ACK:应答标志位 FIN:断开连接标志位 二.三次握手,数据传输,四次挥手 (流程图,图片来源于网络) (tcp状态转换图,图片来源 ...

  9. TCP三次握手及TCP连接状态 TCP报文首部格式

    建立TCP连接时的TCP三次握手和断开TCP连接时的4次挥手整体过程如下图: 开个玩笑 ACK: TCP协议规定,只有ACK=1时有效,连接建立后所有发送的报文ACK必须为1 SYN(SYNchron ...

随机推荐

  1. SQL 列 转换成 查询出来的 行

    查询  每个学生 的  (姓名,语文,数学,英语,成绩)为列 表结构如下: student: 学生表 grade 成绩表 : 查询出如下效果: SQL如下: select s.name,a.* fro ...

  2. Tomcat手动指定jdk路径

    Windows系统: 修改bin下的setclasspath.bat,在开头处添加: rem set specific jdkset JAVA_HOME=%CATALINA_HOME%\jdk1.8. ...

  3. NYOJ 201 作业题

    作业题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 小白同学这学期有一门课程叫做<数值计算方法>,这是一门有效使用数字计算机求数学问题近似解的方法与过 ...

  4. Python安装scikit-learn包

    我先是按照网上说的下载了个setuptools,然后直接用这个工具去安装,可是安装scikit-learn包的时候确老是有错误,也不知道错误是啥,所以就不用setuptools来安装了. 我直接下载了 ...

  5. webpy 访问静态文件

    1.在项目的根目录创建static文件夹 能够直接在网页中访问static文件夹中的文件 如果static文件夹有一个文件为favicon.ico,那么访问的地址为127.0.0.1:8080/sta ...

  6. Java学习笔记(十三)——通过Netbeans开发环境生成oracle数据库中表的对应hibernate映射文件

    [前面的话] 身体慢慢已经快好了,感觉真好,哈哈. 这篇文章要通过Hibernate对数据库进行操作,而Netbeans可以直接通过数据库逆向生成对应的映射文件.基础文章,选择性阅读. [步骤] 1. ...

  7. 通过javascript进行UTF-8编码

    通过javascript进行UTF-8编码 javascript的字符集: javascript程序是使用Unicode字符集编写的.Unicode是ASCII和Latin-1的超集,并支持地球上几乎 ...

  8. PTA L2-023 图着色问题-前向星建图 团体程序设计天梯赛-练习集

    L2-023 图着色问题 (25 分)   图着色问题是一个著名的NP完全问题.给定无向图,,问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要你解 ...

  9. ECNU 2018 10月月赛 E 盖房子 (bitset + 倍增)

    题目链接  ECNU Monthly 2018.10 Problem E 从开场写到结束…… 显然要把三角形分成上下两部分. 把每一部分分成三部分,以上部分为例. 上面和右边,以及左下角的正方形. 也 ...

  10. Vue 2.0 Application Sample

    ===搭建Demo=== http://blog.csdn.net/wangjiaohome/article/details/51728217 ===单页Application=== http://b ...