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

  • 相关阅读:
    proc文件系统面面谈
    如何创建,增加SWAP?
    使用linux中的fdisk无损坏合并分区
    QEMU+Accelerator
    QEMU网络配置
    Linux主机设NAT
    试用QEMU,安装个FreeBSD 5.3
    QEMU简介
    使用Vesa2
    BugFree介绍
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7372568.html
Copyright © 2011-2022 走看看