今天看网络编程,又重新看了一遍三次握手,以前只知道连接有三次握手,今天发现原来断开也有三次握手。
三次握手:指通信双方彼此交换三次信息。
三次握手是在存在数据报丢失、重复和延迟的情况下,确保通信双方信息交换确定性的充分必要条件。
- CR:请求连接
- ACC:接收连接请求
- SEQ:信息序列号
DR:终止连接
三次握手的操作过程如下:
1.建立连接时的三次握手正常情况
CR出现重复
1.延迟的CR(SEQ = X);
2.在规定的时间内未收到ACK而导致计时器超时,重发CR(SEQ = Y);
3.接收方收到延迟的CR(SEQ = X),,发ACK=X, ACC (SEQ=Y);
4.接收方收到重发的CR(SEQ = Z),认为是新的连接请求,发ACK =Z, ACC (SEQ = R)
5.发送方收到一个对超时CR的确认,发REJEST = Y;
6.发送方收到一个重发的CR的确认,发DATA (SEQ = Y),ACK = R.
注意:在CR由于延迟而造成的计时器超时后,该连接请求变为无效的连接请求,对于发送方而言,该连接请求已经不存在了!当接收方连续收到两个CR时,并不认为第一个CR或第二个CR是无效的 ,仅仅认为第二个CR为另一个新的连接请求,并对其回应。2.释放连接
释放连接可以分成两种,对称释放和非对称释放。对称释放就是指双方均同意的释放连接。非对称释放时指单方同意后的强行释放连接。由于非对称释放会造成数据的丢失,因而采取对称释放的策略。在释放连接时,为避免产生两军问题(Two Arrmy problem),我们采用三次握手加计时器的解决方案。分四种情况来讨论正常情况
异常情况1:最后的ACK丢失,如图
1.发送方发DR(SEQ =X);
2.接收方同意,发DR(SEQ = Y),ACK = X;
3.发送方收到DR(SEQ = Y),发ACK=Y后释放连接。但ACK = Y丢失,导致丢失接收方计时器超时,自动释放连接。
异常情况2:第二个DR丢失
1.发送方发DR(SEQ = X);
2.接收方同意,发DR(SEQ = Y),ACK =X,但ACK =X该信息丢失;
3.发送方计时器超时重发DR(SEQ = Z),新的三次握手开始异常情况3:第一个DR以后的数据均丢失,通信双方在一定时间内没有任何信息交换,连接自动释放。