网络层的主要功能是寻找一条合适的路径。
1 IP协议
1.1 基本概念
- 主机:配有IP地址,但不进行路由控制的设备;
- 路由器:即配有IP地址,又可以进行路由控制的设备;
- 节点:主机和路由器的统称。
1.2 IP协议的结构
- 服务类型:3位优先权字段(已弃用);4位TOS字段:分别表示最小延时、最大吞吐量、最高可靠性、最小成本,这四个相互冲突,只能选择一个(对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要);一位保留字段。
- 标识:唯一标识主机发送的报文,如果报文在数据链路层被分片了,那么每个片里的id都相同
- 标志:第一位保留;第二位为1表示禁止分片,这时候如果报文长度超过最大报文长度,IP模块就会丢弃报文;第三位表示更多分片,如果分片了的话,最后一个分片置为1,其它是0(相当于一个结束标记)
- 片偏移:是分片相对于原始IP报文开始处的偏移
- 生存时间(TTL):数据报到达目的地的最大报文跳数(一般是64),每经过一个路由,TTL-=1,一直减到0还没到达,那就丢弃了(为了防止出现路由循环)
- 协议:表示上层协议的类型
1.3 网段划分
IP地址分为两个部分:网络号和主机号。
网络号:保证相互连接的两个网段具有不同的标识
主机号:同一网段内,主机之间具有相同的网络号,但必须有不同的主机号
不同的子网其实就是把网络号相同的主机放到一起
通过合理的设置主机号和网络号,可以保证在相互连接的网络中,每台主机的IP地址都不相同。有一个叫做DHCP的技术,可以自动的给子网内的新增主机节点分配IP地址,避免了手动管理IP的不便
1.3.1 IP地址的划分
过去的划分方式:
随着时代的发展,上面这种划分方式的局限性就体现了出来,大多数组织都申请B类地址,导致B类地址不够分,而A类地址却有极大的浪费。一个B类地址内部也有极大的浪费,比如一个B类地址子网内能允许6万多个主机,然而在实际中不会存在需要这么多的情况。针对上面的情况,有了新的划分方案CIDR:
引入一个额外的子网掩码用来区分网络号和主机号,子网掩码也是一个32位的正整数,通常用一串0结尾,将IP地址与子网掩码做按位与&,得到的就是网络号。这时网络号与主机号的划分与IP地址是A、B还是C类无关。
1.3.2 特殊的IP地址
- 主机号全为0,称为网络号,代表这个局域网
- 主机号全为1, 是广播地址,用于给同一个链路中相互连接的所有主机发送数据包
- 127.0.0.1,回送地址,通常用于本机回环测试
1.4 IP地址的数量限制
IP地址(IPv4)是⼀个4字节32位的正整数. 那么⼀共只有 2的32次⽅ 个IP地址, ⼤概是43亿左右. ⽽TCP/IP协议规定, 每个主机都需要有⼀个IP地址.这意味着, ⼀共只有43亿台主机能接⼊⺴络么?
实际上, 由于⼀些特殊的IP地址的存在, 数量远不⾜43亿; 另外IP地址并⾮是按照主机台数来配置的, ⽽是每⼀个⺴卡都需要配置⼀个或多个IP地址.CIDR在⼀定程度上缓解了IP地址不够⽤的问题(提⾼了利⽤率, 减少了浪费, 但是IP地址的绝对上限并没有增
加), 仍然不是很够⽤. 这时候有三种⽅式来解决:
-
动态分配IP地址:只给接入网络的设备分配IP地址;因此同一个MAC地址,每一次接入网络的IP地址不一定相同
-
NAT技术
-
IPv6:是与IPv4互不相干的两个协议,彼此并不兼容
1.5 私有IP地址和公有IP地址
如果⼀个组织内部组建局域网,IP地址只⽤于局域网内的通信,⽽不直接连到Internet上,理论上 使⽤任意的IP地址都可以,但是RFC 1918规定了⽤于组建局域网的私有IP地址
- 10.*,前8位是网络号,共16,777,216个地址
- 172.16.到172.31.,前12位是网络号,共1,048,576个地址
- 192.168.*,前16位是网络号,共65,536个地址 包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP);
- ⼀个路由器可以配置两个IP地址, ⼀个是WAN⼝IP, ⼀个是LAN⼝IP(⼦网IP).
- 路由器LAN⼝连接的主机, 都从属于当前这个路由器的⼦网中.
- 不同的路由器, ⼦网IP其实都是⼀样的(通常都是192.168.1.1). ⼦网内的主机IP地址不能重复. 但是⼦网之间的IP地址就可以重复了.
- 每⼀个家⽤路由器, 其实⼜作为运营商路由器的⼦网中的⼀个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN⼝IP就是⼀个公网IP了.
- ⼦网内的主机需要和外网进⾏通信时, 路由器将IP⾸部中的IP地址进⾏替换(替换成WAN⼝IP), 这样逐级替换, 最终数据包中的IP地址成为⼀个公网IP. 这种技术称为NAT(Network AddressTranslation,网络地址转换).
2 路由
就是在复杂的网络结构中,找出一条通往终点的路线。
路由的过程就是“一跳一跳问路”的过程。所谓一跳是指数据链路层的一个区间。
IP数据包的传输过程:
- 当IP数据包,到达路由器时,路由器会先查看目的IP
- 路由器决定这个数据包是直接发送给目标主机还是需要发送给下一个路由器
- 依次反复,直到到达目标IP地址
那么如何判定这个数据包应该发送给哪个路由器还是主机呢?这就需要路由表了,每个结点内部都维护了一张该表,该表可以通过route命令查看:
- 如果目的IP命中了路由表, 就直接转发即可;
- 路由表中的最后⼀⾏,主要由下⼀跳地址和发送接⼝两部分组成,当目的地址与路由表中其它⾏都不匹配时,就按缺省路由条目规定的接⼝发送到下⼀跳地址