你需要知道的 TCP 三次握手
TCP,全称 Transmission Control Protocal。从名字可以知道这是一个用于 控制传输 的位于传输层的协议。
TCP 位于 TCP/IP 和 OSI 模型的传输层。我们最常使用的 HTTP 协议,底层通常使用的就是 TCP 协议。
如果要在客户端和服务端创建 TCP 连接,我们需要在开始的时候发送三个请求确认双方的通信能力正常,这三次连接就被称为 TCP 的三次握手。
TCP 的三次握手
下图为 TCP 头部的结构,我们的 TCP 三次握手主要用到其中的标黄的部分。
下面开始讲解这三次握手。
第一次握手
客户端给服务端发送一个 TCP 报文。在 TCP 头部中:
将 SYN 标志位设置为 1;
然后给 seq 赋予一个随机数(假设这个随机数是 x)
所谓标志位,其实就是一个比特的数据,设置为 1 ,其实就类似编程中将一个布尔值设置为 true。
SYN 代表同步(sync)的意思,seq 是序列号(Sequence number)的意思,是一个可以装载数值的地方,我们给它设置为随机数,是用来做凭证(token)的,稍后服务端会使用它。
第二次握手
服务端收到 SYN,知悉客户端希望建立 TCP 连接,并拿到了一个 seq 随机数。
服务端于是向客户端发送 TCP 报文,TCP 头中:
将 ACK 标志位设置为 1,表示已知悉(acknowledge)客户端的连接请求;
ack 的值设置为客户端传过来的 seq 值 + 1(即 x+1);
将 SYN 标志位设置为 1,表示服务端也要连接;
seq 的值设置一个随机数(假设随机数为 y)
服务端通过 ACK 和 ack 来告知客户端已知悉连接请求,并发送自己的 SYN 和 seq 来请求和客户端的连接。
第三次握手
客户端收到 TCP 请求,首先验证 SYC 是否为 1, seq 是否为 x+1。
如果是,说明服务端的这个发送是对应第一次握手的返回。客户端会再发送一个 TCP 请求:
ACK 设置为 1;
ack 设置为服务端 ack 的值 + 1(即 y + 1)
三次握手后,TCP 连接就建立了。
总结
三次握手,简单来说,就是这样的:
客户端 -> 服务端:SYN=1, seq=x (x为随机数)
服务端 -> 客户端:ACK=1, ack=x+1, SYN=1, seq=y (y为随机数)
客户端 -> 服务端:ACK=1, ack=y+1
我是前端西瓜哥,欢迎关注我,掌握更多前端面试题。
你需要知道的 TCP 三次握手相关推荐
- Wireshark验证TCP三次握手四次挥手
本文介绍如何通过Wireshark抓包工具验证TCP的三次握手四次挥手过程. 首先本地起了一个tomcat服务器,跑了一个简单的基于SpringMVC的rest服务. 打开Wireshark,捕获指定 ...
- 你需要知道的 TCP 四次挥手
大家好,我是前端西瓜哥.今天给大家说说 TCP 的四次挥手. 建立 TCP 连接一段时间后,如果要断开 TCP 连接,就会进行 TCP 四次挥手过程完成断开操作. TCP 四次的过程有点像 TCP 建 ...
- TCP三次握手Render Tree页面渲染=从输入URL到页面显示的过程?
最近工作之余一直在温故js系列,想知新,想提升,以小技术点为节奏去回顾.今天突然想到回顾一下这个http知识,http知识有太多深层次需要学习,今天简要回顾,浅析下这个技术点. 主要通过五个步骤浅析这 ...
- 40张图全面解析TCP 三次握手和四次挥手
每日一句英语学习,每天进步一点点: 前言 不管面试 Java .C/C++.Python 哪种语言的开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 TCP 如初恋. ...
- 吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
作者 | 小林coding 来源 | 小林coding(ID:CodingLin) 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我 ...
- 从TCP三次握手说起——浅析TCP协议中的疑难杂症(转载)
[转载] 原博文来自:https://blog.csdn.net/qiansg123/article/details/80126677 作者:黄日成,手Q游戏中心后台开发,腾讯高级工程师. 因为写得太 ...
- 从TCP三次握手说起——浅析TCP协议中的疑难杂症
PeterWang_bupt 贡献值:2 等級:L1 0 发布 0 评论 1 顶 发布链接发布图文 全部主题 我关注的主题 GEEKNEWS Rust Swift 全栈工程师 /home Pres ...
- 从TCP三次握手说起–浅析TCP协议中的疑难杂症(2)
在"从TCP三次握手说起–浅析TCP协议中的疑难杂症(1)"文章中,我们提到第6个疑问:TCP的头号疼症TIME_WAIT状态,下面我们继续这个问题的解答: 6. 疑症(6) TC ...
- 淘宝二面,面试官居然把TCP三次握手问的这么详细
TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题了,通常也作为各大公司常见的面试考题,具有一定的水平区分度.看似是简单的面试问题,如果你的回答不符合面试官期待的水准,有可能就直接凉凉了. 本文 ...
最新文章
- 第六课:不要为金钱而工作
- go WaitGroup的坑
- 变量的分类(按数据类型)
- IO流的应用_Copy文件
- python fileinput处理多文件
- matlab遗传算法tsp程序,遗传算法解TSP问题的程序
- 微信小程序原生自定义组件布局问题
- 亚马逊AWS EC2服务器配置教程
- win10开机自动打开http://go.microsoft.com/fwlink/?LinkID=219472clcid=0x409
- 分享一个英语听力资源下载网站
- CyclicBarrier多任务协同的利器
- 集体照的拍摄及后期合成
- 快速学习-ElasticaSearch6.2.1搜索管理
- 设计模式之禅-二《上卷》
- 新环境-新体验-新生活_发某人南下随笔
- cmd操作MySQL 多表查询(日记 day 4)
- JQuery-样式篇
- ChatGPT简要解读(一) - 原理分析与性能提升篇
- 【Windows】win10或win11的资源管理器 文件夹中存在今天、昨天、本周更早时候之类的分割线分组依据如何怎么去除去掉?
- 杭电ACM(HDUOJ)试题分类