计算机网络 自顶向下方法 第三章 运输层

Tags:计算机网络

第三章 运输层


3.1 概述和运输层服务

3.1.1 运输层和网络层的关系

  • 网络层提供了 主机 之间的逻辑通信。而运输层为运行在 不同主机上的进程 提供逻辑通信。
  • 运输层协议只工作在端系统上。
  • 运输协议能提供的服务受制于底层网络协议的服务模型。
  • 网络层协议,即 IP 协议,其服务模型是 尽力而为交付服务 ,但不做任何的保证。是 不可靠服务

3.1.2 因特网运输层概述

  • UDP 提供了一种不可靠、无连接的服务。
  • TCP 提供了一种可靠的、面向连接的服务。
  • 进程到进程的数据交付和差错检测是两种最低限度的运输层服务,也是 UDP 能提供的仅有的两种服务。

3.2 多路复用与多路分解

  • 多路分解: 将运输层报文段中的数据交付到正确的套接字。
  • 多路复用: 在源主机从不同的套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文传递到网络层。
  • 运输层多路复用要求:
    • 套接字有唯一标识符。
    • 每个报文段有特殊字符(端口号)来指示该报文段所要交付到的套接字。
    • 端口号:一个 16 比特的数,在 0 ~ 65535 之间。其中 0 ~ 1023 是周知端口号,是受限制的。

3.2.1 无连接的多路复用与多路分解

  • clientSocket = socket(socket.AF_INET, socket.SOCK_DGRAM) 创建一个 UDP 套接字时,系统会自动为该套接字分配一个未被其他 UDP 套接字使用的端口号。
    也可以用clientSocket.bind(('',23333)) 显式的分配一个端口号。
  • 通常,应用程序的客户端让运输层自动地分配端口号,而服务器则分配一个特定的端口号。
  • 一个 UDP 套接字是由一个包含 目的 IP 地址目的端口号二元组 标识的。

3.2.2 面向连接的多路复用与多路分解

  • TCP 套接字是由一个 四元组(源 IP 地址,源端口号,目的 IP 地址,目的端口号)来标识的。

3.3 无连接运输:UDP

  • 选择 UDP 的原因:
    • 关于何时、发送什么数据的应用层控制更为精细。
    • 无需连接建立。
    • 无连接状态。
    • 分组首部开销小。
  • 用 UDP 建立可靠数据传输机制可以在应用层中实现。

3.3.1 UDP 报文结构

UDP 报文段结构
- 首部只有 4 个字段,每个字段 2 字节。其中,length 指示了 UDP 报文段中的 首部加数据的字节数

3.3.2 UDP 检验和(上图中的 checksum)

  • 检验和 是 UDP 的差错检测机制。其实现方法是:
    1. 将 UDP 报文按 16 比特进行分组。
    2. 将两个 16 比特的数字相加得到一个 32 位的数。
    3. 将 2 中得到的 32 比特数的 高 16 位和低 16 相加。
    4. 重复第 2 步直到得到的和的高 16 位为 0。
    5. 将得到的 16 比特的数按位取反即为 检验和。
      • 注:计算之前的检验和为 0
      • 如果传输没有出错,则在接收方处计算的的检验和将是 11111111111111。若不是,则数据有错。

3.4 可靠数据传输原理

3.4.1 构造可靠数据传输协议

在这节将一步步研究一系列协议,它们一个比一个复杂,最后得到一个无错、完全可靠的数据传输协议。

1. 经完全可靠信道的可靠传输协议: rdt 1.0
  • 这是最简单的情况,假设底层信道是完全可靠的。
  • 有限状态机(FSM):
    • 箭头指示了协议从一个状态变迁到另一个状态。
    • 引起变迁的事件显示在横线的上方。
    • 事件发生时所采取的动作显示在横线的下方。
    • ^ 表示什么都不做。
      下图是发送方和接收方的 有限状态机
      rdt 1.0
  • 发送方:
    • rdt_send(data): 接收较高层的数据。
    • make_pkt(data): 将数据打包成分组。
    • udt_send(packet): 将分组发送到信道中。
  • 接收方:
    • rdt_rcv(data): 从底层信道接收一个分组。
    • extract(packet,data): 从分组中取出数据。
    • deliver_data(data): 将数据传送给较高层。
2. 经具有比特差错信道的可靠数据传输:rdt 2.0
  • 假设底层信道传输的数据可能会有比特差错。但是仍然不会丢包。
  • 在接收方的协议中加入:
    • 差错检测
    • 接收方反馈
      • 肯定确认(ACK)
      • 否定确认(N
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
P44题: 1. 假设TCP的最大段大小为1500字节,以太网的MTU为1500字节,IP首部长度为20字节,TCP首部长度为20字节。则TCP数据报的最大有载荷为1500-20-20=1460字节。因此,每个TCP段最多能够携带1460字节的有数据。 2. 当TCP在发送端接收到应用层的数据时,它将数据分割成由最大段大小限制的一系列TCP段。在接收端,TCP再将段组装成接收端应用程序能够使用的数据。因此,TCP在发送端对应用层数据进行分割,而在接收端对TCP段进行组装。 3. 在TCP的慢启动过程中,拥塞窗口cwnd的值从1开始,每经过一个往返时间RTT,cwnd的大小翻倍。因此,第一个RTT结束时,cwnd的值为2,第二个RTT结束时,cwnd的值为4,依此类推。在cwnd的值达到一个阈值ssthresh之前,TCP的拥塞控制采用慢启动算法。当cwnd的值达到ssthresh时,TCP的拥塞控制采用拥塞避免算法。 4. 在TCP的拥塞控制中,拥塞窗口cwnd的大小是根据网络的拥塞程度来进行调整的。当网络中出现拥塞时,TCP会减小cwnd的大小以减轻网络的拥塞情况。在TCP的快速恢复算法中,当发送端接收到3个重复的ACK时,它会假定网络中出现了拥塞,并将cwnd的值设置为ssthresh的一半,然后继续发送数据。这种方法比慢启动算法更加高。 P45题: 1. IP首部长度为20字节,因此IP数据报的最大长度为2^16-1-20=65515字节,其中2^16-1是IP数据报的最大总长度。 2. 在IP分组中,标识字段和标志字段用于实现分组的重组。标识字段用于标识属于同一数据报的多个分组,标志字段用于指示分组分组序列中的位置。例如,第一个分组的标志字段为0,中间的分组的标志字段为1,最后一个分组的标志字段为0。 3. IP分组在路由器中进行转发时,路由器需要查找路由表以确定下一跳路由器的地址。当路由器收到一个IP分组时,它首先进行CRC校验以检查分组的完整性。然后,路由器根据目的IP地址查找路由表,并将分组转发到下一跳路由器的接口。 4. 在IPv6中,每个节点都有一个本地链路地址和一个全局地址。本地链路地址用于在链路层进行通信,全局地址用于在互联网中进行通信。IPv6地址长度为128位,采用冒号十六进制表示法,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。IPv6还引入了一种新的地址类型,即任播地址,它用于向一组节点中的任意一个节点发送数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值