TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?

TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?

1. 什么是TCP协议?
  • TCP:Transmission Control Protocol翻译过来就是传输控制协议,TCP协议是一个面向连接的、可靠的、基于字节流的传输层协议
  • RFC 793对TCP连接的定义
    > Connections:
    > The reliability and flow control mechanisms described above require 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.

其大致意思是TCP连接是为了用于保证可靠性和流控制机制的,包括 Socket、序列号及窗口大小。

2. TCP协议的特性
  • 面向连接:是指TCP是通过服务端和客户端进行连接的协议
  • 面向字节流:TCP服务端和客户端之间的数据通讯是通过字节流数据传输的
  • 可靠的:是指TCP服务端客户端之间的数据传输是很稳定的,即使网络很差的情况,TCP都能保证将数据传输到接收方。
3. TCP三次握手执行流程
复制代码
关键字说明:

SYN:Synchronize Sequence Numbers,同步序列编号

ACK:Acknowledge Character,确认字符

SEQ:Sequence Number,序列号

TCP三次握手执行过程:

  1. 首先,服务端和客户端都是处于CLOSED状态的,然后服务端启动,监听端口,状态变为LISTEN(监听)状态
  2. 客户端为了请求资源,发送连接,发送同步序列号SYN,此时客户端就变成了SYN-SEND状态
  3. 服务端接收到客户端请求之后,发送SYN和ACK,然后服务端状态就变成SYN-RCVD状态
  4. 客户端接收到信息之后,再次发送ACK,然后变成ESTABLISHED(已确认)状态,服务端接收到返回信息后,状态也变成ESTABLISHED(已确认)状态
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设计成三次握手的目的就是为了避免重复连接

设计成四次握手?五次握手?不可以?

可以的,不过为了节省资源,三次握手就可以符合实际情况,所以就没必要设计成四次握手、五次握手等等情况

相关推荐
blasit12 小时前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet