计算机网络——传输层

一、传输层提供的服务

1.传输层的功能

(1)提高服务质量(2)多路复用(3)分段与重新组装。

2.传输层寻址与端口

硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与传输实体进行层间交互的一种地址。

无连接服务与面向连接服务

面向连接服务就是在数据交换之前,必须先建立连接,当数据交换结束后,则应该终止这个连接。在无连接服务的情况下,两个实体之间的通信不需要先建立好一个连接,因此其下层的有关资源不需要事先进行预定保留,这些资源是在数据传输时动态地进行分配的。

二、UDP

U D P是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个 U D P数据报,并组装成一份待发送的 I P数据报。

1.UDP 数据报

U D P数据报封装成一份 I P数据报的格式
这里写图片描述
U D P不提供可靠性:它把应用程序传给 I P层的数据发送出去,但是并不保证它们能到达目的地、按照顺序到达或是只接到一份数据报。

U D P首部的各字段如图
这里写图片描述

2.UDP 校验

U D P检验和覆盖U D P首部和U D P数据,U D P检验和的基本计算方法与I P首部检验和计算方法相类似(16 bit字的二进制反码和),

3.IP分片

物理网络层一般要限制每次发送数据帧的最大长度。任何时候I P层接收到一份要发送的 I P数据报时,它要判断向本地哪个接口发送数据(选路),并查
询该接口获得其 M T U。I P把M T U与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。

4.广播和多播

广播和多播仅应用于 U D P,

三、TCP

TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用 T C P的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个 T C P连接。

TCP面向字节流的含义:应用程序和TCP的交互是一次一个数据块,但TCO仅仅把数据看成是一连串无结构的字节流,并不知道其含义,TCP根据对方的窗口值和当前的拥塞程度囧丁一个保温段应该包含多少个字节。

1.TCP 段

T C P数据被封装在一个 I P数据报中
这里写图片描述
T C P首部的数据格式
这里写图片描述
在T C P首部中有 6个标志比特。它们中的多个可同时被设置为 1。
U R G 紧急指针( u rgent pointer)有效(见 2 0 . 8节)。
A C K 确认序号有效。
P S H 接收方应该尽快将这个报文段交给应用层。
R S T 重建连接。
S Y N 同步序号用来发起一个连接。
F I N 发端完成发送任务。

2.TCP 连接管理

这里写图片描述

3.TCP 可靠传输

可靠传输

TCP采用“带重传的肯定确认”技术来实现传输的可靠性。简单的“带重传的肯定确认”是指与发送方通信的接收者,每接收一次数据,就送回一个确认报文,发送者对每个发出去的报文都留一份记录,等到收到确认之后再发出下一报文分组。发送者发出一个报文分组时,启动一个计时器,若计时器计数完毕,确认还未到达,则发送者重新送该报文分组。

简单的确认重传严重浪费带宽,TCP还采用一种称之为“滑动窗口”的流量控制机制来提高网络的吞吐量,窗口的范围决定了发送方发送的但未被接收方确认的数据报的数量。每当接收方正确收到一则报文时,窗口便向前滑动,这种机制使网络中未被确认的数据报数量增加,提高了网络的吞吐量。

TCP通信建立在面向连接的基础上,实现了一种“虚电路”的概念。双方通信之前,先建立一条连接,然后双方就可以在其上发送数据流。这种数据交换方式能提高效率,但事先建立连接和事后拆除连接需要开销。TCP连接的建立采用三次握手的过程,整个过程由发送方请求连接、接收方再发送一则关于确认的确认三个过程组成

4.TCP 流量控制与拥塞控制

1 TCP 的滑动窗口机制(流量控制)

为了提高报文段的传输速率,TCP采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节。发送窗口在连接建立时由双方商定,但在通信过程中,接收端可根据自己的接收缓存的大小,随时动态地调整发送端的发送窗口的上限值。这就是接收端窗口rwnd(receiver window),这个值被放在接收端发送的TCP报文段首部的窗口字段中。同时,发送端根据其对当前网络拥塞程度的估计而确定的窗口值,叫做拥塞窗口cwnd(congestion window)。其大小与网络的带宽和时延密切相关。发送端设置的当前能够发送数据量的大小叫做发送窗口,发送窗口的上限值由下面公式确定:
发送窗口的上限值=Min[cwnd,rwnd]
Tips:收端根据其接收缓存确定,发送端确定cwnd比较复杂
发送窗口的左边沿对应已发送数据中被确认的最高序号+1,其右边沿对应左边沿的序号加上发送窗口的大小。在数据传输的过程中,这个发送窗口不时地向右移动构成了滑动窗口。窗口的两个边沿的相对运动增加或减少了窗口的大小。我们使用三个术语来描述窗口左右边沿的运动:
(1)当窗口左边沿向右边沿靠近时,我们称之为窗口合拢。这种现象发生在数据被发送和确认时。如果窗口的左边沿与右边沿重合,则称其为一个零窗口,此时发送方不能发送任何数据。
(2)当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。
(3)当右边沿向左移动时,我们称之为窗口收缩。这种情况一般不会发生,但是TCP必须能够在某一端产生这种情况时进行处理。

2 TCP 的慢启动和拥塞避免

慢启动
针对TCP 拥塞控制,重点掌握慢启动,具体步骤如下:
(1)TCP 连接初始化。设置拥塞窗口初值,不能大于2 个报文段,一般Cwnd=1MSS;设置慢启动门限初值(Cwnd 为拥塞窗口)。
(2)TCP 开始发送过程,发送窗口swnd 按式swnd=min(Cwnd,rwnd)计算,一般,通告窗口rwnd足够大,实际上,swnd=Cwnd。
(3)每次传输都调节一次拥塞窗口,从而调节了发送窗口。Cwnd 从初值1 开始,每收到一个对新报文段的确认ACK,Cwnd=Cwnd+1。这样,第1 次传输完,收到1 个ACK,Cwnd 增加到2;第2次传输完,收到2 个ACK,Cwnd 增加到4;…。因此,Cwnd 按指数规律增长,即每传输1 次,Cwnd 加倍。直到Cwnd>ssthresh(其中ssthresh 为慢启动门限),进入拥塞避免。
(4)当在某时刻发生了拥塞,则置ssthresh=max(swnd/2,2),即将ssthresh 降到拥塞发生时swnd 的一半,但不能小于2,并令Cwnd=1,开始慢启动过程。
说明:“慢启动”指每出现一次超时,拥塞窗口降低到1,使报文慢慢注入网络;
“加速递减”指每出现一次超时,就将门限窗口值减半;
“拥塞避免”指超过门限窗口后指数增长率降为线性增长率。
慢的含义:不是指拥塞窗口增长速率慢,而是使发送端在开始发送时向网络注入的分组数大大减少。
拥塞窗口的单位是:报文段的个数,而不是字节数。

拥塞避免
拥塞避免算法是使发送端的拥塞窗口cwnd每经过一个RTT就增加一个MSS的大小(而不管在时间RTT内收到了几个ACK)。

利用慢启动和拥塞避免实现流量控制
拥塞窗口增加的方式分别是指数方式和线性方式。慢启动算法使发送端在发送数据的开始阶段逐步增加注入网络的分组数,但随着拥塞窗口按指数方式快速增长,势必会引起网络拥塞。需要在网络拥塞之前,将拥塞窗口的增长速率降下来,也就是将慢启动算法切换到拥塞避免算法。因此,需要设置一个慢启动门限变量ssthresh,利用ssthresh得到慢启动和拥塞避免的综合算法:

当cwnd<ssthresh时,使用慢启动算法;
当cwnd>ssthresh时,使用拥塞避免算法;
当cwnd=ssthresh时,既可以使用慢启动算法,也可以使用拥塞避免算法。
3、超时重传时间的选择

重传机制是TCP 中最重要和最复杂的问题之一。TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。
(1)往返时延的方差很大,由于 TCP 的下层是一个互联网环境,IP 数据报所选择的路由变化很大。因而运输层的往返时间的方差也很大。
(2)加权平均往返时间
TCP 保留了RTT 的一个加权平均往返时间 RTTS(这又称为平滑的往返时间)。
第一次测量到 RTT 样本时,RTTS 值就取为所测量到的 RTT 样本值。以后每测量到一个新的 RTT
样本,就按下式重新计算一次 RTTS:
新的RTTS=(1-α) × (旧的 RTTS) + α × (新的RTT 样本)
式中,0 <= α < 1。若 α 很接近于零,表示 RTT 值更新较慢。若选择 α 接近于 1,则表示 RTT 值
更新较快。RFC 2988 推荐的 α 值为 1/8,即 0.125。
(3)超时重传时间 RTO
RTO 应略大于上面得出的加权平均往返时间 RTTS。
RTO 应略大于上面得出的加权平均往返时间 RTTS。
RFC 2988 建议使用下式计算 RTO: RTO  RTTS + 4  RTTD
RTTD 是RTT 的偏差的加权平均值。RFC2988 建议这样计算 RTTD。第一次测量时,RTTD 值取为测
量到的 RTT 样本值的一半。在以后的测量中,则使用下式计算加权平均的 RTTD:
新的 RTTD = (1  )  (旧的RTTD) +RTTS  新的RTT 样本
 是个小于 1 的系数,其推荐值是 1/4,即 0.25。
(3)Karn 算法
在计算平均往返时间 RTT 时,只要报文段重传了,就不采用其往返时间样本。这样得出的加权平均
平均往返时间 RTTS 和超时重传时间 RTO 就较准确。
(4)修正的 Karn 算法
报文段每重传一次,就把 RTO 增大一些:新的 RTO    (旧的 RTO) 系数  的典型值是2。
当不再发生报文段的重传时,才根据报文段的往返时延更新平均往返时延 RTT 和超时重传时间RTO
的数值。实践证明,这种策略较为合理。

3 快重传和快恢复。

快重传
快重传算法是指当发送端连续收到三个重复的ACK报文时,即可认为某一报文段丢失并且网络仍能够进行正常报文传输。因此,不必等待那个报文的定时器超时,而直接重传那个认为是丢失的报文段。即在某些情况下更早地重传被估计为丢失的报文段。

快恢复
快恢复算法是慢启动算法的一个补充,它与快重传算法配合使用。具体步骤如下:
(1) 当发送端收到连续n(n≥3)个重复的ACK,设置慢启动门限值:
ssthresh≤max(FlightSize/2,2×MSS)
同时,将cwnd设置为ssthress+n×MSS。
(2) 如果发送窗口值还容许发送报文段,就按拥塞避免算法继续发送报文段。
(3) 若收到了确认新的报文段的ACK,就将cwnd缩小到ssthress。
在采用快恢复算法时,慢启动算法只在TCP连接建立时才使用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值