运输层是整个网络提携机构中的关键层次之一。一定要弄清一下一些重要概念:
- 运输层为相互通信的应用进程提供逻辑通信。
- 端口和套接字的意义。
- 无连接的UDP的特点。
- 面向连接的TCP的特点。
- 在不可靠的网络上实现可靠传输的工作原理,停止等待协议和ARQ协议。
- TCP的滑动窗口、流量控制、拥塞控制和连接管理。
运输层协议概述
进程之间的通信
从通信和信息处理的角度看,运输层向它上面的的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。
两个主机之间的通信实际上是一个主机中的进程和两一个主机中的进程在交换数据(即通信)。因此严格的讲,两个主机进行通信就是两个主机中的应用进程互相通信。从运输层的角度来看,通信的真正端点并不是主机而是主机中的进程。也就是说,端到端的通信是引用进程之间的通信。在一个主机中经常有多个应用进程同时分别和另外一个主机中的多个引用进程通信。
运输层有一个很重要的功能——复用和分用。这里的“复用”是指在发送方不同的应用进程都可以使用同一个运输层协议传输数据(当然需要加上适当的首部),而“分用”是指接收方的运输层在剥去报文的首部后能够把这些数据正确的交付目的应用进程。
网络层和运输层是有明显的区别的。网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
运输层还要对收到的报文进行差错检测。在网络层,IP数据报首部中的检验和字段,只检验首部是否出现差错而不检查数据部分。
根据引用程序的不同,运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP。
运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道,但这天逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别。当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全加工的可靠信道。但当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一天不可靠信道。
运输层的两个主要协议
TCP/IP运输层的两个主要协议都是因特网的正式标准,即:
- 用户数据报协议UDP
- 传输控制协议TCP
按照OSI的术语,两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元TPDU。但在TCP/IP体系中,则根据所使用的的协议时TCP或UDP,分别称之为TCP报文段或UDP用户数据报。
UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP报文后,不用给出任何确认信息。虽然UDP不提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式。
TCP则提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。
运输层的端口号
应用层所有的引用进程都可以通过运输层再传送到IP层,这就是复用。运输层从IP层收到数据后必须交付指明的应用进程,这就是分用。显然,给应用层的每个应用进程赋予一个非常明确的标志是至关重要的。
解决这个问题的方法就是在运输层使用协议端口号,或通常简称为端口。我们只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由TCP来完成。
请注意,这种在协议栈层间的抽象的协议端口是软件端口,和路由器或交换机上的硬件端口是完全不同的概念。硬件端口是不同硬件设备进行交互的借口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。不同的系统具体实现端口的方法可以使不同的。
TCP/IP的运输层用一个16位端口号来标志一个端口。但请注意,端口号只具有本地意义,它只是为了标志本计算机应用层中的各个进程在和运输层交互时的层间借口。在因特网不同计算机中,相同的端口号是没有关联的。
运输层的端口号共分为下面的两大类:
- 服务器端使用的端口号
这里又分为两类,最重要的一类叫做熟知端口号或系统端口号,数值为0~1023。
常用的熟知端口号:
应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP | SNMP(trap) |
---|---|---|---|---|---|---|---|---|
熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 | 162 |
另一类叫做等级端口号,数值为1024~49151。这类端口号是为没有熟知端口号的应用程序使用的。视同这类端口号必须在IANA按照规定的手续等级,以防止重复
- 客户端使用的端口号
数值为49152~65535.由于这类端口号仅在客户进程运行时才动态选择,因此又叫做短暂端口号。