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设计成三次握手的目的就是为了避免重复连接

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

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

相关推荐
盐焗西兰花2 小时前
鸿蒙学习实战之路 - 网络重连最佳实践
网络·学习·harmonyos
义一8 小时前
华为eNSP示例说明网关地址和终端IP地址不在同一网段能正常通信吗
网络
minji...11 小时前
Linux 基础IO(一) (C语言文件接口、系统调用文件调用接口open,write,close、文件fd)
linux·运维·服务器·网络·数据结构·c++
真正的醒悟12 小时前
202503-经验之道
服务器·网络·php
qq_2516161913 小时前
ubuntu nginx文件服务器
linux·服务器·网络
云计算练习生13 小时前
渗透测试行业术语—— 网络攻击方式与漏洞利用
服务器·网络·安全·渗透测试术语·网络安全术语
乾元13 小时前
SDN 与 AI 协同:控制面策略自动化与策略一致性校验
运维·网络·人工智能·网络协议·华为·系统架构·ansible
锡兰_CC13 小时前
无缝触达,卓越体验:开启openEuler世界的任意门
服务器·网络·数据库·c++·图像处理·qt·nginx
wuxuanok13 小时前
ThinkPHP ——安装部署与配置
sql·mysql·nginx·php
橘子真甜~14 小时前
C/C++ Linux网络编程10 - http协议
linux·服务器·网络·c++·网络协议·http