【计算机网络系列】传输层与 UDP 协议

ゝ一世哀愁。 2023-01-05 12:55 263阅读 0赞

概述

端到端通信

网络边缘

  • 在计算机网络中,网络边缘通常是指由主机、存储、服务器、数据库等各种软硬件设备组成,是网络信息资源的集散地。
  • 由于集中了数量极其庞大且标准不同、结构互异的硬件资源、软件资源和信息资源,因此网络边缘历来是计算机网络研究中最为复杂和困难的领域,也是最具吸引力的领域,有“ 决战在边缘” 、“ 价值在边缘” 之说。
  • 在网络边缘的主机平台上,运行着从物理层到应用层完整的TCP/IP 协议。

网络核心

  • 相对于网络边缘,网络核心就显得非常单纯。网络核心由提供数据转发服务的网络路由器,以及连接各路由器的链路(如光纤、通信卫星等)组成。
  • 在网络核心的路由器平台上,运行着从物理层到网际层的TCP/IP 协议。所以,这类网络设备也称为三层设备,即具有路由能力的网络设备。
  • 除了路由器等三层设备,网络核心中还有大量只运行物理层和数据链路层(网络接口层)。这类设备通常只运行物理层和数据链路层协议,所以称为二层设备。

传输层的作用和主要功能

  • 传输层(运输层)的主要作用是为运行在网络边缘的不同主机上的各应用程序之间提供通信服务。
  • 因此,传输层面向的不是主机而是应用,或者说是面向进程的网络通信服务,是一种真正的端到端的通信服务。
  • 传输层通信为不同进程之间提供了逻辑通信服务。
  • 传输层的另外一个主要作用是在应用层和网络层之间充当复用器的作用。各种各样的网络应用,通过传输层的端口被提交统一的网络层,并由IP 协议用统一的方式将它们发送到网络中。

在OSI/RM 中,传输层位于资源子网与通信子网之间,发挥着以下主要功能:

image-20210103193532304

  • 对高层应用屏蔽了通信(低层)的细节,无需过多考虑各种通信因素对网络通信过程本身的影响
  • 提供端到端之间的无差错保证,弥补网络层提供服务的差异和不足

传输层协议与网络层协议的主要区别

  • 网络层:提供主机之间的逻辑通信
  • 传输层:提供进程之间的逻辑通信

提供的服务

在TCP/IP 中,传输层提供了 面向连接 和 面向无连接的两种服务。

  • 面向连接的服务:TCP 服务,通信可靠,对数据有校验和重发等机制,但实现复杂,代价较大,通信速率相对较低。

    • 如TCP/IP 模型中应用层协议FTP 、Telnet 等
  • 面向无连接的服务:UDP 服务,对数据无校验和重发,实现简单,通信速率高

    • 如TCP/IP 模型中应用层协议SNMP 、DNS

TCP

  • 提供面向连接的服务。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的传输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源
  • 其协议数据单元称为 TCP 报文段(segment)
  • TCP 报文段是在传输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的传输层是否建立了 TCP 连接。

UDP

  • UDP 在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,也不需要给出任何确认。虽然UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。
  • UDP 协议数据单元协议称为 UDP 报文或用户数据报
  • 传输层的 UDP 用户数据报与网际层的IP 数据报有很大区别。IP 数据报要经过互连网中许多路由器的存储转发,但UDP 用户数据报是在传输层的端到端抽象的逻辑信道中传送

端口与地址

问题

  • 在计算机中,每个进程都有一个称为进程标识符的标志进行区分。不同的操作系统在命名进程标识符时遵循的原则和命名的方法各不相同。
  • 在计算机网络中,不同主机的进程之间进行通信时,显然通信双方无法利用各种操作系统提供的进程标识符进行通信。
  • 为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对 TCP/IP 体系的应用进程进行标志。

解决

  • 解决这个问题的方法就是在传输层中使用协议端口号(protocol port number) ,或通常简称为端口(port) 。
  • 虽然通信的终点是应用进程,但可以把端口想象是通信的终点,因为只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由 TCP 来完成。

硬件端口与软件端口

  • 路由器或交换机上的端口是硬件端口。

    • 硬件端口是不同硬件设备进行交互的接口。
  • 在协议栈层间的抽象的协议端口是软件端口。

    • 而软件端口是应用层的各种协议进程与传输层协议进行层间交互的一种接口。

端口号

  • 传输层端口用一个 16 位端口号进行标志。
  • 端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。
  • 在因特网中,不同计算机的相同端口号之间并无特别的关联性。
  • 共识

    • 熟知端口:0-1023之间,Internet的数字分配机构(Internet Assigned Numbers Authority,IANA)管理。但是,0端口一般不使用
    • 登记端口号,1024-49151之间,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA登记,以防止重复。
    • 客户端口号或短暂端口号,49152-65535之间,留给客户进程选择暂时使用。当一个使用某个这类端口的进程通信结束后,该端口即可供其他进程使用。

传输服务访问点

  • 在OSI/RM 中,当两个不同主机的两个进程需要通信时,必须指明对方是哪一个进程,这个标记称为传输层地址,也称为传输服务访问点(Transport Service AccessPoint ,TSAP )
  • 即,传输层地址(TSAP )= 主机IP 地址+ 端口号

套接字

  • 套接字(Socket)是为了使应用程序能够方便地使用协议栈软件进行通信的一种方法。
  • 套接字以标准的UNIX 文件描述符加以标识,应用程序通过对文件描述符的调用,实现与其他程序进行通信。

    • 对于一个完整的Socket, 则用一个相关描述:{协议,本地地址,本地端口,远程地址,远程端口}
  • 从 套接字(Socket) 所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议栈进行通信的接口,是应用程序与网络协议栈进行交互的接口。

1 、流式套接字(Stream Socket)

  • 提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。

2 、数据报式套接字 (Datagram Socket)

  • 提供无连接服务。数据包以独立包形式发送,不提供无差错保证,数据可能丢失或重复,并且接收顺序混乱。

3 、原始套接字(Raw Socket)

  • 原始式套接字允许对较低层次的协议,如IP 、ICMP 直接访问,用于检验新的协议的实现。

UDP

概述

  • UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。
  • 虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP在某些方面有其特殊的优点。

UDP 的主要特点

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

面向报文的 UDP

  • 发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。 UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。应用层交给 UDP 多长的报文, UDP 就照样发送,即一次发送一个报文(即都是一个 IP 分组,但分组大小超过 mtu 可能被分片,但是并不影响目的主机组装后该分组的顺序,例如一次发送一个 ABCD 不可能收到 ACDB)
  • 接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
  • 应用程序必须选择合适大小的报文。

首部格式

image-20210103201251607

UDP 有两个字段:数据字段和首部字段。

  • 首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节
  • 长度指的整个 UDP 报文的长度(包括首部和数据)
  • 在计算检验和时,临时把“ 伪首部” 和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。

计算 UDP 检验和的例子

  • 数据报

    image-20210104114236764

  • 校验和

    image-20210104114140152

典型应用

  • 将网络中的请求- 应答交互表示成过程调用形式,例如:调用get-IP-address (主机名)将发送一个UDP 包给DNS 服务器,并等待回答
  • RPC 对程序员屏蔽了网络运作的细节
  • RPC 是UDP一个典型应用

一次RPC 的过程:

  • 客户调用Client stub
  • Client stub 将参数封装并发送
  • 客户端OS 内核将消息发送到服务器
  • 服务器OS 内核将分组交Server stub
  • 服务器取出参数并调用过程,最后将结果返回

RPC 的应用

  • RPC 是客户机/服务器模式中实现分布式计算的通信协议
  • RPC 采用无连接对话方式,具有错误控制能力
  • RPC 使服务器系统使用客户机提供的参数,执行客户机指定的规程并返回结果
  • 从逻辑上看,按 OSI 的七层构架, RPC 属会话层协议,但有些功能属应用层

发表评论

表情:
评论列表 (有 0 条评论,263人围观)

还没有评论,来说两句吧...

相关阅读