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可靠传输原理
停止等待协议 "停止等待"就是发送方在发送完一个分组后停止发送,等待接收方的确认后再继续发送. 超时重传 发送方在等待一定时间后如果还没有收到接收方的确认,此时发送方将认定分组没有 ...
随机推荐
- 【SYZOJ279】滑稽♂树(树套树)
[SYZOJ279]滑稽♂树(树套树) 题面 SYZOJ CJOJ 题目描述 zzsyz实验楼里面种了一棵滑稽树,只有滑稽之力达到大乘期的oier才能看到.虽然我们看不到,但是还是知道一些信息: 这真 ...
- NOIP2017 Day2 T2 宝藏(状压DP)
$O(n*3^n)$好难想...还有好多没见过的操作 令$f[i][j]$表示最深深度为i,点的状态为j的最小代价,每次枚举状态$S$后,计算$S$的补集里的每个点与S里的点的最小连边代价,再$O(3 ...
- 找圆算法((HoughCircles)总结与优化
http://www.opencv.org.cn/forum.php?mod=viewthread&tid=34096 Opencv内部提供了一个基于Hough变换理论的找圆算法,Hough ...
- UESTC--1730
原题链接:http://acm.uestc.edu.cn/problem.php?pid=1730 分析:线段树单点更新,区间求和. #include<iostream> #include ...
- Java Socket TCP编程(Server端多线程处理)
package com; import java.io.*; import java.net.Socket; /** * Socket Client * <p> * Created by ...
- IIS7.5 HTTP 错误500.19-Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效
IIS7.5 HTTP 错误500.19-Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效 --------------------------------- ...
- 多例模式,保证实例的唯一性,仅适用于form窗体
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- LightOJ 1089 - Points in Segments (II) 线段树区间修改+离散化
http://www.lightoj.com/volume_showproblem.php?problem=1089 题意:给出许多区间,查询某个点所在的区间个数 思路:线段树,由于给出的是区间,查询 ...
- Scrollbar的样式
.test{ /*立体滚动条凸出部分的颜色*/ scrollbar-face-color:#FEFAF1; /*滚动条空白部分的颜色*/ scrollbar-highlight-color:#FEFA ...
- 为什么 .NET 会被叫做 .NET?
微软开发.NET Framework是在20世纪90年代后期,最初是叫做“下一代Windows服务”(Next Generation Windows Services 简称 NGWS). 那么为什么微 ...