博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP协议的三次握手和四次挥手以及断开时各阶段的状态分析
阅读量:4135 次
发布时间:2019-05-25

本文共 1357 字,大约阅读时间需要 4 分钟。

我们知道,https协议是在http协议之上封装了SSL协议,为了完成客户端和服务端的双向认证和可靠传输,需要在通信之前双方进行多次的握手协商。TCP协议与https协议类似。

1.TCP的连接(俗称三次握手)

在TCP协议数据报文的头部(TCP Header)结构中有32位序号(Sequence number) 和32位确认序号(Acknowledge number):SYN,ACK。

  第一次握手 Client发送位码为syn=1,随机产生seq number的数据包到serverserverSYN=1知道,Client要求连接;

     第二次握手 server收到请求后要确认连接信息,向Client发送ack number=(Clientseq+1),syn=1,ack=1,随机产生seq number的包

  第三次握手 Client收到后检查ack number是否正确,即第一次发送的seq number+1,以及ack是否为1,若正确,Client会再发送ack number=(serverseq+1),ack=1server收到后确认seq值与ack=1则连接建立成功。

 

2.TCP的关闭(俗称四次挥手)

TCP连接是全双工的,可以同时发送和接受数据,关闭的时候要关闭这两个方向的通道

下图是 Client主动关闭连接

第一次挥手:ClientServer发送FIN,请求关闭连接 

第二次挥手:Server收到FIN之后给Client返回确认ACK,同时关闭Receive通道,Client收到对自己的FIN确认后,关闭Send通道

第三次挥手: Server关闭连接,给Client发送FIN

第四次挥手:Client收到后给Server回复ACK确认,同时Client关闭Receive通道,进入TIME_WAIT状态。Server接收到Client对自己的FIN的确认ACK,关闭Send通道

状态的说明

CLOSE_WAIT: 表示在等待关闭。当主动关闭连接的一方关闭SOCKET后发送FIN报文给被动关闭一方,被动关闭一方回应一个ACK报文给对方,此时被动关闭一方则进入到CLOSE_WAIT状态

FIN_WAIT_1:是当Socket在已经连接的状态时主动关闭连接,向对方发送了FIN报文,此时该Socket进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态

FIN_WAIT_2:表示半连接,挥了两次手的状态等待对方的Fin报文

TIME_WAITTCP协议中主动关闭连接的一方要处于TIME_WAIT状态,等待两个MSLmaximum segment lifetime)的时间后才能回到CLOSED状态,在TIME_WAIT期间仍然不能再次监听同样的server端口。

LAST_ACK: 被动关闭一方在发送FIN报 文后,最后等待对方的ACK报文。当收到ACK报文后进入CLOSED状态。

CLOSED:已经完全关闭.

3.TIME_WAIT或CLOSE_WAIT过多分析

在对服务端的程序进行压力测试的时候,用netstat -anput命令会经过出现很多的close_wait或time_wait状态的连接。

你可能感兴趣的文章
Leetcode——350. Intersection of Two Arrays II
查看>>
isstringstream——WOW!Amazing!
查看>>
Leetcode——290. Word Pattern
查看>>
Leetcode——299. Bulls and Cows
查看>>
Leetcode——136. Single Number
查看>>
Leetcode——237. Delete Node in a Linked List
查看>>
Leetcode——396. Rotate Function
查看>>
KMP算法最浅显理解——一看就明白
查看>>
基于linux的3款压力测试工具:Siege、webbench、ab
查看>>
FC8下安装Zend Studio5.1.0时遇到的问题及解决方法
查看>>
HTML中小meta的大作用
查看>>
修改注册表来加快HTTP上传速度
查看>>
[问题解决]Visio“搜索形状"不能用
查看>>
JS匹配任意字符的正则表达式写法
查看>>
JavaScript 字符串匹配性能比较
查看>>
CSS 背景偏移技术详解
查看>>
淡淡Cookie存取和IE页面缓存的问题
查看>>
XML中特殊字符的处理
查看>>
ping命令查看对方操作系统
查看>>
解决ssh中文乱码
查看>>