本文主要是介绍Linux内核路由过程简述 ip_route_output_slow() ip_route_input(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
环回接口(loopback interface)的新认识
背景
前些日子在IDC实验docker的时候,为了避免与公司网络冲突,将bridge设置为127.x网段的IP,原以为这样就OK,后来发现在访问container内部的服务的时候无法访问。开始以为iptables的问题,搞了半天,后来,才发现系统对127.x.x.x的包根本不会经过bridge。这两天补习了一下linux的路由实现,才彻底明白其中缘由。
其实,关于环回接口,TCP/IP详解中已经描述得很清楚,只是自己没有去仔细阅读而已。
TCP/IP关于环回接口的描述
Linu支持环回接口( Loopback Interface),以允许运行在同一台主机上的客户程序和服务器程序通TCP/IP进行通信。 A 类网络127就是为环回接口预留的 。根据惯例,大多数系统把IP地址127.0.0.1分配给这个接口,并命名为localhost。一个传给环回接口的IP数据报不能在任何网络上出现。实际上,访问127.x.x.x的所有IP都是访问环回接口(lo)。
按理来说,一旦传输层检测到目的端地址是环回地址时,应该可以省略部分传输层和所有网络层的逻辑操作。但是大多数的产品还是照样完成传输层和网络层的所有过程,只是当 I P 数据报离开网络层时把它返回给自己。Linux的内核实现就是这样。
几个关键点:
(1)传给环回地址(一般是127.0.0.1 )的任何数据均作为IP输入。
(2)传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是因为广播传送和多播传送的定包含主机本身。
(3)任何传给该主机I P地址的数据均送到环回接口 。
从上面的描述可以明白,访问127.0.0.1和本机IP(比如192.168.1.10)都是通过lo来完成的。
这篇关于Linux内核路由过程简述 ip_route_output_slow() ip_route_input()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!