网络层
IP协议
IP协议指:将数据从A主机到B主机进行跨网络传输的一种能力,既然是一种能力,说明并不会100%成功。这里需要区别几个概念:
名称 | 区别 |
---|---|
主机 | 配有IP地址,但是不进行路由控制的设备 |
路由器 | 既配有IP地址,有能进行路由控制 |
节点 | 主机和路由器的统称 |
1.1 IP协议格式
说明:
名称 | 说明 |
---|---|
4位版本号 | 指定当前IP版本号是IPV4还是IPV6 |
4位首部长度 | 同TCP,((2^4)-1)*4=60,最大长度60字节 |
8位服务类型 | 3位优先权字段(已经弃用);4位TOS字段,表示最小延时、最大吞吐量、最高可靠性、最小成本,这四者相互冲突,只能选其中一个;1位保留字段(必须置0) |
16位总长度 | IP数据报整体占多少个字节 |
16位标识(id) | 唯一标识主机发送的报文,如果IP报文在数据链路层分片了,那么每一片的这个id都是相同的 |
3位标志字段 | 第一位保留是指现在不用,但不代表以后不用,说不定以后会用到;第二位保留是指置为1时表示禁止分片,如果报文长度超过MTU(1500,MAC指针一次传送的最大长度),则IP丢弃该报文;第三个保留是指“更多分片”,如果分片,最后一个分片置为0,其它是1,类似于一个标记而已 |
13位片偏移 | 假如分片了,分片相对于原来IP报文开始处的偏移,即就是表示当前分片在原来报文中的位置,实际偏移的字节就是该值*8,因此,除了最后一个报文,其他报文都必须是8的整数倍,否则报文不会连续 |
8位生存时间(TTL) | 数据报到达目的地的最大报文跳数,一般是64,每次经过一个路由,TTL减1,减到0时若还没有到达,该报文就会被丢弃,此字段主要功能是用来防止出现路由循环 |
8位协议 | 表示上层协议的类型 |
16位首部检验和 | 使用CRC(循环冗余校验)进行校验,鉴别头部是否损坏 |
32位源IP地址 | 表示发送端 |
3位目的IP地址 | 表示接受端,根据此IP地址得知交付给上层的哪个协议 |
选项 | 不定长字段,最多40字节 |
关于分片,这里要明确两个概念:
名称 | 含义 |
---|---|
MTU | 1500,MAC指针一次传输的最大长度 |
MSS | TCP规定IP一次性发送的最大长度 |
所以:
(1)MAC一次性传输的实际最大长度:1500 - 20(TCP报头) - 20(IP报头) = 1460;
(2)很显然分片是不好的,只是迫于无奈只能分片,然后进行组装,所以为了不分片,TCP一次性发送的最大长度 <= MAC帧一次性传送的最大长度就可以,即就是:MSS <= MTU。
1.2 网段划分
(1)IP地址分为两部分:网络号和主机号
名称 | 作用 |
---|---|
网络号 | 保证相互连接的两个网段具有不同的标识 |
主机号 | 同一网段内,主机之间具有相同的网络号,但是主机号不能相同 |
(2)不同的子网实际上就是把网络号相同的主机放在一起;
(3)DHCP:自动给子网内新增主机节点分配IP地址,避免手动管理IP的麻烦;
(4)一般的路由器都会自带DHCP功能,所以路由器也可以看作是一个DHCP服务器;
(5)IP地址划分:
主机号 | 含义 |
---|---|
主机号全0 | 网络号,代表这个局域网 |
主机号全1 | 广播地址,用于给同一个数据链路层中相互连接的所有主机发送数据包 |
127.* | 本地环回测试,通常是127.0.0.1 |
所以以B类为例:16位主机号只有(2^16 - 2)个主机号。
(6)问题:
然而像上述这样划分IP地址出现了一个问题:大部分组织都会用B类地址,这样就导致了B类地址很快就被用完了,而A类地址剩下很多,造成了大量的浪费,针对这种局限,又有一种新的解决办法:CIDR,引入一个额外的子网掩码来区分网络号和主机号;
(7)子网掩码:32位的整数,通常用一串0结尾;将IP地址和子网掩码进行按位与操作就得到了网络号,主机号从全0到全1就是子网的地址范围;网络号和主机号的划分与这个IP地址是A类还是B类无关;
(8)路由器负责对IP地址的自动回收与分配。
1.3 IP数量
CIDR在一定程度上虽然缓解了IP地址不够用的问题,但只是提高了IP地址的利用率,减少了浪费,并没有增加IP地址的数量,IP地址的数量还是不够用的,解决办法有如下三个:
名称 | 解释 |
---|---|
动态分配IP地址 | 只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址也是不相同的 |
NAT技术 | 将私有IP和公有IP相互转换的一种技术 |
IPV6 | IPV6并不是IPV4的简单升级,彼此没有关系且不兼容,IPV6用16字节128位来表示一个IP地址,IPV4用4字节32位整数表示IP地址 |
1.4 公有IP 私有IP
私有IP | 解释 |
---|---|
10.* | 前8位是网络号,共16777216个地址 |
172.16.到172.31. | 前12位是网络号,共1048576个地址 |
192.168.* | 前16位是网络号,共65536个地址 |
(1)包含在这些范围的都是私有IP,其余的则为公有IP,也叫全局IP;
(2)私有IP可以重复,所以可以解决IP地址不够用的问题。
1.5 运营商的概念
(1)一个路由器可以配置两个IP地址,一个是WAN口IP(对外的,即面对运营商),一个是LAN口IP(对内的,该LAN口连接的所有主机都从属于当前路由器的子网);
(2)不同的路由器,子网IP都是一样的;子网内的主机IP不能重复,但子网之间的IP可以重复;
(3)NAT技术:子网内的主机需要和外网进行通信时,路由器将IP首部的IP地址进行替换,换成WAN口的IP,这样逐级替换,最终数据包中的IP就是一个公网IP,NAT技术也是解决IP地址不够用的一种方法;
1.6 路由
(1)路由也就是查找路由表的过程,在数据链路层中,从源MAC地址到目的MAC地址之间的帧传输区间就称为“一跳”,路由的过程也是这样“一跳一跳”的过程;
(2)查找路由表可能出现的三种结果:把所有不知道的报文路由到默认路由器;知道下一个路由,把报文扔到下一跳;报文已经到达目标网络,去找特定主机;
(3)IP数据包的传输过程:当IP数据包到达路由器时,路由器会先去查看目的IP,然后决定把这个数据包是直接发送给目标主机还是发送给下一个路由器,以此类推,直至数据包到达目标IP地址;
(4)具体过程:假设如下是某主机的网络接口配置和路由表
step1:提取报文中的目的IP地址;
step2:将目的IP与路由表中的子网掩码作按位与运算得到目的网络;
step3:将结果与Destination做对比,若一样,则通过Iface发送接口发送出去;若不一样,则扔给默认路由器default。