TCP可靠传输和拥塞控制
1.TCP的可靠传输
- tcp的可靠传输主要靠 来自接收方的确认报文 和 超时重传。
- 发出报文,计时器开始计时,在规定超时时间内未收到确认报文则重新发送。
- 注意:发送报文都留一个副本,如果收到确认报文就会删除,未重新发送之后超时时间会设置为原来的2倍。
- 对于流水线形式的请求报文,服务器只会按照顺序发出确认报文,如果出现失序报文,则不会被确认而是继续发送前一个的确认报文。
- 流水线形式:不必等到一个确认报文到来再发送下一个请求报文,而是连续发送请求报文。序
- 如 第一个请求报文seq=1 带有100个数据,则第一个确认报文ack = 101。
- 此时服务器应该收到第二个报文seq = 101, 但是服务器却收到了 seq = 300,这说明第二个报文丢失了或者拥塞还没到来,解决此问题一是等到被拥塞的报文到来,二是通过快重传重新发送。
- 在收到失序报文后不会发送对其的确认报文,而是发送上一个正常的确认报文。
失效报文是指确认号不正确的报文
- 因为只有服务器收到请求报文才会发送确认报文,如果收到确认报文说明该报文的确认号之前的数据都收到了,这些数据不会被重发。
2.拥塞控制

- 需求产生的原因:需求大于供应,某些网络节点进来的报文没有出去的多,造成数据积压。
- 判断拥塞的依据就是出现了超时。
- 拥塞窗口 cwnd : 拥塞窗口随着拥塞程度浮动变化,并且发送窗口就等于拥塞窗口,一次要发送多少个请求就看cwnd数量。
- 慢开始:无拥塞时窗口数量加倍,达到慢开始门限进入拥塞控制。
- 拥塞避免: 每经过一个RTT窗口数目增加1。
- 慢开始和拥塞避免都是基于窗口的。
- 快重传:当收到3个连续相同的ack确认报文,则立刻在定时器过期之前重传一次请求报文,避免超时。
- 有时候个别报文丢失了,而不是发生了拥塞,如果服务器迟迟不发送确认消息就会超时,被认为出现了拥塞,这会导致发送方错误的开启慢启动,减低性能。
- 当收到失序报文之后会立即发送上一个确认报文,当客户端收到3个连续的相同报文(一共四个相同报文)就认为报文丢失了,则会立即快重传,避免超时。
- 为啥3个才会认为丢失? 如果遇到了拥塞之后又立刻恢复导致报文段比他后面的报文来的迟,那么在3个确认报文发送期间可以被收到就可以避免快重传,超过三个不管什么原因都进行快重传。
- 快恢复:由于收到了3个相同的确认报文,说明有三个报文已经到达了服务器,为了提高性能,窗口就要扩大一些,或者把慢开始上限提高到当前窗口一半,再进行慢开始。
3.UDP

- 用户数据报协议UDP
- 传输控制协议TCP
- UDP不要先建立连接,不是面向连接的。
- UDP只有2个字段,一个首部字段一个数据字段。
- 首部字段只有8个字节 。
4.网络层提供不可靠服务
- 网络层向上提供 无连接 尽最大努力交付的数据报服务。
- 尽最大努力就是不可靠:当路由器缓存溢出,他会将缓冲区的所有数据报丢弃并发送UCMP错误报告给发送源
- 接收方接收到IP报文时,会计算首部校验和,如果发现有误则丢弃报文,并不会通知任何信息给发送源。
- 发送方设置校验和
- 首先把校验和(16bit)设为0,将头部每16bit划分为一个间隔字段。
- 将所有间隔字段二进制相加求和在取反。
- 将结果写入校验和。
- 接收到检验校验和
- 将头部每16bit划分为一个间隔字段。
- 所有字段(包括校验和)二进制求和取反。
- 如果为0,则正确,如果不为0则有错误,就要丢弃。
- 发送方设置校验和
3.所有可靠性由运输层或者应用层实现。
5.常见的网络端口和协议
- 端口地址都是16比特,可以有在0---65535范围内的端口号。
- 公认端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。
| 20/21 | TCP | FTP | 文件传输,21端口用于连接,20端口用于传输数据 |
| 23 | TCP | Telent | Internet远程登录服务 |
| 25 | TCP | SMTP | 简单邮件传输服务器 |
| 53 | UDP | DNS | 域名服务器 |
| 69 | UDP | TFTP | 便于从系统下载启动代码 |
| 80 | TCP | HTTP | 超文本传输协议 |
| 110 | TCP | POP3 | 邮件协议3 |
| 443 | TCP | HTTPS | 安全的超文本传输协议 |
TCP可靠传输和拥塞控制的更多相关文章
- TCP可靠传输及流量控制实现原理
一.为什么TCP是可靠传输? 1. 停止等待协议 通过确认与超时重传机制实现可靠传输 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数 ...
- 计算机网络概述 传输层 TCP可靠传输的实现
TCP可靠传输的实现 TCP的可靠性表现在:它向应用层提供的数据是 无差错的.有序的.无丢失的,简单的说就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. TCP采用了流量控制.拥塞控 ...
- 运输层6——TCP可靠传输的实现
目录 1. 以字节为单位的滑动窗口 2. 超时重传时间的选择 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3- ...
- TCP可靠传输
1. TCP 可靠性如何保证? 信道可靠:用三次握手.四次挥手保证连接正确: 数据正确:分区编号.校验和.超时重传: 传输控制:流量控制.拥塞控制 2. 重传机制 TCP可靠传输方式是序列号与确认应答 ...
- 计算机网络(9)-----TCP可靠传输的实现
TCP可靠传输的实现 以字节为单位的滑动窗口 滑动窗口的滑动是以字节为单位的,发送方A和接收方B在TCP三次握手的前两次握手时协商好了发送窗口和接受窗口的大小,发送方A根据B发送来的确认连接报文中标明 ...
- TCP可靠传输的实现
TCP可靠传输的实现 1.概述 为方便描述可靠传输原理,假定数据传输只在一个方向上进行,即A发送数据,B给出确认 2.以字节为单位的滑动窗口 TCP的滑动窗口是以字节为单位的.为了 ...
- TCP可靠传输的工作原理
TCP可靠传输的工作原理 一.停止等待协议 1.1.简介 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数据在分组传输的平均往返时间更 ...
- TCP 可靠传输与流量控制的实现
TCP 可靠传输与流量控制的实现 一.TCP可靠传输的实现 现在所讲的可靠传输是根据之前所说的可靠传输原理的实现,是现实中应用的技术. 1.1.以字节为单位的滑动窗口 如图A端一份文件分为了多个字节, ...
- TCP可靠传输原理
停止等待协议 "停止等待"就是发送方在发送完一个分组后停止发送,等待接收方的确认后再继续发送. 超时重传 发送方在等待一定时间后如果还没有收到接收方的确认,此时发送方将认定分组没有 ...
随机推荐
- 【BZOJ1758】【WC2010】重建计划(点分治,单调队列)
[BZOJ1758][WC2010]重建计划(点分治,单调队列) 题面 BZOJ 洛谷 Description Input 第一行包含一个正整数N,表示X国的城市个数. 第二行包含两个正整数L和U,表 ...
- 埃及分数&&The Rotation Game&&骑士精神——IDA*
IDA*:非常好用的搜索,可以解决很多深度浅,但是规模大的搜索问题. 估价函数设计思路:观察一步最多能向答案靠近多少. 埃及分数 题目大意: 给出一个分数,由分子a 和分母b 构成,现在要你分解成一系 ...
- 专题训练之数位DP
推荐以下一篇博客:https://blog.csdn.net/wust_zzwh/article/details/52100392 1.(HDOJ2089)http://acm.hdu.edu.cn/ ...
- 【HEOI 2018】制胡窜
转载请注明出处:http://www.cnblogs.com/TSHugh/p/8779709.html YJQ的题解把思路介绍得很明白,只不过有些细节说得还是太笼统了(不过正经的题解就应该这个样子吧 ...
- Python2和Python3共存安装
记录下: 先下载Python2.7.6,安装完成,不要添加到path中: 再下载Python3.4.3,安装,不要添加到path中. 进入 Python2: py -2 进入Python3: py - ...
- 题解【luogu2045 方格取数游戏加强版】
Description 给出一个 \(n*n\) 的矩阵,每一格有一个非负整数 \(A_{i,j}\) ,(\(A_{i,j} <= 1000\))现在从 \((1,1)\) 出发,可以往右或者 ...
- 组合计数 && Stirling数
参考: http://blog.csdn.net/qwb492859377/article/details/50654627 http://blog.csdn.net/acdreamers/artic ...
- Linux常用网络工具:路由扫描之mtr
除了上一篇<Linux常用网络工具:路由扫描之traceroute>介绍的traceroute之外,一般Linux还内置了另一个常用的路由扫描工具mtr. mtr在某些方面比tracero ...
- 主席树 或者 离散化+分块 BZOJ 4636
4636: 蒟蒻的数列 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 381 Solved: 177[Submit][Status][Discuss ...
- java中集合去重2
1.对集合中的自动定义的对象去重: 自定义Person类,同时复写hashCode和equals方法 package collection; public class Person { private ...