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

news/2024/7/7 20:26:04

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三次握手执行过程:
图片来源于图解http

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

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

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


http://lihuaxi.xjx100.cn/news/1372154.html

相关文章

创作纪念日——Hello World

创作纪念日——Hello World 导读 正在报告&#xff01; ——迅捷斥候 成就 精通多种语言的Hello World 1. C #include int main() {printf("Hello, World");return(0); }2. C int main() {std::cout << "Hello World";return 0; }3. C# using…

mysql 使用JSON_EXTRACT提取 json数据格式的字段

task 表中有如下数据结构 iddata_ext1{“name”: “张三”,“gender”: 1,“age”: 20} 提取data_ext字段 select id,cast(JSON_UNQUOTE(JSON_EXTRACT(data_ext, $.name)) as char) as name,cast(JSON_UNQUOTE(JSON_EXTRACT(data_ext, $.gender)) as char) as gender, cast(…

【Android】merge,include和viewstub的区别

序言 在Android开发中&#xff0c;merge、include和ViewStub都是用于布局的标签。 merge标签&#xff1a; merge标签用于优化布局层级&#xff0c;可以减少不必要的视图层次&#xff0c;提高布局的性能。 它会将标记的子视图合并到其父视图中&#xff0c;而不会创建新的视图…

HMM与CRF模型的使用过程有哪些差异?

在NLP领域, HMM用来解决文本序列标注问题. 如分词, 词性标注, 命名实体识别都可以看作是序列标注问题。同HMM一样, CRF一般也以文本序列数据为输入, 以该序列对应的隐含序列为输出。 HMM模型 HMM模型表示为: lambda HMM(A, B, pi), 其中A, B, pi都是模型的参数, 分别称作: 转…

Qt_Ymodem协议

项目介绍 在和下位机进行调试的时候经常会使用Ymodem协议来传输文件。 网上查找了好多资料都是复杂且不清晰的。所以自己总结一下Qt中使用Ymodem协议传输文件的例子,方便自己日后使用。 调用库函数 在查找资料的过程中发现了一个库函数已经将Ymodem协议封装好了。下面讲一下…

ARM 循环阻塞延迟函数

串行驱动的关键是双方能够按照既定的时序进行检测、设置相关引脚上的电平&#xff0c;比如单总线、I2c这样基本的可以用GPIO模拟的时序协议&#xff0c;需要主从双方&#xff0c;必须在链路接口内严格按照微妙级的延迟单位进行时序同步。 所以&#xff0c;在这种对时间要求很敏…

B2B2C开源多语言多商户跨境外贸网站部署开发

随着全球化的发展&#xff0c;跨境外贸成为了许多企业拓展业务的重要方向。搭建一个B2B2C开源多语言多商户跨境外贸网站&#xff0c;将有助于实现企业的全球化经营。那么&#xff0c;如何搭建一个B2B2C跨境外贸网站呢&#xff1f; 一、选择合适的开源平台 在搭建一个B2B2C跨境…

Ansys Speos | Presets 适合用户的预定义参数集

概述 Speos Presets 参数预置功能允许创建预定义的参数集&#xff0c;并将它们应用于新的或现有的 Speos&#xff0c;从任何 Speos 对象创建预设&#xff0c;例如光源&#xff0c;传感器&#xff0c;材料&#xff0c;仿真等&#xff0c;通过一个*.Preset 的文件定对仿真类型的配…