P232 路由的 TTL

This commit is contained in:
riba2534
2019-01-27 12:56:31 +08:00
parent fe6da610f0
commit 5c97b1609f
2 changed files with 35 additions and 0 deletions

View File

@@ -3670,6 +3670,40 @@ gcc readv.c -o rv
## 第 14 章 多播与广播
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到。
### 14.1 多播
多播Multicast方式的数据传输是基于 UDP 完成的。因此 ,与 UDP 服务器端/客户端的实现方式非常接近。区别在于UDP 数据传输以单一目标进行,而多播数据同时传递到加入(注册)特定组的大量主机。换言之,采用多播方式时,可以同时向多个主机传递数据。
#### 14.1.1 多播的数据传输方式以及流量方面的优点
多播的数据传输特点可整理如下:
- 多播服务器端针对特定多播组,只发送 1 次数据。
- 即使只发送 1 次数据,但该组内的所有客户端都会接收数据
- 多播组数可以在 IP 地址范围内任意增加
多播组是 D 类IP地址224.0.0.0~239.255.255.255),「加入多播组」可以理解为通过程序完成如下声明:
> 在 D 类IP地址中我希望接收发往目标 239.234.218.234 的多播数据
多播是基于 UDP 完成的,也就是说,多播数据包的格式与 UDP 数据包相同。只是与一般的 UDP 数据包不同。向网络传递 1 个多播数据包时,路由器将复制该数据包并传递到多个主机。像这样,多播需要借助路由器完成。如图所示:
![](https://i.loli.net/2019/01/27/5c4d310daa6be.png)
若通过 TCP 或 UDP 向 1000 个主机发送文件,则共需要传递 1000 次。但是此时如果用多播网络传输文件,则只需要发送一次。这时由 1000 台主机构成的网络中的路由器负责复制文件并传递到主机。就因为这种特性,多播主要用于「多媒体数据实时传输」。
另外理论上可以完成多播通信但是不少路由器并不支持多播或即便支持也因网络拥堵问题故意阻断多播。因此为了在不支持多播的路由器中完成多播通信也会使用隧道Tunneling技术。
#### 14.1.2 路由Routing和 TTLTime to Live,生存时间),以及加入组的办法
为了传递多播数据包,必须设置 TTL 。TTL 是 Time to Live的简写是决定「数据包传递距离」的主要因素。TTL 用整数表示并且每经过一个路由器就减一。TTL 变为 0 时该数据包就无法再被传递只能销毁。因此TTL 的值设置过大将影响网络流量。当然,设置过小,也无法传递到目标。
![](https://i.loli.net/2019/01/27/5c4d3960001eb.png)
接下来是 TTL 的设置方法。TTL 是可以通过第九章的套接字可选项完成的。

1
ch14/README.md Normal file
View File

@@ -0,0 +1 @@
14.