一个目的地址的含义
单播描述网络中面向单个接收端的寻址与投递语义。以 IPv6 的正式定义为例,单播地址标识一个接口,发往该地址的数据包以这个接口为目的地。这里的接口是网络层的对象,不宜简单等同于一个人、一项应用,或一整台机器的全部网络身份。
同一节点可以有多个接口,一个接口也可以配置多个地址。RFC 4291 还允许实现把若干物理接口作为一个逻辑接口呈现给互联网层。因此,判断单播不能只数网卡或线缆,而要看该层的目的地址如何定义接收对象。单播也不意味着任何地址都能从全球到达,地址作用域和路由可达性是另外的条件。
参考:[1]
从请求和响应观察单播
设客户端向一个明确的服务器单播地址发送请求,服务器再向客户端的单播地址返回响应。这是两个方向上的单播发送,而不是一个数据包同时以双方为目的地。若多名客户端分别请求同一内容,服务器可以对每个客户端分别发送;业务上有许多观众,并不自动把这些数据包变成网络层多播。
目的端位于其他网络时,数据包可能经过多台路由器。每一跳解决的是下一步往哪里转发,单播目的语义并没有因经过中间节点而改变。若应用使用代理,客户端到代理、代理到后端可以是两段单独的单播交换;仅凭一次应用请求,也不能推出它在网络中只有一段通信。这里的请求流程是说明分层的示例,不规定某个应用必须采用哪一种传输协议。
与多播、任播的区别
多播地址标识一组接口,数据包的目标是该组接收者。任播地址也关联一组接口,但投递目标是其中一个,通常由路由系统的选择决定。IPv6 规范用路由度量意义上的“最近”说明这种选择;它不承诺物理距离最近、服务器负载最低,或应用响应时间最短。
三者的区别在于目的集合和投递意图,而不是观察到一次只收到一个回复,就断言采用单播。IPv6 任播地址取自单播地址空间,文本形式本身无法将两者区分。反过来,网络故障造成重复数据包,或链路机制进行额外复制,也不会因此把单播目的地址变成多播组地址。
单播不保证连接与可靠性
互联网协议提供数据报服务,并不保证端到端交付。RFC 1122 明确指出,数据报可能重复、乱序或未能到达,必要的可靠交付需由更高层机制承担。因此,“指定一个接收者”与“这个接收者一定收到且只收到一次”是两个不同命题。
TCP 提供面向连接的可靠字节流服务,UDP 则提供数据报传输,后者自身不保证交付与重复保护。两者都可以用于向单播目的地址发送数据。把单播当成 TCP 的别名,会混淆网络层寻址和传输层服务;把它当成直连线路,也会忽略跨网络转发。理解单播的关键,是先确定目的地址语义,再分别检查路由、传输与应用所提供的保证。