0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文看懂TCP三次握手工作原理

马哥Linux运维 来源:马哥Linux运维 2025-01-09 10:19 次阅读

1.TCP为什么三次握手而不是两次握手

1.防止已失效的连接请求又传送到服务器端,因而产生错误。

不幸的是, 这种解释是不准确的,TCP 采用三次握手的原因其实非常简单, 远没有大部分博客所描述的那样云山雾绕。为了实现可靠数据传输,TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。

507827aa-cda6-11ef-9310-92fbcf53809c.png

位码即tcp标志位,有6种标示:

① SYN(synchronous建立联机);

ACK(acknowledgement 确认)

③ PSH(push传送)

④ FIN(finish结束)

RST(reset重置)

⑥ URG(urgent紧急)

Sequence number(顺序号码) //Acknowledge number(确认号码)

第一次握手:主机A发送位码为SYN=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手,主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),SYN=1,ACK=1,随机产生seq number=7654321的包;

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ACK是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ACK=1,主机B收到后确认seq值与ACK=1则连接建立成功。

sequence number:表示的是我方(发送方)这边,这个packet的数据部分的第一位应该在整个data stream中所在的位置。(注意这里使用的是“应该”。因为对于没有数据的传输,如ACK,虽然它有一个seq,但是这次传输在整个data stream中是不占位置的。所以下一个实际有数据的传输,会依旧从上一次发送ACK的数据包的seq开始)

acknowledge number:表示的是期望的对方(接收方)的下一次sequence number是多少。

注意,SYN/FIN的传输,虽然没有data,但是会让下一次传输的packet seq增加一,但是,ACK的传输,不会让下一次的传输packet seq加一。

5093f7dc-cda6-11ef-9310-92fbcf53809c.png

题外话

有一位读者关注到了三次握手中, 序列号变化的问题, 让笔者临时想起了曾经困扰自己的一个问题

为什么三次握手最后一次握手中, 在上面的示意图中回复的seq = x+1 。

acknowledgement number 的作用是向对方表示,我期待收到的下一个序号。如果你向对方回复了ack = 31, 代表着你已经收到了序号截止到30的数据,期待的下一个数据起点是31 。

TCP 协议规定SYN报文虽然不携带数据, 但是也要消耗1个序列号, 所以前两次握手客户端和服务端都需要向对方回复x+1 或y+1 。

50a88544-cda6-11ef-9310-92fbcf53809c.png

50bd8cbe-cda6-11ef-9310-92fbcf53809c.png

值得注意的是, 如上图所说, 最后一次握手在默认不携带数据的情况下, 由于SYN 不是1 , 是不消耗序列号的。所以三次握手结束后, 客户端下一个发送的报文中seq 依旧是x+1, 示意图如下

50d257b6-cda6-11ef-9310-92fbcf53809c.png

注意到, 上图第四步发送的seq 和第三次握手的seq 是一样的, 体现了最后一次握手, 默认不消耗序列号的特点。

四次挥手

50f39782-cda6-11ef-9310-92fbcf53809c.png

四次握手是指终止TCP连接协议时,需要在客户端和服务器之间发送四个包

第一次挥手:主动关闭方发送第一个包,其中FIN标志位为1,发送顺序号seq为X。

第二次挥手:被动关闭方收到FIN包后发送第二个包,其中发送顺序号seq为Z,接收顺序号ack为X+1。

第三次挥手:被动关闭方再发送第三个包,其中FIN标志位为1,发送顺序号seq为Y,接收顺序号ack为X。

第四次挥手:主动关闭方发送第四个包,其中发送顺序号为X,接收顺序号为Y。至此,完成四次挥手。

超时重传指的是,发送数据包在一定的时间周期内没有收到相应的ACK,等待一定的时间,超时之后就认为这个数据包丢失,就会重新发送。这个等待时间被称为RTO.

深入讨论:

1、为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

建立连接时,ACK和SYN可以放在一个报文里来发送。而关闭连接时,被动关闭方可能还需要发送一些数据后,再发送FIN报文表示同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

2、为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

两个存在的理由:1、无法保证最后发送的ACK报文会一定被对方收到,所以需要重发可能丢失的ACK报文。2、关闭链接一段时间后可能会在相同的IP地址和端口建立新的连接,为了防止旧连接的重复分组在新连接已经终止后再现。2MSL足以让分组最多存活msl秒被丢弃。

3、为什么必须是三次握手,不能用两次握手进行连接?

记住服务器的资源宝贵不能浪费! 如果在断开连接后,第一次握手请求连接的包才到会使服务器打开连接,占用资源而且容易被恶意攻击!防止攻击的方法,缩短服务器等待时间。两次握手容易死锁。如果服务器的应答分组在传输中丢失,将不知道S建立什么样的序列号,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

链接:https://www.cnblogs.com/my-first-blog-lgz/p/14788810.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9234

    浏览量

    85643
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1372

    浏览量

    79142

原文标题:深度解析TCP三次握手工作原理

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    讲的TCP三次握手和四挥手

    如果你学过网络基础知识,那么你定对TCP三次握手不陌生。今天我想用通俗的话来给大家讲TCP
    的头像 发表于 02-03 10:43 2741次阅读
    讲<b class='flag-5'>一</b>讲的<b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>和四<b class='flag-5'>次</b>挥手

    TCP三次握手的过程描述

    本文档主要描述TCP三次握手的过程,个完整的三次握手也就是 请求---应答---再次确认
    发表于 03-02 15:37 8次下载

    如何使用WireShark进行TCP三次握手

    WireShark是种非常方便的网络抓包工具,下面演示,使用WireShark来抓取TCP三次握手过程。
    的头像 发表于 11-01 09:50 2170次阅读

    说说TCP三次握手的过程?为什么是三次而不是两、四

    三次而不是两或四。 首先,我们需要了解TCP种面向连接的协议。在进行数据传输之前,发送端和接收端需要建立
    的头像 发表于 02-04 11:03 708次阅读

    简述TCP协议的三次握手机制

    TCP(Transmission Control Protocol,传输控制协议)是种面向连接的、可靠的、基于字节流的传输层通信协议。它主要用于在IP网络中进行数据传输。TCP协议的三次
    的头像 发表于 08-16 10:57 1106次阅读

    TCP三次握手的详细过程

    TCP(传输控制协议)三次握手种在互联网上建立个可靠的、有序的和错误检测能力的连接的方法。这个过程确保了两个设备(通常是客户端和服务器
    的头像 发表于 01-03 17:11 327次阅读

    TCP三次握手协议的作用

    在计算机网络中,数据的传输需要在发送方和接收方之间建立个稳定的连接,以确保数据的完整性和顺序。TCP(传输控制协议)是种面向连接的、可靠的、基于字节流的传输层通信协议,它通过三次
    的头像 发表于 01-03 17:15 308次阅读

    TCP三次握手的基本原理

    在计算机网络中,TCP(传输控制协议)是种面向连接的、可靠的、基于字节流的传输层通信协议。它确保了数据在网络中传输的可靠性和顺序性。为了建立两个网络实体之间的通信,TCP使用种称为
    的头像 发表于 01-03 17:25 444次阅读

    TCP三次握手与UDP的区别

    、连接管理、可靠性、效率等方面有着显著的区别。 1. TCP三次握手 TCP种面向连接的、可靠的、基于字节流的传输层通信协议。在数据传输
    的头像 发表于 01-03 17:35 335次阅读

    TCP三次握手安全性分析

    TCP三次握手的基本过程 TCP三次握手的过
    的头像 发表于 01-03 18:10 448次阅读

    TCP三次握手的网络抓包分析

    在计算机网络中,TCP(传输控制协议)是种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通过三次握手过程建立两个通信实体之间的连接
    的头像 发表于 01-06 09:05 166次阅读

    TCP三次握手与连接建立的关系

    在计算机网络中,TCP(传输控制协议)是种面向连接的、可靠的、基于字节流的传输层通信协议。它负责在两个主机之间建立、维护和终止连接,确保数据的可靠传输。TCP连接的建立过程是通过三次
    的头像 发表于 01-06 09:09 170次阅读

    TCP三次握手的常见问题及解决方案

    TCP三次握手(Three-way Handshake)是TCP(传输控制协议)建立连接时的个过程,它确保了两个端点在开始通信之前都准备好
    的头像 发表于 01-06 09:11 234次阅读

    TCP三次握手与负载均衡的配置

    在计算机网络中,TCP(传输控制协议)是种面向连接的、可靠的、基于字节流的传输层通信协议。它通过三次握手(Three-way Handshake)建立连接,确保数据的可靠传输。而负载
    的头像 发表于 01-06 09:15 173次阅读

    如何监测TCP三次握手过程

    在计算机网络中,传输控制协议(TCP)是确保数据可靠传输的关键协议之TCP通过三次握手过程来建立两个端点之间的连接,这个过程对于网络通信
    的头像 发表于 01-06 09:20 160次阅读