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协议头 ...
随机推荐
- Linux内核第六节 20135332武西垚
如何描述一个进程:进程描述符的数据结构: 如何创建一个进程:内核是如何执行的,以及新创建的进程从哪里开始执行: 使用gdb跟踪新进程的创建过程. 进程的描述 操作系统三大功能: 进程管理(最核心最基础 ...
- Linux内核第四节 20135332武西垚
实验目的: 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 实验过程: 查看系统调用列表 get pid 函数 #include <stdio.h> #include & ...
- 使用PHP + Apache访问有错误的php脚本时不报错
遇到一个问题: 在命令行编辑php脚本后,直接使用php命令行执行该php脚本,如果脚本出现错误,在命令行的情况下会报错,显示错误信息,比如下面的情况. [root@localhost wwwroot ...
- Xshell 使用数字小键盘进行vim 写入操作.
Copy From http://blog.csdn.net/shenzhen206/article/details/51200869 感谢原作者 在putty或xshell上用vi/vim的时候,开 ...
- Win10 1803 升级之后无法使用 共享目录的解决方法
1. 自己的虚拟机升级了win10 最新版本 1803 但是发现 使用共享文件夹时报错: 2, 百度发现解决方案还是非常简单的. 需要安装一个 功能 3.方法: 开始 运行 输入 control 打开 ...
- [转帖]DevOps/TestOps概念
发现收藏不好用..还是转吧.. https://www.cnblogs.com/fnng/p/8232410.html DevOps/TestOps概念 2018-01-07 22:02 by 虫师, ...
- Python表达式与运算符
表达式与运算符 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 算术运算符 运算符 描述 + 加 - 两 ...
- Android提供的layout文件存放位置
在编程的过程中,会用到android.R.layout下的一些常量.与这些常量对应的,Android提供了对应点的layout布局文件. android.jar中有对应的xml文件,但是打开的时候通常 ...
- JavaScript中的Date对象在IOS中的“大坑”
在IOS5以上版本(不包含IOS5)中的Safari浏览器能正确解释出Javascript中的 new Date('2013-10-21') 的日期对象. 但是在IOS5版本里面的Safari解释ne ...
- 如何使用git在github上开发的时候和别人在别人仓库上进行协作编程,最后再统一提交
因为总是忘记,所以记录一下. 这里首先需要添加你需要操作对象的仓库到你的远程仓库并给个名字,才能进行操作.这里我用我同事的邮箱做比喻.(如果对方为私有仓库,你必须要有同样的权限) 使用命令 git r ...