当前位置:首页 » 网络连接 » 计算机网络sack
扩展阅读
网络卡跟电脑中毒有关吗 2025-04-16 16:50:08
将华为手机还原网络设置 2025-04-16 16:45:11

计算机网络sack

发布时间: 2023-08-26 20:58:40

计算机网络-可靠传输-停止等待协议

全双工通信的双方既是发送方也是接收方。下面为了讨论问题的方便,我们仅考虑A发送数据而B接收数据并发送确认。 因此A叫做发送方,而B叫做接收方 。因为这里是讨论可靠传输的原理,因此把传送的数据单元都称为分组,“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。

图5-9(a)是最简单的无差错情况。A发送分组M1,发完就暂停发送,等待B的确认。B收到了M1就向A发送确认。A在收到了对M1的确认后,就再发送下一个分组M2。同样,在收到B对M2的确认后,再发送M3。

图5-9(b)是分组在传输过程中出现差错的情况,B接收M时检测出了差错,就丢弃M1,其他什么也不做(不通知A收到有差错的分组)①。也可能是M1在传输过程中丢失了,这时B当然什么都不知道。在这两种情况下,B都不会发送任何信息。可靠传输协议是这样设计的:A只要超过了一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组。这就叫做 超时重传 。要实现超时重传,就要在每发送完一个分组时设置一个 超时计时器 。如果在超时计时器到期之前收到了对方的确认,就撤销已设置的超时计时器。其实在图5-9(a)中,A为每一个己发送的分组都设置了一个超时计时器。但A只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器。

这里应注意以下三点:

第一,A在发递完一个分组后,必须暂时保留已发送的分组的副本(在发生超时重传时使用)。只有在收到相应的确认后才能清除暂时保留的分组副本。

第二,分组和确认分组都必须进行编号②。这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没有收到确认。

①注:在可靠传输的协议中,也可以在检测出有差错时发送“否认报文”给对方。这样做的好处是能够让发送方及早如道出现了差错。不过由于这样处理会使协议复杂化,现在实用的可靠传输协议都不使用这种否认报文了。

②注:编号并不是一个非常简单的问题。分组编号使用的位数总是有限的,同一个号码会重复使用。例如,10位的编号范围是0~1023。当编号增加到1023时,再增加一个号就又回到0,然后重复使用这些号码。因此,在所发送的分组中,必须能够区分开哪些是新发送的,哪些是重传的。对于简单链路上传送的帧,如采用停止等待协议,只要用1位编号即可,也就是发送完0号帧,收到确认后,再发送1号帧,收到确认后,再发送0号帧。但是在运输层,这种编号方法有时并不能保证可靠传输。

第三,超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。图5-9(b)中的一段虚线表示如果M正确到达B同时A也正确收到确认的过程。可见重传时间应设定为比平均往返时间更长一些。显然,如果重传时间设定得很长,那么通信的效率就会很低。但如果重传时间设定得太短,以致产生不必要的重传,就浪费了网络资源。然而,在运输层重传时间的准确设定是非常复杂的,这是因为已发送出的分组到底会经过哪些网络,以及这些网络将会产生多大的时延(这取决于这些网络当时的拥塞情况),这些都是不确定因素。图5-9中把往返时间当作固定的(这并不符合网络的实际情况),只是为了讲述原理的方便,关于重传时间应如何选择, 选择确认SACK 。

图5-10(b)说明的是另一种情况,B所发送的对M1的确认丢失了。A在设定的超时重传时间内没有收到确认,并无法知道是自己发送的分组出铝、丢失,或者是B发送的确认丢失了。因此A在超时计时器到期后就要重传M1,现在应注意B的动作,假定B又收到了重传的分组M1。这时应采取两个行动。第一,丢弃这个重复的分组M1,不向上层交付;第二,向A发送确认,不能认为已经发送过确认就不再发送,因为A之所以重传M1就表示A没有收到对M,的确认。

图5-10(b)也是一种可能出现的情况。传输过程中没有出现差错,但B对分组M1的确认迟到了。A会收到重复的确认。对重复的确认的处理很简单:收下后就丢弃。B仍然会收到重复的M1,并且同样要丢弃重复的M1,并重传确认分组。

通常A最终总是可以收到对所有发出的分组的确认。如果A不断重传分组但总是收不到确认,就说明通信线路太差,不能进行通信。

使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。

这种可靠传输协议常称为 自动重传请求ARQ (Automatic Repeat reQuest)。意思是重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组。

停止等待协议的优点是简单,但缺点是信道利用率太低。我们可以用图5-11来说明这个问题。为简单起见,假定在A和B之间有一条直通的信道来传送分组。

假定A发送分组需要的时间是TD。显然,TD等于分组长度除以数据率。再假定分组正确到达B后,B处理分组的时间可以忽略不计,同时立即发回确认。假定B发送 确认分组需要时间TA 。如果A处理确认分组的时间也可以忽略不计,那么A在经过时间(TD+RTT+TA)后就可以再发送下一个分组,这里的RTT是往返时间。因为仅仅是在时间TD内才用来传送有用的数据(包括分组的首部),因此信道的利用率U可用下式计算: U=TD/TD +RTT+TA (5-3)

请注意,更细致的计算还可以在上式分子的时间TD内扣除传送控制信息(如首部)所花费的时间。但在进行粗略计算时,用近似的式(5-3)就可以了。

我们知道,(5-3)式中的往返时间RTT取决于所使用的信道。例如,假定1200km的信道的往返时间RTT=20ms。分组长度是1200bit,发送速率是1Mbit/s。若忽略处理时间和TA(TA一般都远小于TD), TD=1200/1*10^6 ,信道的利用率U=5.66%。但若把发送速率提高到10Mbit/s,则U=5.96×10^(-4)。信道在绝大多数时间内都是空闲的。

从图5-11还可看出,当往返时间RTT远大于分组发送时间TD时,信道的利用率就会非常低。还应注意的是,图5-11并没有考虑出现差错后的分组重传。若出现重传,则对传送有用的数据信息来说,信道的利用率就还要降低。

为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输(如图5-12所示)。流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一真有数据不间断地在传送。显然,这种传输方式可以获得很高的信道利用率。

㈡ 计算机网络第5版的图书目录

第1章 概述
1.1 计算机网络在信息时代中的作用
*1.2 因特网概述
因特网(Internet)是一组全球信息资源的总汇。有一种粗略的说法,认为INTERNET是由于许多小的网络(子网)互联而成的一个逻辑网,每个子网中连接着若干台计算机(主机)。Internet以相互交流信息资源为目的,基于一些共同的协议,并通过许多路由器和公共互联网而成,它是一个信息资源和资源共享的集合。
计算机网络只是传播信息的载体,而Internet的优越性和实用性则在于本身。因特网最高层域名分为机构性域名和地理性域名两大类,主要有14 种机构性域名。
它连接着所有的计算机,人们可以从互联网上找到不同的信息,有数百万对人们有用的信息,你可以用搜索引擎来找到你所需的信息。搜索引擎帮助我们更快更容易的找到信息,只需输入一个或几个关键词,搜索引擎会找到所有符合要求的网页,你只
需要点击这些网页,就可以了。
1.2.1 网络的网络
1.2.2 因特网发展的三个阶段1.2.3 因特网的标准化工作
*1.3 因特网的组成
1.3.1 因特网的边缘部分
1.3.2 因特网的核心部分
1.4 计算机网络在我国的发展
1.5 计算机网络的类别
1.5.1 计算机网络的定义
按广义定义
关于计算机网络的最简单定义是:一些相互连接的、以共享资源为目的的、自治的计算机的集合。
另外,从逻辑功能上看,计算机网络是以传输信息为基础目的,用通信线路将多个计算机连接起来的计算机系统的集合。一个计算机网络组成包括传输介质和通信设备。
从用户角度看,计算机网络它是这样定义的:存在着一个能为用户自动管理的网络操作系统。有它调用完成用户所调用的资源,而整个网络像一个大的计算机系统一样,对用户是透明的。
一个比较通用的定义是:利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递的系统。
从整体上来说计算机网络就是把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。简单来说,计算机网络就是由通信线路互相连接的许多自主工作的计算机构成的集合体。
按连接定义
计算机网络就是通过线路互连起来的、资质的计算机集合,确切的说就是将分布在不同地理位置上的具有独立工作能力的计算机、终端及其附属设备用通信设备和通信线路连接起来,并配置网络软件,以实现计算机资源共享的系统。
按需求定义
计算机网络就是由大量独立的、但相互连接起来的计算机来共同完成计算机任务。这些系统称为计算机网络(computer networks)
1.5.2 几种不同类别的网络
*1.6 计算机网络的性能
1.6.1 计算机网络的性能指标
1.6.2 计算机网络的非性能特征
*1.7 计算机网络体系结构
1.7.1 计算机网络体系结构的形成
1.7.2 协议与划分层次
1.7.3 具有五层协议的体系结构
1.7.4 实体、协议、服务和服务访问点
1.7.5 TCP/IP的体系结构
习题
第2章 物理层
*2.1 物理层的基本概念
物理层位于OSI参考模型的最底层,它直接面向实际承担数据传输的物理媒体(即通信通道),物理层的传输单位为比特(bit),即一个二进制位(“0”或“1”)。实际的比特传输必须依赖于传输设备和物理媒体,但是,物理层不是指具体的物理设备,也不是指信号传输的物理媒体,而是指在物理媒体之上为上一层(数据链路层)提供一个传输原始比特流的物理连接。
*2.2 数据通信的基础知识
2.2.1 数据通信系统的模型
2.2.2 有关信道的几个基本概念
2.2.3 信道的极限容量
2.3 物理层下面的传输媒体
2.3.1 导向传输媒体
传输媒体包括导向传输媒体和非导向传输媒体。在导向传输媒体中,电磁波被导向沿着固体媒体(铜线或光纤)传播,而非导向传输媒体就是指自由空间,在非导向传输媒体中电磁波的传输常称为无线传输。
2.3.2 非导向传输媒体
*2.4 信道复用技术
“复用”是一种将若干个彼此独立的信号,合并为一个可在同一信道上同时传输的复合信号的方法。比如,传输的语音信号的频谱一般在300~3400Hz内,为了使若干个这种信号能在同一信道上传输,可以把它们的频谱调制到不同的频段,合并在一起而不致相互影响,并能在接收端彼此分离开来。
2.4.1 频分复用、时分复用和统计时分复用
2.4.2 波分复用
波分复用(WDM)是将两种或多种不同波长的光载波信号(携带各种信息)在发送端经复用器(亦称合波器,Multiplexer)汇合在一起,并耦合到光线路的同一根光纤中进行传输的技术;在接收端,经解复用器(亦称分波器或称去复用器,Demultiplexer)将各种波长的光载波分离,然后由光接收机作进一步处理以恢复原信号。这种在同一根光纤中同时传输两个或众多不同波长光信号的技术,称为波分复用。
2.4.3 码分复用
码分复用是用一组包含互相正交的码字的码组携带多路信号。采用同一波长的扩频序列,频谱资源利用率高,与WDM结合,可以大大增加系统容量。频谱展宽是靠与信号本身无关的一种编码来完成的。称频谱展宽码为特征码或密钥,有时也称为地址码。
*2.5 数字传输系统
*2.6 宽带接入技术
2.6.1 xDSL技术
2.6.2 光纤同轴混合网(HFC网)
2.6.3 FTTx技术
习题
第3章 数据链路层
*3.1 使用点对点信道的数据链路层
3.1.1 数据链路和帧
3.1.2 三个基本问题
*3.2 点对点协议PPP
3.2.1 PPP协议的特点
3.2.2 PPP协议的帧格式
3.2.3 PPP协议的工作状态
*3.3 使用广播信道的数据链路层
3.3.1 局域网的数据链路层
3.3.2 CSMA/CD协议
3.4 使用广播信道的以太网
*3.4.1 使用集线器的星形拓扑
3.4.2 以太网的信道利用率
*3.4.3 以太网的MAC层
*3.5 扩展的以太网
3.5.1 在物理层扩展以太网
3.5.2 在数据链路层扩展以太网
*3.6 高速以太网
3.6.1 100BASE-T以太网
3.6.2 吉比特以太网
3.6.3 10吉比特以太网
3.6.4 使用高速以太网进行宽带接入
3.7 其他类型的高速局域网或接口
习题
第4章 网络层
*4.1 网络层提供的两种服务
*4.2 网际协议IP
4.2.1 虚拟互连网络
4.2.2 分类的IP地址
4.2.3 IP地址与硬件地址
4.2.4 地址解析协议ARP和逆地址解析协议RARP
4.2.5 IP数据报的格式
4.2.6 IP层转发分组的流程
*4.3 划分子网和构造超网
4.3.1 划分子网
4.3.2 使用子网时分组的转发
4.3.3 无分类编址CIDR(构造超网)
*4.4 网际控制报文协议ICMP
4.4.1 ICMP报文的种类
4.4.2 ICMP的应用举例
*4.5 因特网的路由选择协议
4.5.1 有关路由选择协议的几个基本概念
4.5.2 内部网关协议RIP
4.5.3 内部网关协议OSPF
4.5.4 外部网关协议BGP
4.5.5 路由器的构成
4.6 IP多播
4.6.1 IP多播的基本概念
4.6.2 在局域网上进行硬件多播
4.6.3 网际组管理协议IGMP和多播路由选择协议
4.7 虚拟专用网VPN和网络地址转换NAT
4.7.1 虚拟专用网VPN
4.7.2 网络地址转换NAT
习题
第5章 运输层
*5.1 运输层协议概述
5.1.1 进程之间的通信
5.1.2 运输层的两个主要协议
5.1.3 运输层的端口
*5.2 用户数据报协议UDP
5.2.1 UDP概述
5.2.2 UDP的首部格式
*5.3 传输控制协议TCP概述
5.3.1 TCP最主要的特点
5.3.2 TCP的连接
*5.4 可靠传输的工作原理
5.4.1 停止等待协议
5.4.2 连续ARQ协议
*5.5 TCP报文段的首部格式
5.6 TCP可靠传输的实现
*5.6.1 以字节为单位的滑动窗口
*5.6.2 超时重传时间的选择
5.6.3 选择确认SACK
5.7 TCP的流量控制
*5.7.1 利用滑动窗口实现流量控制
5.7.2 必须考虑传输效率
*5.8 TCP的拥塞控制
5.8.1 拥塞控制的一般原理
5.8.2 几种拥塞控制方法
5.8.3 随机早期检测RED
5.9 TCP的运输连接管理
*5.9.1 TCP的连接建立
*5.9.2 TCP的连接释放
5.9.3 TCP的有限状态机
习题
第6章 应用层
*6.1 域名系统DNS
6.1.1 域名系统概述
6.1.2 因特网的域名结构
6.1.3 域名服务器
6.2 文件传送协议
6.2.1 FTP概述
6.2.2 FTP的基本工作原理
6.2.3 简单文件传送协议TFTP
6.3 远程终端协议TELNET
*6.4 万维网WWW
6.4.1 万维网概述
6.4.2 统一资源定位符URL
6.4.3 超文本传送协议HTTP
6.4.4 万维网的文档
6.4.5 万维网的信息检索系统
*6.5 电子邮件
6.5.1 电子邮件概述
6.5.2 简单邮件传送协议SMTP
6.5.3 电子邮件的信息格式
6.5.4 邮件读取协议POP3和IMAP
6.5.5 基于万维网的电子邮件
6.5.6 通用因特网邮件扩充MIME
*6.6 动态主机配置协议DHCP
6.7 简单网络管理协议SNMP
6.7.1 网络管理的基本概念
6.7.2 管理信息结构SMI
6.7.3 管理信息库MIB
6.7.4 SNMP的协议数据单元和报文
6.8 应用进程跨越网络的通信
6.8.1 系统调用和应用编程接口
6.8.2 几种常用的系统调用
习题
第7章 网络安全
*7.1 网络安全问题概述
7.1.1 计算机网络面临的安全性威胁
7.1.2 计算机网络安全的内容
7.1.3 一般的数据加密模型
*7.2 两类密码体制
7.2.1 对称密钥密码体制
7.2.2 公钥密码体制
*7.3 数字签名
*7.4 鉴别
7.4.1 报文鉴别
7.4.2 实体鉴别
*7.5 密钥分配
7.5.1 对称密钥的分配
7.5.2 公钥的分配
7.6 因特网使用的安全协议
7.6.1 网络层安全协议
7.6.2 运输层安全协议
7.6.3 应用层的安全协议
*7.7 链路加密与端到端加密
7.7.1 链路加密
7.7.2 端到端加密
*7.8 防火墙
习题
第8章 因特网上的音频/视频服务
*8.1 概述
8.2 流式存储音频/视频
8.2.1 具有元文件的万维网服务器
*8.2.2 媒体服务器
*8.2.3 实时流式协议RTSP
*8.3 交互式音频/视频
8.3.1 IP电话概述
8.3.2 IP电话所需要的几种应用协议
8.3.3 实时运输协议RTP
8.3.4 实时运输控制协议RTCP
8.3.5 H.323
8.3.6 会话发起协议SIP
8.4 改进“尽最大努力交付”的服务
8.4.1 使因特网提供服务质量
8.4.2 调度和管制机制
8.4.3 综合服务IntServ与资源预留协议RSVP
8.4.4 区分服务DiffServ
习题
第9章 无线网络
9.1 无线局域网WLAN
*9.1.1 无线局域网的组成
9.1.2 802.11局域网的物理层
*9.1.3 802.11局域网的MAC层协议
*9.1.4 802.11局域网的MAC帧
9.2 无线个人区域网WPAN
9.3 无线城域网WMAN
习题
第10章 下一代因特网
*10.1 下一代网际协议IPv6 (IPng)
10.1.1 解决IP地址耗尽的措施
10.1.2 IPv6的基本首部
10.1.3 IPv6的扩展首部
10.1.4 IPv6的地址空间
10.1.5 从IPv4向IPv6过渡
10.1.6 ICMPv6
10.2 多协议标记交换MPLS
10.2.1 MPLS的产生背景
10.2.2 MPLS的工作原理
10.2.3 MPLS首部的位置与格式
10.3 P2P文件共享
习题
附录A 部分习题的解答
附录B 英文缩写词
附录C 参考文献与网址

㈢ 计算机网络

TCP/IP五层协议的体系结构,自顶向下依次为:应用层、传输层、网络层、数据链路层、物理层。

不使用两次握手和四次握手的原因

为什么TIME_WAIT等待的时间是2MSL
MSL,Maximum Segment Lifetime英文的缩写, 报文最大生存时间 ,它是任何报文在网络上存在的最长时间,超过这个时间将被丢弃。

概述

区别

区别(表形式)

概念

超时时间应该设置为多少

8、快速重传

概念

SACK(Selective Acknowledgment 选择性确认),这种方式需要在 TCP 头部选项字段里加一个 叫SACK 的东西,它可以将 缓存的地图发送给发送方 ,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以 只重传丢失的数据

D-SACK,其主要使用了 SACK 来 告诉发送方有哪些数据被重复接收了
下面以两个例子,来说明D-SACK的作用。

D-SACK有这么几个好处

引入滑动窗口的原因

窗口的实现

窗口的大小

窗口应用示例

窗口的大小由哪一方决定?

TCP 利用滑动窗⼝实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收(让发送方根据接收方的实际接收能力控制发送的数据量)。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

HTTP协议的⻓连接和短连接,实质上是TCP协议的⻓连接和短连接。

HTTP 是⼀种不保存状态的协议,即无状态(stateless)协议。也就是说 HTTP 协议⾃身不对请求和响应之间的通信状态进⾏保存。
无状态的利弊:

对于无状态的问题,解法方案有很多种,其中比较简单的方式用 Cookie 技术 。Cookie的工作原理如下:
(1)浏览器端第一次发送请求到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据区分不同的用户

此外,还有 Session 机制来解决这一问题。Session的工作原理如下:
(1)浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个 特殊 的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
(2)浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。

Cookie 和 Session都是⽤来跟踪浏览器⽤户身份的会话⽅式,但是两者的应⽤场景不太⼀样。

Cookie ⼀般⽤来保存⽤户信息。比如①我们在 Cookie 中保存已经登录过得⽤户信息,下次访问⽹站的时候⻚⾯可以⾃动帮你登录的⼀些基本信息给填了;②⼀般的⽹站都会有保持登录也就是说下次你再访问⽹站的时候就不需要重新登录了,这是因为⽤户登录的时候我们可以存放了⼀个Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找⽤户即可(为了安全考虑,重新登录⼀般要将 Token 重写);③登录⼀次⽹站后访问⽹站其他⻚⾯不需要重新登录。

Session 的主要作⽤就是通过服务端记录⽤户的状态。 典型的场景是购物⻋,当你要添加商品到购物⻋的时候,系统不知道是哪个⽤户操作的,因为 HTTP 协议是⽆状态的。服务端给特定的⽤户创建特定的 Session 之后就可以标识这个⽤户并且跟踪这个⽤户了。

Cookie数据存储在客户端(浏览器)中,⽽Session数据保存在服务器上,相对来说 Session 安全性更⾼。如果要在Cookie 中存储⼀些敏感信息,不要直接写⼊ Cookie 中,最好能将 Cookie 信息加密然后使⽤到的时候再去服务器端解密。

HTTP1.0最早在⽹⻚中使⽤是在1996年,那个时候只是使⽤⼀些较为为简单的⽹⻚上和⽹络请求上,⽽HTTP1.1则在1999年才开始⼴泛应⽤于现在的各⼤浏览器⽹络请求中,同时HTTP1.1也是当前使⽤最为⼴泛的HTTP协议。 主要区别主要体现在:

URI的作⽤像身份证号⼀样,URL的作⽤更像家庭住址⼀样。URL是⼀种具体的URI,它不仅唯⼀标识资源,⽽且还提供了定位该资源的信息。

㈣ 运输层知识要点——谢希仁《计算机网络》

为了在计算机网络中有条不紊地交换数据,就必须遵守一些事先约定好的规则。这些规则明确规定了所 交换数据的格式 以及有关的 同步 问题。

同步的含义:在一定条件下应当发生什么事件,因而含有时序的意思。

网络协议:为进行网络中的数据交换而建立的规则、标准或约定。

网络协议由以下三个要素组成:

   1)语法:即数据与控制信息的结构或格式

   2)语义:即需要发出何种控制信息,完成何种动作以及做出何种反应

   3)同步:即事件实现顺序的详细说明

一、运输层协议的概述

   1.1 进程之间的通信

   1.2 运输层的两个主要协议

   1.3 运输层的端口

二、用户数据报协议UDP

   2.1 UDP概述

   2.2 UDP的首部格式

三、传输控制协议TCP概述

   3.1 TCP的最主要的特点

   3.2 TCP的连接

四、可靠传输的工作原理

   4.1 停止等待协议

   4.2 连续ARQ协议

五、TCP报文段的首部格式

六、TCP可靠传输的实现

   6.1 以字节为单位的滑动窗口

   6.2 超时重传时间的选择

   6.3 选择确认SACK

七、TCP的流量控制

   7.1 利用滑动窗口实现流量控制

   7.2 必须考虑传输效率

八、TCP的拥塞控制

   8.1 拥塞控制的一般原理

   8.2 几种拥塞控制方法

   8.3 随机早期检测RED

九、TCP的运输连接管理

   9.1 TCP的连接建立

   9.2 TCP的连接释放

   9.3 TCP的有限状态机

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

1.1 进程之间的通信

1.只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到了下三层的功能

2.两个主机进行通信就是两个主机中的应用进程互相通信。从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。(IP协议能把分组送到目的主机)

网络层时为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。

3.运输层一个重要功能——复用、分用。 (应用进程复用、分用运输层)

1.2 运输层的两个主要协议

1.UDP—User Datagram Protocol 用户数据报协议(无连接):DNS/RIP/DHCP/SNMP/NFS

TCP—Transmission Control Protocol 传输控制协议(面向连接):SMTP/TELNET/HTTP/ FTP

1.3 运输层的端口

问题:为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须使用统一的方法(而这种方法必须与特定操作系统无关)对TCP/IP体系的应用进程进行标识。

为什么不用进程号来区分?(第一,不同操作系统的进程标识符不同;第二,用功能来识别,而不是进程,例如邮件服务功能,而不管具体是哪个进程)

解决方案:在运输层使用协议端口号,即端口。软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。(端口号只具有本地意义,只是为了标识本计算机应用层中各个进程在和运输层交互时的层间接口。)

端口分为两大类:

1)服务器使用的端口号:熟知端口号或系统端口号(0~1023);登记端口号(1024~49151)

2)客户端使用的端口号:49152~65535

2.1 UDP概述

1.UDP只在IP的数据报服务至上增加了很少一点功能,就是复用、分用以及差错检测功能

2.特点

   1)无连接

   2)尽最大努力交付

   3)面向报文 (不合并、不拆分、保留这些报文的边界)

   4)UDP没有拥塞控制

   5)UDP支持一对一、一对多、多对一和多对多的交互通信

   6)UDP的首部开销小,只有8字节

应用进程本身可以在不影响应用的实时性的前提下,增加一些提高可靠性的措施,如采用前向纠错或重传已丢失的报文。

2.2 UDP的首部格式

1.traceroute 让发送的UDP用户数据报故意使用一个非法的UDP端口号,接收方丢弃报文,并由ICMP(网络控制报文协议)发送“端口不可达”差错报文给发送方。

2.计算检验和。IP数据报的校验和只检验IP数据报的首部,但UDP的校验和是把首部和数据部分一起都检验。(12字节的首部+真正的首部+数据来进行校验和的计算)

   Q1.为什么计算校验和要加12字节的伪首部

   Q2.计算校验和的原理是什么?

3.1 TCP的最主要的特点

1.面向连接的运输层协议(建立连接、传输数据、释放连接)

2.点对点,每一条TCP连接只能有两个端点

3.可靠交付(无差错、不丢失、不重复、并且按序到达)

4.全双工通信。TCP连接的两端都设有发送缓存和接收缓存。

5.面向字节流。(流指的是流入到进程或从进程流出的字节序列;面向字节流:TCP把应用程序交下来的数据看成是一连串的无结构字节流。 接收方的应用程序必须有能力识别接收到的字节流,把它还原成有意义的应用层数据。 因此TCP可以根据窗口值和当前网络状况调整发送的报文长度。划分短一点,或者积累到足够多再发送出去。)

3.2 TCP的连接

1.TCP把连接作为最基本的抽象。

2.每一条TCP连接有两个端点。TCP连接的端点叫作套接字。

   套接字soket = (IP地址:端口号)

每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。

   TCP连接 ::= {socket1, socket2}

理想的传输条件有以下两个特点:

   1)传输信道不产生差错

   2)不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据

实际的网络并不具备,因此:

   1)出现差错时,让发送方重传

   2)接收方来不及处理时,及时告诉发送方适当降低发送数据的速度

4.1 停止等待协议

1.“停止等待”就是没发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。

2.超时重传。在每发完一个分组就设置一个超时计时器,如果在超时计时器之前收到对方的确认,就撤销已设置的超时计时器。如果未收到,就认为刚才的分组丢失,并重传。

3.三种情况:A发送的分组出错、丢失;B发送的确认丢失;B发送的确认迟到

确认丢失:B丢弃重复的分组,向A重传确认

确认迟到:A丢弃重复的确认,B丢弃重复分组,并向A重传确认

4.常称为自动重传请求ARQ,重传时自动进行的(超时即重传)

5.缺点:信道利用率太低

   U=Td/(Td+RTT+Ta)

为了提高传输效率,发送方不使用停止等待协议,而是采用流水线传输。流水线传输就是发送发可连续发送多个分组,不必等每发完一个分组就停顿下来等待对方的确认。(连续ARQ协议和滑动窗口协议)

4.2 连续ARQ协议

1.位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。

2.累积确认:接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认。

3.缺点:Go-back-N (发送前5个分组,第3个分组丢失,后面三个要重传)

1.源端口和目的端口

2.序号。 每个字节都按顺序编号。

3.确认号。 期望收到对方下一个报文段的第一个数据字节的序号。

若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到。

4.数据偏移。 指出TCP报文段的数据起始处距离TCP报文段的起始处有多远(也即TCP报文段首部长度)。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。

5.窗口。窗口字段明确指出了现在允许对方发送的数据量。窗口值是经常在动态变化着。

6.1 以字节为单位的滑动窗口

1.发送缓存用来暂存:

   1)发送应用程序传送给发送方TCP准备发送的数据;

   2)TCP已发送但未收到确认德尔数据

2.接收缓存用来存放:

   1)按序到达的、但尚未被接收应收程序读取的数据;

   2)未按序到达的数据

3.注意三点:

   1)A的发送窗口是根据B的接收窗口设置的,但是在同一时刻,由于网络传输的滞后,A的发送窗口并不总是B的接收窗口一样大

   2)TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程

   3)TCP接收方有累计确认功能(不能过分推迟发送确认,否则会导致发送方不必要的重传)

6.2 超时重传时间的选择

1.超时重传时间设置太短,会引起很多不必要的重传;如果设置太长,使网络的空闲时间增大,降低传输效率。

2.新的RTTs = (1-a)x(旧的RTTs) + ax(新的RTT样本),其中RTT样本的时间为:记录一个报文段发出的时间,以及收到相应的确认时间,时间差就是报文段的往返时间RTT。

3.RTO = RTTs + 4 x RTTd,其中RTO为超时重传时间,RTTd是RTT的偏差的加权平均值。

新的RTTd = (1-b) x (旧的RTTd)+ b x |RTTs - 新的RTT样本|

4.一个问题:发送一个报文段,设定的重传时间到了,还没有收到确认。于是重传报文段。经过一段时间,收到了确认报文段。现在的问题是:如何判定此确认报文段是对先发送的报文段的确认,还是对后来重传的报文段的确认?

1)解决方法1,在计算加权平均值RTTs时,只要报文段重传了,就不采用其往返时间样本。

引入的问题:报文段的时延突然增大的情况

2)解决方法2,报文段每重传一次,就把超时重传时间RTO增大一些(一般是2倍)。当不在发生报文段的重传时,再根据加权平均计算。

6.3 选择确认SACK

SACK文档并没有指明发送发应当怎样响应SACK。因此大多数的实现还是重传所有未被确认的数据块。

7.1 利用滑动窗口实现流量控制

1.流量控制:就是让发送方的发送速率不要太快,要让接收方来得及接收。

2.利用滑动窗口机制可很方便地在TCP连接上实现对发送方的流量控制。发送方的发送窗口不能超过接收方给出的接收窗口的数值。

3.死锁情况:B向A发送了零窗口的报文段后不久,B又有了一些缓存空间,因此B向A发送rwnd = 400.然而该报文段在传送过程中丢失。A一直等待B发送的非零窗口的通知,B也一直等待A发送的数据。( 窗口通知不超时重传?为什么? )

解决方法:TCP为每个连接设有一个持续计时器。只要一方收到对方的零窗口通知,就启动计时器。计时器到期后,发送一个零窗口探测报文段,而对方就在确认这个探测报文段时给出了现在的窗口值。若仍为零,收到报文段的一方重新设置持续计时器。

7.2 必须考虑传输效率

1.应用程序把数据传送到TCP的发送缓存后,剩下的发送任务就由TCP来控制了。

2.三种不同的机制来控制TCP报文段的发送时机:

   1)TCP维持一个变量,它等于最大报文段长度MSS,只要缓存中的存放的数据达到MSS,就组装成一个TCP报文段发送出去

   2)由发送方的应用进程指明要求发送报文段,即TCP支持推送操作

   3)发送方设置一个定时器

3.问题一、若用户只发送一个字节,则非常浪费带宽。

解决方法:若发送应用程序把要发送的数据逐个字节地送到TCP的发送缓存,则发送方就把第一个数据字节先发送出去,把后面到达的数据字节都缓存起来。当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去。(采用收到确认就发送+并开始缓存的方式;同时当到达的数据已达到发送窗口大小的一半或已达到报文段的最大长度时,就立即发送一个报文段。)

4.问题二、糊涂窗口综合症。接收缓存已满,应用程序一次只读取一个字节,然后向发送方发送确认。

解决方法:让接收方等待一段时间,使得接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有一半空闲的空间。则接收方就发出确认报文。

8.1 拥塞控制的一般原理

1.拥塞的定义:对资源的需求 > 可用资源。 在计算机网络中的链路带宽、交换结点中的缓存和处理机等,都是网络中的资源。

2.拥塞解决不能靠解决某一个部分的问题。因为这会将瓶颈转移到其他地方。问题的实质往往是整个系统的各个部分不匹配。只有所有部分都平衡了,问题才会得到解决。

3.拥塞控制与流量控制的比较。

   1)拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

   拥塞控制有个前提:网络能够承受现有的网络负荷

   拥塞控制是一个全局性过程。(发送拥塞时,不知道在某处、什么原因造成的)

   2)流量控制:点对点通信量的控制,是个端到端的问题

   流量控制:抑制发送端发送数据的速率,以便使接收端来得及接收。

4.寻找拥塞控制的方案无非就是使不等式 “对资源的需求 > 可用资源 ”不再成立的条件。但是必须考虑该措施带来的其他影响。

5.计算机网络是个复杂的系统。从控制理论的角度来看拥塞控制,可以分为开环控制和闭环控制两种方法。

   1)开环控制:设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。但一旦系统运行起来,就不再中途改正。

   2)闭环控制:基于反馈环路。

   步骤一、监测网络系统以便检测到拥塞在何时、何处发生;

   步骤二、把拥塞发生的信息传送到可采取行动的地方

   步骤三、调整网络系统的运行以解决出现的问题

8.2 几种拥塞控制方法(只考虑网络拥塞程度,即假设接收方总是有足够大的缓存空间)

1.慢开始和拥塞避免

1)发送方维持一个拥塞窗口。

   拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。

   控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口增大;如果网络出现拥塞,则减小。

2)慢开始的思路:由小到大逐渐增大拥塞窗口数值。每收到一个对新的报文段的确认,把拥塞窗口增加至多一个MSS的数值。(没经过一个传输轮次,拥塞窗口cwnd就加倍)

轮次:把拥塞窗口所允许发送的报文段都连续发送出去,并收到了对已发送的最后一字节的确认。

慢开始的“慢”并不是指cwnd的增长速率慢,而是指TCP开始发送报文段时先设置cwnd=1(一个MSS数值)。

3)慢开始门限ssthresh

   为防止拥塞窗口增长过大,引入一个慢开始门限ssthresh。

   当cwnd < ssthresh时,使用上述的慢开始算法

   当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法

4)拥塞避免算法

思路:让拥塞窗口cwnd缓慢增大,即没经过一个往返时间RTT就把发送方的拥塞窗口cwnd增加1,而不是加倍。

5)慢开始门限的设置

只要发送方判断网络出现拥塞(没有按时收到确认),就把慢开始门限ssthresh设置为出现拥塞时发送方窗口值的一半,然后把拥塞窗口cwnd重置为1,执行慢开始算法。

6)乘法减小和加法增大

乘法减小:网络出现拥塞时,把慢开始门限ssthresh减半(当前的ssthresh的一半),并执行慢开始算法。

加法增大:执行拥塞避免方法

2.快重传和快恢复

1)快重传(尽快重传未被确认的报文段)

首先,要求接收方每收到一个失序的报文段后就立即发出重复确认。(如接收方收到了M1和M2后都分别发出了确认,但接收方没有收到M3但接着收到了M4。此时接收方立即发送对M2的重复确认。)

其次,发送方只要一连收到三个重复确认,就应当立即重传对方尚未收到的报文段M3.

2)快恢复

要点一、当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。

要点二、由于发送方认为网络很可能没有发生拥塞(因为收到了连续的重复确认),把cwnd设置为慢开始门限ssthresh减半后的值,然后开始执行拥塞避免算法

慢开始算法只在TCP连接建立时和网络出现超时才使用。

3.发送方的窗口

发送方窗口的上限值 = Min [rwnd, cwnd]

8.3 随机早期检测RED(IP层影响TCP层的拥塞控制)

1.网络层的分组丢弃策略

网络层的策略对TCP拥塞控制影响最大的就是路由器的分组丢弃策略。

如果路由器队列已满,则后续到达的分组将都被丢弃。这就叫做尾部丢弃策略。

2.全局同步

由于TCP复用IP,若发生路由器中的尾部丢弃,就可能会同时影响到很多条TCP连接,结果就使许多TCP连接在同一时间突然都进入到慢开始状态。全局同步使得全网的通信量突然下降了很多,网络恢复正常后,其通信量又突然增大很多。

3.随机早期检测RED

使路由器的队列维持两个参数,即队列长度最小门限THmin和最大门限THmax。当每一个分组到达时,RED就先计算平均队列长度Lav。RED算法是:

1)若平均队列长度小于最小门限THmin,则把新到达的分组放入队列进行排队

2)若平均队列长度超过最大门限THmax,则把新到达的分组丢弃

3)若平均队列长度在最小门限THmin和最大门限THmax之间,则按照某一概率p将新到达的分组丢弃。

随机体现在3),在检测到网络拥塞的早期征兆时(即路由器的平均队列长度超过一定的门限值时),就先以概率p随机丢弃个别的分组,让拥塞控制只在个别的TCP连接上进行,因而避免发生全局性的拥塞控制。

4.平均队列长度Lav和分组丢弃概率p

Lav = (1-d) x (旧的Lav) +d x (当前的队列长度样本)

p = ptemp / (1- count x ptemp)

ptemp = pmax x (Lav - THmin) / (THmax - THmin)

TCP时面向连接的协议。

运输连接就有三个阶段:连接建立、数据传送和连接释放

运输连接的管理:使运输连接的建立和释放都能正常地进行。

在TCP连接建立过程中要解决以下三个问题:

   1)要使每一方能够确知对方的存在

   2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳等等)

   3)能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配

9.1 TCP的连接建立

1.TCP规定,SYN=1报文段不能携带数据,但消耗一个序号

2.TCP规定,ACK=1报文段可以携带数据,如果不携带数据则不消耗序号

3.为什么A还要发送一次确认?为了防止已失效的连接请求报文突然又传送到B,因而产生错误。

“已失效的连接请求报文段”

A发出第一个连接请求报文段,在网络中滞留超时,又发出了第二个连接请求。但B收到第一个延迟的失效的连接请求报文段后,就误认为是A又发出了一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立。此时A不会理睬B的确认,也不会发数据,但B一直等A发送数据,B的许多资源就浪费了。

采用三次握手,A不会向B发送确认,因此B就知道A并没有要求建立确认。

9.2 TCP的连接释放

1.TCP规定,FIN报文段基石不携带数据,也消耗一个序号

2.第二次握手后,TCP通知高层应用程序,因而从A到B这个方向的连接就释放,TCP连接处于半关闭状态

3.为什么A在TIME-WAIT状态必须等待2MSL的时间

  1)为了保证A发送的最后一个ACK报文段能够到达B。因为ACK可能丢失,此时B可能会超时重传,然后A重传确认,并重新启动2MSL计时器

  2)防止“已失效的连接请求报文段”出现在本连接中。可以使本连接持续时间内所产生的所有报文段都从网络中消失。

9.3 TCP的有限状态机

㈤ 计算机网络(5)| 运输层

从通信和处理信息的角度看,运输层是向它上面的应用层提供通信服务的,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络的边缘部分中的两台主机使用网络的核心部分的功能进行端到端的通信时,只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。

运输层的两个主要协议 TCP/IP 都是互联网的正式标准,即:
(1)用户数据报协议UDP
(2)传输控制协议TCP

TCP则是面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或者多播服务。由于TCP要提供可靠的面向连接的运输服务,因此需要增加很多的开销。

TCP/IP的运输层用一个16位端口号来标志一个端口。端口号只有本地意义。它是为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口。

运输层的端口号分为以下两类:
(1)服务器端使用的端口号: 它主要分为系统端口号0~1023和登记端口号1024~49151。

(2)客户端使用的端口号: 49152~65535,这类端口号仅在客户端进程运行时才动态选择。当服务器收到客户端进程的报文时,就知道客户端进程的端口号。因而可以把数据发送给客户进程。

用户数据报协议相比于IP的数据报服务就是只增加了复用、分用和差错检测功能。UDP的主要特点是:
(1)UDP是无连接的, 发送数据之前不需要建立连接,因此减少开销和发送数据之前的时延。
(2)UDP使用尽最大努力交付, 即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
(3)UDP是面向报文的。 发送方的UDP对应用交下来的报文,添加首部后就向下交付给IP层。不对报文做任何处理,因此当报文过长时,IP层可能需要进行分片处理。
(4)UDP没有拥塞控制, 网络出现的拥塞不会使源主机的发送速率减低。
(5)UDP支持一对一、一对多、多对一和多对多的交互通信。
(6)UDP的首部开销小, 只有8个字节。

UDP有两个字段:数据字段和首部字段。先介绍首部字段,它是由4个字段组成的,每个字段只有2个字节,总共有8个字节。各个字段的意义如下:
(1)源端口: 源端口号。在需要对方回信时选用。不需要时可用全0。
(2)目的端口: 目的端口号。在这终点交付报文时必须使用。
(3)长度: UDP用户数据报的长度,其最小值是8(只有首部)。
(4)检验和: 检测UDP用户数据报在传输中是否有错,有错则丢弃。

当在传送用户数据报时,如果接收方UDP发现收到的报文中目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。

TCP的主要特点如下:
(1)TCP是面向连接的运输层协议。 应用程序在使用TCP协议之前,必须先建立TCP连接。传送数据完毕后,必须释放TCP连接。
(2)每一条TCP连接只能有两个端点。 每一条TCP连接只能是点对点的。
(3)TCP提供可靠交付的服务。 通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到达。
(4)TCP提供全双工通信。 TCP允许通信双方的应用进程在任何时候都能发送数据。
(5)面向字节流。 TCP中的流指的是流入到进程或进程流出的字节序列。虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据看成一连串的无结构的字节流。TCP不保证发送方发送的数据块和接收方接收的数据块一致,但保证程序接收到的字节流和程序发送的字节流一致。

TCP连接的端点叫做套接字或者插口。套接字是指将端口号拼接到IP地址之后,即:

每一条TCP连接唯一的被通信两端的两个端点所确定。即:

如图所示,A发送分组M1,发送完毕就暂停发送,等待B的确认,B收到了M1就向A发死你确认。A在收到了对M1的确认之后,就再发送下一个分组M2,以此类推。

如图所示,当B接收M1时检测出了差错,就丢弃M1,其他什么也不做。而A只要超过了一段时间没有收到确认,就会认为刚才发送的分组丢失了,因而重传前面发送过的分组,这就叫做超时重传,而实现超时重传则需要A为每一个已发送的分组都设置一个超时计时器。
需要注意以下三点:
(1)A在发送完一个分组后,必须暂时保留已发送的分组的副本。
(2)分组和确认分组必须编号,这样才能明确哪一个发出的分组收到了确认。
(3)超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长。

如图所示,B所发送的对M1确认丢失了,A在设定的超时重传时间内没有收到确认,所以无法知道自己发送的分组是怎样出错的,所以会重传M1,而当B又收到了重传的分组M1,这时应该采取两个行动:
(1)丢弃这个重复分组M1。
(2)向A发送确认。

还有一种情况就是在传输过程中没有出现差错,但B对分组M1的确认迟到了,而A会收到重复的确认,A收下后就会丢弃,B仍然会收到重复的M1,并且同样要丢弃重复的M1,并且重传确认分组。

停止等待协议的优点是简单,缺点则是信道的利用率太低。我们用TD表示A发送分组需要的时间,TA表示B发送确认分组需要的时间,RTT为往返时间,则:

为了提高传输的效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输的方式。即不必每发完一个分组就停下来等待对方的确认,这样就可以使信道上一直有数据在不间断的传送。

如图表示的是发送方维持的发送窗口,它指的是位于发送窗口内的5个分组都可以连续发送出去而不需要等待对方的确认。同时连续ARP协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。

对于接收方采用的则是累计确认的方式,即接收方不必对收到的分组逐个发送确认。而是在收到几个分组后,对按序到达的最后一个分组发送确认,这就表示:到这个分组为止的所有分组都已正确收到了。这种方式的优点是:容易实现,即使确认丢失也不必重传(意思是发送方不必重传)。但缺点是不能向发送方反映出接收方已经正确收到的所有分组信息。

TCP虽然是面向字节流的,但传送TCP的数据单元却是报文段。一个TCP报文段可以分为首部和数据两部分。

为了后面讲述的方便,我们假设数据传输只在一个方向进行,即A发送数据,B给出确认。

TCP的滑动窗口是以字节为单位的。如图所示,现在假定A收到了B发来的确认报文段,其中的窗口是20字节,而确认号是31,根据这2个数据,A就构造出自己的发送窗口。

发送窗口表示:在没有收到B的确认的情况下,A可以连续把窗口内的数据都发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。发送窗口后面的部分表示已发送且已经收到了确认。而发送窗口前沿的部分表示不允许发送的。

现在假定A发送了序号为31~41的数据。这时发送窗口位置并未改变但是发送窗口内靠后面有11个字节表示已发送但是未收到确认。而发送窗口内靠前面的9个字节时允许发送但未发送的。如图所示:

而对于B,它的接收窗口大小是20,在接收窗口外面到30号位置的数据是接收并确认的,因此可以丢弃。在下图中,B收到了32和33的数据,但它们不是按序到达的,因为并没有收到31号数据。B只能对按序达收到的数据中的最高序号给出确认,因此B发送的确认报文字段的确认号依然是31号。

现在假定B收到了序号为31的数据,并把31~33的数据交付主机,然后B删除这些数据。接着把窗口向前移动3个序号,同时给a发送确认,其中的窗口值仍为20,但确认号变为34。表明B已经收到序号33为止的数据。

因为TCP的发送方在规定的时间内没有收到确认就要重传已经发送的报文段,但是重传时间的选择却TCP最复杂的问题之一。为此TCP采用了一种自适应算法,它记录了一个报文段发出的时间以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT,同时TCP保留了RTT的加权平均往返时间RTTs。而RTTD是RTT的偏差加权平均值,它与RTTs和新的RTT样本之差有关。

超时重传时间的算法如下:
第一次测量时,加权平均往返时间取往返时间RTT,以后每次测量到一个新的RTT,按以下公式计算:

第一次测量时,RTT偏差的加权平均等于RTT的一半,以后的测里中,按以下公式计算:

综上超时重传时间RTO计算如下:

若收到的报文无差错,只是未按序号,使用选择确认SACK可是让发送方发送那些未收到的数据,而不重复发送已经收到的那些数据。如果要使用选择确认SACK,那么在建立TCP连接时,就要在TCP首部的选项中加上“允许SACK”的选项,并且双方必须都事先商量好。

流量控制就是指让发送方的发送速率不要太快,要让接收方来得及接收。而利用滑动窗口机制就可以很方便的在TCP连接上实现对发送方的流量控制。

如上图所示,接收方B进行了三次流量控制。第一次把窗口减小到rwnd=300,第二次又减到rwnd=100,最后是rwnd=0,即不允许发送方再发送数据了。

但是我们应该考虑一种情况,就是当接收方B的存储已满时,会向发送方发送零窗口的报文段,接着B的存储又有了一些空间,B再向A发送一个不为零的窗口值,但这个报文丢失了,结果就是双方一直等待下去。所以为了解决这个问题,TCP为每一个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,当计时器到期后,就发送一个探测段文段,而对方就在确认这个探测段时给出了现在的窗口值。如果窗口仍然是0,那么收到这个报文段的一方就重新设置持续计时器,反之则死锁的僵局就可以打破了。

应用程序把数据传送到TCP的发送缓存后,TCP在何时发送这些数据?,在TCP的实现中广泛使用了Nagle算法。具体算法如下:
(1)若发送应用进程要把数据逐个字节地送到TCP的发送缓存,则发送方就把第一个数据字节先发出去,把后面到达的数据字节都缓存起来。
(2)方发送方收到对第一个数据字节的确认后,再把发送缓存中的所有数据组装成一个报文发送出去,同时继续对后续到来的数据进行缓存。
(3)只有收到对前一个报文段的确认后才继续发送下一个报文段。

当数据到达快而网络速度慢时,这种方法可以明显减少网络带宽。Nagle还规定:当到达的数据达到窗口的一半或最大报文长度时就立即发送一个报文。

但还还需要考虑一个叫做糊涂综合征的问题,具体内容是若接收方的缓存已满,应用进程每次只从缓存中取1个字节,然后向发送方确认,并把窗口设为1个字节(缓存只空了1个字节的空间),接着发送方发来1个字节,接收方发回确认,仍然将窗口设为1,这样进行下去,网络的利用率很低。

为了解决这个问题,可以让接收方等待一段时间,使得或者缓存已有足够的空间或者等到接收缓存已有一半的空闲空间。此时,接收方就发出确认报文,并向发送方通知当前窗口的大小。

拥塞 是指在某一段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏的情况。而所谓的 拥塞控制 就是防止过多的数据注入到网络当中,这样可以使网络中的路由器或者链路不致过载,它是一个全局性的过程,涉及到所有的主机和路由器,而流量控制往往是指点对点通信量的控制。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。

TCP进行拥塞控制的算法有4种:慢开始、拥塞避免、快重传和快恢复。下面在讨论这些算法时我们假定:
(1)数据是单方向传送的,对方只传送确认报文。
(2)接收方总是有足够大的缓存空间。

发送方维持一个拥塞窗口的状态变量,其大小取决于拥塞程度,并且动态变化。发送方让自己的发送窗口小于拥塞窗口(如果考虑接收方的接收能力的话,发送窗口可能小于拥塞窗口)。发送方控制拥塞窗口的原则是:只要网络没有拥塞,拥塞窗口就再增大一点,以便把更多的分组发送出去,只要出现拥塞,就减小拥塞窗口,以减少注入到网络的分组数。

下面会从“慢开始算法”讲起来讨论拥塞窗口的大小如何变化的。

慢开始的算法思路是:当主机开始发送数据时,由于并不清楚网络的负荷情况,所以如果立即把大量数据字节注入到网络中,就有可能引起网络拥塞。因此会采用由小逐渐增大发送窗口。即在通常开始发送报文时,先将拥塞窗口cwnd的值设为一个最大报文段MSS的数值,而在每收到一个新的报文段确认后,把拥塞窗口增加至多一个MSS的数值。

如上图所示,开始时cwnd=1,发送方发送一个M1,接收方收到M1发送确认,发送方收到一个确认后将cwnd加1,此时cwnd=2,因此发送方发送M2和M3两个报文段,接收方收到后返回两个确认,因此cwnd增加两次,此时cwnd=4,接着发送方发送M4~M7四个报文段。依次类推。因此使用慢开始算法后,每经过一个传输轮次,拥塞窗口就加倍。

但是为了防止拥塞窗口cwnd增加过大导致网络拥塞,需要设置一个慢开始门限ssthresh,慢开始门限用法如下:
当cwnd<ssthresh时,使用上述的慢开始算法。
当cwnd>ssthresh时,停止使用慢开始算法,使用拥塞避免算法。
当cwnd=ssthresh时,既可以使用慢开始算法,也可以使用拥塞避免算法。
这里的拥塞避免算法是指让拥塞窗口缓慢的增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是像慢开始阶段那样加倍增长。

需要注意的是无论在慢开始阶段还是拥塞避免阶段,只要发送方判断网络出现拥塞(根据是没有按时收到确认),立即把慢开始门限ssthresh设为出现拥塞时的发送窗口的一半。然后发送窗口cwnd重新设为1,执行慢开始算法。目的是迅速减少主机发送到网络分组的分组数。

快重传算法要求接收方每收到一个失序的报文段后就立即发送重复确认,如下图接收了M1和M2后,又接收到一个M4,M4属于失序报文,则发送对M2的重复确认。发送方只要连续收到三次确认重复就立即重传对方未收到的报文段M3。

与快重传算法配合的还有快恢复算法,过程如下:
(1)当发送方连续收到三个重复确认时,就把慢开始门限ssthresh减半,这是为了防止网络拥塞,接着并不执行慢开始算法。
(2)由于上图这种情况很可能不是因为网络拥塞引起的,因此这里不执行慢开始算法(即不把拥塞窗口cwnd设为1,这样速度太慢),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法。

TCP的运输连接有是三个阶段:连接建立、数据传送和连接释放。在TCP的连接过程中要解决以下三个问题:
(1)要使每一方能够确知对方的存在。
(2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量)。
(3)能够对运输实体资源进行分配。

TCP建立连接的过程叫做握手,握手需要在客户和服务器之间交换3个TCP报文段。如图是三报文握手建立的连接过程:

A最后还要发送一次确认的原因是为了防止已经失效的连接请求报文段突然又传送到了B,因而产生错误。试想一种情况:如果只有第一次和第二次握手,第二次B向A发送的确认丢失了,此时B进入了连接建立状态,A没有收到确认,过一段时间后会再次向B发送连接请求,B收到后又会再次建立连接,白白浪费B的资源。

A在TIME-WAIT状态等待2MSL(MSL,最长报文段寿命),主要是因为以下两点考虑:首先是为了保证A发送的最后一个ACK报文段能够到达B,因为这个ACK报文段可能丢失,此时B会重传连接释放报文,如果A已经关闭,则无法收到这个报文。其次,当A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续时间内产生的所有报文段都从网络中消失。这样,下一个新连接中不会出现这种旧的连接请求报文段。

在图中每一个方框即TCP可能具有的状态。每个方框中的大写英文字符串时TCP标准所使用的的TCP连接状态名。状态之间的箭头表示可能发生的状态变迁。箭头旁边的字表明引起这种变迁的原因,或表明发生状态变迁后又出现什么动作,在图中粗实线箭头表示对客户进程的正常变迁,粗虚线箭头表示对服务器进程的正常变迁,细线箭头表示异常变迁。

㈥ 电脑网速慢怎么

使用电脑的时候,我们经常需要上网去查阅些资料或者网上聊天,看视频,玩游戏等都需要流畅的网络支持。不过最近有网友说自己的电脑网速慢怎么解决,不知道什么原因造成。小编就教下大家电脑上网速度慢的原因和解决方法。

方法一:系统限制导致网速慢

1、“win+r”打开运行窗口,输入“gpedit.msc”回车确定。

2、依次点击打开“计算机配置”,“管理模板”,“网络”。

3、点击“Qos数据包计划程序”。

4、点击打开“限制可保留宽带”。

5、点击“已启用”,把“宽带限制”调为0,点击“应用”。

方法二:其他原因导致的网速变慢

1、自家的宽带带宽过小

一般使用电信的网络速度要高于其他网络商,但还有一个很重要的问题,网络的带宽问题,一般家庭宽带都用2M的,2M的适中,网速应该不回慢,除非电脑配置差,如果你拉的网宽带不到2M或者多人共用一个宽带线,并且带宽小,或者有人在P2P软件下载东西,那么上网的速度肯定会很慢。,尤其是一个网线几个人用,有人用P2P下载东西会严重影响别人的网速,甚至连QQ都可能会掉线。处理办法很简单,请换个时间段再上或者换个目标网站。

2、电脑中病毒,引起病毒大量占用宽带

引起这种情况最常见的就是以前上网速度很快,由于进入了一些不良网站或下载了一些带有病毒的软件,使电脑中病毒,严重影响了上网的速度。

还一种情况是如果你家用的是无线网很可能被别人蹭网了,解决办法:下载杀毒软件先看看电脑有没有病毒,如果有很难清除,可以考虑重装电脑系统或系统还原,如果是无限网的用户看看自己的无限网有没加密码等。

3、电脑配置过低

一般的老电脑由于电脑硬件配置低,导致运行程序很慢的话,网速快也没什么用,因为电脑本身响应慢,拉了后腿。

以上便是一些常见的电脑上网速度慢的解决方法,希望能帮到大家。