TCP三次握手连接和TCP四次挥手及大量TIME_WAIT解决方法:

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解决方法:的更多相关文章
- TCP三次握手,数据传输,四次挥手
TCP包结构 一个TCP包结构如下: 一个TCP包主要由TCP包头和数据部分组成,包头固定部分为20字节,选项和数据部分根据实际情况设置为4N(N可以为0)字节. 1.16bit源端口和目的端口号,它 ...
- iOS 开发:TCP三次握手连接
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握 ...
- TCP三次握手连接
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握 ...
- TCP ,UDP概念和TCP三次握手连接 的知识点总结
OSI 计算机网络7层模型 TCP/IP四层网络模型 传输层提供应用间的逻辑通信(端到端),网络层提供的是主机到主机的通信,传输层提供的是可靠服务. TCP 中常说的握手指的是:连接的定义和连接的建立 ...
- 详解TCP三次握手(建立TCP连接过程)
在讲述TCP三次握手,即建立TCP连接的过程之前,需要先介绍一下TCP协议的包结构. 这里只对涉及到三次握手过程的字段做解释 (1) 序号(Sequence number) 我们通过 TCP 协议将数 ...
- TCP三次握手连接与四次握手断开
http://blog.csdn.net/whuslei/article/details/6667471(三次握手与四次握手) 1. TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机. 如 ...
- Python--day30--tcp协议(建立链接三次握手,断掉链接四次挥手)和UDP协议
TCP协议: tcp是可靠的,面向连接的.建立全双工通信. 建立链接的三次握手 链接一旦建立一定是全双工工通信,必然是双方通信. UDP协议: TCP协议和UDP协议的对比: QQ使用的是UDP,因为 ...
- Linux网络编程一、tcp三次握手,四次挥手
一.TCP报文格式 (图片来源网络) SYN:请求建立连接标志位 ACK:应答标志位 FIN:断开连接标志位 二.三次握手,数据传输,四次挥手 (流程图,图片来源于网络) (tcp状态转换图,图片来源 ...
- TCP三次握手及TCP连接状态 TCP报文首部格式
建立TCP连接时的TCP三次握手和断开TCP连接时的4次挥手整体过程如下图: 开个玩笑 ACK: TCP协议规定,只有ACK=1时有效,连接建立后所有发送的报文ACK必须为1 SYN(SYNchron ...
随机推荐
- IE11中实现颜色渐变
background: -ms-linear-gradient(left,#daa23e,#ad7f27); 下面是css3中颜色渐变对各个浏览器的写法:background: -webkit-lin ...
- java中的Map集合
Map接口 Map为一个接口.实现Map接口的类都有一个特点:有键值对,将键映射到值的对象. Map不能包含重复的键,每个键可以映射到最多一个值. Map常见的接口方法有: V put(K key, ...
- HDU-5273
Dylans loves sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
- mac下谷歌chrome浏览器的快捷键
1. 标签页和窗口快捷键 ⌘-N 打开新窗口. ⌘-T 打开新标签页. ⌘-Shift-N 在隐身模式下打开新窗口. 按 ⌘-O,然后选择文件. 在 Chrome 浏览器中打开计算机中的文件. 按住 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记3——输入消息处理,物理建模与粒子系统初步
第7章 Windows游戏输入消息处理 1. 键盘消息处理 之前提到的窗口过程函数有两参数与消息输出有关——wParam和llParam LRESULT CALLBACK WindowProc( _I ...
- mysql 库操作、存储引擎、表操作
阅读目录 库操作 存储引擎 什么是存储引擎 mysql支持的存储引擎 如何使用存储引擎 表操作 创建表 查看表结构 修改表ALTER TABLE 复制表 删除表 数据类型 表完整性约束 回到顶部 一. ...
- Google的C++开源代码项
转:http://blog.csdn.net/wenrenhua08/article/details/40040903 v8 - V8 JavaScript EngineV8 是 Google 的 ...
- Guid is not updated for cluster with specified cluster id; need to wait for hosts in this cluster to come up
http://mail-archives.apache.org/mod_mbox/cloudstack-users/201306.mbox/%3c201306181058330006472@gmail ...
- 亲测能用的mysqli类,挺好用的
<?php header('content-type:text/html;charset=utf-8'); /* 掌握满足单例模式的必要条件 (1)私有的构造方法-为了防止在类外使用new关键字 ...
- 插入排序(InsertionSort)
算法描述 插入排序是在一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序.插入排序是一种稳定的排序. 基本思想 插入排序是在一个已经有序的小序列的基础上, ...