网络层几种主要的协议以及层次关系如下:
1 网络层提供的服务
负责在不同网络之间尽力转发数据包,基于数据包的IP地址转发;不管丢失重传;不管数据包到达的顺序。实现这些功能的设备是路由器。
2 计算机通信之前做了哪些准备工作?
应用层:应用程序准备要传输的文件;
传输层:将文件分段,并编号;
网络层:添加IP数据包首部,包括目标IP地址和源IP地址等;
数据链路层:添加帧头帧尾,包括下一跳MAC地址和源MAC地址等。发送方先使用自己的子网掩码判断自己在哪个网段;再使用自己的子网掩码判断目标地址在哪个网段。如果是同一个网段就直接用ARP协议广播解析目标IP地址的MAC地址。如果不是同一个网段就用ARP协议广播解析网关的MAC地址,然后把数据包给网关。
物理层:透明地传输比特流。
问:集线器、交换机、路由器能否中病毒?
答:不能。病毒是应用层程序。病毒在网上传输时需要进行分段。分段后的病毒不具有完整病毒功能。
3 ARP协议
3.1 原理
不管网络层使用的是什么协议,在实际网络的数据链路层上传送数据帧时,最终还是必须使用硬件地址。
每一个主机都设有一个ARP高速缓存,里面有所在的局域网上的各主机和路由器的IP地址到硬件地址的映射表。(查看ARP映射表命令:arp -a
)
当主机A欲向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入MAC帧,然后通过局域网将该MAC帧发往此硬件地址。若没有,则主机A在该局域网上(只能在本网段的局域网内广播)发送ARP广播请求B的MAC地址。
ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。
如果所要找的主机和源主机不在同一个局域网上,那么就要通过ARP找到一个位于本局域网上的某个路由器(网关)的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。
从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动地将该IP地址解析为链路层所需要的硬件地址。
3.2 ARP欺骗
网络执法官:告知本网段正在进行ARP请求的计算机一个不存在的MAC地址;或告知错误的网关MAC地址,使之无法正常通信。
P2P终结者:把自己的MAC地址,告知本网段正在对网关进行ARP请求的计算机,使自己成为网关。本网段其他所有计算机访问外网的流量都经过本计算机。可以控制本网段计算机的流量。
如果一台计算机解析到了错误的网关的MAC地址,那么它无法访问外网。
如何防止网络执法官的欺骗?
只需在通信的两台计算机上互相绑定对方正确的MAC地址即可。
查看该计算机存储的MAC地址命令:arp -a
绑定、更改该计算机存储的MAC地址命令:arp -s 192.168.80.1 00-0C-29-53-48-C3
4 ICMP协议
为了提高IP数据报交付成功的机会,在网际层使用了网际控制报文协议ICMP (Internet Control Message Protocol),为了使主机或路由器报告差错情况和提供有关异常情况的报告。
ICMP不是高层协议,而是IP层的协议。
ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。
报文格式以及种类:
ICMP报文的种类有两种,即差错报告报文和询问报文。
ICMP报文的前4个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的4个字节的内容与ICMP的类型有关。
差错报告报文有五种:终点不可达、源点抑制(Source quench)、时间超过、参数问题、改变路由(重定向)(Redirect)。
询问报文有两种:回送请求和回答报文、时间戳请求和回答报文。
Ping命令诊断网络故障
典型的使用ICMP协议的就是ping命令。Ping命令可以查看传输延时和生存时间TTL。TTL的值每过一个路由器就减1,当减至0时数据包在网上丢弃(避免数据包在网上陷入环路循环)。根据TTL值可以估计对方是什么系统。一般,Linux是64,Windows是128,Unix是255。
如果上不了网,可以先ping一下网关看看通不通;如果通,再ping一下网上常用DNS服务器(如8.8.8.8)看看通不通。
常用ping命令:
ping 10.7.1.53 -t
一直ping对方,ctrl+z取消ping -l 200 10.7.1.53
或 ping 10.7.1.53 -l 200
用200字节的大数据包ping对方跟踪数据包途径的路由器,查看沿途路由器的IP:
ping 8.8.8.8 -i 1
查看第一个路由器;ping 8.8.8.8 -i 2
查看第二个路由器;……
也可以用pathping命令,一条命令就能跟踪数据包。
Ping命令返回的信息以及原因
目标主机不可到达:计算机没设网关,不知道到其他网段怎么走;计算机有网关,但是沿途有一个路由器路由表缺失,不知道到达目标网段怎么走,该路由器返还给发送的计算机一个不可达的回应。
请求超时:数据包有去无回;网络拥堵。
Pathping命令与tracert命令
使用ping能够判断网络通还是不通,比如请求超时,你就不能判断什么位置出现的网络故障造成的请求超时。使用pathping命令能跟踪数据包的路径,能够查出故障点,并且能够计算路由器转发丢包率和链路丢包率以及延迟,据此能够判断出网络拥塞情况。 tracert命令只能跟踪沿途路由器,不计算丢包率。
Windows上跟踪数据包路径的命令
tracert 10.7.1.53
在路由器上跟踪数据包路径的命令
traceroute 12.0.0.3
5 IGMP协议
IP多播的概念
多播=组播。
通信的三种形式:点对点、广播、多播。
点对点:一发一收,一对一通信。
广播:一对多。一个网段中一台计算机发信息,目的地址主机位全是1。
多播:一对多。流媒体服务器用一个多播地址只需发一份文件,接收的多台计算机只要绑定同一个多播地址就能一起收到该文件。(类比收音机调频道)。
IGMP协议:
IGMP协议配置在路由器接口上,功能是频繁扫描所连接的网段里有几个计算机绑定多播地址。有几个的地址就要求上一个路由器复制几份文件,如果一个也没有,就要求上一个路由器不要再复制并传送文件了。
多播地址:
多播使用组地址:IP使用D类地址。多播地址只能用于目的地址,而不能用于源地址。
动态的组成员;使用硬件进行多播。
6 IP数据报格式
版本:标识协议是IPV4还是IPV6版本。
首部长度:标明数据包首部一共有多长,单位4B。
区分服务:标明数据包紧急情况和优先权。
总长度:标明数据包总长度,单位B。网络层允许的最大数据包的大小是65535B,而数据链路层的数据最大允许1500B。因此要对数据包分片,分片后数据包的数据最大不超过1480字节。
标识:每个完整的数据包有自己独一的标识号。分片的几个包的标识号一样,表示这几个分片是一个数据包。
标志:占3位,目前只有两位有意义。标志字段的最低位是MF。MF=1表示后面还有分片,MF=0表示最后一个分片。标志字段中间的一位是 DF。只有当 DF=0时才允许分片。
片偏移:表示本分片在原数据包中的位置,单位8B。例如:
生存时间TTL:见上文有关ping命令的部分。
协议:指出该将数据包交给上层的哪个协议。一般的,ICMP的协议号是1,IGMP协议号是2,TCP是6,UDP是17,IPv6是41,OSPF是89。
首部检验和:只检验数据报的首部,不检验数据部分。这里不采用CRC检验码而采用简单的计算方法。
下图是我随便抓的一个包:
7 IP协议
网络畅通的条件:
数据包必须能有去有回。有时网通不了,数据包也有可能已经到达对方了,只是对方没配网关,数据包只能去而回不来。保持网络畅通,在IP地址配置没问题的基础上,必须保证通信双方的网关没问题、沿途所有路由器的路由表没问题(能去又能回)。
静态路由:需要管理员告诉路由器所有没有直连的网络下一跳给谁。静态路由的缺点是适合于小规模网络,不能够自动调整路由。
动态路由:常见有RIP协议和OSPF协议。路由器自学习,自动形成路由表。当线路出现故障和新情况时能自动更新路由表。
RIP周期性广播路由表,告诉相邻路由器自己连接了哪些网段。以“跳数”为判断最佳路径的标准。30秒更新一下路由信息,最大跳数15跳。