TCP/IP 三次握手,温故知新

今天看网络编程。又又一次看了一遍三次握手。曾经只知道连接有三次握手。今天发现原来断开也有三次握手。
三次握手:指通信两方彼此交换三次信息。
三次握手是在存在数据报丢失、反复和延迟的情况下,确保通信两方信息交换确定性的充分必要条件。

  • 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以后的数据均丢失。通信两方在一定时间内没有不论什么信息交换。连接自己主动释放。

posted @ 2017-08-16 11:37  yangykaifa  阅读(362)  评论(0编辑  收藏  举报