计算机网络:运输层 - 概述
- 运输层的任务
- 端口号
- 复用与分用
- UDP协议
- 首部格式
- TCP协议
- 面向字节流
运输层的任务
物理层
、数据链路层
以及网络层
,他们共同解决了将主机通过网络互联起来所面临的问题,实现了主机到主机的通信。
网络层的作用范围是主机到主机,但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程。
AP1
和 AP2
是局域网LAN1
上主机A
中与网络通信相关的两个应用进程。
AP3
和 AP4
是局域网LAN2
上主机B
中的与网络通信相关的两个应用进程。
如何为运行在不同主机上的应用进程提供直接的通信服务?是运输层的任务。运输层协议又称为端到端协议
。运输层的作用范围是应用进程到应用进程,也称为端到端。
运输层最重要的两个协议是
TCP
与UDP
- 用户数据报协议
UDP
传输的协议数据单元是UDP报文
或者UDP用户数据报
。UDP
在传输数据之前不需要先建立连接,对方的运输层在收到UDP
报文后,不需要给出任何确认。
常见的使用UDP
的应用层协议:DNS
,DHCP
,TFTP
。
- 传输控制协议
TCP
传输的协议数据单元是TCP报文段
。TCP
提供面向连接的服务,在传输数据前必须先建立连接,数据传输结束后要释放连接,接收方收到TCP报文
后也要给出去确认。因此TCP
也只能提供一对一的服务。
常见的使用TCP
的应用层协议:HTTP
,SMTP
,FTP
,TELNET
。
端口号
如图,假设AP1
要和AP4
通信,那么当主机B
接收到了主机A
发来的报文后,主机B
怎么知道这个数据报要交给AP3
还是AP4
?也就是说运输层面临的第一个问题就是如何标识一个进程。
计算机上的进程是使用进程标识符 PID
来标志的。然而因特网上的计算机并不是使用统一的操作系统,不同操作系统使用不同格式的进程标识符。为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用统一的方法对 TCP/IP
体系的应用进程进行标识。
运输层使用
端口号
来区分应用层的不同应用进程
端口号长度为16bit
,取值范围是 0-65535
,分为:熟知端口号
,登记端口号
,短暂端口号
。
熟知端口号:
取值范围是 0-1023
。因特网数字分配机构 IANA
把这些端口号指派给了 TCP/IP
体系中最重要的一些应用协议。常见的端口号如下:
协议 | 端口号 |
---|---|
DHCP | 67 和 68 |
DNS | 53 |
TFTP | 69 |
SNMP | 161 |
SNMP(trap) | 162 |
SMTP | 25 |
FTP | 21 和 20 |
TELNET | 23 |
HTTP | 80 |
HTTPS | 443 |
登记端口号:
取值范围是 1024-49151
,为没有熟知端口号的服务器所使用。这类端口号必须在 IANA 按照规定的手续登记,以防止重复。
例如,微软远程桌面应用程序使用的端口号是3389。
短暂端口号:
取值范围是 49152-65535
,留给客户进程选择,暂时使用当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
复用与分用
接下来我们介绍发送方的复用和接收方的分用,如图所示:
这是收发双方的应用进程,发送方的某些应用进程所发送的不同应用报文在运输层使用 UDP
协议进行封装,这称为 UDP 复用
。而另一些应用进程所发送的不同应用报文在运输层使用 TCP
协议进行封装,这称为 TCP 复用
。
运输层使用端口号来区分不同的应用进程,不管是使用运输层的 UDP 协议封装成的 UDP
用户数据报,还是使用 TCP
协议封装成的 TCP
报文段。在网络层都需要使用 IP
协议封装成 IP
数据报,这称为 IP 复用
。
IP
数据报首部中协议字段的值,用来表明 IP 数据报的数据载荷部分封装的是何种协议数据单元:取值为6
,表示封装的是TCP
报文段;取值为17
,表示封装的是UDP
用户数据报。
接收方的网络层收到 IP
数据报后进行 IP 分用
。
若 IP
数据报首部中协议字段的值为17
,则把 IP
数据报的数据载荷部分所封装的 UDP
用户数据报上交运输层的 UDP
。若协议字段的值为6
,则把 IP
数据报的数据载荷部分所封装的 TCP
报文段上交运输层的 TCP
。
运输层对 UDP
用户数据报进行 UDP 分用
,对 TCP
报文段进行 TCP 分用
,也就是根据端口号将它们交付给上层相应的应用进程。
接下来我对TCP
和UDP
两个协议做一个简单讲解,只是了解它们的基本特点,不深入讲解,后续会有其它博客讲解具体细节。
UDP协议
UDP
协议具有一下特点:
UDP
是无连接的,即发送数据之前不需要建立连接UDP
使用尽最大努力交付,即不保证可靠交付UDP
是面向报文的,即一次发送和交付一个完整的报文UDP
没有拥塞控制,很适合实时通信,因为实时通信要求源主机以恒定的速率发送数据,并允许丢失部分数据UDP
支持一对一、一对多、多对一和多对多的交互通信UDP
的首部开销小,只有 8 个字节
首部格式
UDP数据报
的首部只要8 byte
,由四个字段组成,每个字段都是2 byte
,如图:
源端口
与目的端口
用与标识两个不同主机上的进程。长度
为整个UDP数据报
的长度校验和
用于检验数据报是否出错
在计算校验和
时,还会引入一个伪首部的概念:
伪首部
不是一个真实存在的首部,只有计算校验和
是,会把这个伪首部
也计算进来。
TCP协议
TCP
协议有以下特点:
TCP
是面向连接的运输层协议。TCP 在传送数据之前,必须先建立连接;在传送数据完毕后,必须释放已经建立的连接。- 每一条
TCP
连接只能有两个端点(endpoint),每一条TCP
连接只能是点对点的(一对一)。 TCP
提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达- TCP 提供全双工通信。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
面向字节流
- 面向字节流,
流
指的是一连串的字节序列。
发送方的 TCP
把应用进程交付下来的数据块,仅仅看作是一连串的无结构的字节流,TCP
并不知道这些带传送的字节流的含义,仅将他们编号并存储在自己的发送缓存。
TCP
不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块,具有对应大小的关系。
接收方要具有还原字节流的能力,接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。