• 之前介绍的物理层、数据链路层以及网络层他们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信
  • 但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程
  • 如何位运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。
  • 根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输层协议,即面向连接的TCP和无连接的UDP

端口号

  • 运行在计算机上的进程使用进程标识符PID来标志。
  • 因特网上的计算机并不是使用统一的操作系统,不同操作系统又使用不同格式的进程标识符
  • 为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用同一个方法对TCP/IP体系的应用进程进行标识
  • TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程。
    • 端口号使用16比特表示,取值范围0~65536
      • 熟知端口号:0~1023,IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如:TFP使用21/20,HTTP使用80,DNS使用53.
      • 登记端口号:1024-49151,为没有熟知端口号的应用程序使用。使用这类端口号必须在IANA按照规定的手续登记,以防止重复。例如:Microsoft RDP 微软远程桌面使用的端口是3389。
      • 短暂端口号:49152~65536, 留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
    • 端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程,在因特网中,不同计算机中的相同端口号是没有联系的

复用与分用

  • 发送方的复用和接收方的分用

    • 发送方的某些应用进程所发送的不同应用报文,在运输层使用UDP协议进行封装,称为UDP复用
    • 另一些应用进程使用TCP协议进行封装,称为TCP复用
    • UDP协议封装成的用户数据报和TCP协议封装成的TCP报文段,在网络层都需要使用IP协议封装成IP数据报,称为IP复用
    • IP数据报首部中的协议字段的值用来表明IP数据报的数据载荷部分封装的是何种协议数据单元
    • 接收方的网络层收到IP数据报后进行IP分用
    • 协议字段值为17,则把IP数据报的数据载荷部分所封装的UDP用户数据报上交运输层的UDP;若协议字段的值为6,则把IP数据报的数据载荷部分所封装的TCP报文段上交运输层的TCP。
    • 运输层对UDP用户数据报进行UDP分用,对TCP报文段进行TCP分用。也就是根据端口号将它们交付给上层相应的应用进程。

    image.png

  • TCP/IP体系的应用层常用协议所使用的运输层熟知端口号

image.png

举例:
image.png

  • 在用户浏览器中输入Web浏览器的域名,用户PC中的DNS客户端进程会发送一个DNS查询请求报文,源端口字段在短暂端口号中挑一个,目的啊端口号是53(DNS服务器端使用的熟知端口号)
  • 之后将UDP用户数据报封装在IP数据报中,通过以太网发送给DNS服务器。
  • DNS服务器端收到数据报后,从中解封出UDP用户数据报,UDP数据报中的目的端口号为53,这表明应将该UDP数据报的数据载荷部分交付给本服务器中的DNS服务器端进程
  • DNS服务器端进程解析DNS查询请求报文的内容,按要求查找对应IP地址,再给用户PC发DNS响应报文
  • 再封装成UDP数据报,首部中的目的端口号是之前用的短暂端口号。
  • 主机拿到UDP数据报得到目的域名的IP地址,用户PC中的HTTP客户端进程就可以向Web服务器发送HTTP请求报文了。
  • HTTP请求报文需要使用运输层的TCP协议,封装成TCP报文段。源端口的值也是在短暂端口号中挑一个没被占用的,目的端口号设为80(HTTP服务端进程使用的熟知端口号)
  • 将TCP报文段封装在IP数据报中通过以太网发送给Web服务器,Web服务器收到数据报后,解封出TCP报文段,然后该咋咋地,跟刚才那波差不多。