一、网络层与 IP 的定位
网络层
ip协议:提供一种能力把数据从a主机跨网络送到b主机
ip协议用于将数据传给对方(操作者),tcp协议用于保证数据能传给对方(指挥者)。
因此tcp/ip一整套协议族就是用于将数据一定可靠的跨网络传给对方,其中tcp协议是解决进程到进程的问题,而ip协议就是解决主机到主机之间的唯一性,主机用公网ip来表示唯一性。
一个ip地址分为网络标识和主机标识两部分。
路由在路上的本质是从一个子网到另一个子网
二、IP 报头
ip包头标准大小是20字节,4位首部长度计算方式也是4字节为单位
16位总长度是包头加数据的总字节大小,因此分用时用4位首部长度能得到报头,用16位总长度能得到数据,从而实现解包。
8位协议:表明我们的上层协议/有效载荷的协议是谁
ipv4和ipv6不兼容
8位服务类型:其中只有4个bit有效,目前不重要(补充:早期定义里确实只用了一部分位,3 位优先级加 4 位最小时延、最大吞吐、最高可靠、最小费用,后面两位留着没用。但这个字段后来被重新定义,现在 8 位分成两块,6 位 DSCP 管服务质量,2 位 ECN 管拥塞通知,都用上了。路由器会读它来决定怎么排队、怎么丢弃,不是不重要。)
8位生存时间(TTL):一个报文在路上转发时可能在几个局域网之间环形死循环转发的问题,TTL的本质就是一个计数器,每经过一个路由器,该TTL就--,到<=0时,路由器就不转发该报文而是直接丢弃了
16位首部检验和:用于检查首部是否出现错误,数据出错了查不出来,这个字段还有个麻烦,每经过一个路由器 TTL 都要减一,首部就变了,所以每个路由器都要把首部检验和重算一遍。
三、子网划分
为什么要子网划分,网络是如何设计的才导致要子网划分?
划分子网并附上唯一编号就叫子网划分。
查找的本质是淘汰,淘汰效率高,查找效率就高,因此查找目标主机,必须先查找目标网络编号,这样可以淘汰其他网络,在全网中提高查找目标主机的效率。
同一个子网内的网络标识相同,主机标识不同。
一个路由器连接多个子网,因此一个路由器中至少存在两个ip
用于网络通信的ip其实是由路由器(内置的DHCP服务)分配给主机的(内网情况,也可以手工配成静态的),也就是说连接网络的本质是向路由器申请ip,叫DHCP协议(应用层协议)。
路由器有构建子网的能力,路由器的主业在网络层,按 IP 地址选路和转发,这是它存在的理由。设密码、限制连接数、DHCP、NAT 这些是它附带的服务器功能。家用路由器其实是路由器加交换机加 DHCP 服务器加防火墙的合体,判断某个功能属于哪一层,要看那个功能本身,也就是说路由器是可以工作在很多层的。
路由器自己的ip地址,主机号一般都是1(家用路由器)。
分类划分法
子网划分的本质就是32位bit的划分,这五类只看头几位,A 类第一位是 0,B 类是 10,C 类是 110,D 类是 1110,E 类是 1111,从而出现了5种划分方法。划分好的子网由运营商逐级分配地址块。
分类划分法的问题:作为一种资源很快就被人们抢完了,且实际情况下一个子网不太可能用完所有的网络号,从而导致大量的ip浪费。
解决方案是子网掩码,其是一段前面都是bit为1,后面都是bit为0的一段数字,ip地址与其&的结果就是网络号
意义:通过设置1的个数,重新设置网络号,为1的部分是新的网络号,剩余的是主机号,保证了分类划分的网络ip资源充分的使用。原因:掩码让网络号变成可变长的,一个单位只要几十台主机,就给它一个 /26 之类的段,剩下的地址继续分给别人。分类划分的死板在于网络号只能是 8、16、24 位这几种,掩码把它变成任意长度。
描写方式ip:192.168.32.1/24,/后面的数字代表了掩码中有多少位1。
ip地址&子网掩码就是网络号,网络号的全0到全1就是子网地址范围。
子网地址范围就是说明主机号有几位,2 的 n 次方是地址总数,减 2 才是能分给主机的数量,减掉的是一头一尾的网络地址和广播地址。
主机号中全0:说明整个ip就是网络号,全1:广播地址(即所有人都要接收到),或者说主机号中全0的就是在说明整个ip是网络号,为全1的就是广播地址。
特殊的ip地址就是主机号全0,全1的还有127.*的本地环回.
私有ip和公网ip地址数量,从网络宏观上看有公网:内网(局域网) = 1:n.
局域网的范围
10.*/8,前8位是⽹络号,共16,777,216个地址
这些范围内的ip都只能用于局域网组建私有ip,其余的全部是公有ip。
网络通信过程中,私有(内网)ip不能出现在公网上。
我们普通人直接接触到的都不是公网,直接接触到的都是内网(局域网,子网)
路由器具有在子网内分配ip的能力,WAN口ip是用于与外面的子网连接的。
路由器有企业级路由器和家用路由器两种,运营商路由器就是企业级路由器,其可以用来与家用路由器构建新的子网
WAN口ip是用于连接公网的运营商路由器叫做公网的出入口路由器
内网ip不允许出现在公网,解决这种问题的技术叫NAT。
因此最后在公网中的源ip就是公网ip,内网ip被隐藏了。
对方应答时的情况:首先应答一定能用公网ip(运营商路由器的WAN口ip)将报文传回我们的运营商路由器,之后只需反向转换和内网转发。
意义:屏蔽内网Ip同时不影响与外网通信从而解决ip地址不足的问题。
欠费断网的本质:路由器在部署时会记录用户信息,运营商路由器的本质也可以视为一个服务器,当用户报文推送到运营商服务器时,它检测对应用户信息时发现账号欠费,就不把这个报文推送出去了。
因此运营商可以控制我们的报文是否转发到公网。
墙的本质就是报文里面有敏感数据,运营商不允许我们的报文去到公网,翻墙的本质就是骗过运营商去到公网。
公网,公网ip由各个国家的运营商自主申请,内网和国家子网都由运营商来组建,一个区域有多大的网络取决于它有多少个公网ip。
公网ip的分配是按照各地的网民数量划分的,但目前简单的认为公网ip的划分由国家来划分。国家与国家之间通过国际路由器在国际公网上通信。
不同国家的前8位ip一定不同,此时所有国家的子网掩码为8位。(其实公网地址不按"前 8 位表示国家"来分,实际是 IANA 分给五大 RIR,RIR 再按块分给各国 ISP,块长从 /8 到 /20 都有,两个国家完全可能落在同一个 /8 里)
公网ip前8位表示地区或者说叫前8位表示网络号。
在国内省与省之间通过省间路由器通信,省与省之间的前8位都相同,为表区别,就用第9-16位表区别,此时子网掩码到了16位。(真实网络里没有"省间路由器""市级路由器"这种按行政级别摆出来的设备,ISP 骨干只看 AS 号和 BGP 路由,跟省份没有对应关系。这套写法是讲义为了讲清"网络号分层"编出来的模型,理解层次可以,别当成网络拓扑)
然后所有的省间路由器就与中国自己的国际路由器建立起了一个子网,也就是国内公网。
同理就是市级路由器同样用掩码来划分,然后市间路由器与省间路由器建立子网。到了区级时就使用子网了。然后这些区级的子网与市级路由器建立子网(最后一层公网),这些区级路由器的WAN口ip就是最后一层公网ip。
因此任何路由器都要配有至少两个ip,LAN口ip和WAN口ip连接里与外。
只看公网ip,一个路由器的WAN口ip是由更上一层的路由器的子网ip的网络号++分配得来的,而其的子网ip则是由上层分配的网络号+1得来的。
也就是说一个公网路由器的WAN口ip由上层路由器的主机号分配,而子网ip则由子网划分分配然后+1。
路由器自己的接口地址(LAN口ip)是从自己那块里挑一个用。下层拿到的是下一级的地址块,靠路由协议通告出去.
(1.0.0.0/8这种说是网络号,不能用于分配给路由器)
1.公网路由器的路由表算法和内网的路由表算法复杂度是不同的
2.先从国际公网上看,每个国家的国际路由器中都会有一个路由表(其实所有路由器都有这东西)记录整个区域网中的路由器的ip信息(前提是所有路由器都通告了自己的信息,通过这个来让一个网络号都不相同的路由器的局域网进行通信),同时一个国际路由器横跨了国际网和省网,因此要有两个ip,其中用于国际的就用分配到的ip段+1,用于省间通信的就根据子网划分的ip+1即可
3.国际路由器子网划分时的国际路由器上的5.6.0.1就类似于划分完后给自己也给了一段子网区域5.6.0.0,然后用5.6.0.1来与省间路由器通信
4.WAN口1是该路由器在得到分配的网络号后给自己用于在当前子网(上层子网)中通信的,大小就是分配到的网络号+1。WAN口2就是子网划分完给自己划分一个子网,这个划分出的网络号+1,用于下层子网。
5.路由器只有一张路由表,去国外的路由和去省内各网段的路由都装在里面,靠最长前缀匹配决定用哪条.
6.市级路由器就是WAN口ip为最后一层公网的子网划分,然后后面就是用LAN的内网ip了
7.一个目的ip在公网中的传输流程(最初的目的ip一定是一个公网ip),输送到自己国的国际路由器时,会将目的ip与此子网的子网掩码&从而得到网络号,然后用这个网络号在路由表中进行比对找到目标路由器的网络号,在找到对应路由器后,该报文进入该路由器,该路由器发现该报文不是给自己时(此时不用进行子网掩码),就又将其与自己的下层的路由表进行比对,找到后进行传输。
8.一家互联网公司的路由器级别就是市级路由器的级别,该公司的内网环境就是公司内网,给互联网公司发信息的本质就是进行省间转发