初次熟读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. linux第三次读书笔记

    第七章:链接 一.编译器驱动程序 编译系统提供的调用预处理器.编译器.汇编器和链接器来构造目标文件的程序. 二.静态链接 三.目标文件 三种形式: 1.可重定位目标文件: 2.可执行目标文件: 3.共 ...

  2. SuperMaze(Hello World 团队)Alpha版使用说明

    一.产品介绍 超级迷宫是一款android的手机游戏,目前我们已经在PC 端成功实现大体功能,虽然虽然迷宫游戏不少但我们的游戏渐渐的会假如自己的特色功能,尽量吸引用户,通过游戏开发智力,通过游戏打发无 ...

  3. github作业

    链接:   https://github.com/liuyu13/liuyu13-1 总结:git可以学习的东西还有很多.git协议,分布式协作,git项目管理,git技巧,github的使用和实践, ...

  4. K 班前7次作业成绩汇总

    K 班前7次作业成绩汇总 得分榜 千帆竞发 详细 短学号 名 1 2 3 4 5 6 7 TOTAL 505 基智 4.55 1 -2 0 0 -10 4.37 -2.08 414 圳源 5.43 2 ...

  5. PHP微信支付案例收录

    微信支付API 文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1&index=1# TP 微信 + 支 ...

  6. Angular $cookieStore简单应用

    angular.module('cookieStoreExample', ['ngCookies']) .controller('ExampleController', ['$cookieStore' ...

  7. js語句

    js語句就是告訴瀏覽器要做什麼: js代碼就是js語句序列: js代碼塊就是{}包括的,函數就是一個代碼塊的典型例子: js注釋:單行注釋://,多行注釋:/**/ js對大小寫敏感: js語句可以不 ...

  8. JDK8字符串拼接的正确姿势

    1. 对列表中的元素进行拼接 以前,对一个列表中的字符串进行拼接时,常见的代码如示例1所示: 代码示例1 List<String> ids = ImmutableList.of(" ...

  9. python之参数解包

    # 参数解包:将整个list当做参数传给函数 list = [1, 2, 4] def add_fn(a, b, c): return a + b + c sum = add_fn(*list) pr ...

  10. Lodop打印设计界面生成代码带”...(省略)”

    Lodop的设计界面中,菜单里的生成代码,如果打印项内容过多,后面会显示”...(省略)”,省略的是打印项的内容值,无论是纯文本还是超文本,都可以用选中打印项-右键-设置属性里找到该打印项的全部值,可 ...