| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> TCP三次握手 -> 正文阅读 |
|
[网络协议]TCP三次握手 |
坚持原创输出,点击蓝字关注我吧目录
一、举个例子类比两个人初认识的一个过程。比如一个男生初次认识一个女生,男生第一次看到这个女生就一见钟情,想要认识女生。 男生给女生发了个求交往的消息,“我想要跟你做朋友,可不可以?”给这个求交往的消息打上标签,比如爱心,代表这个是求交往的消息。 女生回复“我收到你的消息(对收到消息的确认)。我同意跟你做朋友试试看。”这个是女生的态度。在男生发完求交往后的一个确认消息以及女生同意交往的消息。 这个是消息内容以及消息性质。男生收到女生的消息很开心,再次确认下我确实收到了你的确认消息。也知道了女生同意试试看的态度。 这样的一个交互之后,确认消息的一个再次确认消息。 结果:确认关系了,可以正式交往了。后面再发送的消息就是他们作为男女朋友之后发的消息内容了。 二、TCP三次握手详解1.TCP头部的重要字段tcp三次握手跟这个过程就特别像。 现在是个客户端,这边是个百度服务器。这个客户端想像百度服务器去取页面、资源。首先要发起个tcp的链接请求。 首先要发一条请求链接的消息。请求链接的消息里面要包括一些什么内容呢?这个需要再去详细的看下tcp头部了。 要重视的是序号、确认号、6个标志位。
太大了在网络中是无法传输的,分成一小段一小段进行传输。 分段,到达目的主机后进行重组。比如分成了10段,每段要按顺序重组,才能组成原来一样的数据包。如果顺序错了,数据包也不一样了。 所以这个时候要对它进行一个编号,比如分成10段,分别是1,2,3,4....10,重组的时候,收到1的时候必须等2,收到2的时候必须等3,这个数据包依次过来依次重组,这样保证数据能够正确的组合起来。这个就是序号的作用。
比如男生给女生发请求交往的消息,内心很忐忑的希望女生也能够回一个确认消息。确认消息里面会带一个编号。这个编号就是这里说的确认号。 确认号存在于确认消息里面的。确认号是怎么编号的呢?序号是为了给数据包分段的时候为了方便给后面进行完整的数据重组。
一个数据包发送过去,它的序号的编号是1。发到服务器那边,服务器进行了一个回应,回应包也就是确认包里面有确认号。 确认号是上一个收到的包的序号加上1。表示服务器期望收到你的下一个包的序号。
标志位--信号灯,1--亮,0--灭。表示数据包的类型。标志位就是表示数据包的类型。 2.四个标志位
什么是确认消息?男生给女生发了一个求交往的消息,女生礼貌性的回了一个确认消息。这个就是一个确认消息,ACK这个标志位就会被置成1。 客户端收到,就会认识这个包是个确认消息。
2.确认接受链接的消息。 如果我这个消息是一个确认接受链接的消息,服务器这边 收到客户端一个发起链接的消息,然后我同意它发起链接,所以要进行一个确认。 这两种情况都需要把SYN位置成1。
RST是出现错误,不得不释放链接,而FIN是用完了这个链接,用完了之后自然要释放这个链接。FIN被置位了就表示TCP四次挥手要开始了。 不管是客户端还是服务器收到tcp的报文,检查标记号,标记位是什么状态,表示当前的报文是一个什么样的类型。 3.TCP三次握手客户端要向服务器端发送一个请求链接的消息。标志位SYN=1,表示一个发起链接的消息时,这个SYN位一定置成1。 每个包都有一个序号,所以序号用seq来表示,seq=j,表示当前的序号是j。 是一个SYN包,是我要向服务器发起一个链接请求。这个是客户端向服务器发起的第一个数据包。也是三次握手的第一次握手。 服务器收到了客户端的包,服务器给客户端回的消息是一个确认消息。
表示收到了序为j的这个包,并且希望得到下一个包的序号是j+1。 这个包,自己的序号是seq=k。 客户端收到服务器的确认消息,需要再次给它发送一个确认消息。 这个确认消息里面,标志位里面:ACK肯定置1。也不是发起请求的一个消息,也不是确认接受请求的一个消息,所以SYN这个位置是不会被置位的。 ack(确认号)=k+1 收到序号为k的这个包,并且进行一个确认,期待下一个包的序号是k+1,到此为止就是tcp三次握手的一个完整过程。 后续才是这个基础上的数据发送报文。 必须要建立这个三次握手的基础上才有后续的数据发送报文。 四、总结服务器和客户端在握手中的状态:首先,三次握手之前,客户端和服务器端都是处于关闭状态。 然后客户端发起了第一个SYN包,想要去跟服务器建立链接。 发完SYN包之后就变成syn_sent状态,就是把syn发完了的状态。服务器在收到syn包之前变成监听状态。 开始听下谁会给我发送消息。收到客户端的syn包之后,变成syn_Revd的状态。 回了一个syn,ack。客户端收到syn,ack之后变成建立链接的状态,它认为我收到之后,我这个链接就已经建立好了。并且我给它发送了一个ack包,服务器收到ack包后也建立链接了。 公众号 「清菡软件测试」 首发,更多原创文章:清菡软件测试 152+ 原创文章,欢迎关注、交流,禁止第三方擅自转载。如有转载,请标明出处。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 9:58:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |