【TCP/IP 笔记】IPv4-04 | 数据报发送、路由、路由表
参考 <The TCP/IP Guide> http://tcpipguide.com
直接传送和间接传送
- 直接传送 (direct delivery):当数据报的发送者和接收者在同一个物理网络下,数据报是直接从发送者发往接收者的。
- 间接传送 (indirect delivery):当数据报的发送者和接收者在两个不同的物理网络下,传送就是间接的。数据报要通过一个或多个中间设备(路由器)来实现跨网络传送。我们通常把这个间接的传送过程称为路由 (routing)。
间接传送中是包含直接传送的,间接传送中发送者发往路由器、路由器发往路由器和路由器发往接收者都属于直接传递。
路由
路由的过程其实和显示中送信的过程是很像的,假如我要从深圳福田寄一封信到日本东京都米花町5丁目39番地1号,我将信放进街道的信桶,邮递员来信桶将信带到福田区的邮政局,然后再带到深圳市邮政局 -> 广东省邮政局 -> 中国邮政局 ->日本邮政局 -> 东京都邮政局 -> 米花町邮政局…… 数据报路由也是这样,先判断目的 IP 地址是否在同一个网络,如果是便直接传送到目的地,如果不是就传送给本地的路由器(本地邮局),由路由器判断目的地址是否在它的子网上(如深圳市邮局判断目的是不是在深圳市内)或在与之直接相连的网络上,如果不在就传给下一个路由器(广东省邮局),如果在则传给对应网络的路由器(如日本邮局判断目的在东京,东京属于日本),就这样一步步传到目的地址所在的网络。
这个过程用到了一个重要的概念:下一跳 (Next-Hop),发送者不需要知道去往全世界每个设备的路由,路由器也不需要知道,只要知道下一跳去哪就可以了。就像我要寄信去米花町,我不需要知道在哪怎么去,我只要知道怎么去街道的邮桶就可以了,然后信就通过邮递员和邮局一跳一跳的跳往目的地。
路由表 (Routing tables)
路由器接受数据报并将它传送到下一跳,那么问题来了,路由器怎么知道下一跳是谁?每个路由器都维护着一组信息,这组信息提供了不同网络所对应的路由器,这组信息称为路由表。路由表告诉路由器发往不同网络的下一跳路由器是哪个。每当数据报传送给路由器,路由器就在路由表中查找目的地址网络号所对应的下一跳路由器,然后将数据报传送给下一跳路由器。很显然路由器不可能知道去往全球每一个网络的路径,路由表也不会包含所有网络的下一跳,遇到路由表中所没有的网络时,路由器会传送给路由表中的默认下一跳,这是由网管设置的。到这里我们可以得知,下一跳不一定也通常不是目的网络,下一跳是目的网络的情况也就发生在最后一跳而已,虽然下一跳不一定是目的网络,但可以离目的更近。路由表中不仅包含与路由器直接相连网络的对应下一跳路由器,还包含路由器学习得知的一些远一点(与其不直接先连)的网络的下一跳路由器,当然这个下一跳并不是直接到达那个网络,而是通过这一跳可以离目的更近。