本文引用图片均来自 高军: 计算机网络
之前文章介绍的物理层、数据链路层、网络层
等共同实现了数据在不同网络的流通使得主机与主机之间可以通信。但实际上,在网络中进行通信的真正实体
是位于主机上的应用进程
运输层的任务就是为不同主机上的进程提供直接的通信服务,它向上层屏蔽
了网络核心的细节(网络拓扑、路由协议等),从应用进程的角度看两个运输层实体之间好像有一条端到端的逻辑信道
根据应用需求的不同,运输层为应用层提供两种不同的协议——面向连接的TCP(Transmission Control Protocol)和无连接的UDP(User Datagram Protocol)
端口、复用与分用
为了使不同操作系统上的应用进程可以相互通信,必须采用统一方法
对TCP/IP体系
的应用进程进行标识,运输层采用端口号
来标识不同的应用进程
端口号用16比特
标识,取值范围为0-65535
,主要分为以下几类:
- 熟知端口号:
0-1023
,IANA(Internet Assigned Numbers Authority)把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如FTP使用21/20
,HTTP使用80
,DNS使用53
- 登记端口号:
1024-49151
,为没有熟知端口号的应用程序使用,需要先在IANA登记。例如微软远程桌面使用3389
- 短暂端口号:
49152-65535
,留给客户进程临时
使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,端口号可供
其他客户进程使用
以上端口只具有本地意义
,因特网上不同主机间同一个端口并没有关联
在应用进程发送数据时,需要将应用报文发往运输层进行封装,运输层使用不同的端口来区分应用进程。一些应用进程使用UDP协议
对应用报文进行封装,这称为UPD复用
,TCP复用同理
。无论是UDP用户数据报还是TCP报文段最后在网络层都需要使用IP协议
封装成IP数据报,这称为IP复用
。IP数据报首部中协议字段的值分别使用17
和6
来表示数据载荷是UDP用户数据报
还是TCP报文段
接收方收到IP数据报后在网络层进行IP分用
,网络层根据IP数据报首部协议字段的值决定将数据载荷交给运输层的UDP或TCP。运输层UDP根据端口号
将UDP用户数据报中的数据载荷交给相应的应用进程,这称为UDP分用
,TCP分用同理
UDP和TCP的对比
在数据传输方面:
- 使用UDP协议的双方可以
随时
发送数据,支持单播、多播和广播
- 使用TCP协议的双方
必须
先通过三次握手
建立连接,通信结束后必须通过四次挥手
结束连接,仅支持单播
在应用报文处理方面:
- UDP
仅
在应用报文中添加UDP首部
便将其发送,接收方仅
将UDP用户数据报中的UDP首部去掉便将其中的应用报文交付给应用进程 - TCP将应用报文看作是连续的
字节流
,TCP并不知道字节流的含义,仅将字节流编号
放入发送缓存中并按照策略选取一定数量的字节封装进TCP报文段中发送。接收方收到TCP报文段后取出其中的字节数据放入接收缓存中并按照策略选取其中的部分字节交付给应用进程
在可靠性方面:
- UDP提供的是
不可靠服务
,如果UDP用户数据报在传输过程中出现误码等差错,那么接收方仅仅将报文丢弃
其他什么也不做,适用于视频会议等应用 - TCP提供的是
可靠服务
,通过重传、拥塞控制等方法保证
不会出现误码、乱序等传输差错,适用于文件传输等应用
在首部格式方面:
- 由于UDP不提供可靠传输,所以UDP数据报首部很简单,只有
8个字节
- 由于TCP要提供可靠传输、拥塞控制和流量控制等服务,所以TCP报文段首部字段较多,最少
20字节
,最多60字节
参考文献
- 【1】高军: 计算机网络