端到端协议 第五章
从前几章研究的主机到主机的分组传递服务到转向进程到进程之间的通信信道,这正是网络体系结构中传输层(transport
)的任务,由于它支持端点应用程序之间的通信,因此传输层协议有时也被称为端到端(end to end
)协议。
因特网提供尽力而为(best-effort
)的服务,为满足应用程序所需的高级服务,不同传输层协议用于不同的算法组合。代表性的4种有:一个简单的异步多路分解服务,一个可靠的字节流服务,一个请求/应答服务和一个用于实时应用的服务。
5.1 简单的多路分解协议 (UDP)
可能最简单的传输协议是把下层网络的主机到主机的传递服务扩展到进程到进程的通信服务。任何主机上都有可能运行多个进程,因此该洗衣至少需要增加一个多路分解功能,以便每台主机上的多个进程能够共享网络。除此之外,传输协议不再下层网络提供的服务增加任何其他功能。因特网提供的用户数据报协议(User Datagram Protocol
),就是这样的传输协议。
值得注意的是标识目的进程的地址形式(可以用操作系统赋予的进程标识符pid
使进程之间直接地相互识别,但无法扩展至多个不同的系统),UDP采用的方式是使用一个称谓端口port
的抽象定位器,使进程之间能够间接的相互识别。基本思想是源进程向端口发送消息而目的进程从端口接收消息。 <主机,端口>构成了UDP协议的多路分解密钥。
如何相互知道进程端口号? 策略是服务器进程在一个知名端口well-known port
接收消息,即知名端口只有一个。有时候,知名端口仅仅是通信的开始点:客户机和服务器用这个端口达成一致,并在另外一个端口进行后续的通信,以便释放知名端口给其他客户进程使用。
一般来说一个端口是由一个消息队列实现的,当一个消息到达时,协议会把该消息加到队列的末尾,如果队列满了,消息会被丢弃。这里并没有让发送发减慢发送速度的流量控制机制。
虽然UDP没有实现流量控制或可靠的/有序的传输,但它不仅仅是简单地把消息多路分解给某个应用进程,而是多做了工作,通过在首部中的校验和部分进行校验确保消息的正确性。