目录
2.2.2.2.一个局域网中有2个/多个设备访问公网IP,局域网设备发送请求的端口号不一样;
2.2.2.3.一个局域网中由2个/多个设备访问公网IP,极端情况局域网设备发送请求的端口号一样;
以下都是自己的学习总结,有不足也有错误的地方,谨供参考。
了解一个协议,就要看协议段格式
1.IP协议段格式
4位版本:指的就是ip协议的版本号,现阶段IP协议的有两个版本,IPv4,IPv6。
4位首部长度:指的是ip数据报的头部长度,4个比特位,最大就是0xF,单位其实4个字节,所以最大是40字节。
8位服务类型(TOS):头3位是优先权字段(现阶段已经舍弃,不再使用),4位TOS字段,1位保留位必须置为0.4位TOS字段分别代表该IP的服务类型:最小延时,最大吞吐量,最高可靠性,最小成本,由于四个服务类型是互斥的功能,所以只能有一个为1,其他三个必须为0.
16位总长度(字节数):16位最大就是65535个字节,因为TCP的载荷是很长的,所以IP协议和TCP协议配合的时候,如果载荷超过了协议所能承受的最大,就必须拆包;
1.1拆包和组包
内核会自动把TCP数据报从头到尾分成适合的片段,然后单独作为一个TCP数据段,再用IP协议封装,在进行传输。基本流程就如同下面的简图
既然一个很长的TCP数据报被拆片封装成了很多个IP数据报,在网络上进行传输,那等到到达目的IP,总要重新组合吧,毕竟应该是一个完整的TCP数据报,内核才能进行解析,那到底要怎么组包呢?就要看IP段协议中的16位标识,3位标志位,13位片偏移。通过这三个字段就能成功对IP的载荷进行组包。
16位标识:唯一的标识主机发出的报文,如果进行了拆包,他们的IP报头中的16位标识是一样的。
3位标志位:只有两位是有效的,1位是标识该IP数据报携带的载荷是不是需要组包的,另一位是标识该IP的载荷是不是需要组包的最后一个。
13位片偏移:标识了需要组包的IP的载荷的先后顺序。
8位生存时间(TTL):说是时间,实际是指IP数据报在网络中的转发次数,转发一次就减一,避免那些不能顺利到达目的IP的IP数据报在网络上无休止的转发,如果TTL减到0,该IP数据报就会在网络上消失。这个TLL是可以配置。
8位协议:标识IP的载荷是什么哪种协议的数据报,比如TCP数据报作为载荷或者UDP数据报作为载荷,为的是该IP数据报到达目的IP之后会分用,声明在网络层往上传输到传输层的时候要交给哪个协议处理。
1.2五层模型传输的依据
传输层--->应用层:端口号
网络层--->传输层:8位协议
数据链路层--->网络层:类型字段,IP或者其他
16位首部检验和:只对IP协议的报头进行检验,载荷的检验有载荷的协议的检验和进行检验
32位源IP:发送载荷的主机的IP地址(IP协议最重要,核心的)
32位目的IP:接收载荷的主机的IP地址(IP协议最重要,核心的)
IP在IPv4协议中是由4个字节构成,为了方便记忆和区分,会转化成“点分十进制”,形如最大是255.255.255.255,最小是0.0.0.0。
在网络上的每一个设备都需要一个IP地址,32位最大就是42亿9千万,也就是最多只能给42亿9千万个设备分配IP地址,没有IP地址的设备是无法在网络中运行的,这个数量在这IPv4刚提出来的时是完全够用的,当时网络在全世界并不是很发达,但是随着网络的发展,世界上的电子设备数量早已经超过了这个数字,那么我们是如何解决这个IP地址不够用的现状的呢?
2.如何解决IPv4地址不够用的现状
2.1 动态分配IP地址
虽然全世界要上网的设备有很多,但是同一个时刻有人在使用,也有人没有使用,就像现在中国是白天,使用网络的设备比较多,但是由于有时间差,地球上的某些地方正处在深夜,使用网络的人相对比较少。动态分配IP地址就是说只有当你是使用网络的时候才会给你发配IP地址,你不使用网络的时候有就不给你分配IP地址。
2.2 NAT网络地址转化机制
- 了解这个机制之前就要先了解两个概念:内网/私网,外网/公网。
- 私网IP仅限于在局域网中使用后,一个路由器上连接的设备属于一个局域网中;
- 公网IP只会在广域网中使用。
2.2.1 IP地址的分类
生活我们见到的IP地址非常的多,那我们如何区分是私网IP还是公网IP呢?
我们只有几种IP标识私网IP,像10.*,172.16.*-172.31.*,192.168.*都是私网IP,其他都是公网IP。
私网IP是可以在不同的局域网中使用的,就比如现在,我连接的是我学校的校园网,你连接的另外的路由器,我们都处在局域网中,所以我们的IP地址有可能是一样的。私网IP就使得一个IP的就代表一组涉笔,很大的提高了IP的重复利用率。
公网IP在网路上是唯一的,比如百度的服务器的IP地址:202.108.22.5就是一个公网IP,是唯一的。
既然有私网IP和公网IP,都是网络上的IP地址,那么他们之间是如何进行通信的呢?
2.2.1.1 私网和公网会出现的几种通信情况:
- 1.公网IP访问公网IP,是可行的;
- 2.正同一个局域网中,私网IP访问私网IP是可行的;
- 3.不在同一个局域网中的私网IP访问另一个局域网的私网IP是不可行的;
- 4.私网IP访问公网IP是可行;(公网IP是唯一的)
- 5.公网IP访问私网IP是不可行。(私网IP是不唯一的)
那么私网IP访问公网IP是我们日常生活学习中最经常使用的,那么他们之间是如何进行通信的呢?
2.2.2 私网访问公网
我们发送请求到指定的服务器,之间经过时设备时非常多,为了方便说他们之间的通信过程,我简化成三个设备。包括我们使用的电脑,运营商的路由器,要访问的服务器,之间的通信大致只会有三种情况:1.一个局域网中只有一个设备访问公网IP;2.一个局域网中有2个/多个设备访问公网IP,局域网设备发送请求的端口号不一样;3.一个局域网中由2个/多个设备访问公网IP,极端情况局域网设备发送请求的端口号一样;(以我的设备的IP地址和百度服务器的IP地址为准)
-
2.2.2.1 .一个局域网中有一个设备访问公网IP
-
2.2.2.2.一个局域网中有2个/多个设备访问公网IP,局域网设备发送请求的端口号不一样;
如果是一个简单的局域网,使用上面的说法尚且能够解释得通,那如果一个局域网中又很多个设备同时访问一个服务器呢?运营商根据IP地址进行发送只能一对一,只是使用IP地址肯定是与远远不够的,大家是否还记得在进行网络通信的时候还有另外一个很重要的参数:端口号。运营商在进行地址转化的时候,还会再映射表中记录通信双方得端口号;
-
2.2.2.3.一个局域网中由2个/多个设备访问公网IP,极端情况局域网设备发送请求的端口号一样;
有人会再问,那如果他们的端口号还一样,实际上这在生活中是极其低概率会发生的事情,因为启动一个客户端,系统会自动分配一个端口号,众所周知端口号最大时65535,所以概况时非常低,但是也是又可能发生的,实际上在这样的情况下,通讯策略时跟第二种差不多,但是如果端口号一样,在回应报文经过运营商就无法根据端口号找到具体的主机,所以运营商在进行NAT地址转化的时候,会把端口号改变,并不会端口号一成不变记录一下,会经过计算,重新分配一个新的端口号,比如两个主机都是从8080端口号发出请求的,运营商服务器会观察到他们的端口号是一样的,就会通过一定的计算,把两个一样的旧端口号映射器两个不一样的新端口好,有可能一个是8080,一个8081,此后的转化就跟第二种情况是一样的过程了。
通过动态分配IP地址和NAT地址转化机制,可以很大程度得环境IPv4协议IP地址不够用的现状,当前网络上也是通过结合这两种方法,但是也只是能够缓解,不仅我们的电脑和手机需要IP地址,任何一个能够联网的设备都需要一个IP地址,电视,监控摄像头,只能手表等等·,随着网络的高速发展,智能设备层出不穷,迟早有一天仅仅通过以上两种办法是无法解决IP地址不够用的现状的。第三个解决IP地址不够用的方法就是中国大力发展的IPv6协议,为什么中国要大力发展IPv6,大家可以自行在网上查阅资料,我这里分享一个视频,供大家了解。
2.3 IPv6协议
IPv4只用4个字节表示IP地址,所以最多只有42亿9千万个IP地址,但是IPv6使用的是16个字节来表示IP地址,这简直是一个天文数字,相当于42亿9千万*42亿9千万*42亿9千万*42亿9千万,毫不夸张地说它可以给地球上的每一粒沙子都分配一个IP地址,给每一滴水都分 配IP地址都是够用的,它可以让网络上的每一个设备都拥有一个公网IP。
既然IPv6可以彻底的解决IPv4地址不够用到现状,为什么全世界不彻底更换IPv6协议呢?虽然IPv4和IPv6都是IP协议,但是实际他们不互相兼容,对于用户来说升级IPv6不仅要消耗钱更换设备,跟不能带来网速的提高,可以说不影响日常的使用,但是IPv6国内的普及率是可以高达70%,这是国家互联网发展报告中说的,而且国家每一年都在呼吁和要求运营商给用户免费升级IPv6,所以自2018年后就会有运营商主动上门免费给你们升级IPv6。
IP协议主要的两个功能:地址管理,路由选择
3. 地址管理(IPv4)
地址管理说的是IP协议是如何管理和划分IP协议的,在一个局域网的主机IP地址要按照一定的规划分配IP地址,IP地址主要分成两个部分:网络号,主机号
- IP地址号的前部分是网络号,用于标识该主机是处在哪个局域网中,同一个局域网中主机的网络号是一样的,但是不能说网络号一样的IP是处在一个局域网中;
- IP地址号的后部分是主机号,用于标识该主机在局域网中不同主机;
注意:在生活我们常常可以手动分配IP地址,但是在分配IP的地址的时候要注意相邻的局域网的网络号是不可以一样的,会出现上不了网的情况。
3.1 子网掩码
我们知道局域网的IP地址由网络号和主机号组成,那我们如何区分哪一部分是网络号,哪一部分是主机号呢?这涉及到一个叫子网掩码的概念。
有IP地址就肯定有子网掩码,子网掩码也是由4个字节构成的,它的前部分全是1,后部分全是0,不会出现010这样的情况,全是1的部分相对应得的P地址的部分就是网络号,全是0得部分对应的就是IP地址的主机号。
上面是我电脑的IP4地址和子网掩码,子网掩码的全三个字节都是1,第四个字节全是0,就代表我的IPv4的地址的前三个字节是网络号,第四个字节是主机号。
3.2 五类IP地址划分(已经不再使用)
在没有子网掩码之前,上古时期还有一个划分IP地址的方法,这种方法已经被淘汰了,现在只会出现在教科书上,这种划分方法将IP地址分为5类,A,B,C,D,E类,通过指定前缀的方式分类IP地址。
3.3 特殊的IP地址
- 主机号全为0,表示网段,不能分配给主机作为IP地址使用。
- 主机号全为1,表示广播IP,往广播IP发送数据,会把数据发送给局域网内的全部设备,不过仅仅支持UDP数据报作为在载荷,因为不能实现连接,所以没有办法使用TCP数据报。
- 127.*表示是换回地址,这样的IP都是环回IP,比如你要给自己的电脑发送消息,就可以使用比如127.0.0.1这样的地址。
4. 路由选择(找路)
路由选择就是在数据转发的过程是如何选择要交给哪个路由器去转发的,才是能顺利的把数据转发到目的IP。
网络是无比复杂的,任何一个路由器都无法知道全网的环境,一个路由器只能知道自己与自己连接的设备的情况,所以只要实现一条最近的转发路径是很难的,所以这个过程一般是没有最优解的,只有较优解。
使用的方法是启发式转发,一个路由器只能知道自己附近的设备的情况,路由器会维护一个路由表,记录他们的信息,比如IP地址之类的,在转发的时候,会查阅这个路由表,如果有目的IP对得上,那就把数转发给他,如果没有,就把数据转发他路由表中的一个最“神通广大”的一个,这个其实我解释不了,只能说差不多意思。不过一定是可以找到的,就像“六度空间”理论,世界上的任意两个人都可能通过几个人认识。