TCP为什么需要三次握手进行连接,二次或四次不可以吗?

这篇具有很好参考价值的文章主要介绍了TCP为什么需要三次握手进行连接,二次或四次不可以吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、三次握手的作用

为了确认双方具有接收和发送的能力。

二、三次握手的原因

1. 可以阻止重复历史连接的初始化(主要原因)。

2. 可以同步双方的初始序列号。

3. 可以避免资源的浪费。

三、分析原因

1. 为了防止旧的重复连接初始化造成混乱。

当客户端发送了一个 SYN 报文后,突然宕机了,并且这个 SYN 报文还被网络阻塞了,这时服务端还没有接收到客户端发过来的报文,之后,当客户端重启后,又重新向服务端建立连接,再次发送 SYN 报文(注意这次发送的 SYN 报文与之前发送的 SYN 报文的序列号是不同的,属于两个不同的报文)。

对于两个 SYN 报文,服务端是先接收 [旧 SYN 报文],再接收 [新 SYN 报文],那么当 [旧 SYN 报文] 先到达服务端后,服务端就会返回一个 SYN+ACK 报文给客户端。

三次握手时,客户端收到后可以根据自身的上下文,判断是否是一个历史连接(序列号过期或超时),那么客户端就会发送 RST 报文给服务端,表示终止这一次连接。如果是两次握手,就无法阻止历史连接,因为客户端没有中间状态 RST 给服务端来阻止连接,导致会建立一个历史连接,造成资源浪费。

2. 同步双方初始序列号 

TCP 协议通信的双方,都必须维护一个序列号,序列号是可靠传输的一个关键因素,作用是:

  • 接收方可以去除重复的数据;
  • 接收方可以根据数据包的序列号按序接收;
  • 可以标识发送出去的数据包中,哪些是已经被对方收到的;

客户端发送携带 [初始序列号] SYN 报文给服务端后,服务端也需要回一个 ACK 应答报文,标识客户端发送的报文已被成功接收,当服务端发送 [初始序列号] 给客户端时,依然也需要客户端的应答回应,这样一来一回,才能确保双方的初始序列号能被可靠的同步。

四次握手也能够可靠的同步双方的初始化序号,但可以进行优化一下,就成了三次握手了。

3. 避免资源的浪费

如果只有两次握手,当客户端的 SYN 请求连接在网络中阻塞,客户端没有接收到 ACK 报文,就会重新发送 SYN,由于没有第三次握手,服务器不清楚客户端是否接收到了自己发送的建立连接的 ACK 确认信号,所以服务器每收到一个 SYN 就只能先主动建立一个连接,就会建立多个冗余的无效链接,造成不必要的资源浪费。所以,两次握手不具备可靠性。文章来源地址https://www.toymoban.com/news/detail-598377.html

到了这里,关于TCP为什么需要三次握手进行连接,二次或四次不可以吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • (学习笔记-TCP连接建立)TCP 为什么是三次握手?不是两次、四次?

    (学习笔记-TCP连接建立)TCP 为什么是三次握手?不是两次、四次?

    常规回答:“因为三次握手才能保证双方具有接收和发送的能力” 三次握手的 首要原因是为了防止旧的重复连接初始化造成混乱 。 假设:客户端先发送了SYN(seq=90)报文,然后客户端宕机了,而且这个SYN报文还被网络阻塞了,服务端并没有收到,接着客户端重启后,又重新向

    2024年02月17日
    浏览(13)
  • TCP为什么三次握手?

    TCP为什么三次握手?

    参考:公众号 小林coding 常见回答:三次握手保证双方都具有接受和发送数据的能力。 主要原因: 1. 防止重复历史连接的初始化 2.同步双方初始序列号 3.避免资源的浪费 序列号seq标记已发送数据的位置,确认号ack表示数据已接受,期望下一次数据序列号seq = ack 当因为网络拥

    2023年04月27日
    浏览(12)
  • tcp 为什么要三次握手,两次不行吗?为什么?

    TCP使用三次握手(Three-Way Handshake)的过程是为了确保双方建立起可靠的通信连接,并在连接的建立过程中协商必要的参数。两次握手是不够的,原因主要有以下几点: 防止已失效的连接请求被接受: 假设有A和B两台主机,A向B发送了一个连接请求,但由于某些原因导致连接建

    2024年02月20日
    浏览(18)
  • TCP协议为什么要三次握手而不是两次?

    TCP(Transmission Control Protocol,传输控制协议)的历史可以追溯到1970年代初期,最初的版本是RFC 793,后来经过多次更新和改进,包括RFC 1122、RFC 1323、RFC 2018、RFC 2581、RFC 2873、RFC 3168和RFC 4614等。其中,RFC 1323(TCP Extensions for High Performance)提出了TCP的高性能扩展,RFC 2018(TCP Se

    2024年02月06日
    浏览(14)
  • TCP为什么要三次握手,而不是两次或四次?

    TCP为什么要三次握手,而不是两次或四次?

    TCP连接时用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括 Socket,序列号和窗口大小 称为连接。 以上三个方面分析三次握手原因: 首要原因为了防止旧的重复连接初始化造成混乱 网络堵塞情况下,如果一个旧的SYN报文比新的SYN报文早到达了服务端,

    2023年04月26日
    浏览(13)
  • TCP为什么需要3次握手?

    一、3次握手过程 客户端向服务端发送一个表示建立连接的SYN报文段,服务端从IP数据报中提取出TCP SYN报文段,为该TCP连接分配需要的缓存和变量,并向客户端发送表示允许连接的报文段ACK。客户端在收到ACK报文段之后,也要给该连接分配缓存和变量,客户端向服务器再发送

    2024年04月26日
    浏览(10)
  • TCP为什么是三次握手和四次挥手以及可能出现的问题

    TCP为什么是三次握手和四次挥手以及可能出现的问题

    如果是4次,多了一次没啥意义还慢了,如果是两次握手逻辑可能存在下列问题: (这两个方面也可以理解为握手过程中可能出现的问题) 不可靠 TCP协议是可靠的 ,那么 建立的连接也需要确保是双向,可靠的 ; 根据连接过程分析,只有一方收到了另一方的ack确认报文,才能证

    2024年02月03日
    浏览(15)
  • “为什么是三次握手”与“为什么是三次握手,却是四次挥手”其实是不同的问题

    “为什么是三次握手?” 这个问题言下之意其实在问:“为什么不是0次、1次、2次、4次甚至更多次握手”。 确保双方的 发送能力 和 接收能力 都是好的 。 该回答下的一评论:其实很简单, 1.a-b, 这个时候没有任何状态, 2. b-a, b给a发东西, 说明收到了a的东西, 证明了a的

    2024年02月10日
    浏览(10)
  • 为什么是三次握手和四次挥手

    为什么是三次握手和四次挥手

    因为这是双方都有收发的最小次数 握手的目的:确认网络好着没,对方好着没 确认双方主机是否健康(双方) 验证双方是否具有全双工。 比如发送数据不是为了对方接受,而是为了证明自己能够发送数据。 一次握手,服务端知道自己能收; 两次握手,客户端知道自己能够

    2024年02月02日
    浏览(16)
  • 笔记:TCP握手为什么是3次而不是2次?

    这个问题比较常见,这里简单总结一下。 一、两次握手建立连接:流程说明: 1)客户端发送SYN。 2)服务端收到SYN请求后,服务端回复SYN+ACK,然后进入已连接状态。 3)客户端收到SYN+ACK回复后,进入已连接状态。 二、两次握手建立连接:存在的问题 若客户端发送SYN后,没

    2023年04月13日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包