TCP三次握手

        tcp三次握手是面试中经常会被问到,因此,查看了《TCP/IP协议族》这本书后,对TCP的三次握手总结,如下图所示:


客户端程序发出的请求称为主动打开。

1、客户发送第一个报文段(SYN报文段),在这个报文段中只有SYN标志置为1。这个报文段的作用时同步序号。在本例中,客户端选择了一个随机数作为第一个序号,并把这个序号发送给服务器,这个序号称为初始序号(ISN)。这个报文段不包括确认号,也没有定义窗口大小。SYN报文段时一个控制报文段,它不携带任何数据,但是,它消耗一个序号。

2、服务器发送第二个报文段,即SYN+ACK报文段,其中的两个标志(SYN和ACK)置为1。这个报文段有两个目的,首先,它时另一个方向上通信的SYN报文段。服务器使用这个报文段来同步它的初始序号,以便从服务器向客户发送字节。其次,服务器还通过ACK标志来确认已收到来自客户端的SYN报文段,同时给出期望从客户端收到的下一个序号。因为这个报文段包含了确认,所以它序号定义接收窗口大小。

3、客户发送第三个报文段。这仅仅时一个ACK报文段。它使用ACK标志和确认号字段来确认收到了第二个报文段。请注意,这个报文段的序号和SYN报文段使用的序号一样。也就是说这个ACK报文段不消耗任何序号。客户还需要定义服务器的窗口大小。


为什么要使用三次握手,而不是两次?

1. TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机。

如果采用两次的话,会出现下面这种情况。
比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机;
于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。
传完东西后,断开。
结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上了,这个时候B机就在等待A传东西过去。

2. 三次握手改成仅需要两次握手,死锁是可能发生

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值