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握手流程

二、为什么不是4次握手

TCP的每次请求都是成对的,原则上应该是四次

  1. 【Client to Server】第一次SYN,seq=x
  2. 【Server to?Client】第二次ACK,seq=y,ack=x+1(没有携带数据的ACK不消耗序列号)
  3. 【Server to?Client】第三次SYN,seq=y,
  4. 【Client to Server】第四次ACK,seq=x+1,ack=y+1.

可以看出第二次和第三次都是Server to Client,且他们之间没有任何事件发生,所以可以合并,不是四次的原因是2,3步骤合并,增加效率。

三、为什么需要握手(为什么需要三《”四“》次握手)

要回答为什么先看看什么是TCP链接。ref?RFC 793 - Transmission Control Protocol

    The reliability and flow control mechanisms described above requirez
    that TCPs initialize and maintain certain status information for
    each data stream.  The combination of this information, including
    sockets, sequence numbers, and window sizes, is called a connection.
    Each connection is uniquely specified by a pair of sockets
    identifying its two sides.

为了保证可靠性传输,TCP需要两边维护socket,序列号,和窗口大小(流量控制用),握手就是为了在数据开始传输前让客户端和服务器准确无误的交换上述信息。

需要握手的原因:

  1. 阻止已经失效的历史请求的初始化【谢希仁】
  2. 只有通过三次握手才能交换序列号

3.1?阻止已经失效的历史请求的初始化

?ref:RFC 793 - Transmission Control Protocol

The principle reason for the three-way handshake is to 
prevent old duplicate connection initiations from causing confusion. 

假如只有两次握手

假如服务端在ack以后就建立了链接,当有延迟的数据在链接关闭后到达服务端,

  • 服务端不知道这是旧链接,直接建立返回ack,且建立了链接。
  • 因为上一次链接已经关闭,客户端不认识这个ack,直接丢弃。

这样会导致服务端资源被这种失效的链接给浪费。

3.2?只有通过三次握手才能交换序列号

序列号是可靠性传输的根本,通过序列号,接收方可以去重,可以保证TCP流按照顺序最终被接受。

初始序列号是随机生成的(为了安全),所以在链接建立之初需要双方通过SYN来告知对方自己的初始序列号。

同时每一个发出去的序列号,都需要一个接收方的ACK,来告诉发送方:我已经收到了--可靠性保证

所以两次握手不行:服务端的SYN,没有办法ACK。

由于第二次和第三次可以合并,所以最终把逻辑上的四次握手变成了三次。

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

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