之前忘记说了,这些内容都是边看视频边写的,视频出自西安交通大学。
本期说的是IP分组转发的内容,里面详细介绍了IP协议跟ARP协议,最后再给出一个例子,说明这两个协议在网络中传输的具体过程。
1)Ip分组与转发
2)在Internet中,IP分组的特点
3)ARP协议
4)IP分组发送过程
1)Ip分组与转发
红色部分为固定部分,绿色部分是数据部分
- IP头包括20个字节的固定长度和变长(最多40个字节)的可选部分,
- 版本:如IPV4,IPV6;
- 头部长度:IP分组头的长度
- 长度:IP头+数据部分的长度
- 标识域: 很重要,用于分段与重组
- 标识位: 有DF跟MF,当DF=0时,表示允许分段;MF=0时,表示这是最后一个分片
- 偏移量:标明分片在原始的报文中的位置.
举例来说明标识域标识位跟偏移量的使用,假设有AB两个节点,跟R1 R2两个路由,现在A->R1->R2->B这样传输,
长度=4000 | 标识符 | MF=0 | 偏移量=0 |
这是一个长度为4000bit的一个报文,假设经过路由的最大长度只能是1500bit,所以传输的过程中要将它分为几个分组分别发送,这里分组的长度要满足,长度-IP头必须是8的整数倍才行.
长度=1500 | 标识符 | MF=0 | 偏移量=0 |
1500-IP头=1480;1480/8=185
长度=1500 | 标识符 | MF=1 | 偏移量=185 |
同上,偏移量也是185
长度=1040 | 标识符 | MF=0 | 偏移量=370 |
这里的长度为什么是1040呢?因为给前两个分组的IP头留出位子,这样数据的长度才能是4000-20=3980.
这样分组后,在最后一个路由器是要把这些分组重装起来,而这些分组又不是按顺序到达的,所以最后一个路由器通过偏移量和MF,就可以进行合理有序的重装了。
- 生存期(TTL):指明这个IP分组能在网络中存活的最长时间,这里的时间是指跳数(从跟由R1跳到R2为一跳),当TTL为零的时候,这个IP分组就会被丢弃了~我们经常使用的Ping指令就能一项参数是TTL的值. 这里TTL的作用是,当一个数据包因为种种原因没能传到目的主机,这个包就会流浪在网络中,这时网络的开销就会增大,所以才会制定这个TTL机制.
- 协议域:上层是哪种协议如:TCP UDP等
- 源地址:本身的地址
- 目的地址:要发送的地址
2)在Internet中,IP分组的转发具有如下特点
- 每个IP分组中都包含目的主机的IP地址(有时的源地址不是发送主机的IP地址哦)
- IP地址中的网络号唯一标识Internet中的一个物理网络,路由在转发过程中就按照网络号在不同的网络中传输
- 所有连接到相同物理网络中的主机和路由,它们的网络号是一样的,在同一个网络中可直接通信
- Internet中的每个物理网络至少有一个与之相连接的路由器
- 在路由器中根据目的IP地址进行转发
- 路由器中路由表的格式,在cmd中输入route print就可以看到路由表,可以简化成下图:
- 看一个子网互联的例子
看到子网1跟子网2,以总线式分布着,这两个网络由一个路由器相连,路由器连接着这两个子网,掩码使用的是标准的C类掩码,通过IP地址与掩码可得:子网1的网络号是202.1.64.0子网2的网络号是202.1.61.0.可知它们不在一个网络中,就通过一个路由相接。在这里还可看出,路由器的网络号跟他相连接的网络的网络号是一样的。
- 再看一个例子
三个子网络,以总线式的方式相连。三个子网络再通过三个路由器实现互联。尝试的画出R1路由器的路由表吧~
1、跟R1直接相连的网络有:20.0.0.0;30.0.0.0;50.0.0.0。直接相接,没有下一跳,距离也就是0
2、到10.0.0.0可以会经过R3,所以下一跳是20.0.0.0,距离为1. 路由表是实时更新的,所以也有可以通过R2再到R3这样走
3、40.0.0.0和60.0.0.0的方式跟10.0.0.0差不多
4、要是给在LAN1的三台主机分配地址,假设子网掩码是标准的A类掩码。可以分配为50.1.2.1;50.2.0.2;50.0.5.3。也就是说,只要网络号想同,主机号就可随意了。
5、而给R1这个路由器的三个端口分配IP地址,也要满足他们的网络号跟连接的网络的网络号相同,比如跟LAN1相接的可以是50.0.0.8,跟R3相连的可以是20.0.0.2等。
3)ARP协议
ARP协议:地址解析协议,解决的是从网络层地址到数据链路层的地址映射问题。使用arp -a这个命可看到你电脑中的ARP表--IP地址与对应的MAC地址。
在一个网络中,主机A在网络中广播去出一个 ARP请求包,想知道IP地址是10.1.0.5的MAC地址,这时的C收到这个包后回响应A,将自己的MAC地址发送出去。
4)IP分组发送过程
如图所示,AB之间想通信。跟AB直连的那个路由叫做网关。
1、假设A:202.117.15.4;B:202.117.15.8,子网掩码是标准C类掩码。用IP地址跟掩码的相与运算就可判断他们是否在同一个网络内,可知AB是在同一个网络内,是可直接通信的。然后,就通过刚才说的ARP协议,来获得目的IP的MAC地址(也可能是查A中的ARP表,因为之前可以已记录了B的MAC地址)。
2、假设A:202.117.15.4;B:202.117.16.8,子网掩码是标准C类掩码,可知他们不在同一网络。
则首选通过ARP协议获取网关的MAC地址(假设是202.117.15.1,红色部分相同就可啦,后面那个只要不是0或255都行)。网关收到请求后就响应之,返回他的MAC地址。
发送的IP分组:
源MAC:A 网关MAC 源IP:A 目的IP:B 这时网送就收到了这个IP分组,再解析帧,获得目的 IP:B,这时的网关就开始路由了,先查找路由表,确定下一跳在哪,再发送ARP请求包获得下一跳的MAC地址。
源网关MAC 目的网关MAC 源IP:A 目的IP:B 然后下一个路由收到后再解析…………
这样就一直下去,直到出口网关(也就是B所在的子网)。到C后,解析IP分组,取出TCP/UDP报文,转交给上层!
过程如下图描述
看跟写真是的二种完全不一样的概念,学习到很多,感觉网络很神奇,嘿嘿,进步进步~~