1. 现实意义
• IP协议:提供一种能力,把数据报从主机A跨网络送到主机B
• TCP/IP协议:核心功能,把数据100%可靠的从主机A跨网络送到主机B
注:TCP协议负责百分百可靠,通过三次握手、滑动窗口、拥塞控制、延时应答等一系列机制。IP协议负责传输数据报
• 现实情况:网络中大存在大量的主机,因此必须标识主机的唯一性,所以每台主机都有自己的IP地址。
• 概念:IP地址 = 网络号 + 主机号
2. IP协议报头的组成
问:如何进行报文解包?
答:4位首部长度决定报头大小,16位总长度决定整个报文大小,有了总长度和报头长度就可以进行解包
问:IP协议如何确定将有效载荷传给上层的哪一个协议?(分用问题)
答:8位协议表明自己的有效载荷是什么数据,是TCP就交给TCP,是UDP就交给UDP,这是传输层向网络层交付有效载荷时确定的
2.1 IP协议报头中其他成员作用
• 4位版本:大多数情况是IPV4,IPV6和IPV4不兼容
• 8位服务类型:3 位优先权字段(已经弃用), 4 位 TOS 字段, 和1 位保留字段(必须置为 0). 4 位 TOS 分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于 ssh/telnet 这样的应用程序, 最小延时比较重要; 对于 ftp 这样的程序, 最大吞吐量比较重要.
• 8位生存时间(TTL):本质是一个计数器,目的是防止数据包在网络中无限循环,导致出现网络拥塞问题,当数据包每经过一个路由器时,个数就会减减,在个数减到0时,就会被丢弃。
• 16位首部校验和:用于检测数据在传输过程中是否出现错误的机制,确保 IP 数据包的头部信息在传输过程中没有被篡改或损坏,保证网络通信的可靠性。
3. 通过学院管理来认识网络中的一些概念
以大学管理为例:假设计算机学院(学院编号为06)的某位学生A(学号为06001),捡到了一个机械学院某位学生B(假设学号为01005)的钱包,作为计算机院的学生A,他知道01不是自己学院的编号,所以他会联系自己学院的学生会主席,作为学生会主席,他知道每个学院的编号,因此他就会通知机械院(编号01)的主席,机械院主席就会拿着对应学号去自己学院下找人。
• 01 称为源网络号,06 称为目标网络号
• 005 称为源主机号, 001 称为目标主机号
• 由IP地址的定义就可得知,01005为源IP地址,06001为目标IP地址
• 学生相当于主机,学院主席相当于路由器,整个学校相当于公网
• 学校为每个学院分配的编号是公网的一部分
• 为每个学生分配的学号叫做私网/内网
• 01005号学生将钱包交给学院主席的过程叫:内网转发
• 计算机院的主席将钱包交给机械院主席的过程叫:公网转发
子网划分:将一个大的网络划分为多个更小的网络(即子网)的过程。(将一个大的学校,划分为几个学院的过程)
问:为什么进行子网划分?(为什么学校要分学院管理?)
认识:路由报文本质是:查找主机,而查找的本质是:淘汰。以二分查找为例,当选了左半区域,右半区域就被淘汰了,只要淘汰效率高,那么查找的效率就高,当你把报文传给主席,说明自己院里的学生全淘汰了,当计算机院主席把报文给机械院主席,其他学院就淘汰了。
答:来查找目标主机,必须查找目标网络,本质就可以淘汰其他网络,可以在全网中提高查找目标主机的效率
认知:主机中的IP是通过路由器进行分配的,叫做DHCP协议,属于应用层协议
注:路由除了有路由功能以外,还有构建子网的功能
注:举这个例子的目的是为了有这样一个认识:网络本身是经历了十几年发展的产物,网络本身就是被设计好的,就如同学号,认识网络是如何被设计的,比理解其中的算法更重要。
4. 认识IP地址
IP地址一共被分为五类:
• A 类 0.0.0.0 到 127.255.255.255• B 类 128.0.0.0 到 191.255.255.255• C 类 192.0.0.0 到 223.255.255.255• D 类 224.0.0.0 到 239.255.255.255• E 类 240.0.0.0 到 247.255.255.255注:前三类分别对应于大型网络、中型网络、小型网络
问题:可以看到无论哪一类,主机号的数量都特别的庞大,在实际网络架构中,没有哪个子网会出现这么多的主机数量,因此大量的位都被浪费掉了解决措施:子网掩码
4.1 子网掩码
子网掩码的作用:1.将IP地址分为网络号和主机号 2.进行网络地址划分 3.将划分好的网络地址与自己的网络地址进行比较,来判断是否同属于一个子网
网络中的子网划分:本质是通过IP地址和子网掩码确定一个子网地址范围,除去网络地址和广播地址,其他地址均可以供任意主机使用。(公网和私网都适用)
子网划分的例子1:
将IP地址与子网掩码相与,得到网络号,后8个字节为0,代表主机号,那么该主机号一共有256个,但实际上,140.252.20.0代表代表这个局域网,而140.252.20.255代表广播地址,所以一共的主机数为256-2=254
子网划分的例子2:
将IP地址与子网掩码相与,得到网络号,后4个字节为0,代表主机号,那么该主机号一共有16个,减去局域网地址和广播地址一共就有14个。
注:240(十进制) = 11110000(二进制)
认知:即使有了子网掩码,优化了IP地址的利用率,32位能表示的主机数量大约为43亿,远不及当今网民总数,因此还需要另外的方法来解决:动态分配IP(只给接入网络的设备分配ip地址)、NAT技术、IPv6
4.2 私网IP地址
• 规定1:
A 类私网地址:
10.0.0.0
到10.255.255.255
(子网掩码:255.0.0.0
/8
)B 类私网地址:
172.16.0.0
到172.31.255.255
(子网掩码:255.240.0.0
/12
)C 类私网地址:
192.168.0.0
到192.168.255.255
(子网掩码:255.255.0.0
/16
)• 规定2:
私网IP地址不能出现在公网当中!
• 认识1:
除了上述IP地址以外,其他地址均为公网IP地址
• 认识2:
私网IP地址在不同子网内是可以重复的!
问:为什么要这样子划分?
答:为了解决全球IP地址不足的问题,假设原先一共有1W个IP地址,那么只能分配给1W台主机,但如果我拿其中3000作为私网IP地址,另外7000作为公网IP地址,并且规定,公网IP地址不能重复,私网IP地址可以重复,那么就能分配给7000*3000台主机,数量大大增加。
4.3 公网IP地址
除去私网地址IP以外,都是公网IP。
• 认识1:公网IP根据每个国家网民的数量来进行分配的
• 认识2:公网IP在公网内部不能重复!
• 认识3:从公网IP可以读取到一些信息,比如国家、省份/州、市区.....
4.4 简单认识路由器
路由器内部有WAN口IP地址,和LAN口IP地址,不同路由器的WAN口IP地址和LAN口IP地址代表不同类型的IP地址。
对于运营商路由器,他的WAN口IP地址是公网IP,LAN口IP地址为私网IP;
对于家庭路由器,他的WAN口IP地址和LAN口IP地址都为私网IP;
结论:运营商路由器是公网IP分配的最后一环,运营商路由器之后的所有IP都是私有IP,由运营商来构建子网
4.5 私有IP是如何通过公网传达自己的报文的?
问:私网IP是不能出现在公网中的,那么私网IP的报文该如何通过公网发送自己的报文呢?
答:NAT技术
图示:
因为私网ip不能出现在公网中,所以主机每次经过路由器时,会将路由器内的WAN口IP与报文中的源IP做交换处理,传达给上一层,当抵达运营商IP时,此时WAN口IP为共网IP,于是报文就获得了公网IP,可以进入到公网当中,实现报文的传递。
注:每次进行源IP和WAN口IP的交换时,路由器内部都会将两者的映射关系保存下来,以便接收后续回应。
4.6 其他路由器
前言:真正的网络拓补图是十分复杂的!这里的介绍是简单到不能在简单的,只是大致思路,并非真正的实现方式!!!
以国内为例,除了运营商路由器(ISP路由器),还有省间路由器(区域路由器),以及国际路由器(核心路由器)。所有的路由器都存储着两张路由表,
国际路由器:记录国外路由表、国内路由表,
省间路由器:记录了其他省的路由表、省内所有市区的路由表
注:一般而言,从市区开始就可以通过运营商构建子网了
路由表简单介绍:路由器和计算机用来确定 数据包发送路径 的表格,包含了 网络目标地址 和 到达该地址的路径
国际报文:
假设一个俄罗斯用户想要发送一个中国IP的报文,该IP为5.1.16.X,该IP会与俄罗斯某个州的16位子网掩码相与得到5.1.0.0,查表后发现对不上,说明不是俄罗斯境内的IP地址,会到下一跳,将IP与八位子网掩码相与得到5.0.0.0,查表后知晓是中国的IP地址,于是会到下一跳。再将IP地址与16位子网掩码相与得到5.1.0.0找到对应省份,转到下一跳,以此类推。
国内报文:
假设一个河北的报文要发到江苏苏州,假设该报文位5.1.16.X,河北区域的路由器将该IP通过24位子网掩码相与,发现不是河北省内的IP,于是转到下一跳,将IP地址与16为子网掩码相与得到5.1.0.0,查表后发现是江苏省的IP地址,转到下一跳,依次类推找到对应主机。
注:这种通过子网掩码获得网络号、查表、下一跳的过程可以具象为:“问路”的过程
认识:eth0物理以太网接口,用于物理以太网链接,通过 网线 将计算机连接到本地网络或路由器。(出接口涉及链路层,这里先做了解)
5. IP报头的另外三个成员——分片机制
数据链路层规定:从传输层接收下来的完整报文,大小不能超过MTU(最大传输单元,1500字节),如果超过了就要进行分片
注1:实际上考虑到IP报头以及TCP报头的大小,传输层单次传送的最大报文为1460(MSS)字节
注2:这也就是为什么滑动窗口需要分段的原因了
注3:
MTU决定了IP数据包的大小(含IP头和TCP头)
MSS决定了TCP有效载荷的大小,不含TCP头
MTU决定了MSS的大小 MSS = MTU - IP报头 - TCP报头 = 1460(通常情况下)
TCP在三次握手的握手的过程中,可以确定对方MSS的大小,以较小一端的来决定未来发送载荷的大小。
结论1:过大的IP需要在网络层进行分片,分完片后,需要在对端重新组装
注:分片的问题 → 缺了任何一片都会导致整体的丢失,对于TCP协议就会触发丢包重传
结论2:网络通信中,如果分片过多,会导致丢包概率增加!因此分片和组装不是主流,是被迫为之,因此需要减少分片,本质就是在传输层控制滑动窗口的大小
问:如何分片?
答:每一个分片后的报文都包含IP报头,其中
👉:16位标识:不同报文,标识不同,相同分片,标识相同;
👉:3位标志 第一位做保留,第二位置一标识禁止分片,第三位表示”更多分片”,最后一片 的第三位置零,其他置一,标识结束位。
👉:13位片偏移标识当前片在整个报文的偏移
问:如何甄别是否分片?怎么保证对端把分片全收齐了?怎么组装?
答1:如果3位标志位的第三位为1,表明分片了,如果第三位为0,但是片偏移非0,说明分片了;反之,如果3位标志位第三位为0,片偏移也为0,说明没有分片
答2:把16位标志位相同的片聚合在一起后,对片偏移做升序排序,片偏移+自身片的报文长度 = 下一个片的片偏移数字,如果对不上就说明缺失了,反之收齐
答3:对片偏移进行升序排序的过程就是组装的过程