为什么不能用两次握手进行连接?

我们知道,3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
    现在把三次握手改成仅需要两次握手,死锁是可能发生的。

  作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

校评:这个解释也值得商榷,这里指说S超时重传,难道C没有收到S的ACK信号,不会重新发送SYN信号么? 只要重新发送SYN,S端自然也会发送确认应答分组,这样就不会导致死锁。

时间: 2024-10-12 12:00:52

为什么不能用两次握手进行连接?的相关文章

TCP3次握手连接协议和4次握手断开连接协议

TCP/IP 状态机,如下图所示: 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示. (SYN包表示标志位syn=1,ACK包表示标志位ack=1,SYN+ACK包表示标志位syn=1,ack=1) (1) 第一次握手:建立连接时,客户端A发送SYN包(SEQ_NUMBER=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认. (2) 第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK_NUMBER=j+1),同时自己也发送一个S

学习TCP/IP - TCP三次握手连接和四次握手断开连接

TCP连接 一.为什么需要TCP 链路层将位流封装成数据帧,同时屏蔽了底层物理层的复杂性; 网络层定义了IP地址,划分了网段,使得源计算机可以快速找到目标计算机,但它无法保证数据准确到达. 所以在传输层定义了TCP协议,它是面向连接的可靠传输协议, 二.TCP如何建立连接 2.1) TCP三次握手建立连接 TCP三次握手创建连接 a. 由于TCP是面向连接的,所以有服务端和客户端之分.服务端先在对应的端口监听(LISTENING), 等待客户端发送的tcp连接请求. b. A机器向B机器发起TC

Linux Socket过程详细解释(包括三次握手建立连接,四次握手断开连接)

我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web 服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型 有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下: 1.网络中进程之间如何通信? 2.Socket是什么? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 3.3.listen().

Socket过程详细解释(包括三次握手建立连接,四次握手断开连接)

本文的主要内容如下: 1.网络中进程之间如何通信? 2.Socket是什么? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 3.3.listen().connect()函数 3.4.accept()函数 3.5.read().write()函数等 3.6.close()函数 4.socket中TCP的三次握手建立连接详解 5.socket中TCP的四次握手释放连接详解 6.一个例子(实践一下) 7.留下一个问题,欢迎大家回帖回答!!! 1.网络中进程之间如何

TCP 三次握手建立连接,四次挥手断开连接,图解详细分析,有个疑点求帮忙解答????

继文章  http://blog.csdn.net/simonchi/article/details/41722511   之后,我觉得有必要来详细的说一下TCP的三次握手和四次挥手的过程,帮助大家理解这个过程. 首先来看一下tcpdump抓取的网络数据包,如何抓包分析参考 上面给出的链接 图中红色框选的是三次握手建立连接 第一次:客户端发送SYN报文,并设置seq=0, 第二次:服务端收到SYN报文,知道对方要求建立连接,发送SYN和ACK报文,并设置seq=0,ack=0(第一次的seq)+

HTTP 三次握手  建立连接 和  四次握手断开连接

三次握手建立连接 第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机: 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的se

两个有序链表连接(归并排序中用到的)

刚才写了k个,顺手写个2个的,在链表的归并排序中很有用,效率非常好 1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { 7 * val = x; 8 * next = null; 9 * } 10 * } 11 */ 12 public class Solution { 13 public Lis

三次握手“释放”连接

我们通常会背书,Tcp 三次握手建立连接,四次握手释放连接.但其实,这只是常见现象.通过抓包,发现了 Tcp 三次握手"释放"连接. 背景: 192.168.40.1 主机:zookeeper 服务器,dubbo provider 192.18.40.8 主机:dubbo consumer zookeeper 默认端口 2181,dubbo 服务默认端口 20880, consumer 调用服务后,结束程序,并会断开所有连接.使用 wireshark 抓取释放连接的 Tcp 包: 从上

三次握手建立连接

建立连接的步骤例如以下: client发送一个SYN段表示发起连接请求,该段中包括一个初始序号ISN. server也发送一个SYN段并包括它自己的初始序号ISN.同一时候设置ACK标志表示对上一个client的SYN的确认.确认序号为client的ISN值加1,该确认序号表示server希望下一次收到的起始序号. client再发送一个ACK以确认server发来的SYN,确认序号为serverISN加1,含义同上. 三次握手完毕,连接建立. 以下以HTTP为例. 在HTTP发送第一个请求之前