计算机网络——三次握⼿、四次挥手

这篇具有很好参考价值的文章主要介绍了计算机网络——三次握⼿、四次挥手。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TCP 三次握手

计算机网络——三次握⼿、四次挥手,计算机网络,计算机网络,网络,服务器

计算机网络——三次握⼿、四次挥手,计算机网络,计算机网络,网络,服务器
计算机网络——三次握⼿、四次挥手,计算机网络,计算机网络,网络,服务器

1、第⼀个SYN报⽂
客户端随机初始化序列号client_isn,放进TCP⾸部序列号段,
然后把SYN置1。把SYN报⽂发送给服务端,表⽰发起连接,
之后客户端处于SYN-SENT状态。

2、第⼆个报⽂SYN+ACK报⽂
服务端收到客户端的SYN报⽂,把⾃⼰的序号server_isn放进TCP⾸部序列号段,
确认应答号填⼊client_ins + 1,把SYN+ACK置1
SYN+ACK报⽂发送给客户端,然后进⼊SYNRCVD状态。

3、第三个报⽂ACK
客户端收到服务端报⽂后,还要向服务端回应最后⼀个应答报⽂

  • ⾸先应答报⽂ TCP ⾸部 ACK 标志位置为 1 ,
  • 其次「确认应答号」字段填⼊ server_isn + 1
  • 最后把报⽂发送给服务端,
    这次报⽂可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态。
    服务器收到客户端的应答报⽂后,也进⼊ ESTABLISHED 状态

三次握手的过程:

  • 一开始,客户端和服务端都处于 CLOSED 状态。客户端主动打开连接,服务端被动打卡连接,结束CLOSED z状态,开始监听,进入 LISTEN状态。

一次握手

  • 客户端会随机初始化序号(client_isn),将此序号置于 TCP 首部的「序号」字段中,同时把 SYN 标志位置为 1 ,表示 SYN 报文
  • 接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态。

二次握手

  • 服务端收到客户端的 SYN 报文后,首先服务端也随机初始化自己的序号(server_isn),将此序号填入 TCP 首部的「序号」字段中,
  • 其次把 TCP 首部的「确认应答号」字段填入 client_isn + 1, 接着把 SYN 和 ACK 标志位置为 1
  • 最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于 SYN-RCVD 状态。

三次握手

  • 客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部 ACK 标志位置为 1 ,
  • 其次「确认应答号」字段填入 server_isn + 1 ,
  • 最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态。

好了,经过三次握手的过程,客户端和服务端之间的确定连接正常,接下来进入ESTABLISHED状态,服务端和客户端就可以快乐地通信了。

计算机网络——三次握⼿、四次挥手,计算机网络,计算机网络,网络,服务器

为什么需要三次握⼿?

总结:

  1. 三次握⼿才可以阻⽌重复历史连接的初始化(主因)
  2. 三次握⼿才可以同步双⽅的初始序列号
  3. 三次握⼿才可以避免资源浪费

解释:
1、阻⽌重复历史连接的初始化(主因)

  1. 当旧的SYN报⽂先到达服务端,服务端回⼀个ACK+SYN报⽂
  2. 客户端收到后可以根据⾃⾝的上下⽂,判断这是⼀个历史连接(序列号过期或超
    时),那么客户端就会发送 RST 报⽂给服务端,表⽰中⽌这⼀次连接。

两次握⼿在收到服务端的响应后开始发⽣数据,不能判断当前连接是否是历史连接。

三次握⼿可以在客户端准备发送第三次报⽂时,客户端因有⾜够的上下⽂来判断当前连接是否是历史连接。

计算机网络——三次握⼿、四次挥手,计算机网络,计算机网络,网络,服务器

客户端连续发送多次 SYN(都是同一个四元组)建立连接的报文,在网络拥堵情况下:

  • 一个「旧 SYN 报文」比「最新的 SYN」 报文早到达了服务端,那么此时服务端就会回一个 SYN + ACK 报文给客户端,此报文中的确认号是 91(90+1)。
  • 客户端收到后,发现自己期望收到的确认号应该是 100 + 1,而不是 90 + 1,于是就会回 RST 报文。
  • 服务端收到 RST 报文后,就会释放连接。
  • 后续最新的 SYN 抵达了服务端后,客户端与服务端就可以正常的完成三次握手了。

上述中的「旧 SYN 报文」称为历史连接,TCP 使用三次握手建立连接的最主要原因就是防止「历史连接」初始化了连接。


如果是两次握手连接,就无法阻止历史连接,那为什么 TCP 两次握手为什么无法阻止历史连接呢?

我先直接说结论,主要是因为在两次握手的情况下,服务端没有中间状态给客户端来阻止历史连接,导致服务端可能建立一个历史连接,造成资源浪费

你想想,在两次握手的情况下,服务端在收到 SYN 报文后,就进入 ESTABLISHED 状态,意味着这时可以给对方发送数据,但是客户端此时还没有进入 ESTABLISHED 状态,

  • 假设这次是历史连接,客户端判断到此次连接为历史连接,那么就会回 RST 报文来断开连接,
  • 而服务端在第一次握手的时候就进入 ESTABLISHED 状态,所以它可以发送数据的,但是它并不知道这个是历史连接,它只有在收到 RST 报文后,才会断开连接。

计算机网络——三次握⼿、四次挥手,计算机网络,计算机网络,网络,服务器
可以看到,如果采用两次握手建立 TCP 连接的场景下,服务端在向客户端发送数据前,并没有阻止掉历史连接,导致服务端建立了一个历史连接,又白白发送了数据,妥妥地浪费了服务端的资源。

因此,要解决这种现象,最好就是在服务端发送数据前,也就是建立连接之前,要阻止掉历史连接,这样就不会造成资源浪费,而要实现这个功能,就需要三次握手。

所以,TCP 使用三次握手建立连接的最主要原因是防止「历史连接」初始化了连接。

2、同步双⽅的初始序列号
TCP 协议的通信双⽅, 都必须维护⼀个「序列号」, 序列号是可靠传输的⼀个关键因素。

  • 接收端可以去除重复数据。
  • 接收端可以按照序列号顺序接收。
  • 标识发送的数据包,哪些已经被收到。

这样⼀来⼀回,才能确保双⽅的初始序列号能被可靠的同步

3、避免资源浪费。

  1. 两次握⼿会造成消息滞留情况下,服务器重复接受⽆⽤的连接请求 SYN 报⽂,⽽造成重复分配资源。
  2. 只有两次握⼿时,如果客户端的SYN请求连接在⽹络中阻塞,客户端没有收到服务端的ACK报⽂,会重新发送SYN。
  3. 由于没有第三次握⼿,服务器不清楚客户端是否收到了⾃⼰发送的建⽴连接的
    ACK 确认信号,所以每收到⼀个 SYN 就只能先主动建⽴⼀个连接

过程

  1. 客户端发送第⼀个报⽂,携带客户端初始序列号的SYN报⽂。
  2. 服务器发送第⼆个报⽂,携带服务器初始序列号的ACK + SYN的应答报⽂
    表⽰收到客户端的SYN报⽂。
  3. 客户端发送第三个报⽂,携带服务器的ACK应答报⽂。

TCP 四次挥手过程

计算机网络——三次握⼿、四次挥手,计算机网络,计算机网络,网络,服务器

断开过程

  1. 假设客户端打算关闭连接,发送⼀个TCP⾸部FIN被置1的FIN报⽂给服务端
  2. 服务端收到以后,向客户端发送ACK应答报⽂
  3. 等待服务端处理完数据后,向客户端发送FIN报⽂
  4. 客户端接收到FIN报⽂后回⼀个ACK应答报⽂。
  5. 服务器收到ACK报⽂后,进⼊close状态,服务器完成连接关闭
  6. 客户端在经过 2MSL ⼀段时间后,⾃动进⼊close状态,客户端也完成连接的关闭。

为什么挥⼿需要四次?

关闭连接时,客户端发送FIN报⽂,表⽰其不再发送数据,但还可以接收数据

客户端收到FIN报⽂,先回⼀个ACK应答报⽂,服务端可能还要数据需要处理和发送,

等到其不再发送数据时,才发送FIN报⽂给客户端表⽰同意关闭连接

从上⾯过程可知:

  1. 服务端通常需要等待完成数据的发送和处理,所以服务端的ACK和FIN⼀般都会分开发送,从⽽⽐三次握⼿导致多了⼀次

  2. 第⼀次ACK应答报⽂可以省略,因为下⼀个报⽂段携带了ACK信息,ACK是否出现取决于延迟确认特性。

  3. 延迟确认:即接收⽅收到包后,如果暂时没有内容回复给发送⽅,则延迟⼀段时间再确认,假如在这个时间范围内刚好有数据需要传输,则和确认包⼀起回复。这种也被称为数据捎带。延迟确认只是减轻⽹络负担,未必可以提升⽹络性能,有些情况下反⽽会影响性能。

为什么 TIME_WAIT 等待的时间是 2MSL?

  1. MSL是 Maximum Segment Lifetime,报⽂最⼤⽣存时间,它是任何报⽂在⽹络上存在的最长时间,超过这个时间报⽂将被丢弃。

  2. 等待MSL两倍:⽹络中可能存在发送⽅的数据包,当这些发送⽅的数据包被接收⽅处理后又会向对⽅发送响应,所以⼀来⼀回需要等待 2 倍的时间

  3. 2MSL 的时间是从客户端接收到 FIN 后发送 ACK 开始计时的
    如果在 TIME-WAIT时间内,因为客户端的 ACK 没有传输到服务端,客户端又接收到了服务端重发的FIN 报⽂,那么 2MSL 时间将重新计时。文章来源地址https://www.toymoban.com/news/detail-555705.html

到了这里,关于计算机网络——三次握⼿、四次挥手的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 计算机网络:TCP协议的三次握手和四次挥手与UDP协议区别.

    TCP协议: UDP协议: TCP协议与UDP协议都工作在传输层. TCP协议与UDP协议它们的目标: TCP协议与UDP协议的最大区别: TCP协议保持连接的三个关键步骤: UDP协议: TCP协议与UDP协议主要区别: 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的

    2023年04月15日
    浏览(50)
  • 计算机网络—TCP和UDP、输入url之后显示主页过程、TCP三次握手和四次挥手

    TCP是面向连接的、可靠的,基于字节流的传输层通信协议 。 图片来源小林coding 序号:传输方向上字节流的字节编号。初始时序号会被设置一个随机的初始值(ISN),之后每次发送数据时,序号值 = ISN + 数据在整个字节流中的偏移。假设A - B且ISN = 1024,第一段数据512字节已经

    2024年02月14日
    浏览(45)
  • 【计算机网络】 TCP——四次挥手

    主动方打算关闭连接,此时会发送一个TCP首部FIN标志位被置为1的报文,也即FIN报文,之后主动方进入FIN_WAIT_1状态。 被动方收到该报文后,就向主动方发送ACK应答报文,接着被动方进入CLOSE_WAIT状态。 主动方收到被动方的ACK应答报文后,进入FIN_WAIT_2状态。 等待被动方处理完数

    2024年02月09日
    浏览(39)
  • 计算机网络之TCP四次挥手

    定义:建立一个连接需要三次握手,而终止一个连接要经过四次挥手;这由TCP的半关闭(half-close)造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力 刚开始双方都处于ESTABLISHED 状态,假如是客户端先发起关闭请求。四次

    2024年02月13日
    浏览(30)
  • 【计算机网络】TCP传输控制协议——三次握手

    一开始,客户端和服务端都处于CLOSE状态,先是服务端监听某个端口,处于LISTEN状态。 然后客户端主动发起连接SYN,之后处于SYN-SEND状态。 服务端收到发起的连接,返回SYN,并且ACK客户端的SYN,之后处于SYN-RECV状态。 客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,之后处

    2024年02月09日
    浏览(47)
  • 【计算机网络】TCP握手与挥手:三步奏和四步曲

    TCP(传输控制协议)是一种面向连接的可靠的传输协议。在建立连接和关闭连接时,TCP使用了三次握手和四次挥手的机制来确保通信的可靠性。 TCP是一种非常重要的传输层协议,被广泛应用于各种网络通信场景中。无论是企业内部的数据传输,还是互联网上的数据交换,都离

    2024年01月21日
    浏览(35)
  • Linux网络编程:三次握手 & 四次挥手

    建立TCP可靠连接,只能是客户端先发起。   (1)SYN标志位为1,表示请求建立连接;ACK标志位为1,表示确认收到对方报文。 (2)seq为数据包序列号,ack为确认序列号。 (3)ack确认序列号含义:                 a)确认收到对方报文;                 b)希望收到

    2024年02月03日
    浏览(47)
  • 【网络知识点】三次握手和四次挥手

    三次握手的原理如下: 客户端向服务器发送一个SYN(同步)包,其中包含一个随机生成的初始序列号(ISN)。 服务器收到SYN包后,会发送一个SYN+ACK(同步+确认)包作为响应,其中包含确认号(ACK)和自己的随机生成的ISN。 客户端收到服务器的SYN+ACK包后,会发送一个ACK(确

    2024年02月09日
    浏览(40)
  • 【Linux网络】TCP/IP三次握手、四次挥手流程

    目录 一、三次握手,建立连接 二、四次挥手,断开连接 三、主要字段  1、标志位(Flags)  2、序号(sequence number)  3、确认号(acknowledgement number) 四、三次握手的报文变化 五、四次挥手的报文变化 六、面试题 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手,

    2024年02月08日
    浏览(47)
  • 【网络原理】TCP连接管理机制(三次握手四次挥手)

    🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼专栏收录于:计算机网络原理 在使用TCP协议进行网络交互时,TCP会进行三次握手即建立连接,TCP四次挥手即断开连接。三次握手与四次挥手后就完成了网络交互,这样的操作也叫TCP的连接

    2024年02月09日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包