TCP 3-way handshake
2020/5/24 17:27:32
本文主要是介绍TCP 3-way handshake,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
TCP Three-handshake,TCP的三次握手。它发生在TCP建立初始连接的时候。TCP的三次握手,已经算是计算机网络话题里面的老生常谈了。但是,相比背书式地记住三次握手的整个过程,建立在理解之上的记忆可能来得更加牢固和长久。
正文
下面,是几张常见的关于TCP包头部的机构图。通过中西对照,我们能看清TCP三次握手常说的这些术语到底是什么:
图一:
图二:
图三:
图三来自于Wikipedia,相对权威,我们就拿它说事。下面只解释跟TCP三次握手相关的字段:
- seq,全称“sequence number”,中文翻译为:序列号,长度为32位。
- ack,全称“acknowledgment number”,中文翻译为:确认号,长度为32位。
- 旧版标志位区:“UAPRSF”(新版增加了三个标志位):
- U - Urgent([ˈɜːrdʒənt],紧急的,急迫的)。代表紧急指针字段是有效的,该包是高优先级的数据包。
- A - Acknowledgment。表示确认号字段是有效的。
- P - Push。当该标志位设置为1的时候,代表当前的数据需要push,即接收方应该尽快将这个数据包交给应用层而不要等待缓存区。
- R - Reset。为1的时候表示出现严重差错,可能需要重新创建TCP连接。
- S - synchronize。为1的时候表示这是连接请求或者接受连接请求,用于创建连接和序列号同步。只有第一个发往对方的数据包才需要将该标志位设置为1。
- F - Final。表示这是本次通讯的最后一个数据包了,对方接收完之后,连接就断开了。
这个握手的过程,用拟人的手法可以描述如下:
-
Cient:“server哥们,我准备你想(连接)上你啊。”。
-
Server:“嘿嘿,来吧。麻烦你先把SYN标志位置为1吧,好让我知道你想上我。同时随机发送一个序列号值(seq)xxx过来,我会在上面加一来证明我收到了你的请求。”
-
Cient:“好咧,事给你整妥了。数据包已经发给你了。”
-
Server:“Client,你发我的数据包我已经接到。我按照我们的约定,我做了下面的事情:
- 在seq的值上面加1,并且把这个值赋值给了确认号字段(ack),同时把ACK标志位设置为1, 再次表明我发给你的ack字段是有效的,麻烦你确认一下。
- 按照官方规定,第一个发往对方的数据包,必须要把标志位SYN设置为1,我也照做了。
- 最后,为了证明你也收到了我们的确认包,我也会随机生成一个序列号yyy,麻烦你收到后在上面加1,再返回给我。”
-
Cient:“Server兄,你的确认包我已经收到。我也按照约定做了以下一些事情:
- 在你的发给我的seq上加1,并把值“yyy+1”付给了确认号字段。老样子,我也通过把ACK标志位置为1来告诉你,确认号字段是有效的,请重视。
- 根据官方规定,这不是我发给你的第一个数据包了,所以,SYN字段我会设置为0。
- 最后,我会将序列号字段值设置为我的第一数据包的序列号再加上1,通过这种方式告诉你,这是我发给你的第二个数据包。”
-
Server:“亲爱的Client,你发给我的数据包已经收到,整个握手过程没问题。你可以上我了。噢不,我们可以通讯了。”
参考资料
- 传输控制协议;
- Transmission Control Protocol;
- TCP协议三次握手和四次挥手抓包分析;
- TCP包头格式详解;
这篇关于TCP 3-way handshake的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-30用PydanticAI和Gemini 2.0构建Airflow的AI助手
- 2024-12-30阿里云ECS教程:新手入门必读
- 2024-12-30使用vxe-table的插槽时页面卡顿怎么优化?-icode9专业技术文章分享
- 2024-12-30在 Kotlin 中使用 Coil 怎么实现高斯模糊效果?-icode9专业技术文章分享
- 2024-12-30有哪些常见的方法和工具查看和分析域名访问量?-icode9专业技术文章分享
- 2024-12-30aar 文件和jar 文件的区别是什么?-icode9专业技术文章分享
- 2024-12-30Gradle引用依赖 annotationProcessor 和implementation 的区别是什么?-icode9专业技术文章分享
- 2024-12-30packaging 类型 jar.sha256 和 jar的区别是什么?-icode9专业技术文章分享
- 2024-12-30.aar 是什么文件?-icode9专业技术文章分享
- 2024-12-30Build > Build Bundle(s) / APK(s) 的作用是什么?-icode9专业技术文章分享