计网笔记-5-传输层

文章目录

  • 1.UDP、TCP 和 SCTP
    • 1.1进程到进程的传递
    • 1.2.UDP
    • 1.3.TCP
      • TCP特点
      • TCP头部格式
      • TCP流量控制
      • TCP差错控制
      • TCP重传机制
    • 1.4.SCTP
  • 2.拥塞控制和服务质量
    • 2.1数据通信量
    • 2.2拥塞
      • 拥塞控制
    • 2.3服务质量

1.UDP、TCP 和 SCTP

1.1进程到进程的传递

数据链路层负责链路上的两个相邻节点之间的帧传递,这称为节点到节点的传递;
网络层负责两台主机之间的数据报(分组)传递,这称为主机到主机的传递;
因特网中的通信实际发生在两个进程(应用程序)之间的;传输层负责进程到进程的传递,即进程之间的分组传递以及部分消息传递。

端口号是0-65535间的16位整数,客户程序用端口号定义它自己,这个端口号由运行在客户主机上的传输层软件随机选择,称为临时端口号;

因特网号码分配管理局(IANA)把端口编号划分为三种范围:

  • 熟知端口:范围0-1023,由IANA分配和控制,这些是熟知
    端口;
  • 注册端口:范围是1024-49151,IANA不分配或也不控制,
    可在IANA 注册以防重复;
  • 动态端口:范围是49152-65535,既不受控制也不需要注册,
    可以由任何进程使用,是临时端口。

一个IP地址和一个端口号结合起来称为套接字地址,它唯一定义了客户机/服务器进程。

传输层通过实现流量控制和差错控制来获得可靠性,这意味着一种较慢和更复杂的服务;

数据链路层可靠并不代表传输层不需要流量控制和差错控制,因为在数据链路层的可靠性存在于两个节点之间,而不是端到端的可靠性;并且网络层是不可靠的,必须在传输层实现可靠性;

1.2.UDP

UDP是无连接不可靠的传输层协议;

要了解一些熟知端口号。unix中熟知端口存储在/etc/services文件中。

grep ftp /etc/services
#ftp	21/tcp
#ftp	21/udp

UDP长度 = IP长度 - IP头部长度

UDP没有流量控制,除校验和外没有差错控制机制,如果需要流量和差错控制则只能由进程提供;UDP报文封装在IP数据报中传输.

UDP的操作-排队(客户端)

  1. 在客户机端,当进程启动时,它从操作系统请求一个端口号;有些实现创建一个入队列和一个出队列与每一个进程相关联,而有些实现只创建与每一个进程相关的入队列;
  2. 多数情况下,客户打开的队列由暂时端口号来标识;
  3. 客户进程使用源端口将报文发送到出队列,UDP逐个将报文取出,加上头部递交给IP,如果发生溢出,操作系统就要求客户进程等待;
  4. 报文到达客户端时,UDP检查以确认对应于目的端口号是否创建了入队列;如果已创建,UDP就将收到的用户数据报放在队列末尾,否则UDP就丢弃该用户数据报,并请求ICMP协议向服务器发送揣口不可达报义;
  5. 所有发送给一个特定客户程序的入报文,不管是来自哪个服务器,都被放在同一个队列中;如果入队列发生溢出,UDP就丢弃此用户数据报,并请求向服务器发送端口不可达报文。

UDP的操作-排队(服务器端)

  1. 在服务器端,服务器在它开始运行时就用它的熟知端口请求入队列和出队列,只要服务器运行,队列就一直是打开的;
  2. 当报文到达服务器进程时,UDP检查以确认对应于目的端口号是否创建了入队列;如果已创建,UDP就将接收到的用户数据报放在队列末尾,否则UDP就丢弃该用户数据报,并请求ICMP协议向客户端发送一个端口不可达报文;
  3. 一个特定服务器程序的所有入报文,不管是来自哪个客户机,都放入同一队列;如果入队列发生溢出,UDP就丢弃这个用户数据报,并请求向客户发送端口不可达报文;
  4. 当服务器想要回答客户时,它就使用在请求报文中指明的源端口号将报文发送到出队列;UDP逐个将报文取出,加上头部递交给IP;如果出队列发生溢出,操作系统就要求服务器进程在继续发送报文之前要等待。

UDP适用于这样的进程,它需要简单的请求-响应通信,而较少考虑流量控制和差错控制;对于需要传送成块数据的进程(如FTP)则通常不使用它;
UDP适用于具有内部流量控制和差错控制机制的进程,例如简单文件传输协议TFTP;
对多播来说,UDP是一个合适的传输协议;多播能力已被嵌入在UDP软件中,但没有嵌入在TCP软件中;
UDP可用于管理进程,如SNMP;
UDP可用于某些路由选择更新协议,如RIP。

1.3.TCP

TCP是一个面向连接的、可靠的传输协议,它在两个TCP端之间建立一个虚拟连接来发送数据,,在传输层使用流量控制和差错控制机制,为IP服务增加了面向连接和可靠性的特性;

TCP提供的服务:

  • 进程到进程的通信;
  • 流传递服务;
  • 全双工通信;
  • 面向连接的服务;
  • 可靠的服务(使用确认机制)

了解熟知端口

TCP特点

  • 序号系统:虽然TCP软件能记录发送或接收的段,但在段头部没有段序号字段,TCP在段的头部采用称为序号(sequence number)和确认号(ack number)的两个字段,这两个字段指的是字节序号而不是段序号;
  • 流量控制:数据的接收方控制发送方发送数据的数量,防止接收方数据溢出,序号系统允许使用面向字节的流量控制;
  • 差错控制:虽然差错控制以段作为差错检测(丢失或损坏段)的数据单元,但它是面向字节的差错控制;
  • 拥塞控制:TCP考虑网络中的拥塞,发送方发送的数据量不仅由接收方控制(流量控制),而且还要由网络中的拥塞程度决定。

在每个连接中传送的字节都由TCP编号,序号开始于一个随机产生的数。一个段的序号字段的值定义为该段包含的第一个字节的序号。

当一个段携带数据和控制信息(捎带)时,它使用一个序号;
如果一个段没有携带用户数据,那么它逻辑上不定义序号,虽然字段存在,但值是无效的;
然而,有些段当仅携带控制信息时也需要有一个序号用于接收方的确认,这些段用做连接建立、连接终止或连接废弃;
这些段中的每一个好像携带一个字节那样使用一个序号,但都没有实际的数据;如果随机产生的序号是x,则第一个数据字节的编号是x+1,字节x被认为是一个控制段打开一个连接的一个伪字节。

关于确认号:

  • TCP中的通信是全双工的,当建立一个连接时,双方同时都能发送和接收数据;
  • 每一方为字节编号,每一方向的序号表明了该段所携带的第一个字节的序号,每方也使用确认号来确认它已收到的字节,确认号定义了该方预期接收的下一个字节的序号;
  • 确认号是累积的,这意味接收方记下它已安全而且正确地接收到的最后一个字节的序号,然后将它加1,并通告这个结果作为确认号:
  • 术语“累积”指的是:如果一方使用5643作为确认号,则表示它已经接收了所有从开始到序号为5642的字节;但要注意,这并不是指接收方已经接收了5642个字节,因为第一个字节的编号通常并不是从0开始的。

TCP头部格式

计网笔记-5-传输层_第1张图片

  • 头部:固定20个字节+选项,最多60个字节;
  • 源端口地址:16位,指发送该段的应用程序的端口号;
  • 目的端口地址:16位,指接收该段的应用程序的端口号;
  • 序列号:32位,分配给段中数据的第一个字节;对要发送的每一个字节都进行编号,序列号告诉目的端,在这个序列中哪一个字节是第一个字节;在连接建立时,每一方都使用随机数生成器产生一个初始序列号ISN,通常每一个方向的ISN都不同;
  • 确认号:32位,定义了段的接收方期望从对方接收的字节号,确认和数据可捎带一起发送;
  • 头部长度:4位,以4字节为单位进行计数;
  • 保留:6位,保留为将来使用;
  • 控制:定义了6种不同的控制位或标记,同一时间可设置一位或多位,这些控制位用在TCP的流量控制、连接建立和终止、连接失败和数据传送方式等方面
  • 窗口大小:定义对方必须维持的窗口的大小(以字节为单位);16位,意味着窗口最大长度是65535字节,这个值通常称为接收窗口(rwnd),由接收方确定,发送方必须服从接收端的支配;
  • 校验和:16位,计算时需要伪头部(协议字段的值是6),对于TCP,校验和是强制的;
  • 紧急指示符:16位,只有当紧急标志置位时才有效,说明这个段包含了紧急数据;定义一个数,将此数加到序列号上就得出此段数据部分中最后一个紧急字节;
  • 选项:可以有多达40字节的可选信息;TCP最常见的选项为最大报文段长度MSS,告诉对方TCP:我的缓存所能接收报文段的数据部分的最大长度是MSS个字节

TCP流量控制

TCP使用滑动窗口处理流量控制,它使用的滑动窗口协议界于回退N帧与选择重发之间;
TCP不使用NAK,像回退N帧协议;TCP接收方保存失序的段直到丢失的段到达,又像选择重发;

TCP滑动窗口与数据链路滑动窗口有两大点不同:
第一,TCP的滑动窗口是面向字节的,而数据链路层滑动窗口是面向帧的;
第二,TCP的滑动窗口是可变大小,而数据链路层的滑动窗口是固定大小

TCP滑动窗口机制又被称为信用量机制或信贷滑窗协议(数据链路层的滑动窗口称为固定的滑动窗口协议)

TCP差错控制

TCP使用差错控制提供可靠性,差错控制包括:检测受到损坏的段、丢失的段、失序的段和重复的段,还包括检测出差错后纠正差错的机制;
TCP中的差错检测和纠正通过三种手段完成:校验和、确认和超时;
校验和用来检查受到损坏的段;
TCP使用确认方法来证实收到了数据段,不携带数据但占用序列号的一些控制段也要确认,但ACK段不需要确认;
差错控制机制的核心是段的重传,当段损坏、丢失或延迟时就重传这个段(ACK段不重传,不设置重传计时器);
在当前实现中有两种情况要重传段:重传计时器到时或当发送方收到三个重复的ACK时

TCP重传机制

RTO(retransmission time-out)计时器到时的话,重发一个最早的未完成的(outstanding,已发送但还未被确认)段;RTO的值是动态的,根据段的往返时间RTT更新(RTT是一个段到达目的端并接收到一个确认所需要的时间)。

如果RTT的值不是很大,关于段重发的先前的规则是可用的;
但有时某一段丢失了,而接收端收到了许多失序的段,它们不可能都被存储(有限的存储器大小);
为了缓解这种情况,当今大多数实现遵循三次重复ACK规则,立即重发缺少的段,这一特点称为快速重传(fast retransmission)。

1.4.SCTP

SCTP兼有UDP和TCP的特性,是一个可靠的面向报文的协议,它保存报文的边界,同时检测丢失的数据、重复的数据和失序的数据;它还有拥塞控制和流量控制机制。

2.拥塞控制和服务质量

2.1数据通信量

通信量描述符:平均数据速率、峰值数据速率、最大突发长度;

数据流可用以下通信量特征值之一来表述:恒定比特率(容易处理)、可变比特率(较难处理,一般不需要重新整形)或突发性(最难处理,通常需要重新整形)

2.2拥塞

如果网络中的载荷(load),即发送到网络中的分组数量超过了网络的容量(即网络中能处理的分组数量),那么在网络中就可能发生拥塞(congestion);

分组的到达速率高于分组的处理速率,或者果分组的转发速率低于分组的处理速率,那么输入队列会变得越来越长。

拥塞控制

拥塞控制包括了两个测试网络性能的要素:延迟和吞吐量;

将网络的吞吐量(throughput)定义为单位时间内通过网络的分组数量(载荷小于容量时,随载荷成比例增长;载荷超过容量时,吞吐量将降低)。

拥塞控制分为两大类:开环拥塞控制(open-loop,阻止或预防,不让拥塞发生)和闭环拥塞控制(closed-loop,缓解,发生后减轻)

开环策略有:

  • retransmission policy
  • window policy
  • acknowledgement policy
  • discarding policy,丢弃策略
  • admission policy,许可策略,虚电路网络中,允许数据流进入网络之前,与数据流通路相连的交换机首先检查其资源需求,如果网络有拥塞或可能出现拥塞,路由器将拒绝建立虚电路。

闭环策略有:

  • back pressure,背压,一个拥塞点停止接收来自直接上行节点或一些近邻节点的数据,这会引起上行节点或一些近邻节点发生拥塞,它们依次拒
    绝它们的上行节点或一些近邻节点的数据,依次类推;背压是点到点拥塞控制,它从一点开始,然后传播,数据流反方向到达源端;背压技术仅用于虚电路网络,在虚电路网络中,每个节点知道数据的流是来自它的上行节点
  • choke packet,抑制分组,警告从已经发生拥塞的路由器直接传到源端,中间经过的节点没被警告;例如ICMP源站抑制报文。
  • implicit signaling,隐含信令,与源端之间没有通信,源端从其他征兆中察觉某处有拥塞;
  • explicit signaling,拥塞节点显式通知源端或目的端发生了拥塞,与抑制分组方法不同;在抑制分组方法中,有一个单独的分组用于此目的,而在显式信令方法中,信号包含在携带数据的分组中,分为后向和前向指令

2.3服务质量

可以非形式地将服务质量(QoS)定义为数据流所追求的某种目标。

数据流具有四种特性:

  • 可靠性,reliability
  • 延迟,delay
  • 抖动,jitter
  • 带宽;,bandwidth

改进服务质量的四种常用方法

  • 调度
  • 通信量整形
  • 许可控制
  • 资源预留

常用调度技术:

  • FIFO队列
  • 优先权队列
  • 加权公平队列

通信量整形是一种控制发送到网络中的通信量和速率的机制,有两种技术:漏桶和令牌桶。

练习:在一个6Mbps的网络上,有一台主机通过一个令牌桶进行流量调整。令牌桶的填充速率为1Mbps,初始时候它被填充到8Mb的容量,请问计算机以6Mbps的
全速率可以传输多长时间?
解:
S = 8 × 1 0 6 / 8 6 × 1 0 6 / 8 – 1 × 1 0 6 / 8 = 1.6 秒 S=\frac{8×10^6 /8}{6×10^6 /8 – 1×10^6 /8}=1.6秒 S=6×106/81×106/88×106/8=1.6

你可能感兴趣的:(杂项)