• 5.1 传输层提供的服务
    • 5.1.1 传输层的功能

      • 概述
        • 从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务,它属于面向通信部分 的最高层,同时也是用户功能中的最低层。

        • 为运行在不同主机上的进程之间提供了逻辑通信,而网络层提供 主机之间的逻辑通信。

        • 显然,即使网络层协议不可靠(网络层协议使分组丢失、混乱或重复), 传输层同样能为应用程序提供可靠的服务。

        • 网络的边缘部分的两台主机使用网络核心部分的功能进行端到端的通信 时,只有主机的协议栈才有传输层和应用层,而路由器在转发分组时都只用到下三层的功能(即 在通信子网中没有传输层,传输层只存在于通信子网以外的主机中)。

        • 向高层用户屏蔽了低层网络核心的细节(如网络拓扑、路由协议等),它使应用进程 看见的是好像在两个传输层实体之间有一条端到端的逻辑通信信道,这条逻辑通信信道对上层的 表现却因传输层协议不同而有很大的差别。

        • 当传输层采用面向连接的TCP时,尽管下面的网络是 不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道。但当传输层采用无连接的UDP 时,这种逻辑通信信道仍然是一条不可靠信道。

      • 功能
        1. 传输层提供应用进程之间的逻辑通信(即端到端的通信)。
          • 与网络层的区别是,网络层提 供的是主机之间的逻辑通信。
          • 从网络层来说,通信的双方是两台主机,IP数据报的首部给出了这两台主机的IP地址。
            • 但“两台主机之间的通信”实际上是两台主机中的应用进程之间的通信,应用进程之间 的通信又称端到端的逻辑通信。
        2. 复用和分用。
          • 复用是指发送方不同的应用进程都可使用同一个传输层协议传送数据;
          • 分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。
        3. 传输层还要对收到的报文进行差错检测(首部和数据部分)。
          • 而网络层只检查IP数据报 的首部,不检验数据部分是否出错。
        4. 提供两种不同的传输协议,即面向连接的TCP和无连接的UDP。
          • 网络层无法同时实现 两种协议(即在网络层要么只提供面向连接的服务,如虚电路;要么只提供无连接服务, 如数据报,而不可能在网络层同时存在这两种方式)。
    • 5.1.2 传输层的寻址与端口

      • l. 端口的作用
        • 标识主机中的应用进程
        • 端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道 应当将其报文段中的数据向上通过端口交付给应用层相应的进程。
        • 传输层服务访问点 (TSAP),它在传输层的作用类似于IP地址在网络层的作用或MAC地址在数据链路层的作用, 只不过IP地址和MAC地址标识的是主机,而端口标识的是主机中的应用进程。
          • 数据链路层的SAP是MAC地址,网络层的SAP是IP地址,传输层的SAP是端口。
        • 在协议栈层间的抽象的协议端口是软件端口,它与路由器或交换机上的硬件端口是完全不同 的概念。
          • 硬件端口是不同硬件设备进行交互的接口,而软件端日是应用层的各种协议进程与传输 实体进行层间交互的一种地址。传输层使用的是软件端口。
      1. 端口号
        • 长度为16bit,能够表示65536(2^16)个不同的端口号

        • 只具有本地意义,即端口号只标识本计算机应用层中的各进程

        • 两类 1)服务端使用的端口号。

        • 熟知端口号

        • 数值为0〜1023

        • 登记端口号

        • 数值为1024〜49151

        • 供没有熟知端 口号的应用程序使用的,使用这类端口号必须在IANA登记,以防止重复。

        1. 客户端使用的端口号,
        • 数值为49152〜65535

        • 这类端口号仅在客户进程运行时才动 态地选择,因此又称短暂端口号(也称临时端口)。

        • 通信结束后,刚用过的客户端口号就 不复存在,从而这个端口号就可供其他客户进程使用。

      • 3.套接字
        • 网络中采用发送方和接收方的套接字( Socket) 组合来识别端点。
        • 所谓套接字, 实际上是一个通信端点;它唯一地标识网络中的一台主机和其上的一个应用(进程)。
          • 套接字=(主机IP地址,端口号)
    • 5.1.3 无连接服务与面向连接服务

      • 面向连接服务
        • 就是在通信双方进行通信之前,必须先建立连接,在通信过程中,整个连接的 情况一直被实时地监控和管理。通信结束后,应该释放这个连接。
      • 无连接服务
        • 指两个实体之间的通信不需要先建立好连接,需要通信时,直接将信息发送到 “网络〃中,让该信息的传递在网上尽力而为地往目的地传送。
      • TCP/IP协议族
        • 面向连接的传输控制协议(TCP)
          • 采用TCP时,传输层向上提供的是一条全双工的可靠逻辑信道;
          • 在传送数据之前必须先建立连接,数据传送结束后要释放连接。
          • TCP不提供广播或组播服务
          • 由于TCP提供面向连接的可靠传输服务,因此不可避免地增加了许 多开销,如确认、流量控制、计时器及连接管理等。
          • 主要适用于可靠性更重要的场合,如文件传输协议(FTP) 、 超文本传输协议(HTTP) 、远程登录(TELNET) 等。
        • 无连接的用户数据报协 议(UDP)
          • 采用UDP时,传输层向上提供的是一条不可靠的逻辑信道。
          • 两个附加服务
            • 多路复用
            • 对 数据的错误检查
          • UDP在传送数据之前不需要先建立连接,远程主机的传输层收到UDP报文后,不需要给 出任何确认。
          • 执行速度比较快、实时性好。
          • 应用主要包括 小文件传送协议(TFTP) 、DNS、SNMP和实时传输协议(RTP) 。
  • 5.2 UDP 协议
    • 5.2.1 UDP数据报
      1. UDP概述

        • 做了传输协议能够做的最少工作,它仅在IP的数据报服务之上增 加了两个最基本的服务:复用和分用以及差错检测。
        • 优点
          1. UDP无须建立连接。因此UDP不会引入建立连接的时延。
          2. 无连接状态。TCP需要在端系统中维护连接状态。此连接状态包括接收和发送缓存、拥 塞控制参数和序号与确认号的参数。而UDP不维护连接状态,也不跟踪这些参数。因此, 某些专用应用服务器使用UDP时,一般都能支持更多的活动客户机。
          3. 分组首部开销小。TCP有20B的百部开销,而UDP仅有8B的开销
          4. 应用层能更好地控制要发送的数据和发送时间。UDP没有拥塞控制,因此网络中的拥塞 不会影响主机的发送效率。
        • 特点
          • UDP常用于一次性传输较少数据的网络应用.如DNS、SNMP等
          • UDP也常用于多媒体应用(如IP电 话、实时视频会议、流媒体等)
          • UDP提供尽最大努力的交付,即不保证可靠交付,但这并不意味着应用对数据的要求是不可 靠的,因此所有维护传输可靠性的工作需要用户在应用层来完成。
          • UDP是面向报文的。发送方UDP对应用层交下来的报文,在添加首部后就向下交付给IP层, 既不合并,也不拆分,而是保留这些报文的边界;接收方UDP对IP层交上来UDP用户数据报, 在去除首部后就原封不动地交付给上层应用进程,一次交付一个完整的报文。因此报文不可分割, 是UDP数据报处理的最小单位。
      2. UDP的首部格式

        1. 源端口。源端口号。在需要对方回信时选用,不需要时可用全0。
        2. 目的端口。目的端口号。这在终点交付报文时必须使用到。
          • 如果接收方UDP发现收到的报文中的目的端口号不正确(即不 存在对应于端口号的应用进程),那么就丢弃该报文,并由ICMP发 送“端口不可达”差错报文给发送方。
        3. 长度。UDP数据报的长度(包括首部和数据),其最小值是8 (仅有首部)。
        4. 校验和。检测UDP数据报在传输中是否有错。有错就丢弃。该字段是可选的,当源主机 不想计算校验和时,则直接令该字段为全0。
    • 5.2.2 UDP 校验
      • 在计算校验和时,要在UDP数据报之前增加12B的伪首部,伪首部并不是UDP的真正首部。

      • 只是在计算校验和时,临时添加在UDP数据报的前面,得到一个临时的UDP数据报。校验和就 是按照这个临时的UDP数据报计算的。

      • UDP校验和的计算方法

        • 发送方
          • Subtopic
          • 使用二进制反码运算求 和再取反。
          • 首先把全零放入校验和字段并添加伪首部,
          • 把UDP数据报视为许多16位的字连 接起来。
          • 若UDP数据报的数据部分不是偶数个字节,则要在数据部分末尾增加一个全零字节(但 此字节不发送)。
          • 按二进制反码计算出这些16位字的和,并将此和的二进制反码写入校验 和字段。
        • 接收方
  • 5.3 TCP协议