| |
|
开发:
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实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?读者可以带着疑问,看一遍本篇博客的详细讲解 ok,首先解释原因之前还是要先复习一下TCP的基本知识和三次握手协议: 1、什么是TCP协议? TCP:Transmission Control Protocol翻译过来就是传输控制协议,TCP协议是一个面向连接的、可靠的、基于字节流的传输层协议 RFC 793对TCP连接的定义: Connections: 其大致意思是TCP连接是为了用于保证可靠性和流控制机制的,包括 Socket、序列号及窗口大小。 其中Socket是由IP加端口组成的,序列号是用来解决乱序问题的,而窗口大小则是用来做流量控制的。 2、TCP协议的特性 面向连接:是指TCP是通过服务端和客户端进行连接的协议 面向字节流:TCP服务端和客户端之间的数据通讯是通过字节流数据传输的 可靠的:是指TCP服务端客户端之间的数据传输是很稳定的,即使网络很差的情况,TCP都能保证将数据传输到接收方。 ps:TCP传输的可靠性得益于TCP会记录信息的发送状态,哪些数据收到了,哪些数据没收到,TCP都是会记录的,然后哪些丢包的情况,就是发送不成功的情况,TCP会重新发包,所以TCP的可靠性就是这么保证的 3、TCP三次握手执行流程 TCP的三次握手执行过程是面试中的一个很常见的问题,因为这个问题也是计算机的一个很重要的基础,所以需要认真学习 关键字说明: SYN:Synchronize Sequence Numbers,同步序列编号 (1)首先,服务端和客户端都是处于CLOSED状态的,然后服务端启动,监听端口,状态变为LISTEN(监听)状态 (2)客户端为了请求资源,发送连接,发送同步序列号SYN,此时客户端就变成了SYN-SEND状态 (3)服务端接收到客户端请求之后,发送SYN和ACK,然后服务端状态就变成SYN-RCVD状态 (4)客户端接收到信息之后,再次发送ACK,然后变成ESTABLISHED(已确认)状态,服务端接收到返回信息后,状态也变成ESTABLISHED(已确认)状态 4、TCP协议为什么需要三次握手? ok,知道了TCP的三次握手的基本工作原理之后,就可以解释为什么TCP需要三次握手?为什么不设计成两次握手就可以? 原因:避免重复连接 其实在RFC 793 Transmission Control Protocol里就有指出为什么要三次握手的原因 The principle reason for the three-way handshake is to prevent old duplicate connection initiations from causing confusion. 比如在网络环境比较复杂的情况,客户端可能会连续发送多次请求。如果只设计成两次握手的情况,服务端只能一直接收请求,然后返回请求信息,也不知道客户端是否请求成功。这些过期请求的话就会造成网络连接的混乱。 所以设计成三次握手的情况,客户端在接收到服务端SEQ+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 23:46:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |