mirror of
https://github.com/riba2534/TCP-IP-NetworkNote.git
synced 2026-02-03 10:03:17 +08:00
P232 路由的 TTL
This commit is contained in:
34
README.md
34
README.md
@@ -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 个多播数据包时,路由器将复制该数据包并传递到多个主机。像这样,多播需要借助路由器完成。如图所示:
|
||||
|
||||

|
||||
|
||||
若通过 TCP 或 UDP 向 1000 个主机发送文件,则共需要传递 1000 次。但是此时如果用多播网络传输文件,则只需要发送一次。这时由 1000 台主机构成的网络中的路由器负责复制文件并传递到主机。就因为这种特性,多播主要用于「多媒体数据实时传输」。
|
||||
|
||||
另外,理论上可以完成多播通信,但是不少路由器并不支持多播,或即便支持也因网络拥堵问题故意阻断多播。因此,为了在不支持多播的路由器中完成多播通信,也会使用隧道(Tunneling)技术。
|
||||
|
||||
#### 14.1.2 路由(Routing)和 TTL(Time to Live,生存时间),以及加入组的办法
|
||||
|
||||
为了传递多播数据包,必须设置 TTL 。TTL 是 Time to Live的简写,是决定「数据包传递距离」的主要因素。TTL 用整数表示,并且每经过一个路由器就减一。TTL 变为 0 时,该数据包就无法再被传递,只能销毁。因此,TTL 的值设置过大将影响网络流量。当然,设置过小,也无法传递到目标。
|
||||
|
||||

|
||||
|
||||
接下来是 TTL 的设置方法。TTL 是可以通过第九章的套接字可选项完成的。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1
ch14/README.md
Normal file
1
ch14/README.md
Normal file
@@ -0,0 +1 @@
|
||||
14.
|
||||
Reference in New Issue
Block a user