以前在数据链路层概述里遗留了一个问题,就是若是主机发送的信息要跨设备传输,该如何实现呢?程序员
实际上,在IP协议和网络层中提出了一个概念,即虚拟互联网络,让计算机都使用IP协议链接,这样的话就不须要关注信息传递的时候的细节,只须要把信息发送到一个虚拟的互联网络中,这个网络就能够实现信息的传递缓存
简单点说,就是只须要关注逻辑层上信息的传递(A发送给B),不须要关注物理层上信息是如何传递的(A如何发送到B)网络
能够看出,在这个过程当中,IP协议发挥着重要的做用,包括:blog
1.使得复杂的实际网络变为一个虚拟互联的网络接口
2.使得网络层能够屏蔽底层细节,专一网络层的数据转发(这一点相似于1,也就是把物理上的问题转换成逻辑上的)图片
3.解决了虚拟网络中的数据报传输路径路由
相似于数据链路层中的MAC地址,网络层中也有地址,即IP地址,为网络中每个网络设备的惟一身份并且不可改变,能够用来识别不一样的网络设备io
但MAC地址是永久不变的,而若是计算机所处的网络环境发生变化(例如从家到图书馆),则IP地址会发生变化基础
IP地址通常用点分十进制表示,每一部分范围为0-255(如192.168.1.101),最多能够表示2的32次方(4294961296)个不一样的IP地址路由器
以前说起,数据链路层得到的“帧”数据来自于网络层的IP数据报
这里的IP数据报包括IP首部以及IP数据报的数据,而IP首部有一个固定的格式(以下,图片来自慕课网)
IP协议的版本,占4位,通讯双方必须用同样的版本,目前主流为IPV4
即IP首部长度,单位为“32位字”(4个字节),一共占4位,最大长度为15
也就是首部最大长度为4*15=60字节
IP数据报总长度(IP首部+IP数据),占16位,最大数值为65535
因为这个数值比最大存储单元(MTU)大,因此实际传输中,数据链路层会把IP数据报分片
主要的功能是标注IP数据报是否能够分片
用来记录当前数据帧是第几个偏移的IP数据,跟分片有关
表示报文在网络中的寿命,8位,每通过一个设备减一,为0时必须丢弃该报文
解决了报文在网络中找不到终点时无限传输消耗带宽的问题
表示IP数据携带的具体数据是什么协议的(TCP、UDP等),8位
不一样的协议对应不一样的值
校验IP首部是否有出错,16位
发送IP数据报/IP数据报到达的机器的地址
信息在网络层中传输的时候,是用“逐跳”的方式进行的,也就是从一个网络/设备“跳入”另外一个网络/设备
路由表中就存储着目的IP地址和下一跳IP地址的对应关系表,例如目的为IP1,则下一跳到IP4这样
计算机和路由器中都有路由表
在网络层中,转发流程以下:
1.发送信息的计算机会在其路由表中查询目的IP地址的下一跳IP地址,而后把数据发给下一跳IP地址的路由器/计算机
2.收到信息的计算机/路由器继续在其路由表中查找目的IP地址的下一跳IP地址,若是目的IP是和其直接相连的,则发送给目的计算机,不然继续“跳”
而若是是网络层和数据链路层以及物理层结合,则转发流程以下:
(发送)
1.源计算机发出IP数据报,经过路由表查找下一跳地址
2.IP数据报被交给数据链路层,并被告知目的地址
3.数据链路层经过MAC表填充源MAC地址和目的MAC地址
4.数据链路层经过物理层发送数据
(接收&下一次发送)
5.目的MAC地址接收数据帧,并把该数据交给网络层
6.目的计算机/设备查询路由表,找到下一跳地址
7.数据报被交给数据链路层,并经过物理层再次发送
每一跳中,IP数据报的IP地址不变,而MAC地址一直在变化
IP协议的转发中存在这样一个问题,IP数据报从网络层发送到数据链路层,可是传输时候是如何让数据链路层知道要传输的MAC地址呢?这里用到的就是ARP协议
ARP协议(Address Resolution Protocol),即地址解析协议,用来把网络层的32位IP地址解析为数据链路层的48位MAC地址
这一解析过程有一个重要的表,即ARP缓存表,把IP地址和MAC地址对应起来,是ARP协议和RARP协议的关键
1.若是缓存表中有IP地址和MAC地址信息,则直接解析,并把数据帧发送
2.若是没有,则ARP协议广播一个IP的信息,全部设备收到广播后会看本身的IP是否是这个目标IP,是的话,该广播的物理设备进入该IP地址以及对应的MAC地址
可是因为IP地址可随着设备所处的网络环境发生变化,所以ARP协议存在有效期
能够在命令提示符中输入arp -a查看ARP缓存表
ARP协议数据帧包括了2字节的类型、28字节的内容以及18字节的填充信息
RARP(Reverse Address Resolution Protocol),即逆地址解析协议
和ARP协议相反,该协议用来把数据链路层的48位MAC地址解析为网络层的32位IP地址
RARP协议数据帧包括了2字节的类型、28字节的内容以及18字节的填充信息
在TCP/IP协议栈里,ARP协议和RARP协议是最基础的,而且整个操做过程对程序员是透明的
前面咱们看到,IP地址有32位,可表示上亿的不一样IP地址,而为了对这上亿的IP地址进行区别和管理,咱们对IP地址进行了子网划分
咱们把IP地址划分为网络号和主机号,并根据网络号和主机号长度,把IP地址分为:
A类:网络号8位(0-127,2的7次方个),主机号24位(2的24次方个),判断时取前8位,头位为0(表示没达到128)
B类:网络号16位(128.0-191.255,2的14次方个),主机号16位(2的16次方个),判断时取前8位,首两位为10(表示不到192)
C类:网络号24位(192.0.0-223.255.255,2的21次方个),主机号8位(2的8次方个),判断时取前8位,首两位为11(表示超过192)
全0:当前网络段,不可分配特定的主机(如1.0.0.0)
全1:广播地址,向当前网络段全部主机发消息(如1.255.255.255)
A类:全0为特殊网络,后7位全1为回环地址
其中127.0.0.1为本地回环地址,不属于任何一个有类别的地址类,表明本地虚拟接口,能够理解成一个永远不会掉的接口
这个接口通常用来检查本地网络协议、基本数据接口是否正常
B类:如10000000.00000000(即128.0)也不可用
C类:192.0.0不可用
(未完待续)