在过去的十年里,我一直在做小型自由IT工作(除其他外)。 我已经build立或者重build了更多的本地networking安排,而不是我可以关注的。最近我一直在研究networking知识中的一些重大差距。 总而言之,虽然我绝对不会称自己为“专家”,但我认为在这一点上,我有一个体面的把握如何在networking周边的事情,以及公平的理解大多数networking基础(层OSI堆栈,TCP / IP,DNS,MAC地址和ARP,更高层协议等)
然而,有一天我又发生了一些事情:“我怎么向某人解释在互联网上路由一个数据包的过程呢? 而且我意识到我会很难回答这个问题。
现在,我对于边界网关协议是什么,或者路由表是什么,或者什么是互联网基础设施对等点,至less有一些了解。 但是我承认,我并不真正了解这些事情和其他事实如何确定路由器实际上将数据包转移到目标IP地址的过程。
那么,接收数据包的Internet上的路由器如何决定将其转发给哪个路由器呢? 那路由器怎么知道把数据包转发给哪个路由器呢? 正如我所说,我对互联网路由基础设施相关的元素和概念有一定的了解,但我不清楚所有东西如何组合在一起,实际上允许一个给定的路由器做出关于在哪里发送数据包的一个好的路由“决定”来做它的一部分,正确地将数据包移动到最终目的地。
(注意:我已经查看了大量的资源,以便更好地理解这一点,但是到目前为止,我所遇到的大部分事情要么是(1)在互联网上的路由器知道在哪里发送下一跳的数据包,或者(2)在技术细节和行话方面陷入困境,以至于难以获得路由器决策点上所有东西如何组合的画面。这将是一个很好的地方,以获得对这个问题的实际技术答案,这也可能是一个非专家在networking上可以理解的。)
正如你已经提到的BGP是你的基本答案。
我会尽量总结这一点,但答案可能会相当长和复杂。
IP地址由ARIN +几个其他类似的国际组织分配,这些组织负责分配和跟踪IP地址空间。
一个ISP的边界路由器(无论它们可能在什么地方)然后宣告它们是所述IP地址空间的目的地,并且它们也可以通告最佳path。
networking工程师还可以使用各种algorithm和设置等来configuration路由器采取特定路线到达目的地。 例如避免一个已知的不良载体,或更复杂的情况。
但是,你要找的是BGP,它有很多select。
一些链接进一步阅读: http : //searchtelecom.techtarget.com/feature/BGP-essentials-The-protocol-that-makes-the-Internet-work http://www.cisco.com/c/en/us /support/docs/ip/border-gateway-protocol-bgp/13753-25.html
路由器使用路由协议在互联网上分发关于每个networking位置的信息。 每个参与路由协议的路由器都build立一个路由表(其他路由器大多使用预先configuration的默认路由)。 每个路由表条目基本上都说:“为了到达前缀P内的目的地,通过接口I发送到下一跳地址A”(除非目的地在直接连接的networking上,在这种情况下没有下一跳地址)。
当一个路由器想要发送到一个目的地时,它会查找最长前缀的条目,然后跟着它的方向转发数据包。 path上的每个路由器都使用相同的机制,数据包最终到达目的地。
实际的实现使用优化,例如caching和硬件function,自动将地址与路由表匹配,但以上是基本algorithm。
路由器有一个路由表,里面充满了关于在哪里发送数据包的信息。 如果它是一个简单的家庭路由器,它可能有两个条目; 本地networking(例如192.168.1.0/24)直接连接在局域网接口上,其余的一切都通过广域网接口的默认路由发送到ISPpipe理的路由器网关地址(下一跳)。
如果路由表如此简单,或者通过运行某些路由协议(如BGP或OSPF)与对等方进行通信并计算路由表的内容,则可以手动填充路由表。