IP与以太网的包收发操作
本节内容和前面的相比稍微有些抽象,我是用城市公交站来理解的网络包经过IP模块的发送操作。
网络包:
网络包是由两部分组成,头部和数据部分。头部包含目的地址等信息,数据部分就是协议中的一些数据等。
IP包:
IP包包含了两个部分,一个是Ip头部,还有一个是数据部分(数据部分包括TCP头部和数据块,也就是前几篇文章所讲的部分)
以太网包:
以太网包包含了三个部分,MAC头部,IP头部,和数据部分。
派送一个网络包就像是一个正在旅途的人要经过很多站点,从村子站点到镇子站点,从镇子站点到另外一个城市站点,然后从一个城市到另一个城市。网络包的发送也是如此。网络包并不是从家门口就能直接坐飞机到目的地的。也需要进行一定的站点传输。而标记网络包的目的地的就是IP头部。假如我们从上海出发,目的地是北京,其中有很多线路,和站点,每一个站点就相当于一个转发设备。当标记有最终位置的网络包到达该站点后,站点的路线表中就会指示该乘客下一站是哪里,然后游客到下一站,下一站又会指路,最终到达目的地。
转发设备:
路由器:根据目标地址判断下一个路由器的位置
集线器:在子网中将网络包传输到下一个路由
路由器指路,集线器送路。
集线器是按照以太网规则传输包的设备,而路由器是按照IP规则传输包的设备
(1)IP协议根据目标地址判断下一个IP转发设备的位置。(信息在IP头部)
(2)子网中的以太网协议将包传输到下一个转发设备。(信息在MAC头部)
有关IP地址在以太网中传输问题:
以太网中是无法理解TCP/IP的传输规则的,就好比你知道目的地的经纬度坐标,但是不知道他到底是什么地方。发送方的mac地址很容易找到,只需要读取自身所使用的网卡的ROM值即可(ROM值是计算机网卡在生产的时候就写入在其中的,也就是当前网卡所在ip地址的MAC地址值)。但是如果要知道目的地网卡的mac值的话就需要查询。
当前网络包在某个路由器下,那知道了下一个需要到达的ip地址,但是我们不知道mac地址,所以集线器无法完成发送操作,但是我们可以通过路由器得到ip地址,然后通过ARP协议(即广播系统)向同一子网下的所有设备发送询问信息:“这ip是谁的地址”。收到对应回复后就知道了下一个路由器的mac地址。
这样的广播处理方式最终造成了一个问题。每当有一个网络包需要查路时都会给子网下的所有设备发送一个ARP包,这样会造成网络负担。所以就有了缓存技术,查询一次后短时间内将查询信息放入缓存中,这样短时间内如果发送来新的查询那么就不用重复发放ARP询文了。但是会造成一个难以解决的问题:如果缓存存在期间某个设备换ip了。那就真的是运气太差了,笔记清除缓存重新搜索一般就是几分钟之内的事。