1. 网络层提供的服务
网络层负责在不同网络之间尽力转发数据包,基于数据包的IP地址转发。不负责丢失重传,不负责传送顺序。
上图中,主机H1和H2通信的时候:
- 应用层准备数据,
- 传输层将这些数据分段并编号,
- 网络层将这些分段的数据加上地址(H1和H2的地址),这就叫做数据包。
(1)这些数据包传给路由器(路由器负责在不同网段转发数据),路由器根据目标地址选择路径,每个数据包到达H2的路径不尽相同,所以这些数据包到达H2时未必是按照顺序到的。但是路由器只负责传数据包而不管这是第几个数据包。
(2)如果某个路由器的某个接口没有处理过来某个数据包,会导致数据包丢失,但是路由器不会管这个事。
综上:所以说网络层只负责传数据,不管数据包顺序也不管丢没丢,路由器只负责选择路径和传送数据。至于所传的数据是否完整,是由传输层负责的,若传输层发现某个包没有受到,传输层会要求对方再发一遍
2. 网络层如何转发数据包
2.1 数据包在互联网(特指Internet)中的传送
Internet的组成既有局域网、又有广域网;既有光纤又有铜线,既有卫星传输,又有无线局域网的传输;
- 互联网的复杂性体现在物理层就是:介质复杂,接口也复杂。
- 互联网的复杂性体现在数据链路层层就是:不同的协议。
网络层只关心数据包的下一跳,选择最优出口,至于出口是局域网还是广域网,网络层不关心。路由器工作在网络层(第三层),路由器在选择路径的时候,是看网络层的地址再决定怎么走,所以说路由器是三层设备。
2.2 互联网络与虚拟互联网络
可以将整个Internet想象成一个虚拟的网络,有利于排除网络故障通过分层的思想判断是网络的问题还是应用程序的问题
2.3 验证网络层功能
(1)若一个网络中既有交换机又有集线器,这依然属于一个网络,只是通过集线器将这个网络实现了扩展,只有一个交换机,所以依然是一个网络。
(2)ip地址分为网络部分和主机部分;子网掩码用于告诉计算机哪里是网络部分,哪里是主机部分
- 举例:ip 10.0.0.0 子网掩码255.0.0.0 则说明10就是ip地址的网络部分。
(3)同一个网段中ip地址的网络部分必须一致
(4)图中的两个路由器必须配网关,网关的地址就是这个网络中第一个能用的地址,如图中10.0.0.1就是网关地址,就是路由器左侧接口的地址。
3. 网络设备和OSI参考模型之间的关系
3.1 计算机通信的过程分为“本网段通信”和“跨网段通信”
3.2 PC4和PC3通信
发送端
- 5层:应用层:应用程序准备要传输的文件
- 4层:传输层:将文件分段并编号
- 3层:网络层:添加目标ip地址和源ip地址
2层:数据链路层(分两种情况):首先会根据自己的子网掩码分析自己的ip地址是否和目标ip地址是否处于同一个网段
情况1:和自己同网段的计算机通信:会解析目标IP地址的MAC地址(网络层的ARP协议,通过广播的形式解析对方的MAC地址:PC4会发一个广播包(全1)通过交换机,对方计算机受到后响应,之后回传自己的mac地址)
情况2:和自己不同网段的计算机通信:交换机是根据mac地址来转发数据的,由于每个计算机都配备了网关10.0.0.1,此时PC4就要ARP(广播10.0.0.1)路由器的mac地址,路由器将自己的mac地址回传,此时数据链路层加上mac地址,并在尾部加上帧校验序列FSC1层:物理层:集线器负责传输并加强比特流
- 2层:数据链路层:交换机存储转发比特流:交换机的接口开始收这些比特流,这些比特流就存储在交换机的这些接口上了,交换机开始看目标mac地址并选择出口,从另一个以太网口将比特流发送出去。
- 3层:网络层:路由器的网卡也工作在物理层接收比特流,查看目标mac地址是否给自己的。路由器受到数据帧之后就会将其中的mac地址给去掉,看自己收到的数据包来选择路径(路由器看不懂数据包里的数据,只能看懂ip地址),根据路由表来选择出口。
- 2层:数据链路层:路由器的网卡也工作在数据链路层,由路由器的网卡重新封装数据帧,重新写上目标mac地址和源mac地址,由于接下来是点到点的线路且用的是ppp协议,所以目标mac地址是全F
- 1层:物理层:又变成比特流在网线上传输
2层、3层、2层、1层:第二个路由器接收发送同理,发送的时候,得知这个数据包要想去12.0网段要通过某个接口发出去,并重新封装mac地址,m3/m4.之后变成比特流传输
接收端
- 1层:比特流到达PC3的网卡
- 2层:再到数据链路层,数据链路层看到目标mac地址确实是给自己的
- 3层:到网络层之后将mac地址去掉,留下数据包
- 4层:这个数据包再给传输层就把网络层地址去掉了
- 5层:传输层将这个数据段提交给应用层,应用层再将这些数据段合成一个整的
说明
- 点到点的线路如果用的是PPP协议,则设备的物理层地址是固定的FF,因为链路上没有别的设备
- 计算机若想跨网段通信则必须要配网关
- 物理地址决定下一跳,IP地址决定终点
- 对路由器来说,看到的就是数据包的流动
- 对于交换机来说看到的就是数据帧的流动
- 对于物理层的设备看到的是比特流的流动
- 器件工作在哪一层是指最高可以看懂那一层:对于二层的交换机也看得懂物理层的比特流;对于三层的路由器看得懂数据链路层的帧和物理层的比特流
3.3 思考:路由器会不会中病毒;交换机会不会中病毒;集线器会不会中病毒
- 病毒就是一段代码,病毒在传的时候和普通数据一样也要分段、加ip,加mac传,到接收端还原成一个完整的病毒,而交换机、路由器中传的都是病毒的一小段,这样病毒是运行不了的。病毒是应用程序,路由器、交换机是网络设备,所以肯定不会中病毒。
- 但病毒会影响这些网络设备,某计算机中病毒了,始终发广播包(目标地址全1),交换机就会忙着发广播包,导致交换机很忙,导致其他计算机正常访问网站的带宽都被占用,打开网页特别慢
2. 网络层协议
2.1 TCP/IP协议之间层级关系
- 其中网络层协议有4个:ARP、IP、ICMP、IGMP
- 这些协议也是分层,比如:ARP为IP提供服务,IP为ICMP和IGMP提供服务。
2.2 ARP协议
2.1.1 ARP协议的作用
(1)作用:通过发送mac地址是FF-FF-FF-FF-FF-FF的广播包,广播目标ip地址,以此来解析目标ip地址的mac地址
(2)举例:
- 计算机A(ip地址记为ipa)给计算机B(ip地址记为ipb)发数据,那么A就需要B的mac地址将数据包封装成帧。A如何获得B的mac地址呢?
- 若AB同网段,根据ARP协议,A会发送一个目标mac地址为FFFF的广播包,路由器看到广播包后会将其转发给所有的计算机,这个广播包的内容就是A在询问ipb的mac地址是多少。B收到后,会将其MAC地址回传给A。如果AB要多次通信并不需要每次都解析B的MAC地址,第一次解析之后,A就记下了。
- 若AB不同网段,那么A就要通过ARP协议询问网卡的mac地址。
(3)说明:广播只能广播到本网段,跨不了路由器,路由器是隔绝广播的。
(4)ARP协议是数据通信之前的一个动作,所以所ARP协议为IP协议提供服务。
2.1.2 ARP欺骗
举例1:
计算机1想和计算机2通信的时候,通过ARP协议得到计算机2的MAC地址M2,这时计算机3赶紧告诉计算机1地址是M3,那么计算机1接收端,M3就会将M2覆盖掉。以后计算机1和计算机2通信的时候,目标mac地址都是M3,那么交换机就会将计算机原本传给计算机2的数据帧给传给计算机3.计算机3收到数据后将目标MAC地址改为M2,再将这个数据传给计算机2.这样计算机1和2通信,其中的数据都经过计算机3转发。当计算机2给1发数据的时候也可以通过同样的方式让计算机3当中间人。
举例2:
还可以利用ARP欺骗拒绝两台计算机通信。在计算机3上安装一个软件叫做网络执法官,可以规定一个网段中的任何两台计算机通还是不通。实现方式如下:当计算机1解析计算机2的MAC地址的时候,网络执法官收到之后告诉计算机1地址是M9,然而这个网络中根本没有M9
举例3:
p2p终结者软件可以控制本网段中计算机访问internet的流量。实现原理如下:本网段计算机向访问internet的时候,需要解析网关的mac地址,这时p2p软件直接将自身的mac地址告诉其他计算机,所以每天计算机上网的时候都要经过计算机3才可以将数据转发给网关,这个时候计算机3可以指定规则决定每个人上网的带宽
举例3:
一个计算机1和本网段的计算机都同通但是不通外网,而本网段的计算机都通外网,所以这里可能发生了ARP欺骗
如何断定是由于计算机1缓存了一个错误的网关mac地址造成不能访问外网的呢?
- 在计算机1上运行arp-a 查看其缓存的网关mac地址
- 计算机2可以访问外网那么计算机2上缓存的网关Mac地址是正确的,这时在计算机2上运行arp-a,产生计算机2缓存的网关mac地址。
- 若两次结果不一样说明计算机1缓存的是一个错误的网关mac地址。
解决方法:
- 这时在计算机1上按照以下格式运行代码就可以了,这就是人为加了一个静态static的绑定,以后访问外网就不要用arp进行广播了。
arp -s “网关ip地址” “正确的网关mac地址” 。
- 最后在路由器上静态绑定计算机1的mac地址,这样路由器到计算机1也不用arp了
总结
若网段中 所以的计算机都知道彼此的mac地址,那么就不需要arp协议了,这些错误的mac地址造成的网络故障是属于数据链路层的故障。
2.3 IP协议
ARP协议用来广播地址
IP协议负责把数据包从一个网段转发到另一个网段
2.4 网际控制报文协议ICMP
- 网际控制报文协议ICMP:用来测试网络层是不是有故障,是否畅通,如果有故障还可以报告故障。
- 重点介绍使用该协议的一系列命令,使用这个协议最多的命令是ping这个命令
2.4.1 ping命令诊断网络故障
1. 介绍
C:\Users\Ruanc>ping www.baidu.com
正在 Ping www.a.shifen.com [183.232.231.174] 具有 32 字节的数据:
来自 183.232.231.174 的回复: 字节=32 时间=126ms TTL=54
来自 183.232.231.174 的回复: 字节=32 时间=74ms TTL=54
来自 183.232.231.174 的回复: 字节=32 时间=108ms TTL=54
来自 183.232.231.174 的回复: 字节=32 时间=63ms TTL=54
183.232.231.174 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 63ms,最长 = 126ms,平均 = 92ms
上面这些Ping之后返回的信息都是ICMP协议告诉我们的。
- 通过“时间”查看延迟,
- TTL是这个数据包的生存周期,每过一个路由器就减一,当这个数据包的TTL变成0了,这个数据包在网上就自动消失了,这样的好处就是防止数据包在网上做循环。
2. 通过ping查看对方是什么系统
通过ping 对方服务器的ip地址 就可以通过TTL判断对方是什么系统。Linux 64//Window 128//Unix 255
- 举例:计算机A Ping计算机B的ip地址,数据包在B(windows)的时候对应的TTL是128,回传给A的时候,可能经过几个路由器,变成127,126,125(A收到的TTL)这些差不多的数,差不多可以判断B就是Windows系统。比如上文中ping www.baidu.com 得到的TTL是54,所以可以初步断定百度是Linux系统
3. ping /?打印ping里面的所有参数
C:\Users\Ruanc>ping /?
用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
[-4] [-6] target_name
选项:
-t Ping 指定的主机,直到停止。
若要查看统计信息并继续操作,请键入 Ctrl+Break;
若要停止,请键入 Ctrl+C。
-a 将地址解析为主机名。
-n count 要发送的回显请求数。
-l size 发送缓冲区大小。
-f 在数据包中设置“不分段”标记(仅适用于 IPv4)。
-i TTL 生存时间。
-v TOS 服务类型(仅适用于 IPv4。该设置已被弃用,
对 IP 标头中的服务类型字段没有任何
影响)。
-r count 记录计数跃点的路由(仅适用于 IPv4)。
-s count 计数跃点的时间戳(仅适用于 IPv4)。
-j host-list 与主机列表一起使用的松散源路由(仅适用于 IPv4)。
-k host-list 与主机列表一起使用的严格源路由(仅适用于 IPv4)。
-w timeout 等待每次回复的超时时间(毫秒)。
-R 同样使用路由标头测试反向路由(仅适用于 IPv6)。
根据 RFC 5095,已弃用此路由标头。
如果使用此标头,某些系统可能丢弃
回显请求。
-S srcaddr 要使用的源地址。
-c compartment 路由隔离舱标识符。
-p Ping Hyper-V 网络虚拟化提供程序地址。
-4 强制使用 IPv4。
-6 强制使用 IPv6。
4. 参数-t: Ping 指定的主机,直到停止。
ping www.baidu.com -t就会一直ping.CTRL+C可以结束
C:\Users\Ruanc>ping www.baidu.com -t
正在 Ping www.a.shifen.com [183.232.231.172] 具有 32 字节的数据:
来自 183.232.231.172 的回复: 字节=32 时间=67ms TTL=54
来自 183.232.231.172 的回复: 字节=32 时间=104ms TTL=54
来自 183.232.231.172 的回复: 字节=32 时间=60ms TTL=54
来自 183.232.231.172 的回复: 字节=32 时间=95ms TTL=54
来自 183.232.231.172 的回复: 字节=32 时间=132ms TTL=54
来自 183.232.231.172 的回复: 字节=32 时间=86ms TTL=54
来自 183.232.231.172 的回复: 字节=32 时间=120ms TTL=54
183.232.231.172 的 Ping 统计信息:
数据包: 已发送 = 7,已接收 = 7,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 60ms,最长 = 132ms,平均 = 94ms
Control-C
^C
5. -l size: 发送缓冲区大小。
ping -l 200 www.baidu.com 发200个字节的大包来ping
ping www.baidu.com -l 200参数放在前面和后面都一样(L)
C:\Users\Ruanc>ping -l 200 www.baidu.com
正在 Ping www.a.shifen.com [183.232.231.174] 具有 200 字节的数据:
来自 183.232.231.174 的回复: 字节=200 时间=2340ms TTL=54
来自 183.232.231.174 的回复: 字节=200 时间=233ms TTL=54
来自 183.232.231.174 的回复: 字节=200 时间=971ms TTL=54
来自 183.232.231.174 的回复: 字节=200 时间=480ms TTL=54
183.232.231.174 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 233ms,最长 = 2340ms,平均 = 1006ms
6. 指定发送的数据包的TTL
ping 8.8.8.8 -i 1访问地址8.8.8.8,将TTL定为0,第一个路由器已转发,就发现TTL为0了
C:\Users\Ruanc>ping 8.8.8.8 -i 1
正在 Ping 8.8.8.8 具有 32 字节的数据:
来自 192.168.43.1 的回复: TTL 传输中过期。
来自 192.168.43.1 的回复: TTL 传输中过期。
来自 192.168.43.1 的回复: TTL 传输中过期。
来自 192.168.43.1 的回复: TTL 传输中过期。
8.8.8.8 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
- 192.168.43.1就是该数据包经过的第一个路由器的ip地址,可以将最后的参数TTL=1,改为2,3,4,这样可以得到这个数据依次经过的路由器的地址(跟踪数据包途径的路由器)
7. ping命令可以帮助排除网络故障。
问题:计算机1上不了网了,该如何排查呢:
- ip地址、子网掩码、网关是不是都设置了
- 看计算机1到网关通不通,到该网段其他计算机通不通,通过ping命令测试
- 之后用计算机ping互联网上的一个DNS,比如ping 8.8.8.8(正常情况下互联网上的DNS随时Ping都是可以ping通的,202.99.160.68也是互联网上的DNS),若计算机Ping这些外网能通,说明计算机到互联网上的网络层是通的
- 看计算机DNS服务器的配置,如果ping 8.8.8.8的时候,计算机上显示没有解析出域名。比如8.8.8.8这个服务器刚好不工作,那会导致域名解析出现问题,但是到外网的网是通的。出现的情况的qq可以上网,但是打不开网页。说明网络层没有问题,只是域名解析出现问题了,这要求配置下计算机的DNS服务器,在计算机上多指定几个DNS服务器。
8. DNS服务器
DNS服务器在互联网的作用是:把域名转换成为网络可以识别的ip地址。首先,要知道互联网的网站都是一台一台服务器的形式存在的,但是我们怎么去到要访问的网站服务器呢?这就需要给每台服务器分配IP地址,互联网上的网站无穷多,我们不可能记住每个网站的IP地址,这就产生了方便记忆的域名管理系统DNS,他可以把我们输入的好记的域名转换为要访问的服务器的IP地址.
简单的说,就是为了方便我们浏览互联网上的网站而不用去刻意记住每个主机的IP地址,DNS服务器就应运而生,提供将域名解析为IP的服务,从而使我们上网的时候能够用简短而好记的域名来访问互联网上的静态IP的主机。【域名baidu.com--->百度这个网站的ip地址】
- 举例1:
ping百度的时候,返回了百度这个网站的ip地址119.75.218.77,说明我的计算机能够到互联网上将域名解析出来,说明我的计算机可以访问internet,说明网络层没有问题.只是沿途有一个路由器172.31.250.37禁止我ping,被路由器拦截。
那为什么qq不需要域名解析呢,qq在设计的时候考虑到有的玩家可能会域名解析出现问题。在登陆的时候除了有域名服务器,里面还有直接的ip地址,所有自己的qq可以登陆可能是直接连着ip地址登陆的,不需要域名解析
A单位网站在电信机房里托管(电信机房里会托管很多家公司的服务器),A单位的人间歇性地打开网站很慢。这样的情况可能是由于以下两种因素导致:
- (1)电信机房到internet的网T1~T2这一节不稳定
- (2)A公司自己的服务器间歇性地不响应客户端的请求
错误排查:用另一台计算器B去pingA公司服务器的ip地址,结果发现时不时丢包。之后就用A计算机ping电信机房的其他计算机(都是同一个网段),知道了电信机房其他计算机的地址,之后再用计算机B同时ping这些地址(包括A),一直ping ping ip地址 -t,若所这些服务器同时请求超时,同时畅通,说明A服务器是正常的,电信网有问题。
10. 使用ping估算网络是否畅通
在局域网的范围内ping
若是有线则大概延迟1ms,ping国外的网站200ms都是正常的,若ping自己一个局域网还是200M,说明延迟太久了,网络堵塞了,因为在一个局域网中一般都是很快的
2.4.2 pathping:跟踪数据包路径(可以跟踪到出问题的最后的出问题的最后的那个设备上) 还可以计算丢包情况(每一节的丢包情况都会知道)
而ping命令只知道出现问题但是不知道哪里出现问题
C:\Users\Ruanc>pathping www.baidu.com
通过最多 30 个跃点跟踪
到 www.a.shifen.com [183.232.231.174] 的路由:
0 LAPTOP-78OTR9KK [192.168.43.231]
1 192.168.43.1
2 * * *
正在计算统计信息,已耗时 25 秒...
指向此处的源 此节点/链接
跃点 RTT 已丢失/已发送 = Pct 已丢失/已发送 = Pct 地址
0 LAPTOP-78OTR9KK [192.168.43.231]
0/ 100 = 0% |
1 3ms 0/ 100 = 0% 0/ 100 = 0% 192.168.43.1
跟踪完成。
- 192.168.43.1是pathping百度出现的沿途的路由器,星号代表超时
- 从 LAPTOP-78OTR9KK [192.168.43.231]到192.168.43.1延迟3Ms,丢包率0/ 100 = 0%;延迟大的时候会出现丢包率。第一列是路由器处理上的丢包,第二列是线路上的丢包和路由器处理上的丢包
2.4.3
windows上跟踪数据包的命令
tracert这个命令可以跟踪数据包的路径,不计算时延和丢包率
C:\Users\Ruanc>tracert
用法: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout]
[-R] [-S srcaddr] [-4] [-6] target_name
选项:
-d 不将地址解析成主机名。
-h maximum_hops 搜索目标的最大跃点数。
-j host-list 与主机列表一起的松散源路由(仅适用于 IPv4)。
-w timeout 等待每个回复的超时时间(以毫秒为单位)。
-R 跟踪往返行程路径(仅适用于 IPv6)。
-S srcaddr 要使用的源地址(仅适用于 IPv6)。
-4 强制使用 IPv4。
-6 强制使用 IPv6。
C:\Users\Ruanc>tracert 10.7.1.53
通过最多 30 个跃点跟踪到 10.7.1.53 的路由
1 3 ms 2 ms 4 ms 192.168.43.1
2 * * * 请求超时。
在路由器上跟踪数据包的指令,运行traceroute 12.0.0.3
3. Internet组播管理协议IGMP
Internet组播管理协议