一、网络层提供的服务
说明:网络层负责在不同网络之间转发数据包,基于数据包的
IP
地址转发。至于多个数据包在接收端的顺序、是否丢包(不负责重传)这些都不是网络层的任务,而是传输层的任务了。
二、网络层如何发送数据
- 应用程序准备要传输的文件
- 传输层将文件分段并且编号
- 网络层田间目标
IP
地址和源IP
地址 - 数据链路层一般有两种情况,一种是使用自己的子网掩码,判断自己在哪个网段和目标地址在哪个网段。如果在同一个网段,则直接使用
ARP
广播解析目标IP
地址的MAC
地址,然后直接传输。如果不是在同一个网段,则首先要询问网关的MAC
地址,将数据先传递给路由器,路由器根据目标IP
地址将数据发送目的主机。对于数据,在传输层叫段,在网络层叫包,在链路层叫帧。
说明:从上图中我们可以清晰的看到数据是如何传送的,同时也可以看到各类设备工作在哪一层。
三、网络层协议
3.1 ARP协议
将IP
地址通过广播目标MAC
地址是FF-FF-FF-FF-FF-FF
来解析目标IP
地址的MAC
地址。只能在本网络,不能跨网络。也就是只能扫描本网络的MAC
地址。使用命令arp -a
可以查看某时刻的网络MAC
地址。
3.1.1 ARP欺骗
比如现在同一个网络中有三台计算机P1、P2、P3
,其物理地址分别是M1、M2、M3
,此时P1
要向P2
发送数据,于是使用ARP
协议广播,首先P2
将自己的物理地址高速了P1
,于是这个地址M2
就存储在了P1
上,但是此时P3
通过黑客软件伪装成P2
告诉P1
物理地址为M3
,于是之后所有数据都发送给P3
,当然P3
为了不被发现,可以将数据再次转发给P2
。这就是ARP
欺骗。我们可以使用命令arp -s 192.168.88.100 00-0c-29-53-48-c4
修改某个IP
地址的MAC
地址,此时本计算机就缓存了这个MAC
地址,而且是静态的,因为是管理员告诉的。如果要清除缓存的物理地址可以点本地连接,点击修复即可。以上我们可以知道,ARP
协议是用来将IP
地址解析为MAC
地址,而IP
地址用来将数据从一个网段转发到另一个网段。
3.2 网际控制报文协议ICMP
此协议用来检测网络是否通畅,比如我们使用ping
命令测试网络就是使用的此协议。在使用此命令的时候我们可以查看延时,同时关注一个信息,就是TTL
。TTL
表示数据包的生存周期,一般来说Linux
为64
、Windows
为128
、Unix
为255
,然后数据在传输的过程中每经过一个路由器则TTL
减一,通过这个值我们可以大概判断所ping
计算机的系统,如果TTL
减为零则数据不再传输,直接被丢弃。如果给ping
命令加上-t
,则表示让此命令一直进行下去。Windows
中pathping
命令能跟踪数据包路径,计算丢包情况。
3.3 Internet组播管理协议IGMP
- 组播(多播)
通过一个组播地址让一组计算机来进行接收,而不是向广播那样,所有的计算机都能接收到。 -
IGMP
协议
就是配置在一个组的路由器上面的,如果这个组都不需要接收数据了,那么配置了此协议的路由器就会知道发送端不需要发送数据了。
四、抓包分析数据
4.1 IP数据报结构
一个IP
数据报由首部和数据两部分组成
- 首部的前一部分是固定长度,供
20
字节,是所有IP
数据报必须有的 - 在首部的固定部分的后面是一些可选字段,其长度是可变的
说明:版本用来标识TCP/IP
协议的版本。区分服务是指,在传输信息的过程中,有些信息可能要求实时性,但是有些却没有这样的要求,于是对于这两种信息我们可以对其做上标记,同时也高速路由器优先传输哪种信息,这就是区分服务。总长度即数据报或分片之后数据报的长度。而前面讲到数据链路层的数据最大是1500
字节(最大传输单元MTU
),而这里的数据报却最大是2^16-1
个字节,这里就会产生冲突,这里使用分片将网络层数据报分成小的片,然后由链路层传输,一般情况下是不需要分片的。分片实例如下图6
。
而这里的标识是指,当一个数据报分片之后如何在接收端进行组装,那时就需要使用这个标识。标志表示数据报是否进行了分片,标志站3
位,目前只有前两位有意义。标志字段的最低位是MF(More Fragment)
。MF=1
表示后面“还有分片”;MF=0
表示最后一个分片。标志字段中间的一位是DF(Don't Fragment)
。只有当DF=0
时才允许分片。片偏移表示在分片之后, 某一个数据报在整个数据报中的分片位置的偏移是多少。生存时间(TTL
) 即数据报的生存时间,可以防止路由中的环路导致数据不能送达目的地。协议是指数据使用的是什么协议,是TCP
还是UDP
还是其他。
其中各协议对应的协议号为,ICMP:1、IGMP:2、TCP:6、UDP:17、IPv6:41、OSPF:89
。首部检验和(16
位)用于检验数据报是否被修改或者出错,首部检验和字段只检验数据报的首部,不检验数据部分,这里不采用CRC
检验码而采用简单的计算方法。
可选字段一般没有,用于支持排错测量等,在IPv6
中已被取消了。我们可以使用抓包工具进行查看,同时还可以使用抓包工具来排查网络故障。
五、IP协议
网络层的职责就是在路由器之间转发数据,不负责数据的是否出错等问题。而路由器是如何判断数据应该从哪个口转发出去呢?是如何选择路径的?这是通过路由表来进行选择的,路由表一种是由管理员告知的这一段数据应该怎么走,这就是静态路由;另一种是好几个路由器通过某种协议(RIP
等)相互学习到某个网段该怎么走,在传输的时候自己选择走哪条路径传输,这就是动态路由。这里所述的IP
协议是一个统称,即所有能让路由器学习到路由表的协议统称为IP
协议。
5.1 网络畅通的条件
说明:网络畅通的条件就是数据报在发送的过程中有去有回,即传输路径中的每个路由器都知道其要传递的下一个路由器地址,并且也知道数据反向回来时的目的路由器地址。所以计算机和路由器必须配置网关,同一个局域网中通信是不需要网关的。
5.2 静态路由
在使用静态路由时,需要管理员高速所有路由器所有没有直连的网络下一跳(下一个传输结点)给哪个路由器。这里注意:如果是如上图那样的网络我们可以手动设置一些静态路由即可,但是如果网络较为复杂,都手动设置会特别麻烦,而且容易出错,此时就需要使用动态路由了。静态路由适合于小规模网络,不能够自动调整路由。
5.3 动态路由
说明:
RIP
:周期性的广播路由表,使得网络中的其他路由器知道此路由器连接的线路。同时自己判断转发次数最少的路径为最佳路径,一般30
秒更新一次路由信息。最大转发次数为15
次,如果有16
个及以上的路由器则仍未不可到达,不适合网络规模较大的情况。OSPF
:此协议选择最佳路径的方式不是以转发多少次为标准,而是以带宽为标准,哪个路径的带宽大就选择哪条路径转发,这样会更快。