IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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的三次握手和四次挥手很重要。事实也是如此,公司面试、各种考试,多多少少都会问些这个。哪,重要的东西就很难吗?当然不是!鹦鹉先生将用三个角度,带你理解TCP的握手和挥手。

“握手”指的是TCP建立连接,“挥手”指的是TCP释放连接。下面,先看看握手。

从上至下,每一个箭头表示一个过程。

三次握手——建立连接

日常生活篇

客户端:Hi,你好!

服务端:你好呀,需要一点什么?

客户端:我需要从X+1开始的数据。

故事篇

客户端:我是客户端,我要建立连接了,SYN=1(一次“往”),给你一个seq=X,收到请回复;

服务端:我已收到你的SYN,现在回复你,SYN=1(一次“返”),ACK=1,你给我的X在ack中,ack=X+1,再给你捎带一个seq=Y,收到请回复;

客户端:OK收到了,我们之间是有路可达的,回复你ACK=1,你给我的Y在ack中,ack=Y+1.因为前面的包大小为1,所以我们就从seq=X+1开始发送数据吧!

理论篇

从TCP的报文结构分析,我们知道,里头有六个指针。只有它们数值为1,才表示对应报文段首部的指定内容是有意义的。这其中,就有我们熟知的ACK、RST、SYN、FIN等。所以首先明确一点:要想表达某种意思前,先要将对应内容的对应指针置为1,只有这样才可以带相应内容给对方。其次,不管是建立连接的SYN,还是拆连接的FIN,这两个家伙都要在C/S双方往返一次。

于是,我们从理论层面讲解一下“握手”。

过程1:客户端主动发出“建立连接”请求,SYN=1(一次“往”),带一个seq=X过去,如果对方收到后,要求回复一个X+1;

过程2:服务端被动收到了请求,SYN=1(一次“返”)。为了回复,ACK=1,ack=X+1,顺便给对方一个seq=Y,通知对方“我们之间可达”;

过程3:客户端收到了,回复ACK=1,ack=Y+1。此时客户端需要编号为“X+1”的数据,于是告知服务端seq=X+1。

其次,是“挥手”。

四次挥手——释放连接

日常生活篇

客户端:行,就先聊到这,我回家了。

服务端:稍等一下,我还有一点东西给你……

服务端:亲,拿好哦,那我不送了。

客户端:好的,再见!

故事篇

客户端:老子要下线了,FIN=1(一次“往”),给你一个seq=u,收到请回复;

服务端:收到了!ACK=1,ack=u+1,但我还有一点数据,等我传完先,给你一个seq=v(无实义);

传……传……传……传……传……

服务端:好了传完了,我们开拆吧!FIN=1(一次“返”),ACK=1,ack=u+1,我这先下线了,给你一个seq=w,你拆了吗?

客户端:好,我也拆了,ACK=1,ack=w+1,我们在seq=u+1结束了。

理论篇

在“建立连接”中,我们知道了:

  • 要想表达某种意思前,先要将对应内容的对应指针置为1,只有这样才可以带相应内容给对方。
  • 不管是建立连接的SYN,还是拆连接的FIN,这两个家伙都要在C/S双方往返一次。

同样地,在拆连接中,也是如此,只不过服务端还有一些数据要发送。

过程1:客户端发送“断开连接”报文,FIN=1(一次“往”),seq=u;

过程2:服务端收到客户端报文段,回复ACK=1,ack=u+1,seq=v(无实义);

过程3:传完数据后,服务端确定可以拆连接了,FIN=1(一次“返”),回复ACK=1,ack=u+1,捎带seq=w。

(图片来源于互联网)

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:56:37  更:2022-02-01 20:58:46 
 
开发: 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 10:49:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码