Skip to content

运输层:TCP UDP

无连接运输:UDP

  1. UDP只是做了运输协议能够做的最少工作。除了多路复用 多路分解功能以及一些轻型的差错检测外,它几乎没有对IP增加别的东西。
  2. UDP从应用进程得到数据,附加上多路复用 多路分解需要的源端口号和目的端口号字段,及其他的两个小字段,然后将形成的报文段交给网络层。网络层将该运输层报文段的封装到一个IP数据报中,然后尽力地将报文段交付给接收主机。如果该报文段到达接收主机,则UDP使用目的端口号来将报文段中的数据交付给正确的应用进程。
  3. 使用UDP时,在发送报文前,发送方和接收方的运输层实体之间没有进行握手,正因如此,UDP被称为无连接的。
  4. 使用UDP的原因:

    1. 应用层能更好地控制要发送的数据和发送时间。
    2. 无需连接建立。(UDP不需要任何准备即可发送数据。)
    3. 无连接状态。(TCP需要在端系统中维护连接状态。)
    4. 分组首部开销小。(每个TCP报文段都有20字节的首部开销,UDP仅有8字节的开销。)
  5. UDP报文段结构

  6. UDP首部只有 4个字段,每个字段由两个字节构成。(2个字节(byte) x 4个字段 x 8bit = 64bit )
  7. 前32比特 是 源端口号 目的端口号;接下来32比特是 长度 检验和;其他是 应用数据(报文)

    前边是 报文首部 后边是报文实体 端口号是16bit,所以 源端口号 目的端口号占32bit 长度,校验和 都是16bit

  8. UDP检验和提供了差错检验功能,即检验和用于确定当UDP报文段从源到达目的时,其中比特是否发生了改变。

  9. 检验和计算方法:所有16bit和进行反码运算,求和时遇到任何溢出被回卷。

可靠数据传输原理

自己构造可靠数据传输协议

  1. 协议rdt1.0:假设底层信道是完全可信的

    ``` 发送方:初始态-》从较高层接收数据 -> 产生包含该数据的分组->分组发送到信道中

    接收方:初始态-》从底层信道接收一个分组 -> 分组中取出数据并上传到较高层 ```

  2. 协议rdt2.0:具有比特差错信道上的可靠数据传输

    计算机网络中,基于这种重传机制的可靠数据传输协议称为 自动重传请求(ARQ)协议。 ARQ协议还需要另外三种协议来处理存在的比特差错: 差错检测:一种机制以使接收方检测到何时出现了比特差错。(UDP使用检验和字段就是为了这个目的。) 接收方反馈:发送方唯一途径就是让接收方提供明确的反馈信息给发送方。(类似的,rdt2.0将从接收方向发送方回送ACK与NAK分组。) 重传:接收方收到有差错的分组时,发送方将重传该分组。

    ``` 发送方:初始态-》较高层接收数据—》产生包含数据的分组-》①接受到反馈并且是ACK-》返回初始态 等待上层 另一种:初始态-》较高层接收数据—》产生包含数据的分组-》②接受到反馈并且是NAK-》重传最后一个分组-》并等待返回ACK或NAK -》然后选择是到①还是②

    接收方:初始态-》从底层信道接收一个分组 -> 分组中取出数据并上传到较高层 & 返回ACK或者NAK

    发送方在等待ACK或NAK的时候,不能从上层获得更多的数据,也就是说,当接收到ACK并离开该状态时接收方才能继续获取数据。因策,发送方将不会发送一块新数据,知道发送方确信接收方已正确接收分组为止。这种行为的协议被称为 停等(stop-and-wait) 协议。 ```

  3. 协议rdt2.1 增加分组序号处理受ACK或NAK

  4. 协议rdt3.0 倒计数定时器处理丢包

    流水线可靠数据传输协议

    ``` 因为发送方向接收方传输的众多分组可以被看成是填充到一条流水线中,故这种技术被称为流水线(pipelining)。

    流水线对可靠数据传输协议带来的影响: 必须增加序号范围。 协议的发送方和接收方也许必须缓存多个分组。 所需序号范围和对缓冲的要求取决于数据传输协议处理丢失、穗槐以及过度延时分组的方式 ```

  5. 解决流水线的差错回复有两种基本方法:回退N步 选择重传。

  6. 回退N步

    暂未整理

  7. 选择重传

    暂未整理

面向连接的运输:TCP

TCP连接

  1. TCP是面向连接的

    这是因为在一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必须相互“握手”,即它们必须相互发送某些预备报文段,以建立确保数据传所需的参数。作为TCP连接建立的一部分,连接的双方都将初始化与TCP连接相关的许多TCP状态变量。

  2. TCP连接状态完全保留在两个端系统中,所以中间要素不会维持TCP连接状态。(事实上,中间路由器对TCP连接完全不知情)

  3. TCP连接提供的是全双工服务,A与B存在一条TCP连接,那么应用层数据可以从进程A流向B的同时,也从进程A流向进程B。

  4. TCP是点对点(point-to-point)的,即在单个发送方与单个接收方之间的连接。

    ``` 概述: 客户机首先发送一个特殊的TCP报文段 服务器用另一个特殊的TCP报文段来响应 客户机再用第三个特殊报文段作为响应

    前两个报文段不承载“有效载荷”,也就是不包含应用层数据。 由于这两台主机之间发送了3个报文段,所以这种连接建立过程常被称为三次握手(three-way handshaek)。 ```

  5. 一旦建立起一条TCP连接,两个应用进程之间就可以相互发送数据了。客户机进程通过套接字传递数据流。数据一旦通过该门户,就由客户机中运行的TCP控制了。

  6. TCP将这些数据引导到该连接的发送缓存(send buffer) 里。发送缓存是在三次握手初期设置的缓存之一。

    TCP可从缓存中去除并放入报文段中的数据量受限于 最大报文段长(MSS)。 MSS通常根据最初确定的最大链路层帧长度来设置,本地发送主机发送长度是 最大传输单元(MTU)。 接着设置该MSS以保证一个TCP报文段(当封装在一个IP数据报中时)适合单个链路层帧。

  7. TCP将每块客户及数据加一个TCP首部,从而形成多个TCP报文段。

    然后报文段下传到网络层,网络层将其分别封装到网络层IP数据报中。 然后IP数据报发送到网络中。 TCP在另一端接收到一个报文段后,报文段的数据就被放入该TCP连接的接收缓存中。

  8. TCP连接的每一端都有各自的发送缓存接收缓存

  9. TCP连接的组成包括:一台主机上的 缓存、变量 和 与一个进程连接的套接字。 以及另一台主机上的 一套缓存、变量和与一个进程连接的套接字。这两台主机之间的网络要素(路由器、交换机和中继器)中,没有为该连接分配任何缓存和变量。


TCP报文结构

  1. TCP报文段 由 首部字段 和一个数据字段组成。 数据字段包含有一块应用数据。

    MSS限制了报文段数据字段的最大长度。当TCP发送一个大文件,TCP通常是将文件划分成长度为MSS的若干块。

  2. 首部

    1. 包括 源端口号 和 目的端口号。(用于多路复用和多路分解 来自或者送至上层应用的数据。)
    2. 还包括 校验和 字段。
    3. 32bit 序号字段(sequence number field)
    4. 32bit 确认号字段 (acknowledgment number field)
    5. 16bit 接收窗口字段(receive window)。(用于流量控制,指示接收方愿意接受的字节数量)
    6. 4bit 首部长度字段。(由于TCP选项字段,所以TCP首部长度可变。通常为空,所以一般TCP首部长度是20字节)
    7. 可选与变长的 选项字段
    8. 6bit 标志字段(flag field)。

      ``` ACKbit 用于指示确认字段中的值是有效的,即该报文段包括一个对以备成功接收报文段的确认。

      RST、SYN和 FIN 用于连接建立和拆除。 PSH 被设置时,就支持接收方应立即将数据交给上层。 URG用来只收报文段丽存在着被发送方的上层实体置位“紧急”的数据。 (实际中 PSH URG没有被使用) ```

      完整结构: (每行 32bit) |源端口号 目的端口号| | 序号 | | 确认号 | | ①|接收窗口| |互联网检验和| 紧急数据指针| | 选项 | | 数据 | ①包含 首部长度|保留未用|URG|ACK|PSH|RST|SYN|FIN|


    1. 序号和确认号 (TCP报文段最红要的字段,是TCP可靠传输服务的关键部分)
      1. 报文段的序号 就是 该报文段首字节的字节流编号。
      2. 确认号:主机A填充进报文段的确认号是主机A期望从主机B收到的下一字节的序号。
  3. 可靠数据传输