网络层提供的服务

- 如图所示:
用交换机连着的是俩个网络,网络与网络之间用路由器来连,路由器就负责在不同网段转发数据,当H1要发送数据到H2,应用层就准备数据,传输层就将这些数据分段,编号,编上号之后要想将这些分段的数据传给主机还得在网络层给这些数据加上地址,目标地址和原地址,原数据加地址就组成了数据包,这个数据包需要给力路由器,路由器需要根据目标地址在选择路径(即选择发给哪个路由器还是都可以),如果都可以的话,就会实现一个负载均衡,一部分数据包走一个路由器,另一部分数据包就走另外一个路由器,路由器只管负责送数据包,当这些数据包到主机那时,可能数据包的顺序不一致,路由器只负责在不同的网络之间转发数据,不负责丢包重传,也不负责顺序的事, -
网络层,负责在不同网络之间尽力转发数据包,基于数据包的IP地址转发,不负责丢失重传,不负责顺序
image.png
发送数据

ARP协
- ARP,将IP地址通过广播 ,目标mac地址是FF-FF-FF-FF-FF-FF,解析目标IP地址的mac地址,扫描本网段MAC地址
- ARP协议为IP协议提供服务,IP协议为ICMP协议提供服务,ICMP协议为IGMP提供服务
注:虽然同为网络层协议,但是也有一个上下层的关系
image.png
-
在同一个网段中,俩台计算机要通信
image.png
1、在同一个网段中,俩台计算机要通信,在数据链路层部分,得知道对方的mac地址,第一次通信的时候,不知道对方的mac地址,计算机在通信之前,就会发广播,然后目标电脑接收到信息,就会将自己的mac地址发过来,然后原计算机中在收到目标电脑的mac地址时,就会将目标mac保存在自己的缓从中,再次通信就直接拿出来用,这一操作就是arp协议,将目标pc的mac地址与IP对应,相当于解析mac地址
-
跨网段通信
image.png
1、要是跨网段的通信,就要arp网关的mac地址,原计算机广播网关的mac地址是多少,网关回复它的mac地址,然后保存,以后的数据包都用此mac地址来封装,
ARP欺骗

- 如图所示:在pc1上有一个黑客软件,pc4要与pc0通信,在网上发广播说,pc0的mac地址是多少,当然,pc1也可以收到,pc0告诉pc4说它的mac地址是m1,然后pc4就写到缓从中,pc1赶紧告诉pc4,说pc0的mac地址是m2,pc4就会把m1删掉,换成m2,以后当pc4给pc0通信的时候,数据帧的mac地址都会写m2,mac地址写为m2,交换机就会把数据给到pc1这台计算机,然后pc1就会收到这个数据包,收到之后,修改一下,把目标mac地址改为m1,发给pc0,这样,pc4与pc0通信,就会经过pc1,当pc1装上一个抓包工具的时候,就能把所有的数据包都能抓下来。当然了,当pc0与pc4通信的时候,也可以将数据包给pc1一份然后再转发,这就是ARP欺骗
-
也可以用ARP欺骗拒绝某俩台计算机通信,
image.png
- 网络执法官可以规定某网络中任意俩台计算机通或者不通,如图所示,如果想要pc4与pc0不能通信,当4与0通信的时候,需要广播来实现解析0的mac地址,1也收到了,然后直接告诉4,0的mac地址是m9, 然后4的数据帧中的目标mac地址直接写了m9,然后将数据帧扔给交换机,交换机一看,没有mac地址为m9的计算机,就会将数据包直接扔掉,这样俩台计算机就不能通信,
应当注意的问题
- ARP是解决同一个局域网的主机或路由器的IP地址和硬件地址的映射问题,
- 如果所要找的主机和源主机不在同一个局域网上,那么就要通过ARP找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络,剩下的工作就是由下一个网络来做
- 从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的
- 只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动地将IP地址解析为链路层所需要的硬件地址
ICMP(网际控制报文协议)协议和ping命令
- ARP协议负责将IP解析为物理层地址
- IP协议负责转发数据包
- ICMP在IP协议之上,又在传输层协议之下,属于网络层,用来测试网络层,网络是不是畅通,网络层是不是有故障,如果有故障的话这个协议还可以给报告这个故障
- 使用ICMP协议最多的命令就是ping命令,ping命令底层就是ICMP协议
ping命令诊断网络故障
- ping,因特网包探索器,用于测试网络连接量的程序,ping发送 一个ICMP回声请求消息给目的地报告是否收到所希望的ICMP回声应答
- ping指的是端对端连通,通常用来作为可用性的检查,但是某些病毒木马会强行大量远程执行ping命令,强占你的网络资源,导致系统变慢,网速变慢,严禁ping入侵作为大多数防火墙的一个基本 功能提供给用户进行选择
- 如果你打开ie浏览器访问网站失败,你可以通过ping命令测试到internet的网络连通,可以为你排除网络故障线索,下面展示ping命令 返回的信息以及分析其原因
IGMP
- 点到点:一个计算机到另外一个计算机之间的通信,只有一条线路
- 广播:一对多,一个计算机发出的信息,所有计算机都可以收到
- 组播=多播:一些计算机绑成一个组,然后另外一台计算机发送数据可以一个组一个组的发
IGMP协议(Internet组播管理协议)
- IGMP协议配置在路由器的接口上的,路由器周期性的扫描一下哪些计算机绑定了多播地址了,如果一个网段没有计算机绑定这个多播地址,那么这个路由器就会通知上一个路由器,这个网段没有计算机绑定这个地址,你也别过来了,
- Internet组播管理协议就是周期性的扫描本网段有哪些计算机还在绑定这个多播数据包,绑定多播地址,扫描之后向上一个路由器请求多播数据包过来。
如果是点对点访问视频资源,那么访问方就可以随意拖进进度,可以暂停或者继续,如果是多播访问,例如电视,那么服务器放到哪,你就只能看到哪,不能随意暂停或者拖进度
抓包分析数据包首部
- IP协议不是一个单独的协议,rip、ospf协议都属于ip协议
IP数据包的结构
- 在网络层,不只是加地址,还要加一些其他的东西,加地址只是最重要的
IP数据包
-
一个数据包由首部和数据俩个部分组成的
1、首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的
2、在首部的固定部分的后面是一些可选字段(大多数情况下是没有的),其长度是可变的
image.png
image.png
-
版本:占了四个bit,占四位二进制,用来表示这个版本是哪个协议,用来表示TCP/IP协议的版本,v4 v8,如果是4的话,代表的是ipv4,如果是6的话,代表的是ipv6,
image.png
-
首部长度:就是告诉IP数据包的首部有多长,因为有变长部分,规定首部长度有多少之后,剩下的全都是数据
image.png
-
区分服务:就是当多个计算机在一个线路上通信的时候,有可能A计算机在与B计算机语音或者视频,C计算机用同样的线路要发一封邮件给B,那么这时候可能语音要比较及时的实时的传输数据,要比邮件更加着急一点,所以会把这俩种服务区分开,更加着急的会加上一个标签,用来通信的时候更加快捷的先走
image.png
-
总长度:用来表示整个数据包的长度,俩个字节来表示,16个bit,这个数据包就有(2^16) -1=65535个字节
image.png
- 网络层与数据链路层标准不一样
1、网络层:数据包 最大65535字节 其中首部占20字节
2、数据链路层:数据帧 最大1500字节 最大传输单元 MTU 最小64个字节 - 如果网络层的数据比数据链路层的数据要大,要怎么传呢?
1、传输层在分段的时候,一段数据比数据链路层要大,没有考虑数据链路层的问题,传输层传到网络层,网络层就不考虑数据链路层能支持多大,加上IP地址就直接发给数据链路层,结果数据链路层不支持这么大的数据,因为超过1500字节了,那么在这时候就会在网络层将数据包分成片传输,分成数据链路层能够接受的最大数据帧的数据,将一个数据包分成 多个片然后加上IP地址加上MAC地址,然后分片传过去,一般情况下,传输层准备的数据包不会超过1500字节,但是如果你分的特大包,你就需要分片了, - 一个数据包;里面的数据最大能是多少个字节?
- 数据链路层最小能是64个字节,其中加MAC地址,协议类型,及帧校验序列,这共18个字节,所以数据部分变成了64个字节,数据帧最大的时候,可以是1500字节,对于数据链路层来说,从网络层传过来的数据包是46~1500字节直接
- 数据链路层中的数据就是网络层传过来的,包括网络层的首部加数据,数据链路层最大数据为1500字节,那么网络层的数据包(首部加数据)就是1500字节,在这里面,网络层的首部又有20字节的数据,所以,真正的数据最大就是1480,凡是超过1480的数据,就不能传到数据链路层,当数据包过大时,就需要分片,然后发给数据链路层,
- 数据包 如果不分片 数据包最大不超过1480字节
- 数据包分片的时候:在传输层分的那些段太大了,网络层加上地址经过在数据链路层传的时候,占不下了,这个时候怎么处理呢?
- 当传输层分段的数据过大时,就会分片,把数据分成一片一片的,然后加上IP地址,传给数据链路层,三片数据包扔到网上的时候,路由器选择路径的时候就一个一个的选,路由器并不知道它分了片了,路由器就只是认为他就是一个数据包,分了片的数据包可能由不同路径传给目标计算机,一片一片传过去,数据包都可能丢了,目标计算机到网络层时,需要把这些数据包组成一个大的包,然后在网上传
总结
-
计算机在通讯的时候,网络层的数据包可以是最大65535个字节,而以太网的数据帧要求最多不超过1500字节,这时候就有可能为了在数据链路层通过,把大的数据包分成多个,叫分片数据包,分片的数据包单独的写上地址,单独选择路径,通过路由器的时候,单独的根据地址选择路径,到了接收端,他要把三个数据包合并成一个数据包,然后呢,给了网络层
-
标识:接收端是如何知道这三个分片是一个包呢?这就需要这三个分片的数据包得有一个标识,就是为了标识一个完整的数据包,便于在分片之后在组成一个完整的数据包
image.png
-
我的计算机在产生数据报的时候,给每一个数据包都分配一个编号,比如三个数据包编号为100、101、102,编号为100的数据包过大,然后分成了三片数据包,这三片数据包都有一个标识100,意为这是100数据包的,到了接收端,接收端一看这是100,就会把同为100的数据包合起来,
-
标志:我的计算机收到了一个数据包,他是一个分片呢还是一个完整的数据包呢?如果是分片的话,里面就会有一个标记,说这是一个片数据包, 如果是一个完整的数据包,标志就认为这是没有分片,这是一个完整的, 标志就是用来标记收到的数据包是一个数据包的分片还是一个完整的数据包,
标志:占3位,目前只有前俩位有意义 ,标志字段的最低位是MF。MF=1表示后面“还有分片”,MF=0表示最后一个分片,标志字段 中间的一位是DF,只有当DF=0时,才允许分片
image.png
-
片偏移:用来指明这个数据包这个分片的第一个字节是整个字节的第多少个字节
image.png
image.png
image.png
-
生存时间:计算机发送数据包的时候,给这个数据包TTL,这个TTL每过一个路由器,就会减一,当TTL变成0的时候,数据包就不能在网上传了,数据包就会消失丢掉,这个时候,路由器就会返回告诉计算机,TTL耗尽,不能再往外转了
image.png
-
每过一个路由器,数据包的mac地址要修改,数据包中的TTL(生存时间)也要修改。
-
用处:解决环路问题,如果计算机出现环路,数据包没有TTL的限制,数据包会在线路上一直传,占用资源
-
·ICMP协议中的ping命令中的TTL可以大体推算出发送数据包的服务器是什么服务器,是什么系统,但不是绝对,因为TTL是可以改的
1、Linux 发送数据包刚开始TTL默认为64
2、Windows 刚开始TTL默认为128
3、Unix 刚开始TTL默认为255 -
协议:标识协议号,网络层的这些数据包中的数据是什么数据,是UDP还是TCP,是ICMP协议还是IGMP协议,还是OSPF协议,用协议号来标识,
image.png
-
常见的协议号:ICMP 协议号1,IGMP 协议号2,TCP 协议号6,UDP 协议号17,IPV6 协议号41,OSPF 协议号89
image.png
-
首部检验和:数据包在传的过程中,首部的TTL是要变化的,数据包在传的过程中,数据包是不是被修改了,是不是出现了错误,用首部检验和来检验,接收端收到之后,发现,检验正确,他就接受这些数据端,他用这个首部检验和一判断,发现有错误,那么这个数据包就丢弃了
image.png
image.png
-
首部检验和用来存放用来检验这个数据包首部在传的过程中有没有出现错误
-
可变部分:可选字段,默认是没有的,这个部分本来是用来排错测量安全的措施,此字段长度可变,从1字节到40字节不等,取决于所选的这个项目
-
填充:如果可变部分不够,他就填充成0
网络畅通的条件
-
数据包有去有回
image.png
网友评论