今天看网络编程。又又一次看了一遍三次握手。曾经只知道连接有三次握手。今天发现原来断开也有三次握手。

三次握手:指通信两方彼此交换三次信息。

三次握手是在存在数据报丢失、反复和延迟的情况下,确保通信两方信息交换确定性的充分必要条件。

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

TCP/IP 三次握手,温故知新的更多相关文章

  1. 在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP

    如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...

  2. 使用tcpdump探测TCP/IP三次握手

    读计算机应该就同说过TCP/IP三次握手,但是都没有去验证过,今天心血来潮,去验证了一下,于是乎写下了这篇博客,可能写的可能有问题,还请多多指教 包括我学习,还有从很多资料来看资料,第三次握手,应该会 ...

  3. 31.TCP/IP 三次握手与四次挥手

    TCP/IP三次握手 TCP建立连接为什么是三次握手,而不是两次或四次? TCP,名为传输控制协议,是一种可靠的传输层协议,IP协议号为6. 顺便说一句,原则上任何数据传输都无法确保绝对可靠,三次握手 ...

  4. TCP/IP三次握手与四次挥手的正确姿势

    0.史上最容易理解的:TCP三次握手,四次挥手 https://cloud.tencent.com/developer/news/257281 A 理解TCP/IP三次握手与四次挥手的正确姿势http ...

  5. 需要知道的TCP/IP三次握手

    TCP/IP三次握手是TCP协议中比较重要的一个知识点,但是在很多博客中看到的三次握手的过程图很多都不是很正确.我在google找到了一篇写的非常不错的介绍TCP/IP技术文章期中就有三次握手的讲解, ...

  6. TCP/IP 三次握手,四次断开

    TCP/IP 三次握手,四次断开 一.TCP报文格式                     TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷 本. 下面是TCP报文格式图: 图 ...

  7. WireShark抓包分析以及对TCP/IP三次握手与四次挥手的分析

    WireShark抓包分析TCP/IP三次握手与四次挥手 Wireshark介绍: Wireshark(前称Ethereal)是一个网络封包分析软件.功能十分强大,是一个可以在多个操作系统平台上的开源 ...

  8. TCP/IP 三次握手

    网络连接状态 网络连接状态(11种)非常重要这里既包含三次握手中的也包括四次断开中的,所以要熟悉. LISTEN 被动打开,首先服务器需要打开一个socket进行监听,监听来自远方TCP端口的连接请求 ...

  9. TCP/IP三次握手与四次握手

    原文地址 http://blog.csdn.net/whuslei/article/details/6667471 http://blog.csdn.net/wo2niliye/article/det ...

  10. 通俗了解TCP/IP三次握手四次挥手

    前言: tcp/ip通信机制是计算机中很重要的一个知识点,不是一句两句就能解释清楚的,需要反复推敲其中的玄妙. 通俗理解: 但是为什么一定要进行三次握手来保证连接是双工的呢,一次不行么?两次不行么?我 ...

随机推荐

  1. 〖Android〗sshd for android, 及映射根文件系统至本地盘符

    严重问题: 若移植失败将可能直接导致手机***无法开机***,导入相关文件需慎重! 达成效果: 1. ssh 远程登录 Android 终端: 2. sftp 挂载/映射 Android 根文件系统至 ...

  2. Ubuntu x86-64汇编(4) 数值操作指令

    整数乘法指令 Integer Multiplication 对于有符号数的乘法有特殊的规则, 因此无符号数乘法和有符号数乘法对应着不同的指令mul和imul. 乘法会产生两倍尺寸的数值结果, 即两个n ...

  3. Ubuntu16.04下的英文词典Artha

    地址: http://artha.sourceforge.net  http://artha.sourceforge.net/wiki/index.php/Download 在Ubuntu下可以直接安 ...

  4. git clone时RPC failed; curl 18 transfer closed with outstanding read data remaining

    git clone时报RPC failed; curl 18 transfer closed with outstanding read data remaining 错误 原因1:缓存区溢出 解决方 ...

  5. 内存问题的排查工具和方法– Clang的AddressSanitizer

    1 概述 Valgrind可以有效地监测处大多数内存问题,你肯定忍不住会想,既然c/c++的内存问题这么常见,为什么不在编译器中加入内存问题检测的功能呢? 很可惜,GCC中还目前还不支持内存检测,可喜 ...

  6. mysql之limit m,n

    limit是mysql的语法 select * from table limit [m],n; 其中,m—— [m]为可选,如果填写表示skip步长,即跳过m条. n——显示条数.指从第m+1条记录开 ...

  7. 快排法求第k大

    快排法求第k大,复杂度为O(n) import com.sun.media.sound.SoftTuning; import java.util.Arrays; import java.util.Ra ...

  8. Python装饰器几个有用又好玩的例子

    装饰器是一种巧妙简洁的魔术,类似于Java中的面向切面编程,我们可以再函数执行前.执行后.抛出异常时做一些工作.利用装饰器,我们可以抽象出一些共同的逻辑,简化代码.而简化代码的同时,就是在增加代码鲁棒 ...

  9. 基于matplotlib的数据可视化 - 热图imshow

    热图: Display an image on the axes. 可以用来比较两个矩阵的相似程度 mp.imshow(z, cmap=颜色映射,origin=垂直轴向) imshow( X, cma ...

  10. SharePoint 中时间轴 Timeline的实现

    客户需要在OA中实现每日动态功能,能够记录每一位员工的每天的工作动态,我很快想到了时间轴,因为时间轴能很直观的现实员工每一刻的动态.就像Facebook的Timeline效果(点击查看). 尝试着搜索 ...