《计算机网络》期末复习笔记 第五章 运输层

第五章 运输层

5.1 运输层协议概述

1.进程之间的通信

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

2.应用进程之间的通信过程

  • 两个主机进行通信,实际上就是两个主机中的应用进程互相通信
  • 应用进程之间的通信又称为端到端的通信
  • 运输层的一个很重要的功能就是复用分用
  • 运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。

3.运输层的主要功能:

  • 运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。
  • 运输层还要对收到的报文进行差错检测。
  • 运输层需要有两种不同的运输协议,即面向连接的 TCP(双工的可靠信道) 和无连接的 UDP(不可靠信道)。
4.运输层的两个主要协议

用户数据报协议 UDP (User Datagram Protocol)
传输控制协议 TCP (Transmission Control Protocol)

UDP 的主要特点:

  • 用户数据报协议UDP (User Datagram Protocol)UDP报文或用户数据报
  • UDP 是无连接的,即发送数据之前不需要建立连接。
  • UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
  • UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求。
  • UDP 支持一对一、一对多、多对一和多对多的交互通信。
  • UDP 的首部开销小,只有 8 个字节。

TCP 最主要的特点 :

  • 传输控制协议 TCP (Transmission Control Protocol) TCP 报文段
  • TCP 是面向连接的运输层协议。
  • 每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一)。
  • TCP 提供可靠交付的服务。
  • TCP 提供全双工通信。
  • 面向字节流。

5.运输层的端口

  • 目的:把特定主机上运行的进程作为互联网上通信的终点不可行,因为进程的创建和撤销是动态的,因此使用协议端口号作为识别的终点,而不需要知道具体进程
  • 协议端口号(端口):虽然通信的终点是应用进程,但只要把报文交到目的主机的某个目的端口,剩下的工作就由TCP或UDP来完成

两种端口区别:

在协议栈层间的抽象的协议端口,是软件端口。
路由器或交换机上的端口是硬件端口。
硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。

端口的表示:用16位的端口号来标志一个端口;端口号只具有本地意义,只标志本计算机应用层中各进程和运输层交互时的层间接口

三类端口

  • 熟知(默认)端口,数值为 0~1023
  • 登记端口号,数值为1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复。
  • 客户端口号短暂端口号,数值为49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。(动态性

5.2 用户数据报协议 UDP

1.UDP 的首部格式
在这里插入图片描述

伪首部:只在计算校验和时使用,不参与数据传输
源端口:源端口号;在需要对方回信时选用;不需要时用全0
目的端口:目的端口号;在终点交付报文时必须使用
长度:UDP用户数据报的长度,最小值是8(仅有首部)
校验和:检测UDP用户数据报在传输过程中是否有错。有就丢弃

在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。
在这里插入图片描述

5.3 传输控制协议 TCP

1.注意点

  • TCP 连接,是一条虚连接(逻辑连接)而不是一条真正的物理连接。
  • TCP 对应用进程一次把多长的报文发送到TCP 的缓存中,是不关心的。
  • TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段,应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
  • TCP 可把太长的数据块划分短一些再传送。TCP 也可等待积累有足够多的字节后,再构成报文段发送出去。

2.连接方式

  • TCP,把连接作为最基本的抽象。
  • 每一条 TCP 连接,有两个端点
  • TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点,叫做套接字(socket)或插口
  • 端口号拼接到(contatenated with) IP 地址,即构成了套接字
3.套接字 (socket)
套接字 socket = (IP地址: 端口号) 

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

TCP 连接 ::= {socket1, socket2} 
         = {(IP1: port1), (IP2: port2)}

5.4 可靠传输的工作原理

1.停止等待协议

停止等待:每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组

在这里插入图片描述
要点:

  • 在发送完一个分组后,必须暂时保留已发送的分组的副本
  • 分组和确认分组都必须进行编号
  • 超时计时器的重传时间,应当比数据在分组传输的平均往返时间更长一些。
    在这里插入图片描述
    优点:简单
    缺点:信道利用率太低(解决方法:流水线)
    信道的利用率: U = T D T D + R T T + T A U=\frac{T_D}{T_D+RTT+T_A} U=TD+RTT+TATD

2.连续 ARQ 协议
在这里插入图片描述
接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了
优点:容易实现,即使确认丢失也不必重传。
缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。

5.5 TCP报文的首部格式

在这里插入图片描述

  1. 源端口和目的端口字段——各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
  2. 序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
  3. 确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
  4. 数据偏移(即首部长度)——占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。
  5. 保留字段——占 6 位,保留为今后使用,但目前应置为 0。
  6. 紧急 URG —— 当 URG= 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
  7. 确认 ACK —— 只有当 ACK=1 时确认号字段才有效。当 ACK=0 时,确认号无效。
  8. 推送 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
  9. 复位 RST (ReSeT) ——(重建位/重置位)当 RST= 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
  10. 同步 SYN —— 同步 SYN = 1 表示这是一个连接请求或连接接受报文。
  11. 终止 FIN (FINis) —— 用来释放一个连接。FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
  12. 窗口字段 —— 占 2 字节,用来让对方设置发送窗口的依据,单位为字节。
  13. 紧急指针字段 —— 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
  14. 选项字段 —— 长度可变。即最大报文段长度 MSS。
  15. 填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。

5.6 TCP 可靠传输的实现

1.以字节为单位的滑动窗口
根据 B 给出的窗口值,A 构造出自己的发送窗口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发送缓存用来暂时存放:

  1. 发送应用程序传送给发送方 TCP 准备发送的数据;
  2. TCP 已发送出但尚未收到确认的数据。

接收缓存用来暂时存放:

  1. 按序到达的、但尚未被接收应用程序读取的数据;
  2. 不按序到达的数据。

2.超时重传时间的选择

加权平均往返时间

TCP 保留了 RTT (Round-Trip Time): 的一个加权平均往返时间 RTTS(这又称为平滑的往返时间)。
第一次测量到 R T T RTT RTT 样本时, R T T S RTT_S RTTS 值就取为所测量到的 R T T RTT RTT 样本值。以后每测量到一个新的 R T T RTT RTT 样本,就按下式重新计算一次 R T T S RTT_S RTTS :

  • 新 的 R T T S = ( 1 − α ) × ( 旧 的 R T T S ) + α × ( 新 的 R T T 样 本 ) 新的RTT_S=(1- \alpha )\times (旧的RTT_S)+\alpha \times (新的RTT样本) RTTS=(1α)×(RTTS)+α×(RTT)
    (RFC 2988 推荐的 α \alpha α值为 1/8)

超时重传时间 R T O RTO RTO
R T O = R T T S + 4 × R T T D RTO = RTT_S + 4 \times RTT_D RTO=RTTS+4×RTTD
R T T D RTT_D RTTD R T T RTT RTT 的偏差的加权平均值)

第一次测量时, R T T D RTT_D RTTD 值取为测量到的 R T T RTT RTT 样本值的一半。在以后的测量中,则使用下式计算加权平均的 R T T D RTT_D RTTD

  • 新 的 R T T D = ( 1 − β ) × ( 旧 的 R T T D ) + β × ∣ R T T S − 新 的 R T T 样 本 ∣ 新的RTT_D=(1- \beta ) \times (旧的RTT_D)+\beta \times \vert RTT_S-新的RTT样本\vert RTTD=(1β)×(RTTD)+β×RTTSRTT
    β \beta β是一个小于1的系数,推荐值是1/4)

Karn算法:
在计算加权平均RTTs时,只要报文段重传了,就不采用其往返时间样本
报文段每重传一次,就把 RTO 增大一些:

  • 新 的 R T O = γ × ( 旧 的 R T O ) 新的 RTO=\gamma \times(旧的 RTO) RTO=γ×(RTO)

系数 γ \gamma γ的典型值是 2 。

5.7 TCP的流量控制

1.利用滑动窗口实现流量控制
流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。
2.必须考虑传输效率
可以用不同的机制来控制 TCP 报文段的发送时机:

  • 第一种机制是 TCP 维持一个变量,它等于最大报文段长度 MSS。只要缓存中存放的数据达到 MSS 字节时,就组装成一个 TCP 报文段发送出去。
  • 第二种机制是由发送方的应用进程指明要求发送报文段,即 TCP 支持的推送(push)操作。
  • 第三种机制是发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过 MSS)发送出去。

5.8 TCP的拥塞控制

1.拥塞控制的一般原理

产生拥塞:在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏
出现资源拥塞的条件: 对资源需求的总和 > 可用资源

拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
流量控制往往指在给定的发送端和接收端之间的点对点通信量的控制。
流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

开环控制和闭环控制

  • 开环控制方法就是在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。

  • 闭环控制是基于反馈环路的概念。属于闭环控制的有以下几种措施:

    监测网络系统以便检测到拥塞在何时、何处发生。
    将拥塞发生的信息传送到可采取行动的地方。
    调整网络系统的运行以解决出现的问题。
    

2.几种拥塞控制方法
(一)慢开始和拥塞避免

拥塞窗口:大小取决于网络的拥塞程度,并且动态的变化,发送方让自己的发送窗口等于拥塞窗口

判断拥塞的依据:出现了超时
发送方控制拥塞窗口的原则:
只要没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多分组发送出去,提高网络利用率;只要发生拥塞,就把拥塞窗口减小一些,以减少注入到网络种的分组数,以缓解网络出现的拥塞
拥塞的判断:重传定时器超时、收到三个相同的ACK

慢开始算法:

算法思路:由小到大逐渐增大拥塞窗口数值
初始拥塞窗口:初始拥塞窗口设置为1至2个发送方的最大报文段的数值
拥塞窗口的控制:在每收到一个对新报文段的确认后,可以把拥塞窗口增加多一个SMSS(发送方最大报文段)的数值,即拥塞窗口cwnd每次的增加量 = min(N,SMSS),N是原先未被确认、现在被刚收到的确认报文确认的字节数

在这里插入图片描述

使用慢开始算法后,每经过一个传输轮次,拥塞窗口 cwnd 就加倍
“传输轮次”更加强调:把拥塞窗口 cwnd 所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。

慢开始门限 ssthresh 的用法如下:

  • 当 cwnd < ssthresh 时,使用慢开始算法。
  • 当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
  • 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。

拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,使拥塞窗口 cwnd 按线性规律缓慢增长。

网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口值的一半(“乘法减小”,但不能小于2)。然后把拥塞窗口 cwnd 重新设置为 1,执行慢开始算法。

目的:要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。

(二)快重传和快恢复

快重传:

特点:可以让发送方尽早知道发生了个别报文段的丢失
算法思路:要求接收方不等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
算法启动:发送方只要一连收到3个重复确认,就立即进行重传(即快重传)

在这里插入图片描述
在这里插入图片描述
发送方的发送窗口的上限值应当取为接收方窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定:
发送窗口的上限值 = Min [rwnd, cwnd]

5.9 TCP 的运输连接管理

运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。

建立模式:C/S方式
TCP 连接的建立都是采用客户服务器方式。
主动发起连接建立的应用进程叫做客户(client)。
被动等待连接建立的应用进程叫做服务器(server)。

1.TCP 的连接建立(三次握手)

在这里插入图片描述
流程:

  • 最初两端TCP进程都处于关闭状态,开始时B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求,然后进入收听状态;
  • A的TCP客户进程也先创建TCB,然后打算建立TCP连接时,向B发送连接请求报文,这是首部中同步位SYN=1,同时选择一个初始序号seq=x,TCP规定,SYN报文段不能携带数据,但要消耗一个序号,这时TCP客户进程进入同步已发送状态;
  • B收到连接请求报文后,若同意建立连接,则向A发送确认。在确认报文中将SYN位和ACK位都置1,确认号时ACK=x+1,同时也为自己选择一个初始序号seq=y。这个报文段也不能携带数据,但同样消耗一个序号,这时TCP服务器进程进入同步收到状态
  • TCP客户进程收到B的确认后,还要向B给出确认。确认报文的ACK置1,确认号ack=y+1,而自己的序号seq=x+1。TCP规定,ACK报文段可以携带数据,但如果不携带数据则不消耗序号,这种情况,下一个数据报文段序号仍是seq=x+1。这时TCP连接已经建立,A进入已建立连接状态
  • B收到A的确认后,也进入已建立连接状态
2.TCP 的连接释放(四次再见)

在这里插入图片描述
流程:

  • 起始时A和B都处于已建立连接状态

  • A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接,A把连接释放报文段首部的终止控制位FIN置1,序号seq=u,它等于前面已传送过的数据的最后一个字节的序号+1。这时A进入终止等待状态。FIN报文段即使不携带数据,也消耗一个序号

  • B收到连接释放报文后发出确认,确认号是ack=u+1,而这个报文自己的序号是v,等于B前面已传送过的数据的最后一个字节的序号+1。然后B进入关闭等待状态,TCP服务器进程通知高层应用进程,因而从A到B这个方向的连接就释放了,这时的TCP连接处于半关闭状态,即A已经没有数据要发送了,但B若发送数据,A仍要接受

  • A收到来自B的确认后,进入终止等待2状态,等待B发送的连接释放报文段

  • 若B已经没有要向A发送的数据,应用进程就通知TCP释放连接,此时B发出的连接释放报文段FIN=1,假定现在B的序号为w,B还必须重复上次已发送过的确认号ack=u+1,此时B进入最后确认状态,等待A的确认

  • A在收到B的链接释放报文后,必须对此发出确认,在确认报文段中把ACK置1,确认号ack=w+1,而自己的序号时seq=u+1,然后进入时间等待状态。此时TCP连接还没有释放,必须经过时间等待计时器设置的时间2MSL后,A才进入关闭状态。

  • A等待2MSL时间的原因:

    保证A发送的最后一个ACK报文段能够到达B
    防止已失效的连接请求报文段出现在本连接中
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值