TCP详解——传输控制协议(总述)
初次熟读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详解——传输控制协议(总述)的更多相关文章
- CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-总目录
CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-总目录: 0.Windows 10本机下载Xshell,以方便往Linux主机上上传大文件 1.CentOS7+CDH5.14.0安 ...
- 转载:tcp详解
TCP详解 转自:http://www.cnblogs.com/kzloser/articles/2582957.html 首部格式 图释: 各个段位说明: 源端口和目的端口: 各占 2 字节.端口是 ...
- 【TCP/IP】TCP详解笔记
目录 前言 17. TCP 传输控制协议 17.1 引言 17.2 TCP 服务 17.3 TCP的首部 18. TCP连接的建立与终止 18.1 引言 18.2 连接的建立与终止 18.2.1 建立 ...
- 计算机基础知识和tcp详解
计算机基础知识 作为应用软件开发程序员是写应用软件的,而应用软件必须应用在操作系统之上,调用操作系统接口,由操作系统控制硬件 比如客户端软件想要基于网络发送一条消息给服务端软件,流程是: 1.客户端软 ...
- java网络编程(TCP详解)
网络编程详解-TCP 一,TCP协议的特点 面向连接的协议(有发送端就一定要有接收端) 通过三次连接握手建立连接 通过四次握手断开连接 基于IO流传输数据 传输数据大小 ...
- TCP之一:传输控制协议(Transmission Control Protocol, TCP)
TCP协议主为了在主机间实现高可靠性的包交换传输协议.本文将描述协议标准和实现的一些方法.因为计算机网络在现代社会中已经是不可缺少的了,TCP协议主要在网络不可靠的时候完成通信,对军方可能特别有用,但 ...
- TCP详解——连接建立与断开
一.报文结构介绍 在开始讲TCP连接过程时,还是先看看TCP报文的格式如图1所示.IP数据报此时由IP头部+TCP头部+TCP数据组成.不带选项的TCP头部是20字节长,而带选项的,TCP头部最长可达 ...
- 网络通信和TCP详解
交换机.路由器.服务器组网 1. 通信过程(pc+switch+router+server) 较为复杂的通信过程如:访问 www.baidu.com 注意:一定要配置 PC:IP.NETMASK.DF ...
- Linux系统编程(31)—— socket编程之TCP详解
TCP有源端口号和目的端口号,通讯的双方由IP地址和端口号标识.32位序号.32位确认序号.窗口大小稍后详细解释.4位首部长度和IP协议头类似,表示TCP协议头的长度,以4字节为单位,因此TCP协议头 ...
随机推荐
- S2X环境搭建与示例运行
S2X环境搭建与示例运行 http://dbis.informatik.uni-freiburg.de/forschung/projekte/DiPoS/S2X.html 环境 Maven proje ...
- Linux内核分析第二周:操作系统是如何工作的
第一讲 函数调用堆栈 计算机是如何工作的? (总结)——三个法宝 1,存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 2,函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆 ...
- 使用docker安装paddlepaddle 和 tensorflow
1.tensorflow安装 http://blog.csdn.net/freewebsys/article/details/70237003 (1)拉取镜像:docker pull tensorfl ...
- 传参在mybatis的sql映射文件中正确获取
1.单个参数: 非自定义对象 传参:getStuById(Integer id): 取值:#{id} 单个基本类型参数,随便取值都行:#{ok} 对象: 传参:saveStudent(Student ...
- Activiti 用户手册
https://tkjohn.github.io/activiti-userguide/
- Delphi/XE2 使用TIdHttp控件下载Https协议服务器文件[转]
之前的一篇博文详细描述了使用TIdhttp控件下载http协议的文件,在我项目的使用过程中发现对于下载Https协议中的文件与Http协议的文件不同,毕竟Https在HTTP协议基础上增加了SSL协议 ...
- 软件工程_3rd weeks
本周上课的第一件事就是四人组队做工程,因为之前没有太多的准备,所以过程有些仓促,只是最后的结果是好的.有了自己的队伍和课题.感觉就应该这样,平时的我们比较随意,没有一丝的紧迫感,这样会督促着我们完成任 ...
- python 授权
1.“包装”意思是一个已经存在的对象进行包装,不管他是数据类型还是一段代码,可以是对一个已经存在的对象增加新的,删除不要的或者修改其他已经存在的功能 2.包装 包括定义一个类,他的实例拥有标准类型的核 ...
- delphi 通过事务插入数据
orsn1.StartTransaction; try qry1.Sql.Clear; qry1.Sql.Text:=' select * from log '; qry1.Open; qry1.In ...
- python之hasattr、getattr和setattr函数
hasattr函数使用方法 # hasattr函数使用方法 # hasattr(object,attr) # 判断一个对象里是否有某个属性或方法,返回布尔值,有为True,否则False class ...