当前位置:网站首页>第三章运输层

第三章运输层

2022-06-09 10:45:00 Boumbo

正在更新中!

运输层位于应用层和网络层之间,是分层的网络体系结构中的重要部分
第一个关键功能:将网络层的在两个端系统之间的交付服务扩展到运行在两个不同端系统上应用层进程之间的交付服务
第二个关键功能:拥塞控制

3.1 概述和运输层服务

运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)
从应用程序的角度看,逻辑通信使得运行不同进程的主机好像直接相连一样(实际上两主机可能位于地球两侧)
应用进程使用运输层提供的逻辑通信功能彼此发送报文,无需考虑承载这些报文的物理基础设施,如图3-1所示
在这里插入图片描述
运输层协议是在端系统中而不是在路由器中实现的
发送端,运输层将从发送应用程序进程接收到的报文转换成运输层分组(运输层报文段(segment)),实现方法是将报文划分为较小的块,并为每个块加上一个运输层首部以生成运输层报文段,然后将这些报文段传递给网络层,网络层将其封装为网络层分组,并向目的地发送
接收端,网络层从数据报中提取运输层报文段,上交给运输层,运输层处理报文段后为接收方应用程序使用
因特网有两种运输层协议:TCP和UDP

3.1.1 运输层和网络层的关系

  • 网络册提供了主机之间的逻辑通信,运输层位于网络层之上,提供了不同主机上的进程之间的逻辑通信
  • 运输层协议只工作在端系统中
  • 运输层协议将来自应用进程的报文移动到网络册,反过来也一样,但是对于这些报文在网络核心如何移动并不作任何规定
  • 如图3-1所示,中间路由器既不处理也不识别运输层加在应用层报文的任何信息
  • 运输协议能够提供的服务常常受制于底层网络层协议的服务模型
  • 虽然底层网络协议不能提供相应的服务,运输层协议可以提供如可靠传输、安全传输等功能

3.1.2 因特网运输层概述

  • UDP(用户数据报协议):为应用程序提供一种不可靠、无连接的服务
  • TCP(传输控制协议):为应用程序提供一种可靠的、面向连接的服务
  • 当设计一个网络应用程序时,该应用程序的开发人员必须指定二者之一作为应用程序的运输协议
  • 约定:将运输层分组称为报文段(segment)
  • 介绍一些因特网的网络层:
    • 因特网网络层协议有一个名字叫IP,即网际协议
    • IP为主机之间提供了逻辑通信
    • IP的服务模型是尽力而为交付服务(best-effort delivery service),虽然尽最大努力,但是不做任何保证(不确保报文段的交付、不保证报文段按序交付、不保证报文段数据的完整性,因此IP被称为不可靠服务(unreliable service)
    • 每个主机至少有一个IP地址
  • UDP和TCP提供的最基本的服务(责任):将两个端系统间IP的交付服务扩展到运行在端系统上的两个进程之间的交付服务
  • 将主机间交付扩展到进程间交付称为运输层的多路复用(transport-layer multiplexing)多路分解(demultiplexing)
  • UDP和TCP还可以通过在其报文段首部中包括差错检查字段而提供完整性检查(进程到进程的数据交付和差错检查是两种最低限度的运输层服务,也是UDP提供的仅有的两种服务)
  • TCP为应用程序提供了几种附加服务:
    • 可靠数据传输(reliable data transfer):使用流量控制、序号、确认和定时器,TCP可以确保正确地、按序地将数据从发送进程交付给接收进程
    • 拥塞控制(congestion control):不严谨的说法:TCP拥塞控制防止任何一条TCP连接用过多流量来淹没通信主机之间的链路和交换设备。TCP力求为每个通过一条拥塞网络链路的连接平等地共享网络链路带宽

3.2 多路复用与多路分解

考虑如下情景:
假定你正坐在计算机前下载Web页面,同时还在运行一个FTP会话和两个Telnet会话。这样你就有4个网络应用进程在运行,即两个Telnet进程,一个FTP进程和一个HTTP进程。当你的计算机中的运输层从底层的网络层接收数据时,它需要将所接收到的数据定向到这4 个进程中的一个。
How?

  • 套接字(socket) 作为进程从网络接受数据和向网络传递数据的门户,使得运输层实际上并没有直接将数据交付给进程,而是将数据交给了一个中间的套接字,如图3-2所示

  • 由于接收主机不止一个套接字,因此每个套接字都有唯一的标识符,标识符格式取决于UDP还是TCP套接字

  • 在这里插入图片描述

  • 每个运输层报文段中具有几个字段,用于运输层定向到对应套接字。在接收端,运输层检查这些字段,标识出接收套接字,进而将报文段定向到该套接字

  • 多路分解(demultiplexing):将运输层报文段中的数据交付到正确的套接字的工作

  • 多路复用(multiplexing):在源主机从不同套接字收集数据块,并为每个数据块封装首部信息(用于以后分解)从而生成报文段,然后将报文段传递到网络层

  • 运输层多路复用要求:

      1. 套接字有唯一标识符
      1. 每个报文段有特殊字段指示该报文所要交付到的套接字
  • 在这里插入图片描述

  • 如图3-3所示,这些特殊字段为源端口号字段(source port number field)目的端口号字段(destination port number field)

  • 端口号为一个16比特的数,大小为0~65535。0~1023位周知端口号(well-known port number)

1.无连接的多路复用与多路分解

假定在主机A中的一个进程具有UDP端口19157,它要发送一个应用程序数据块给位于主机B中的另一进程,该进程具有UDP端口 46428

  • 主机A中的运输层创建一个运输层报文段,其中包括应用程序数据、源端口号(19157)、目的端口号(46428)
  • 然后,运输层将得到的报文段传递到网络层。
  • 网络层将该报文段封装到一个IP数据报中,并尽力而为地将报文段交付给接收主机
  • 如果该报文段到达接收主机B,接收主机运输层就检查该报文段中的目的端口号(46428)并将该报文段交付给端口号46428所标识的套接字

注意:一个UDP套接字是由一个二元组全面标识的,该二元组包含一个目的1P地址和一个目的端口号。因此,如果两个UDP报文段有不同的源IP地址和/或源端口号,但具有相同的目的IP地址和目的端口号,那么这两个报文段将通过相同的目的套接字被定向到相同的目的进程

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

  • TCP套接字是由一个四元组(源 IP地址,源端口号,目的IP地址,目的端口号)来标识的
  • 当一个TCP报文段从网络到达一台主机时,该主机使用全部4 个值来将报文段定向(分解)到相应的套接字
  • 两个具有不同源IP地址或源端口号的到达TCP报文段将被定向到两个不同的套接字
  • 重新考虑2.7.2节TCP客户-服务器编程的例子:
    • TCP服务器上的欢迎套接字在12000号端口等待来自TCP客户的连接建立请求
    • TCP客户创建一个套接字并发送一个建立请求报文段
    • 一条连接建立请求报文段包含目的IP地址,目的端口号 (不是欢迎端口号),源IP地址,源端口号
    • 当服务器操作系统接收到目的端口为12000的入连接请求报文段后,定位正在12000端口号上等待接受连接的进程,同时创建一个新的套接字
    • 新创建的连接套接字通过客户请求报文段中的源端口号,源主机IP地址,目的端口号 (不是欢迎端口号),自身的IP地址标识。所有后续到达的报文段中的四个值与新创建套接字的四个标识值匹配,则被分解到这个套接字。TCP连接完成,客户和服务器就可以相互发送数据了
  • 服务器主机可以支持很多并行的TCP套接字,每个套接字与一个进程相联系,并由其四元组来标识每个套接字
  • 当一个TCP报文段到达主机时,所有4个字段(源IP地址,源端口,目的IP地址,目的端口)被用来将报文段定向(分解)到相应的套接字。

3.Web服务器与TCP

原网站

版权声明
本文为[Boumbo]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Boumbo/article/details/125150579