对于不同的广播域,要通信靠全球广播是不可行的,因此引入了网络层。
一个局域网称为一个广播域,在一个广播域中要进行通信,只需要向所有计算机发送请求,目标计算机在同一广播域中,收到请求后,响应即可。
不同的局域网就是不同的广播域,跨广播域通信,理论上可以向所有广播域发送请求,等待目标计算机响应即可,但是全球计算机数量过于庞大,一台计算机能接收到全世界计算机发送的包,纯靠广播容易产生网络风暴以及低效。
引入一套新的地址来区分不同的广播域、子网,这套地址称为:网络地址
。
网络层引入了IP、路由,跨广播域通信只能通过路由转发。
给计算机提供IP地址,经过路由器的转发,寻找到目标广播域,由目标广播域内部再进行广播,找到目标计算机即可。
简单的说,网络层
就是在 数据链路层
的基础上进一步管理网络中的数据通信。
从广播
的方式转为跳跃
若干个中间节点的方式来完成数据通信。
跨广播域通信只能通过 路由转发
。
网络层包含了:IP、ARP、RARP、ICMP、IGMP、路由选择、拥塞控制。
IP协议,定义网络地址的协议。
通过IP地址,为网络上的计算机提供一个逻辑地址及编号。
IP协议,分为:IPv4、IPv6。
IPv4,由32位的二进制数组成,用点分隔,因为可读性差,通常写成4个十进制数。
范围: 0.0.0.0
- 255.255.255.255
通常,家庭里拨号上网,ISP就会给分配一个IP,每次拨号获得的IP都可能是不一致的。
网络上的其它计算机要通信可以通过分配到的IP找到家庭里的计算机。
IP地址 = 网络地址 + 主机地址
通过 子网掩码
,可以很方便的将IP地址划分为网络部分
和主机部分
。
比如:
- IP地址 172.16.10.1
- 子网掩码 255.255.255.0
分别将二者转为二进制
,再做一个与运算
,得到 172.16.10.0
,这部分就是网络部分,而主机部分则可以取值为 0.0.0.1 - 0.0.0.254
,主机部分不能全为0,也不能全为1。
2个IP地址,通过与子网掩码做一个与运算,就可以计算出这两个IP是否在同一个子网中。不同子网
中的2个IP地址是无法直接通信的,则需要通过 网关
、路由器
来间接通信。
通过 tracert
或者 tracerouter
命令可以查看到IP在路由过程中跳跃的路径。
IP数据包作为数据链路层帧的数据部分。
IP数据包分为:头部和数据部分。
头部:大小在20到60字节之间。
数据部分:最长为65515字节。
超过下层数据链路帧限制的 MTU 1500字节的话,将需要分片传输。
网络层IP数据包的结构如下:
IP数据包抓包如下:
由于IP协议,无连接,不可靠,引入了ICMP。
发送IP数据包的时候,即使是丢包了,那么对于IP协议来说也是未知的,因此,通过ICMP(Internet控制报文协议)可以得知网络通不通、路由是否可达、是否超时等信息。
ICMP是一种无连接的面向无连接的控制报文协议,用来传输出错控制报文信息。
常用的就是ping
命令。
正常情况下的ping
如下
异常的ping
如下
wireshark抓包情况如下
正常情况下,每一个request
都会收到一个reply
,否则会收到no response found
之类的响应。