本文共 1046 字,大约阅读时间需要 3 分钟。
第一次握手:客户端发送第一个包,其中SYN(建立连接时用来同步序号)标志位为1,ACK(表明确认号字段有效)为0,发送初始序号seq=x(随机的int值)
第二次握手:服务端收到客户端发送来的包后,便向客户端发送第二个包,ACK为1(ACK为1表明向客户端表达确认收到客户端传来的包),确认号ack=x+1;因为连接是双向的,所以服务器也向客户端发出连接请求,在第二个包中,应将SYN标志置为1,发送序列号seq=y(随机int) 第三次握手:客户端收到服务器传来的包后,向服务器发送第三个包,向服务器发出确认,ACK置为1,SYN为0,确认号为ack=y+1,发送顺序号seq=x+1假定客户端给服务器发送一个连接请求报文段,服务器收到这个报文段,并发送了确认应答报文段。按照两次握手的协定,服务器认为连接已经成功建立,可以开始发送数据报文段
但是在另一方面,客户端在服务器的应答报文段在传输中被丢失的情况下,将不知道服务器是否已准备好,不知道服务器建议用什么样的序列号用于服务器到客户端的传输,也不知道服务器是否同意客户端的初始序列号,客户端甚至怀疑服务器是否收到自己的连接请求报文段;在这种情况下,客户端会认为连接还未成功,将丢弃服务器法来的任何数据报文段,只等待接受连接确认应答报文段,而服务器在法出的数据报文段超时后,重复发送同样的报文段,就会造成死锁转载地址:http://hljmb.baihongyu.com/