网络层的主要的工作是:
地址管理,
路由选择
4为的版本号0~15,但是目前我们只有2个版本,一个是IPV4,一个是IPV6
首部长度指的是IP协议报头的长度,范围是0~15,但是单位是4个字节,也就是最大的60字节,
但是这个和TCP的首部长度一样,都是可变的,在选项那里可以增加长度
ip协议可以有不同种的类型:目前有4种类型的IP协议
最小延时,最大吞吐量,最高可靠性,最小成本
指定不同的服务类型,就可以实现不同的效果.
和我们的电脑的均衡模式,野兽模式,安静模式一样,侧重的方向不同
这个16位的总长度描述的是整个的ip协议的长度一共是多少.
这个长度的范围是0~64K,如果IP的协议长度大于这个数的话,就得分成多个ip协议了,分包传输然后再组包了
因为一个协议太长了,所以我们不可避免的得分成多份.所以为了清楚的描述这些小包是哪一个大包的,我们还需要下面的一些属性:
属于同一个ip的包使用同一个标识,表示它们原来都是同一条协议的
片移量表示包的前后顺序,也就是在原来的IP协议的位置.
在组包的时候,就按照片移量的大小来组装包的顺序的
标志如果是0表示不是最后一个包,如果是1表示是最后一个包是结束标志
- 对于长度过于长的IP协议,进行分包
- 使用上面3种属性将大的ip协议,分成一个个的小ip协议
- 将接收到的3个ip协议组成一个大的包
这个生存时间不是正常的时间,是此ip协议可以被路由器或交换机所转发的次数
一般是64或者128次,
每次经过一个路由器,次数就减一,当等于0了,这个ip协议就会被删除.
为什么要设置这样的次数呢?
因为有的IP地址是不存在的,是永远都找不到的,所以这个在转发就没有任何意义了,就需要将它抹杀掉
8位协议指的就是传输层的协议是TCP还是UDP
这个就是校验的,检验有没有发生什么错误的信息.
对于ipv4来说,ip地址的字节数是32位,我们一般都是使用点分十进制,将32位点分位8位.
然后使用10进制表示,这个为了方便给人看的,但是在电脑内部还是使用二进制来使用的.
ip地址是由两部分组成的,一个是网络号,一个是主机号。
网络号是当前局域网的信息,处于同一个局域网中的设备的网络号都是一样的
主机号是当前设备的号码,在同一个局域网中的主机号互不相同.
在同一个局域网中,任意两个ip地址都不可以相同.
但是在不同的局域网中,任意两个地址可以相同.
那我们是怎么可以确定网络号占多少位,主机号占多少位的呢?
就是使用子网掩码来进行标识.
子网掩码也是32位的二进制数字,它的左边都是连续的1,右边都是连续的0
为1的部分就是表示网络号,为0的部分表示是主机号.
所以ip地址和子网掩码都是一般同时出现的,
可以让我们清楚的知道那些部分是网络号,那些部分是主机号
一般一个局域网中的设备不会超过255个,但是如果超过的话,子网掩码就可以变为255.255.0.0 后两位都可以表示主机号
主机号全0
表示是一个网络号,因为正常的局域网中的设备的主机号是不可以为0的
主机号为全1
表示是一个广播地址,向广播地址发送的数据,在该局域网中的任何地址都可以收到
环回地址127开头
只有是127开头的,后面无论是什么地址都是环回地址
局域网地址
只要看到是以192.168开头,10开头,172.16~172.31开头的都是局域网中的地址
内网即局域网,LAN网(local area network)
内网是指在同一个区域内部的网,比如说家里的网,学校的校园网,都是接上同一个路由器等等,这个就是内网
外网是广域网,WAN网( wai area network)
这个外网包括的范围就广了,覆盖面积是多个城市,国家.可以达到国际性的通信
上面的就是我家里里面的网络
主要有两个局域网,对于以光猫为主的局域网来说,它的一个LAN口的IP地址是192.168.0.1
连在这个lan口上面的ip地址有路由器的wan口,服务器1 和服务器2
这几个设备构成了一个局域网,它们的IP地址都是以192.168.0开头的.
只有LAN口的IP地址以1结尾,其他的设备都不可以以1结尾
对于路由器来说,它的WAN口接的是光猫的LAN口.
对于它的LAN来说,它和它的连接是第二个局域网
路由器的LAN口连接着三个设备:台式机,笔记本,电话
只有LAN口的IP地址是1结尾,其他的设备都不可以以1结尾
另外,IP地址的倒数第二个值和光猫局域网的数字是不同的
现在我们来探讨一下怎么来分配一下ip地址.
我们现在使用的ip协议一般都是ipv4,也就是使用32位的二进制来表示ip地址,但是这样表示的ip地址是有限个的,最多只有2^32个,所以如果想要所有的设备都可以上网交流的话,这样是远远不够的.
所以我们就采用NAT机制,
在向别的外网通信的时候,不使用局域网中的IP地址,而是使用它的外网地址.
所有处于同一个局域网中的设备,在和外部进行交流的时候,都是使用的外网地址.
对于我上面的例子来说,如果我的笔记本192.168.1.3想要和外网交流,那么不会直接使用此时的地址,而是要使用我们的供应商提供的外网地址103.57.12.60
也就是说,192.168.1.3这个IP地址是人人家里的设备都有可能是这个地址.但是这个只是在局域网内部有效的.这些IP地址只适用于局域网内部来进行交流,别的局域网是不可以进入此局域网交流的
在不同的局域网之间,IP地址可以相同,但是在同一个局域网内,IP地址不可以相同
另外,外网之间可以任意的进行交流,局域网只有其内部可以互相交流
那我们是怎么得到这样的103.57.12.60的外网地址呢?又是怎么保证同一个局域网内的不同的设备使用同一个外网地址却返回不同的消息呢?
使用的是运营商的带有NAT机制的路由器,
消息从局域网中的特定的设备到达NAT路由器之后,
NAT路由器将会记录并保存经过此路由器的IP地址,并且为它指定一个端口号,这个端口号是不同的,通过这个端口号可以确定这个局域网中的每一个设备,这样就可以保证将指定的信息发送到指定的设备中
另外,还有一个问题,我们的局域网中的设备想要互相交流怎么办呢?
局域网中的设备不可以直接交流,而是需要通过一个外部设备来进行中转交流.
设备A发送到QQ,设备B从QQ取消息,就是使用到了QQ的服务器来进行交流
使用上面的IPV4+NAT机制可以解决IP地址的重复问题,但是使用IPV6可以更加的彻底一点.
IPv6的长度是16个字节,也就是128个比特位,这样算起来的话就是可以表示2^128个IP地址
这个数据是非常的大了,号称可以表示地球上的每一个沙子,所以使用IPv6可以覆盖所有的设备
ipv6真正的解决了IP地址不够用的问题
格式:
两个字节为一组,使用冒号进行分隔.
还有一个就是路由选择的问题,就是从源IP到目的IP之间选一条合适的路由路径.
首先我们先来看一下要实现规划路径,路由器需要有什么必要的东西:
路由器里面需要维护一个数据结构:路由表
路由表里面就记录了每一个网络号和它对应的接口号
比如说:
网络号 接口
192.168.1 LAN1 表示这个网络号在LAN1口,我们就可以走这条路
192.168.1 WAN 表示这个网络号在WAN口,我们就可以走这条路
默认 下一跳 表示没有找到这个网络号,但是可以向下一条走一走看一下别的路由 器认不认识这个网络号
对于这个目的地址,如果路由器的路由表中可以找到一个接口,那么就走到这个接口在向后走,直到到达目的地为止
有时候,可能这个路由器可以给出多个路径,那么我们就可以找一个更合适的路了