| |
|
开发:
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的三次握手(建立连接的方式),释放连接的方式就是四次挥手了。 为什么要四次挥手呢? 白话版(解释): 第一步:A向B说,我不会再见你了。 第二步:B向A说,哦!我知道了。(但是此时只是A不想见B了,B还能找A啊!!!) 第三步:B也向A说,我也不会想见到你了。 第四步:A说:哦!!! PS:(从此两人不再相见) 理解版(解释): 因为TCP是属于全双工的连接,所以在A发送请求并释放自己的连接的时候,B需要确认,但是B只是确认了不收A的消息,而A依然能够收到B的消息。但是B在释放自己的连接之后A也需要向A发送自己需要释放资源的报文段,A收到了也需要回应,所以需要4次。 需要了解的概念(重要): 终止比特FIN:释放一个连接。当FIN=1时,表明报文段的发送端的数据已发送完毕,并要求释放传输连接。 确认比特(ACK):只有当ACK=1时,确认号字段才有效,当ACK设置为0的时候,确认号无效,建立起链接之后,所有传送的报文段都必须把ACK设置为1。 TCP四次挥手的过程 第一步:数据传输结束之后,通信的双方都能够释放连接。例如A向B服务器发送一个释放报文段,并且A自己停止发送数据,主动关闭TCP连接。A将释放连接的报文段首部的FIN设置为1,序列号seq=u,等待B确认该条报文段。此时需要注意,由于TCP是全双工的,A停止发送数据,但是B还能够发送数据。 第二步:此时B需要发送确认消息,确认好ack=u+1(即A发送的序列号+1),报文自己的序列号就假定为seq=v,然后B的TCP通知高层应用进程。在第二次的时候由A到B这个方向的连接就释放了。但连接仍然是处于半开放状态,即B发送消息,A还是能够接收。 第三步:前面第二步已经知道,现在B发送消息A还是能够接收的。此时如果B已经没有需要向A发送数据了,其应用进程就通知TCP释放连接。 第四步:A收到连接释放的报文段的时候,必须发出确认,在确认报文段中。因为是确认的报文段,所以ACK=1,确认号为ack=w+1,自己的序号为seq=u+1。 经过了四个完整的步骤之后TCP连接才算是真正的释放。 图片过程方式解释过程 第一步: 第二步: 第三步: 第四步: ? ? ? ? |
|
网络协议 最新文章 |
使用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/25 21:28:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |