| |
|
开发:
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:客户端发送“断开连接”报文,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地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |