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,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议.

  • 面向连接(可靠传输)
  • 确认,流量、差错控制、定时
  • 可靠按序交付
  • 不支持多播和广播,开销大
  • TCP连接是基于字节流的
  • 传输的数据单位是TCP报文段

三次握手

TCP连接的建立:三次握手

  • 使每一方确认对方的存在
  • 允许双方进行参数的协商
  • 进行资源的分配

标志位:

  • SYN: Synchronize Sequence Numbers,同步序列编号
  • ACK: Acknowledge Character,确认字符 (不同与ack)
    关键字:
  • seq:Sequence Number,序列号 代表本条消息的序列号 (按序交付)
  • ack:期待下一次收到的序列号,一般为seq+1

三次握手流程:

  1. A 的 TCP 向 B 发送 连接请求报文段,其首部中的同步位 SYN = 1 ,并随机选择一个序号 seq = x ,表明传送数据时的第一个数据字节序号x

TCP 协议规定,SYN 置 1 的报文段不能携带数据,但是要消耗一个序号

第一步

  1. B 的 TCP 收到连接请求报文段后,如果同意,则发挥连接同意报文
    B 在连接同意报文段中应使 SYN = 1 ,使 ACK = 1 其确认号ack = x + 1 ,自己随机选择一个序号seq = y

第二步
3. A 收到此报文后向 B 给出确认,其 ACK = 1 ,确认号 ack = y + 1seq = x + 1
A 的TCP通知上层应用进程,连接已经建立
在这里插入图片描述
4. B 的 TCP 收到主机A的确认后,也通知其上层应用进程:TCP连接已经建立

进行数据传输

TCP 为什么需要三次握手?而不是两次?

不是两次的主要原因使为了防止多次连接导致连接混乱。 比如A
主机的网络较差,连续发送了多个连接请求,B收到请求后给予想用,但是B不知道A是否收到了同意连接请求,就只能重复同意,这些过期的请求可能回导致网络的混乱
所以设计成三次握手的情况,客户端在接收到服务端SEQ+1的返回消息之后,就会知道这个连接是历史连接,所以会发送报文给服务端,告诉服务端。
所以三次握手的原因就是避免多次建立重复连接

那可不可以是四次,五次或者更多次?

可以,但是没有必要,三次已经足够适应需求了,多次的握手可能导致了资源的浪费

四次挥手

TCP连接的释放:双向释放(4次挥手)

首先解释为什么需要四次挥手?

TCP是基于全双工通信的,所以双方都可以主动释放连接。
四次挥手的意义就在于,当 A 发送完最后一条数据之后,但可能B还有未发送给A 的数据。
所以A在发送完收据后可以请求释放连接,此时B给与A响应,告诉A我知道你想断开连接,此时A还可以继续接收B发送的信息
在B处理完工作后,也请求释放连接。A同意后,就断开连接。
这样可以保证数据正常可靠的交互。

四次挥手流程:

FIN : 标志位,请求关闭连接

TCP 的标准规定,FIN报文即使不携带数据信息,也需要消耗一个seq

  1. 数据传输结束后,通信双方都可以释放连接
    现在假设AB已经发送完数据,A就可以发出连接释放报文段,并停止在发送数据,主动关闭TCP连接
    A 把连接释放报文首部的 FIN = 1,其序列号 seq = u,等待 B 的确认。 u 为 A 已传送数据的最后一个字节的序号加1

在这里插入图片描述
2. B收到后。发出确认,意思我收到了,ACK = 1,确认号 ack = u+1,而这个报文段自己的序号为seq = v
从A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态。B 若发送数据,A仍需要接收

在这里插入图片描述

  1. 当B发送完数据后,就可以释放连接
    B 发出的连接释放报文 的== FIN = 1== ,序号为w,ack仍为u+1

在这里插入图片描述

  1. A 收到连接释放报文后,必须发出确认ACK = 1 ,确认好 ack = w +1,序号seq = u+1

至此,双方断开连接

在这里插入图片描述

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

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