2.IP协议的核心功能:能够在两点之间规划出来一条合适的路径
1)地址管理:通过一系列的规则,可以把网络上设备的地址给描述出来
2)路由地址:根据当下的源IP和目的地址,规划成一条合适的路径,啥叫合适?关键是看咱们的TOS是怎么选的?是选择最大吞吐量,还是最小延时??
这一个IP地址并不是给我一个人来进行使用的,而是所有说接入到这个运营商设备的局域网,都是在共用这同一个IP地址,可能不只是我自己,而是说我们小区的成百上千万人都是在使用者同一个IP地址;
1)此时直接连接到广域网(外网)的路由器设备,就叫做外网IP,实际上这些局域网里面的设备有很多,网络结构也有可能很复杂;
2)一个局域网里面的若干设备都在使用着同一个外网IP,先通过路由器的外网IP来确定把这个数据交给哪一个局域网,再通过局域网中的内网IP来确定把这个数据交给局域网中的哪一台主机
3)一个外网IP可能就包含着,几百,几千,甚至几万个网络设备;
4)如果局域网内部的数据尝试往广域网上发送的时候,此时的路由器就会悄悄地把其中的源IP给换了;例如上面的192.168.0.10向外面发送数据,通过路由器转发,就被替换成了外网IP;
5)一个局域网中的所有设备,共同使用一个外网IP;当我们在电脑端输入IP地址的时候,所展现出来的IP地址就是我这个电脑对应的接外网的路由器设备的外网IP,这个设备具体管理多少个内网设备,不从得知;
6)我们不在意局域网里面的IP是否重复,那么只要外网IP不重复即可;
7)下面三种IP都表示局域网IP 10.*,172.16.*-172.31.*, 192.168.*;
8)NAT机制虽然解决了IP地址不够用的问题,但是也引入了新的问题,比如说我想要在自己的机器上面搭建一个服务器,此时想要让其他用户通过外网来访问你的服务器这个时候是做不到的,我们自己的机器,只是一个局域网IP,内网IP是可以进行重复的;其他主机是无法通过一个内网IP来查询到你的服务器,除非是在同一个局域网里面
但是一个路由器所控制的局域网的一台机器不可以访问另一个路由器所控制的局域网的一台机器(除非是在同一个局域网里面),怎么办呢?
除非通过内网穿透(只是穿透某个窗口,不是把整个IP传过去了)

内网穿透:
1)现在咱们有一个内网IP,叫做192.168.0.10,咱们还有一个云服务器使用有外网IP的,内网IP访问不到,但是外网IP咱们是可以访问到的
2)咱们可以在80端口搞一个服务器,咱们把内网IP的主机和云服务器通过TCP建立连接

一个路由器的所管辖的一片局域网中的一台主机访问广域网的流程是怎么样的?
答:路由器本身是有自己固定的内网地址和外网地址,这个设备的源IP地址经过路由器后会转变成路由器的外网地址(因为这个局域网的所有设备经过路由器后都会转变成相同的路由器外网地址,所以为了区分,就用端口号进行区分)
当数据发送回来的时候,曾经路由器的外网地址会转变成具体的路由器的内网地址,此时再通过端口号来区分具体是哪台主机维护一个转换机制;
1)实际在NAT路由器内部,有一张自动生成的,用于地址转换的表。
2)该转换表中维护的就是局域网中主机的私有IP,与其对应访问的外网当中的某个公网IP之间的映射关系。
3)局域网中的主机第一次向外网发起数据请求时,就会生成表中的映射关系。
4)比如在TCP建立连接时,会建立对应的映射关系,在TCP断开连接后,就会删除对应的映射关系;
网络连接是一个五元组,即使IP地址是相同的,那么也没啥事
咱们的CCTALK现在有两个连接:
NAT机制:把IP地址分成了内网和外网
1)对于一个外网IP,在互联网上面的任何位置都是可以访问到的
2)对于一个内网IP,只能在当前的局域网内部进行访问,局域网1的设备,不能使用内网IP访问局域网2的设备,因为局域网1的IP和局域网2的IP都是一样的怎么办?内网IP是可以重复的,内网IP只有在当前局域网里面才是唯一的;
3)NAT的设备也是存在极限的,那就是端口号的个数是65535,如果一个局域网里面的连接数超过了65535,这个时候NAT就不一定好使了,端口号就不够用了,我们之前是用端口号保证是哪一台主机,况且在我们使用端口号的时候,保证不同的端口号不是通过我们自己手动指定的,而是我们的NAT设备来去自行保证的;
那么我们的路由器自己在进行指定端口号的时候,可以保证不会和别的端口号的局域网里面设备重复吗?这也是由我们的NAT设备来进行自己保证的;
咱们的NAT设备不光会对咱们的IP地址进行替换,还会对咱们的端口号进行调整
4)我自己家里面的电脑IP,这个IP只能在我自己家里面的局域网才可以进行访问,别的地区的人想要跨越局域网想要访问我的这个IP是做不到的;
5)咱们要想进行通信怎么办?我们就需要共同使用一个带有外网IP的机器,我这边的机器访问了抖音,抖音是具有外网IP的,把我自己直播的画面推送到抖音服务器上面(因为我知道抖音服务器的外网IP地址),你们也可以访问抖音(IP),从抖音服务器上面拿到我的直播画面,大家就可以进行跨越网络,来进行访问我自己电脑上面的一个画面了,这是以CCTALK为中介进行做到的;
6)假设没有NAT机制,所有的IP都是唯一的,那么我就可以在自己的电脑上面搭建一个直播服务器,别人直接访问我的电脑IP就可以了;
7)咱们的运营商的路由器就会进行分用到网络上面的网络层,就会修改IP数据包,这样我们从内网发送出去的原IP地址就被改成了外网IP地址,这样的带有这样子的功能的路由器设备也被称之为是NAT设备:
IPV4的外网IP的分配权限就是掌握在美国人手里面的,不给你分配新的IP地址,或者说把你原有的IP地址给干掉,势必会影响咱们的互联网发展;
NAPT技术
这就是网络地址端口转换:
1)如果局域网中的多台主机同时访问同一个外网服务,当路由器收到外网发来的响应数据时,路由器无法判断该响应数据应该转发给局域网中的哪台主机,因为该局域网中所有主机的数据包都由路由器代替发送了,因此发来的响应数据包的目的IP地址都是路由器的WAN口IP地址;
2)于是NAPT在建立转换表的映射关系时,除了建立局域网中私有IP与其对应访问的公网IP之间的映射关系外,还会加上一个由NAT路由器选定的端口号。
3)此时当局域网中的多台主机同时访问同一个外网服务时,虽然外网发来的响应数据的目的IP地址都是路由器的WAN口IP,但发给局域网中不同主机的响应数据对应的目的端口号是不同的,此时路由器就能通过IP+Port的方式来区分发给不同主机的数据包;
比如局域网中的主机A和主机B都在访问同一个服务器,并且它们访问服务器时采用的端口号都是1025。4)假设主机A发送的数据包先到达路由器,此时路由器将数据包的源IP地址替换成自己的WAN口IP地址,由于路由器用于访问该服务器的1025号端口没有被使用,因此该数据包的源端口号可以不变。
5)当主机B发来的数据包到达路由器时,路由器同样将数据包的源IP地址替换成自己的WAN口IP地址,但此时路由器用于访问该服务器的1025号端口已经被主机A使用了,因此路由器会重新选定一个端口号对数据包的源端口号进行替换;
6)此时转换表中就会建立如下两队映射关系:此时这张转换表既能保证从左到右的唯一性,也能保证从右到左的唯一性。
7)当服务器发来的响应数据到达路由器时,虽然服务器发给主机A和主机B的数据包对应的目的IP地址是一样的。
8)但路由器是用自己的1025号端口代替主机A进行数据请求的,而用的是1026号端口代替主机B进行数据请求的。
9)因此现在路由器可以继续根据数据包的源端口号,来判断应该将该数据包转发给主机A还是主机B,进行对数据包中的目的IP地址和目的端口号进行替换,然后转发给局域网内对应的主机;
1)路由器是工作在网络层的一个设备,负载将数据包从一个网络转发到另一个网络,但不能狭义的认为路由器只能工作在网络层。
2)NAT路由器在进行数据转发时,不仅有能力替换数据包的源和目的IP地址,而且在必要的情况下还可能会替换数据包的源和目的端口号,而端口号实际是传输层的概念。
3)转换表的生成和销毁都需要额外开销。
4)通信过程中一旦NAT设备异常,即使存在设备,所有的TCP连接也都会断开。
NAT不能从根本上解决问题端口号成为了限制
IPV6机制
1)这是用16个字节来表示端口号的问题,他从本质上解决了IP地址不够用的问题,但由于我们之前使用过的是IPV4,大部分的路由器都是不支持IPV6,所以要把所有路由器改成IPV6,所以要花钱(IPV4和IPV6都是不兼容的);
2)IPV6在报头里面使用了一个更长的字段来进行表示IP地址,IPV4是4个字节 32 位(2的32次方)但是IPV6是16个字节,128位(2的128次方),1byte=8bit;
3)咱们的运营商设备支持IPV6地址,要保证你的路由器和光猫也要支持IPV6地址,需要改设备,硬件支持+软件配置,咱们的IPV4和IPV6是不兼容的,升级IPV6成本太高;
上面的这一个IP地址其实本质上来说就IPV6表示的地址,每一个部分咱们用:来进行分割,每一个冒号分割成了两个字节,每一个数字都是一个16进制的数字,IPV6都是一个唯一的IP;
IP协议其他知识的补充,IP地址本质上是做两件事:
1)地址管理:
网段划分,我们在组建局域网中非常重要的要点;
1)例如在同一个局域网里面的主机,网络号要相同,主机号不可以相同;
2)两个相邻的局域网,通过同一个路由器连接的局域网,网络号必须不相同,主机号可以相同
咱们IP地址的网段划分是以子网掩码的方式来进行划分的,但是在我们的历史上面,也就是说在有子网掩码之前,我们是以简单粗暴的方式来进行划分的,咱们把IP地址分成A,B,C,D,E,这五类,每一类都会有几位是网络号,几位是主机号
下面的路由器1左边是一个局域网范围,右边是一个局域网范围;

那么具体从哪里来区分那部分是网络号呢 ?

子网掩码非常有特点:左面全是1,右面全是0,将子网掩码和IP地址进行按位与操作,得到的就是网络号;
如果主机号是255,就表示这个IP是广播IP,如果你搞一个UDP数据报,把目的IP写成主机号为255的IP,此时这个数据包就会发给每个局域网中的设备;假设手机里面装遥控器APP,也是可以操作电视的,但是前提是手机和电视必须在同一个局域网中,手机APP发送一个UDP数据报,把目的IP改成主机号是255的IP,此时电视就会返回响应;
2)路由选择:
此处的路由,表示的是IP地址的数据规划功能,在我们的两个设备之间要找出一个通道,能够完成传输的过程;
1)此处的路由规划指的就是IP协议中的路径规划功能,路由选择的过程,其实就是在A和B之间选择一条合适的路径,这个选择其实不要是一个容易衡量的事情,环境比较复杂,要综合考虑路径的长短,通信的速度,设备开销的大小;
2)IP协议中选择具体的过程,和地图中的路径规划还有一定的区别;地图这里是知道整体的路况,综合进行会考虑
3)事实上在数据到达某个路由器后,这个路由器并不知道网络整体的环境(这个太复杂了),这个路由器只是知道它附近的情况(它了解他邻近的设备的情况),IP协议寻路过程,其实就是一个探索式启发式的过程;
例如我想要去内蒙古工业大学,假设没有地图,但是我可以去问路,整个网络那么复杂,我不可能对每一条路都是很熟悉的,但是我肯定知道的是我附近的路是什么样子的,我也知道大概的方位;
1)一出门,我就抓住一个路人去问路,我怎么去内蒙古工业大学,如果他知道,就直接告诉我具体路线了,如果不知道,就会告诉我,你先去公交站牌上面问问路,但是唯一确定的是你必须先去坐公交,先去公交站上去问问;
2)如果到达公路牌,在抓到一个路人,继续问内蒙古工业大学怎么走;如果他知道怎么走,他就直接告诉我的具体路线,如果她不知道,他就会说,虽然我不知道工业大学怎么走,但是你得先坐车,到下一个公交站到了小吃街问问;
3)到了小吃街之后,我继续问人,在抓住一个人,他说,你再继续向东走走,应该就到了;
在这个过程的推移当中,我就逐渐靠近了内蒙古工业大学,当我逐渐靠近之后,此时我抓住一个路人,就直接知道学校在哪里,一旦他知道了路线,我就可以按照他说的路线,直接找到学校;
上面是一个最简单的情况,但是事实上,远比这更复杂,也许你问的路人啥也不知道,告诉你的方向也不是正确的方向;他有可能知道目标在哪里,但是他知道好几条路线,你必须做权衡;
这里我们举例的每一个路人,都相当于是一个路由器,每个路人都有一个自己熟悉的范围,在这个范围内,他知道自己怎么走,或者只知道一个大概的方向;这个事情就相当于是路由器中的一个核心的数据结构,路由表;
路由器的存储空间有限,不可能通过一个路由器的的路由表就知道整个互联网的环境的所有节点情况,路由表里面大致描述了啥样的IP从啥样的网络接口WAN/LAN传输;
1)咱们IP数据包的目的地址,就表示了这个包要发送到哪里去了,如果路由器认识,就直接告诉你路了,如果说当前路由器不认识,那么就会告诉你一个大致的方向,让你走到下一个路由器的时候再来问问;
2)依次往后走,其实本质上也是和目标越来越近,在此过程中,我们总会遇到一个认识这个目标地址的路由器,就可以具体的转发过去了;
3)有的时候,你甚至不光遇到了一个认识这个地址的路由器,而且还认识多个路,多种走法,这个时候就可以选择一个更合适的路了;
啥叫路由器认识这个IP地址?
1)在路由器内部我们维护了一个数据结构叫做路由表,路由表里面就记录了一些网段信息,网络号,目的IP就是在这些网络号中进行匹配,以及每一个网络号对应的网络接口,网络接口其实本质上就是对应着路由器里面具体的端口,是接下来走LAN口还是WAN口?
2)思路上就是某一个路由器上线之后(接入网络之后),就会和相邻的设备进行通信,认识一下,路由器就来构造一下路由表了,把这个LAN口对应一个网段,那个LAN口对应哪一个网段),路由器是可以更多的设备的设备,就可以更快的找的路了
3)咱们的路由表中的一个默认表项起到的效果就是当前咱们的IP地址在所有的表项都匹配不上的时候,此时就会告诉IP数据包,你问问别的路由器;
那么咱们的路由表是如何进行生成的呢?
1)生成路由表是存在着一些路由表生成算法的,可以自动生成一波;
2)咱们的网关还可以进行手动配置;
3)总而言之就是类似于说某一个路由器上线之后,也就是说接入网络之后,就会和其他的相邻的设备进行通信认识一下,在这个认识的过程中,路由器就开始构建这个路由表,网段和路由表也就开始构建出来的,路由器还会认识更多的朋友,这样在进行寻址的时候就会认识到更多的朋友了;
4)下一跳就是指大概的方位,如果我去问路,这个路由器就说我也不知道这个路怎么走,但是可以给出大概的方位,就是一个默认表项;










