精华内容
下载资源
问答
  • 关于TCP三次握手和两次握手的思考TCP连接需要握手的原因两次握手的可行性分析 TCP连接需要握手的原因 TCP协议是一个非常常见的全双工协议,它保证了数据的可靠传输。 使用TCP服务的程序一般需要三次握手来建立TCP的...

    关于TCP三次握手和两次握手的思考

    TCP连接需要握手的原因

    TCP协议是一个非常常见的全双工协议,它保证了数据的可靠传输。

    使用TCP服务的程序一般需要三次握手来建立TCP的连接,根据RFC文档可知,TCP三次握手主要是让发送方和接收方知道各自的序列号,利用序列号来维护数据的可靠传输。

    TCP协议三次握手流程如下:
    seq表示序列号,ack表示应答号,ack = y表示该机器希望下次接收来的序列号为y,SYN = 1表示这是一个建立序列号同步的过程,ACK = 1表示这是一个应答消息
    客户端随机生成一个序列号seq = x,向服务端发送该请求(SYN = 1,seq = x, ACK = 0, ack = ?)
    服务端接收到客户端的请求之后,同样生成一个随机序列号seq = y,向客户端发送应答及其序列号(SYN = 1, seq = y, ACK = 1, ack = x+1)
    客户端接收到接收的消息之后,向服务端发送一个应答消息(SYN = 0, seq = x+1,ACK = 1,ack = y+1)

    在第一次,第二次握手中,是不允许携带数据的,而SYN = 1表示默认消耗一个数据,所以第二次握手中消息中的ack = x+1。
    而第三次握手一般是不携带数据的,所以三次握手后客户端向服务端发送的第一个消息的seq = x+1

    两次握手的可行性分析

    但是为什么是三次握手而不是两次呢?经过两次握手之后发送方和接收方已经知道了双方的序列号了,是不是已经可以实现同步了?这是一个网络上很多人讨论的问题,以下我的一些分析,不保证对,希望大家一起讨论。

    我们可以假设TCP握手协议只有两次:
    客户端随机生成一个序列号seq = x,向服务端发送该请求(SYN = 1,seq = x, ACK = 0, ack = ?)
    服务端接收到客户端的请求之后,同样生成一个随机序列号seq = y,向客户端发送应答及其序列号(SYN = 1, seq = y, ACK = 1, ack = x+1)

    分析一个成功的场景:
    客户端向服务端进行第一次握手,服务端向客户端发送应答并发送自己的序列号
    此时,客户端因为已经接受到服务端的应答,所以可以确定自己的序列号已经被服务端知道,所以它下一步可以发送实际的数据了
    而服务端向客户端发送了应答,它默认客户端已经知道了自己的序列号,所以分配连接的资源,等待客户端的下一个数据
    若一切运行良好,客户端下一步向服务端发送大小为9的数据(SYN = 0,seq = x+1,ACK = 0, ack = y+1)
    服务端接收后向客户端发送回应(SYN = 0, seq = y+1, ACK = 1, ack = x+11)

    上面是运行良好的情况,但是网络中丢包现象是极为普遍的,我们可以再假设以下的情景
    1.客户端发送成功了,接收端的应答丢失
    此时客户机的状态:第一次握手请求(SYN = 1,seq = x, ACK = 0, ack = ?)迟迟没有回应,认为握手请求丢失,重传握手请求
    服务器的状态为:已经为客户端分配了资源,等待客户端的第一条消息(期待消息的序列号为seq = x+1)。但此时接收到的消息为(SYN = 1,seq = x, ACK = 0, ack = ?),可以再次发送一次应答信号(SYN = 1, seq = y, ACK = 1, ack = x+1),并期待这次连接成功
    若这次没有产生丢包,则可以进行正常的TCP通信了

    2.客户端发送的第一次的消息在网络中发生了延时,再次发送第二次消息,此时,先后两次握手陆续到达,请求连接,服务端应答消息正常抵达客户端
    此时客户机状态,两条连接请求都成功,但客户端会认为只有第二条请求成功
    服务器状态:服务器接收到第一条握手请求后,分配相应资源,发送应答消息,之后再次接收到一个相同客户端的第一次握手请求
    这时会出现两种情况:1.服务端有能力区分这两种请求是来自同一个客户端的相同请求,将第二次到来的握手请求丢弃处理。2.服务器没有能力区分这两种请求是来自于同一个客户端的相同请求,同样为这条请求分配资源,等待客户端的应答
    若是第二种情况呢,虽然最后服务器到达一定时间后会自动断开TCP连接,收回资源,但是也造成了比较大的资源浪费。(不过这样或许能减少一些网络的流量?)
    对于第一种情况呢,服务端分辨是否为同一请求有三个重要参考条件(端口号,IP,SYN = 1时的seq)
    从我们可以在一个浏览器中开两个网页访问同一个网站,可以看出根据前两个条件服务端无法做出区分
    接下来分析seq的情况,我们假设客户端重发握手请求时与前一次都是相同的seq,这样服务端或许就可以根据此消息中的同一个端口号,IP,seq判断出是同一个握手请求了(再加一个标志位或许可以不利用seq解决这种浪费资源的情况?)。

    3.第三种思考是从TCP是一个全双工的协议来看的。我们之前的思考都是建立在TCP连接后客户端先主动向服务端发送消息。当然,实际我并没有想到什么服务端先向客户端发送数据的例子
    若是有需要建立连接后服务端先向客服端发送消息的情况呢?
    经过以下流程
    两次握手都运行良好
    客户端随机生成一个序列号seq = x,向服务端发送该请求(SYN = 1,seq = x, ACK = 0, ack = ?)
    服务端接收到客户端的请求之后,同样生成一个随机序列号seq = y,向客户端发送应答及其序列号(SYN = 1, seq = y, ACK = 1, ack = x+1)
    此时服务端的状态 :准备发送一个序列号为y+1的数据(根据默认协议)
    此时客户端的状态:准备接收一个序列号为y+1的数据
    若是服务端发送的应答信息产生了丢包呢,此时服务端想要发送一个序列号为y+1的数据,但是客户端并不知道服务端的序列号。
    此时就出现了无法解决的的错误
    当然,由于博主学识有限,并未想到有关于服务端先向客服端发送协议的情况

    这样分析之后,握手两次或许可行,不过,由于第2,3种情况的原因,再加上TCP的收到消息就给出应答的机制,或许还有一些博主没想到的方面,TCP最终选择了三次握手。毕竟,3次握手肯定比2次握手来得更为可靠。

    展开全文
  • 如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送的第一个请求连接并且没有丢失,只是因为在网络中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器...

    原因1:主要是为了防止已经失效的连接请求报文突然又传送到了服务器,从而导致不必要的错误和资源的浪费。

    如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送的第一个请求连接并且没有丢失,只是因为在网络中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时之前滞留的那一次请求连接,因为网络通畅了, 到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。

    如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。

    原因2: 两次握手只能保证单向连接是畅通的。因为TCP是一个双向传输协议,只有经过第三次握手,才能确保双向都可以接收到对方的发送的数据。

    三次握手过程:

    第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

    握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

    展开全文
  • 次握手协议

    2020-12-24 06:23:59
    一:什么是三次握手协议 (tcp/ip建立连接的过程)三次握手协议指的是在发送数据的准备阶段,服务器与客户端之间需要进行三次交互。具体过程如下:第一次握手:建立连接时,客户端向服务器发送一个SYN包(握手信号),并...

    一:什么是三次握手协议  (tcp/ip建立连接的过程)

    三次握手协议指的是在发送数据的准备阶段,服务器与客户端之间需要进行三次交互。

    具体过程如下:

    第一次握手:建立连接时,客户端向服务器发送一个SYN包(握手信号),并计入SYN_SENT状态,等待服务器确认。

    第二层握手:服务器收到SYN包,必须确认客户端的SYN,同时自己也发送一个SYN包,即SYN+ACK包(接收到消息并响应),此                    时服务器进入SYN_SENT状态。

    第三次握手:客户端收到服务器的SYN+ACK包,并向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入                                      Established(已建立的,确认的)状态。即TCP连接成功,完成三次握手。

    此后,服务器和客户端就可以开始传送数据。在上述三次握手协议中,服务器还在维护一个未连接队列,等待其他客户端的连接请求,若能顺利完成三次握手协议,则服务器也可以与该客户端进行数据的传输。

    二:三次握手的核心思想

    1:TCP作为一种可靠传输控制协议,其核心思想是:既要保证数据可靠传输,又要提高传输效率,而用三次恰恰可以满足以上两个方面的要求。

    2:三次是保证双方互相明确对方能收,能发的最低值。理论上讲不论握手多少次都不能确认一条消息是“可靠”的,但通过三次握手后,至少可以确认tcp/ip协议是“可用”的。在此基础上,继续提高握手次数,不过是提高“它是可用的”这个结论的可信程度。

    3:可以将三次握手过程形象的归纳如下:

    1:A发,B收,B知道A能发;

    2:B发,A收,A知道B能发能收;

    3:A发,B收,B知道A能收。

    4:“三次握手”的本质是:信道是不可靠的,但是通信双方需要就某个协议达成一致,而要解决这个问题,无论你在消息中包含什么信息,三次通信是理论上的最小值。因为三次握手不是TCP本身的要求,而是为了满足“在不可靠的信道上可靠的传输信息”这一需要导致的。

    ---------------------

    作者:leikun153

    来源:CSDN

    原文:https://blog.csdn.net/leikun153/article/details/80103385

    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • TCP 什么三次握手而不是两次握手(正解版)发布时间:2018-09-19 19:10,浏览次数:382, 标签:TCP<>参考文章Why do we need a 3-way handshake? Why not just 2-way<>大部分网络博客的错误解读首先需要...

    TCP 为什么三次握手而不是两次握手(正解版)

    发布时间:2018-09-19 19:10,

    浏览次数:382

    , 标签:

    TCP

    <>参考文章

    Why do we need a 3-way handshake? Why not just 2-way

    <>大部分网络博客的错误解读

    首先需要声明的是, 百度搜索到的大部分网络博客关于这个问题的解答都是不清晰或者不准确的。 讨论这个问题的大部分博客都会引用《计算机网络》的内容:

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

    不幸的是, 这种解释是不准确的, TCP 采用三次握手的原因其实非常简单, 远没有大部分博客所描述的那样云山雾绕。

    这里先给出结论:

    * 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。

    三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤

    * 如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认

    <>先修知识

    <>TCP 通信流程

    TCP 的通信流程

    上图中的每一个箭头都代表着一次 TCP数据包的发送

    * 需要注意的是, 上图中出现的 ACK = x +1 的写法很容易让人误以为数据包中的 ACK 域的数据值被填成了 y+1 。 ACK = x+1

    的实际含义是:

    * TCP 包的 ACK 标志位(1 bit) 被置成了 1

    * TCP 包的确认号(acknowledgement number ) 的值为 x+1

    * 类似的, TCP 数据包中的 SYN 标志位, 也容易与序号(sequence number) 混淆, 这点需要读者注意

    TCP 数据包结构图

    <>为什么 TCP 需要握手这个操作

    在解答为什么 TCP 需要三次握手, 而不是两次之前, 首先需要回答的问题是:

    * 为什么需要握手这个操作, 能不能不握手?

    如果读者对比一下 UDP 的通信流程和 TCP 的通信流程, 可以发现, 在 UDP 协议中, 是没有握手这个操作的。

    这里就引出了 TCP 与 UDP 的一个基本区别, TCP 是可靠通信协议, 而 UDP 是不可靠通信协议。

    * TCP 的可靠性含义: 接收方收到的数据是完整, 有序, 无差错的。

    * UDP 不可靠性含义: 接收方接收到的数据可能存在部分丢失, 顺序也不一定能保证。

    UDP 和 TCP 协议都是基于同样的互联网基础设施, 且都基于 IP 协议实现, 互联网基础设施中对于数据包的发送过程是会发生丢包现象的, 为什么 TCP

    就可以实现可靠传输, 而 UDP 不行?

    TCP 协议为了实现可靠传输, 通信双方需要判断自己已经发送的数据包是否都被接收方收到, 如果没收到, 就需要重发。 为了实现这个需求, 很自然地就会引出

    序号(sequence number) 和 确认号(acknowledgement number) 的使用。

    发送方在发送数据包(假设大小为 10 byte)时, 同时送上一个序号( 假设为 500),那么接收方收到这个数据包以后, 就可以回复一个确认号(510 =

    500 + 10) 告诉发送方 “我已经收到了你的数据包, 你可以发送下一个数据包, 序号从 510 开始” 。

    这样发送方就可以知道哪些数据被接收到,哪些数据没被接收到, 需要重发。

    <>为什么需要三次握手,而非两次

    正如上文所描述的,为了实现可靠传输,发送方和接收方始终需要同步( SYNchronize )序号。 需要注意的是, 序号并不是从 0 开始的,

    而是由发送方随机选择的初始序列号 ( Initial Sequence Number, ISN )开始 。 由于 TCP 是一个双向通信协议,

    通信双方都有能力发送信息, 并接收响应。 因此, 通信双方都需要随机产生一个初始的序列号, 并且把这个起始值告诉对方。

    于是, 这个过程就变成了下面这样。

    下面这个流程图描述的和上面一样, 但是更加清楚的展示了 TCP 数据包标志位, 以及数据域的命名来源。

    AliceBobSYN =1 , seq = xSYNchronize withmy InitialSequence Numberof xSYN =1,

    ACK = 1, seq = y , ack = x+1I received yourISN, IACKnowledge thatI am ready for

    [x+1]SYNchronize withmy InitialSequence Numberof yACK =1 , seq = x+1, ack = y+1

    I received yoursyn, IACKnowledge thatI am ready for[y+1]AliceBob

    展开全文
  • TCP协议为什么需要三次握手

    万次阅读 多人点赞 2021-09-02 16:39:14
    TCP实现原理和什么需要三次握手?两次握手不可以?四次握手不可以?读者可以带着疑问,看一遍本篇博客的详细讲解。首先解释原因之前还是要先复习一下TCP的基本知识和三次握手协议
  • 1.TCP为了实现可靠数据传输, TCP 协议的通信双方, 都需要维护一个序列号, 以标识发送出去的数据包中, ...2.如果只是两次握手, 最多只有连接发起方的起始序列号能被确认, 服务器选择的序列号则得不到确认 ...
  • 原标题:【图解】6张图搞懂 TCP 什么三次握手而不是两次握手!(正解版)来自:lengxiao1993| 责编:乐乐正文大部分网络博客的错误解读首先需要声明的是, 百度搜索到的大部分网络博客关于这个问题的解答都是不清晰...
  • 二、两次握手三、三次握手 前言 本文默认你已经知道TCP连接三次握手需要客户端(以下用C表示)和服务器端(以下用S 表示)分别发送SYN SYNACK ACK包过程,着重解释什么需要三次握手。 一、一次握手会发生什么? ...
  • 1三次握手2两次握手(情况1)3两次握手(情况2)OK,下面正经地来回答下这个问题,要搞清楚这个问题,首先得了解TCP究竟是如何保证可靠传输的。PS:TCP协议中,主动发起请求的一端称为『...
  • TCP协议次握手和四次挥手形象比喻三次握手四次挥手 形象比喻 三次握手:将小明当作客户端,小红当作服务器端,人写信告白: **第一次握手:**小明告诉小红:我喜欢你。 **第二次握手:**小红告诉小明:我知道了...
  • 三次握手两次握手(情况1)两次握手(情况2)OK,下面正经地来回答下这个问题,要搞清楚这个问题,首先得了解TCP究竟是如何保证可靠传输的。PS:TCP协议中,主动发起请求的一端称为『客户端...
  • 今天继续给大家介绍IS-IS相关内容。本文主要内容是IS-IS的邻居建立过程。 推荐阅读: IS-IS详解(一)——IS-IS基础 IS-IS详解(二)——IS-IS邻居建立...IS-IS建立邻居的方式可以分为种,一种是三次握手建立邻居,另
  • 介绍了TCP协议的三次握手和四次挥手,TCP和UDP协议的基本概念和首部信息,以及TCP字节流和UDP数据报的区别!
  • 第一次握手,发送SYN报文,传达信息:“你好,我想建立连接”; 第二次握手,回传SYN+ACK报文,传达信息:“好的,可以建立链接”; 第三次握手,回传ACK报文,传到信息:“好的,我知道了,那我们连接”。然后就...
  • TCP(Transport Control Protocol)是一个传输层协议,提供Host-To-Host数据的可靠传输,支持全双工是一个连接导向的协议。 TCP/IP五层模型 ...互联网层解决地址到地址的通信,但是不负责信号在具体个设
  • 废话少说,来了解一下三次握手协议~ 看懂这个三次握手协议的思维过程是这样式儿的—— 1.TCP是确保传输可靠性的。 2.Q:那么TCP怎么确保数据(可靠地)到达目标呢? 3.A:用了三次握手的策略 (这是其中一种方法 也是...
  • 1. 先来说说TCP协议:我们来看看百度百科怎么说?"TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它...
  • 谈到TCP, 相信大家都不陌生,可能会想到网络的七层模型、TCP/IP、UDP等等,TCP(Transmission Control Protocol) 是一种面向连接的、可靠的(区别于UDP 的不可靠)、基于字节流的传输层(七层模型中的传输层)通信协议,...
  • TCP(Transmission Control Protocol传输控制协议)是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议,采用三次握手确认建立一个连接。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送...
  • TCP三次握手TCP连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:1.客户端向服务器发送一个SYN...
  • TCP/IP协议次握手、四次挥手,通俗易懂

    千次阅读 多人点赞 2021-03-31 17:40:49
    就是客户端发送消息和接受消息都是正常的,但是,对于服务端来说,它只知道自己可以成功接受消息,但是自己能不能成功发送消息,并不知道,所以,只有两次握手肯定是不行的,由于TCP/IP协议是一种可靠的传输层通信...
  • 字节爱问TCP三次握手四次挥手UDP编程四种IO模型 TCP三次握手四次挥手 客户端先发送请求 TCP建立连接的过程 《闪电》《确认》 * 传输层向上面的应用程序提供通信服务 * 第一次握手 * client发送连接请求数据报文...
  • 来源:雪球App,作者: 迪朗达尔,(https://xueqiu.com/8419566813/158106786)TCP/IP协议的三次握手是客户端和服务端通信前的连接,作用就是双方都能明确自己和对方的收、发能力是正常的。第一次握手:客户端发送...
  • TCP 是全双工的协议,也就是说通过 TCP 协议发送的协议是要得到回复的,一来一回,所以说对于需要建立 TCP 连接的端来说,每一端都需要进行一来一回的确认,这就进行三次握手。 1、A 给 B 发送需要建立连接的请求;...
  • 两次握手不可以?四次握手不可以? ok,首先解释原因之前还是要先复习一下TCP的基本知识和三次握手协议: 1、什么是TCP协议? TCP:Transmission Control Protocol翻译过来就是传输控制协议,TCP协议是一个面向连接...
  • Client在打算建立TCP连接时,向server发出连接请求报文段,该报文段首部的SYN=1,seq=x(随机选取),随后client进入SYN-SENT状态,此第一次握手。 Server收到连接请求报文段之后,如果同意建立连接,则向client...
  • 目标: TCP协议及TCP协议的构造 TCP协议可靠传输的实现 UDP协议的概念与作用 传输层 传输层建立管理维护本段到对端的链接 传输层主要包含协议:TCP...TCP/IP协议不是TCP和IP这协议的合称,而是指因特网整个TCP/
  • 文章目录一:TCP三次握手过程和状态变迁(1)三次握手过程和状态变迁过程详解(2)什么必须要三次握手?A:只有三次握手才可以阻止重复历史连接的初始化(主要原因)B:同步双方初始序列号C:避免资源浪费二:TCP...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 121,145
精华内容 48,458
关键字:

为两次握手协议