初次熟读TCP,随着TCP的发展路线对他深入了解,真心觉得TCP协议的美妙之处。他比UDP这家伙更加可靠,深得我们信任。通过一个个英文简写,例如CRC、ARQ、RTT、ACK、SACK、DACK等,组成网络的传输控制机制。他们相辅相成,最终实现人们对他的要求——可靠!接下来我们来聊一聊TCP简写的美妙之处。

  首先我们来提下TCP接收端与发送端的恩怨情仇。

  发送端给接收端发一个数据,数据怎么保证不出错,这时就需要CRC或者ARQ来实现。CRC校验和保证数据的正确性。而ARQ(Automatic Repeat Request)就是自动重复请求,不断的重新发送,直到数据被接收端接收。如果用ARQ解决了数据不出错问题,还需它衍生出来的一系列问题(有趣的道与魔的抗衡)。其一,接收方如何确定已收到分组。其二,若发送方发送的多个重复分组,接收端如何确定是否是重复分组。解决第一个问题的办法是鼎鼎大名的ACK(ackonwledgment),人称确认!!发送方发一数据,等待ACK;接收方接收到数据后,发送对应ACK给发送方。如此反复!魔性剧增!ACK的问题又来了!道法怎样才能与之匹敌?ACK的问题所在有三点,1、发送方需要等ACK多久,总不能等到花儿都谢了吧。2、数据都会丢失,ACK亦会丢,该如何是好?3、发送方的数据出错了,接收方该如何应对?

  有问题了,就需要被解决!发送方需要为ACK付出多少青春等待,这是又一个大哥出来露脸——RTT(round trip time),中文名叫往返时间。这个问题太难!后续章节继续讨论。第二个小问题的解决方法是既然发送方接收不到ACK,那就重新再发送ACK对应的数据呗,直到接收到ACK。简单简单!但接收端如何对重复的数据进行区分呢?又有新问题出来了,有点意思!第三个问题就是利用校验和与CRC来解决。强大的CRC适应许多生存环境!

  接下来解决接收端如何区分重复的分组——序列号。给包打个唯一的tag,这样不就能够区分了嘛!!

  之前所讲得是发送端发一个数据包,但网络的胃口肯定不止这样!所以发送端需要发送更多的数据给网络!这就是多分组情况!相应的问题又来了!发送方有多个分组数据时,他需要决定什么时候发送一个分组或多个,发送的分组怎样保存来应对可能的重传。而接受方需要应对的问题是哪些分组已经收到,哪些却没有收到。更有甚者,当收到多个分组失序到达时,接收端的应对策略!

  接下来的博文我们来陆续探讨以上这些有意思的问题!

TCP详解——传输控制协议(总述)的更多相关文章

  1. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-总目录

    CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-总目录: 0.Windows 10本机下载Xshell,以方便往Linux主机上上传大文件 1.CentOS7+CDH5.14.0安 ...

  2. 转载:tcp详解

    TCP详解 转自:http://www.cnblogs.com/kzloser/articles/2582957.html 首部格式 图释: 各个段位说明: 源端口和目的端口: 各占 2 字节.端口是 ...

  3. 【TCP/IP】TCP详解笔记

    目录 前言 17. TCP 传输控制协议 17.1 引言 17.2 TCP 服务 17.3 TCP的首部 18. TCP连接的建立与终止 18.1 引言 18.2 连接的建立与终止 18.2.1 建立 ...

  4. 计算机基础知识和tcp详解

    计算机基础知识 作为应用软件开发程序员是写应用软件的,而应用软件必须应用在操作系统之上,调用操作系统接口,由操作系统控制硬件 比如客户端软件想要基于网络发送一条消息给服务端软件,流程是: 1.客户端软 ...

  5. java网络编程(TCP详解)

    网络编程详解-TCP 一,TCP协议的特点              面向连接的协议(有发送端就一定要有接收端)    通过三次连接握手建立连接 通过四次握手断开连接 基于IO流传输数据 传输数据大小 ...

  6. TCP之一:传输控制协议(Transmission Control Protocol, TCP)

    TCP协议主为了在主机间实现高可靠性的包交换传输协议.本文将描述协议标准和实现的一些方法.因为计算机网络在现代社会中已经是不可缺少的了,TCP协议主要在网络不可靠的时候完成通信,对军方可能特别有用,但 ...

  7. TCP详解——连接建立与断开

    一.报文结构介绍 在开始讲TCP连接过程时,还是先看看TCP报文的格式如图1所示.IP数据报此时由IP头部+TCP头部+TCP数据组成.不带选项的TCP头部是20字节长,而带选项的,TCP头部最长可达 ...

  8. 网络通信和TCP详解

    交换机.路由器.服务器组网 1. 通信过程(pc+switch+router+server) 较为复杂的通信过程如:访问 www.baidu.com 注意:一定要配置 PC:IP.NETMASK.DF ...

  9. Linux系统编程(31)—— socket编程之TCP详解

    TCP有源端口号和目的端口号,通讯的双方由IP地址和端口号标识.32位序号.32位确认序号.窗口大小稍后详细解释.4位首部长度和IP协议头类似,表示TCP协议头的长度,以4字节为单位,因此TCP协议头 ...

随机推荐

  1. 分布式版本控制系统Git的安装与使用(作业2)

    (本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2103) 分布式版本控制系统Git的安装与使用 一.安装Git b ...

  2. java中的equals和==

    下面是我看别人博客和java API总结的 首先得明确一个概念就是: == 的用法   ==比较对象在内存中的地址是否相等.如是是两个基本数据类型变量的比较则比较的是这两个变量值是否相等,若是比较两个 ...

  3. [转帖]ASP.NET Core的Kestrel服务器

    ASP.NET Core的Kestrel服务器 https://cloud.tencent.com/developer/article/1023247 在这篇文章中: 何时使用Kestrel和反向代理 ...

  4. 转帖 云和恩墨 http://www.eygle.com/archives/2015/06/sql_version_count.html

    SQL多版本控制 - _CURSOR_OBSOLETE_THRESHOLD   作者:eygle |English [转载时请标明出处和作者信息]|[恩墨学院 OCM培训传DBA成功之道]链接:htt ...

  5. Node fs模块同步读取写入追加

    JS文件中const fs = require("fs");console.log("开始进入文件读取.."); //同步的写入var data = fs.re ...

  6. timescale 时间尺度

    1 `timescale为模块指定参考时间单位 `timescale<reference_time_unit>/<time_precision> 2 module endmou ...

  7. 掌上电脑设备可以使用Ubuntu MATE 18.10 Linux映像了

    就在几天前,Ubuntu 18.10发布了.操作系统被称为“Cosmic Cuttlefish”,有多种版本可供选择,除了常见的GNOME -- Xfce (Xbuntu), KDE (Kubuntu ...

  8. BZOJ3718[PA2014]Parking——树状数组

    题目描述 你的老板命令你将停车场里的车移动成他想要的样子.停车场是一个长条矩形,宽度为w.我们以其左下角顶点为原点,坐标轴平行于矩形的边,建立直角坐标系.停车场很长,我们可以认为它一直向右边伸展到无穷 ...

  9. BZOJ3862Little Devil I——树链剖分+线段树

    题目大意: 给一棵树,每条边可能是黑色或白色(起始都是白色),有三种操作: 1.将u到v路径上所有边颜色翻转(黑->白,白->黑) 2.将只有一个点在u到v路径上的边颜色翻转 3.查询u到 ...

  10. LOJ121 动态图连通性(LCT)

    用LCT维护一下删除时间的最大生成树即可.当然也可以线段树分治. #include<iostream> #include<cstdio> #include<cmath&g ...