这个人很耐心,已经解释得很详细了。不过我是个吹毛求疵的人,非得把每个细节都弄得很清楚。其中最让我纠结的是ip地址转换到mac地址的过程。或许你说那不就是arp协议吗?那你就想的简单了点。
首先ip地址是网络层(layer 3)的概念,mac地址是数据链路层(layer 2)的概念。
网络层主要任务是路由,而数据链路层是提供相邻两个网络实体间端到端的数据传输,可以理解成为局域网内两台机器间的数据传输。
数据链路层的作用范围是局域网,那么其mac地址肯定是局域网内某台机器的mac地址。并且arp协议的作用范围也是局域网。但是ip数据包的目的地址未必都是局域网内的,如果不是,在局域网内进行arp广播查询该ip地址对应的mac地址,肯定没有人回应,因为大家谁都不拥有这个ip地址。
于是先要知道ip地址是不是同一个局域网里的,这个不难,使用子网掩码就可以确定。如果是同一个局域网,那么就可以arp了。那如果不是呢??
这就要靠网络层了。到这时候我才惊讶地发现,路由表不是只在路由器上才有的(以前我可都是这么以为的),本机上照样有,而且也有路由过程。在 windows下CMD下输入命令“route print”,就可以看到本机上的路由表(linux下是"route")。部分路由表项如下(我机器的ip是10.77.100.113,子网掩码是 255.255.255.0 ):
----------------------
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 10.77.100.1 10.77.100.113 10
10.77.100.0 255.255.255.0 10.77.100.113 10.77.100.113 10
----------------------
最后一条其实意思就是,如果ip地址是同一个局域网中的地址,则直接发送到该ip地址就可以了(表中看起来是路由给自己,我估计是这个意思,linux下就是一个星号表示的,更能理解)。
中间那条其实就是默认路由路径(因为任何一个ip地址 AND 0.0.0.0 后肯定都是 0.0.0.0 的),其意思就是,如果其他路由项都不符合,则发送到默认网关。