当前位置:网站首页>TCP 连接 三次握手 四次挥手
TCP 连接 三次握手 四次挥手
2022-07-30 21:45:00 【鱼子酱酱酱】
建立连接
客户端和服务端通过 HTTP 协议发送请求,并获取内容。
在发送请求之前,需要先建立连接,确定目标机器处于可接受请求的状态。
就例如,你要请快递员(第三方的)去张三家取一个东西,你必须先打电话问问他在不在家。这就是建立连接的过程。
HTTP 协议是一个应用层的协议,它只规定了 req 和 res 的数据格式,如状态码、header、body 等。
而建立网络连接需要更加底层的 TCP 协议。
三次握手
三次握手,即建立一次 TCP 连接时,客户端和服务端总共需要发送 3 个包。
先举一个例子。还是你要派人去张三家取一个东西,现在你要发短信(不是打电话)“建立连接”,至少需要 3 个步骤,缺一不可。
- 你:在家吗?
- 张三:在家
- 你:好,这就过去(然后你指派人上门,张三准备迎接)
过程
- 客户端发包,服务端收到。服务端确认:客户端的发送能力是正常的。
- 服务端发包,客户端收到。客户端确认:服务端的接收能力是正常的。
- 客户端发包,服务端收到。服务端确认:客户端即将给我发送数据,我要准备接收。
建立连接完成,然后就开始发送数据,通讯。
四次挥手
握手,是建立连接。挥手,就是告别,就是关闭连接。
还是之前的例子。取东西,不一定一次就取完,可能要来回很多次。而且,也不一定全部由你主动发起,过程中张三也可能会主动派人给你发送。
即,你在 chrome 中看到的是一次 http 请求,其实背后可能需要好几次网络传输,只不过浏览器给合并起来了。
好了,取东西完毕了,你要发短信“关闭连接”,告诉张三可以关门了,需要 4 个步骤。
【注意】这里你需要等着确认张三关门,才算是完全关闭连接,不能你说一声就不管了。跟日常生活不一样。
- 你:完事儿了
- 张三:好的 (此时可能还要继续给你发送,你也得继续接收。直到张三发送完)
- 张三:我发送完毕,准备关门了
- 你:好,关门吧 (然后你可以走了,张三可以关门了,连接结束)
过程
- 客户端发包,服务端接收。服务端确认:客户端已经请求结束
- 服务端发包,客户端接收。客户端确认:服务端已经收到,我等待它关闭
- 服务端发包:客户端接受。客户端确认:服务端已经发送完成,可以关闭
- 客户端发包,服务端接收。服务端确认:可以关闭了
图示
边栏推荐
- MySQL压缩包方式安装,傻瓜式教学
- It is enough for MySQL to have this article (disgusting typing 37k words, just for Bojun!!!)
- 【问题】Mysql Waiting for table metadata lock 解决方案 修改lock_wait_timeout时间
- Union, the difference between union and structure, the knowledge of enumeration of C language corners
- 小心你的字典和样板代码
- Google Earth Engine ——快速实现MODIS影像NDVI动画的在线加载并导出
- ClickHouse 数据插入、更新与删除操作 SQL
- MySQL分页查询的5种方法
- NEOVIM下载安装与配置
- 牛客小白月赛53 A-E
猜你喜欢
The mysql time field is set to the current time by default
Navicat连接MySQL时弹出:1045:Access denied for user ‘root’@’localhost’
数据质量提升
手动从0搭建ABP框架-ABP官方完整解决方案和手动搭建简化解决方案实践
大家都在用的plm项目管理软件有哪些
MySQL 5.7详细下载安装配置教程
【Nacos】解决Nacos下载速度缓慢的问题
导航栏----个人中心 Dropdown
TransGAN code reproduction - Jiutian Bisheng Platform
这本记述40年前历史的游戏书,预言的却是当下的事
随机推荐
Solve npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead
设备树的引入与体验
socket: Kernel initialization and detailed process of creating streams (files)
冲刺第六周
ML.NET相关资源整理
MySQL Soul 16 Questions, How Many Questions Can You Last?
【菜鸡含泪总结】如何用pip、anaconda安装库
Deep Non-Local Kalman Network for VideoCompression Artifact Reduction
The mysql time field is set to the current time by default
解决npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead
JS中获取元素属性的8大方法
Solve the problem of centos8 MySQL password ERROR 1820 (HY000) You must reset your password using the ALTER USER
The Road to Ad Monetization for Uni-app Mini Program Apps: Rewarded Video Ads
MySQL cursors
MySql 5.7.38 download and installation tutorial, and realize the operation of MySql in Navicat
How do I refresh the company's background management system (Part 1) - performance optimization
Qt 同时生成动态库和静态库
QUALITY-GATED CONVOLUTIONAL LSTM FOR ENHANCING COMPRESSED VIDEO
Knowledge of C language corners of byte alignment
手动从0搭建ABP框架-ABP官方完整解决方案和手动搭建简化解决方案实践