TCP/IP具体解释学习笔记--TCP的超时与重传
1.基本概念
TCP之所以能够安全的将数据在传输中的安全性,是因为它每次给对方发送数据,都会等待对方给个确认,当长时间收不到这个确认,发送端就会重发这个数据。
2.超时时间的測量
要測超时时间,TCP必须要发送一个特别序号的字节和接收包括该字节的确认之间的RTT,可是,确认本身就是有延时的,所以一般有一种简单的測量超时时间的公式
RTO = RB
当中R为随RTT变化而变化的平滑因子
3.拥塞避免算法
前边的博客有写道,当发送端使用慢启动算法时,因为其发送的数据段呈指数增长,因此也非常easy达到网络通道的极限,此时。网络上的路由就会将部分分组丢失,因此TCP又给发送端设置了一种拥塞算法,此算法就是用来解决分组丢失问题的
拥塞算法假定正常情况下分组的丢失率是非常小的低于(1%)。所以当两方出现大量丢失分组现象,则说明网络出现拥堵
拥塞避免算法和慢启动算法一般结合使用,此时须要给发送端维持俩个变量,一个是拥塞窗体cwnd,和一个慢启动门ssthresh。算法过程详细例如以下
(1)对于一个给定的连接,将初始化cwnd为1,和ssthresh为65535字节
(2)TCP输出的数据不能超过接收方给的通告窗体和拥塞窗体的最小值,拥塞窗体是发送方使用的流量控制。通告窗体是接收仿使用的流量控制
(3)当拥塞发生时(超时或收到反复确认),ssthresh就会被设置为当前窗体的一般。即拥塞和通告窗体的最小值
(4)此时我们先进行慢启动,发送的数据段将呈指数增长,非常快便达到了改动后的ssthresh(窗体的一般)的值。此时慢启动将不在以指数的方式增长发送量了,而是每收到一个确认,则发送量就增长1的线性增长
4.高速重传与高速恢复
当我们收到失序的报文段时。TCP需马上产生一个ACK(一个反复的ACK),这个反复的ACK不应该延迟,该ACK是想让对方知道收到了失序的报文段,并告诉对方希望收到的序号
因为我们并不知道一个反复的ACK是由丢失的报文段引起的还是只由又一次排序所引起的,因此我们就略微等待一下,在做推断。当在又一次排序的报文段被处理并产生一个新的ACK之前只可能收到1-2个反复的ACK,假设收到3个以上的ACK就非常可能是报文段丢失了。于是我们就直接重传丢失的报文段,而无须等待超时定时器的溢出(也就是不须要等到超时时间到了才推断丢了)接下来运行的就是拥塞避免算法。这就是高速恢复。
5.按每条路由进行度量
如今较新的TCP实现的路由表项中维持了很多指标,当一个TCP连接关闭时,假设已经发出了足够多的数据来获得有意义的统计资料。且目的节点的路由表项不是一个默认表项。那么下列信息就保存在在路由表项中使用:平滑的RTT,慢启动门限等
6.又一次分组
当TCP重传时,它不一定要重传相同的报文段。相反TCP同意进行又一次分组。而进行发送一个较大的报文段
最新文章
- 《转》Unity3D研究院编辑器之5.3JSON的序列化
- 夺命雷公狗-----React---19--表单的值的修改
- poj 3070
- monkeyrunner之夜神模拟器的安装与使用(二)
- Webform——中国省市三级联动以及IsPostBack
- Qt之坐标系统
- Python OpenCV ——Matplotlib显示图片
- java 求第n小的质数
- vs2012 condition_variable notify_one 崩溃
- Python 学习教程
- Entity Framework Code First级联删除
- GDI相关基础知识
- vs2015开发Windows服务
- 关于前后端同构,我的一点思路和心得(vue、nodejs、react、模版、amd)
- vue2入门之vue-cli
- [翻译] 介绍EF Core
- 10_常见的get和post请求_路由器_ejs服务器渲染模板引擎
- typeHandler
- HDU 4553 约会安排 (区间合并)【线段树】
- Linux Shell自动交互/人机交互的三种方法