你好啊!我是山茶,一个持续探索 AI + 测试之路的程序员。
TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。常常被用于处理实时通信,因此,在传输效率上会稍逊色于UDP协议
报文结构
TCP协议的报文结构如下(图片源于网络,如果侵权,请联系我删除)
对于三次握手与四次挥手操作,报文接口中主要有两部分“端口”和“常用控制字段”特别关注。端口是用于标记自己与目标方的,常见控制字段则是进行建立连接与端开连接的标识
-
常见控制字段及含义
-
SYN = 1,表示建立连接请求
-
ACK = 1,表示数据信息确认
-
FIN = 1,表示断开连接请求
-
三次握手的建立过程
以c/s架构为例,如图所示
握手🤝建立连接
-
client端向server端发送一条建立连接的请求SYN = 1
-
server端向client端回发一条确认连接请求的信息ACK = 1。由此,成功建立了一条客户端向服务端发送数据的通道
-
服务端也想建立一条数据传输通道,因此,server端向client端发送一条建立连接的请求SYN = 1
-
client端向server端发回发一条确认连接请求的信息ACK = 1。由此,成功建立了一条服务端向客户端发送数据的通道
由此,服务端与客户端成功建立了双向数据传输通道
那你可能会问,这个建立连接不是四次吗?怎么会说是三次呢?
因为服务端在第一次客户端发送建连请求,回发确认连接请求时,会将服务端建立连接请求同ACK = 1确认一同发送,如下图所示
四次挥手的过程
断开连接过程
-
client端向server端发送断开连接请求 FIN = 1
-
server端向client端回发确认信息请求ACK = 1 及对应数据信息seq,客户端接收到信息后,进入等待状态,断开了由客户端发送服务端的数据通道
-
server端向client发送断开连接请求FIN = 1,服务端进入等待关闭状态
-
client端向server端回发确认断开连接请求确认信息ACK = 1,服务端关闭,客户端等待2msl后关闭。由此,断开了由服务端发送客户端的数据通道
终了,所有数据传输通道关闭,完成四次挥手🙋
为什么是四次不是三次挥手,服务端断开回应为什么不能和断开连接请求一次发送?
因为一个服务端是供应与多个客户端工作,服务端无法保证当一个客户端在发送请求完成后,立马发送对应的数据给对方,需要再进行二次数据确认,以保证数据及链路的完整性,所以挥手通常为四次,服务端断开回应不能和断开连接请求一次发送。
TCP协议
-
TCP协议处于传输层,基于端口,面向连接
-
主机之间想要互相通信,首先需要建立双向数据通道
-
TCP的握手与挥手本质上都是四次
作者简介:
程序员山茶,一个工作5年,并坚持探索测试之路的测试开发工程师。曾混迹于互联网大厂、IOTA行业领航企业、安全行业、大数据行业领航企业,欢迎和我一起沟通交流。
文章来源:https://www.toymoban.com/news/detail-839527.html
欢迎关注我, 和我一起探索AI+测试之路,终身成长文章来源地址https://www.toymoban.com/news/detail-839527.html
到了这里,关于【三、接口协议与抓包】TCP的三次握手与四次挥手的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!