
🎬 那我掉的头发算什么 :个人主页
🔥 个人专栏 : 《javaSE》《数据结构》《数据库》《javaEE》
⛺️待到苦尽甘来日

文章目录
IP协议
在网络层,我们使用最多的就是IP协议。而IP协议的主要工作就是地址管理和路由选择。围绕着这个性质,咱们开始学习IP协议的相关知识吧。
协议报头格式


目前主流的IP有两个版本,IPV4和IPV6。但是IPV4的覆盖率更高一些。这里的几位版本就代表着协议的版本号。

IP协议的报头,也是有选项的。此处的首部长度单位也是四个字节,4位就代表着报头长度最大是60字节。

8位服务类型(Type Of Service): 3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择⼀个。
也就意味着,IP可以根据需求切换工作状态。

咱们的IP协议这里也有总长度的限制,这个长度也是报头+载荷的长度。那么问题来了:假如传输层使用的是TCP协议,传输了很长的一段数据超出了64KB的限制怎么办?
还好IP协议内置了拆包组包的功能~

在三位标志中(其中有一个是保留位),有一个标志位表示是否触发了拆包操作。比如,IP携带一个比较大的TCP数据包,IP协议就会自动把他拆分成多个,通过多个IP数据包共同传输一个TCP数据包。同一个TCP包拆出来的许多包在16位标识这里被设成同样的标识,在组包时相应的也会将相同标识的数据包组合在一起。三位标志中还有一个标志位表示当前包是否是最后一个小包。13位片偏移则描述了这些小包的先后顺序,偏移小的在前,大的在后。
总之,靠着16位标识可以看出哪些包是同一个TCP数据包拆出来的,标志位可以判断当前IP数据包是否是拆出来的小包,片偏移规定了组包时每个小包的顺序。
思维扩展

八位生存时间代表的就是一个数据包能在网络上传输的最大时间。不过,他的单位是次数,IP数据包每次经过一个路由器转发,TTL就-1。 如果TTL变为0,就说明包到不了目的IP,就会丢弃包。比如写了一个错误的目的IP,这个包永远到达不了,不丢弃的话就会一直在路由器之间来回无限传输。
在CMD中,我们使用PING命令,代表着请求连接。PING + 域名就是向目标地址请求连接。相应的我们也会得到回复:

比如上图,返回的响应中我们会看到TTL为54,代表着中间经过了64-54 = 10个路由器。

学习了TCP和UDP的宝子们都知道,这两者的报头差异很大。所以IP协议在分用的时候,必须先知道要把这个载荷中的传输层数据包交给传输层的哪个协议去处理。此处8位协议就能很好区分。其实传输层和应用层之间也需要标识,靠的是端口号。

这里的检验和只检验报头部分,因为载荷部分传输层内部有检验和可以自行检验。

这部分是IP协议最关键的部分。IP地址本质上是通过32位的整数来表示的,由于32位整数不方便阅读,通常会把IP写作点分十进制表示方式,用三个点,分出四个部分。我们可以通过在CMD中输入ipconfig指令来查看自己电脑的网络信息:


我们常说的无线网,就对应着第二张图中的WLAN。我本台电脑在当前网络中的IP地址就是10.94.82.97。
咱们都知道,如果发送消息指定目的IP时,肯定要求目的IP是唯一的,否则这个消息不知道要传给哪个主机了。但是,2 的 32 次方等于4294967296(即 4,294,967,296,约 43亿)。而且,在万物互联时代,电视机冰箱手机等也都有着各自的IP,这个43亿的容量肯定是不够用的。不过咱们现在依然可以正常上网,这是为啥捏???
IP地址"扩容"
1.动态分配IP
对于一个设备,只有在他上网的时候才分配IP,不上网就不分配。
确实可以缓解IP不够用的情况,但是如果设备数量继续增加,还是没招。
2.NAT机制
将IP分成两类:
外网IP/公网IP
内网IP/私网IP(10.开头/172.16-172.31/192.168.开头)
外网IP是唯一的,内网IP在不同的局域网中,允许重复。
比方说我的IP地址是10.94.82.97,10.开头是经典的校园网局域网的开头,也就是说,你们在自己学校里面连接校园网,有可能跟我的IP地址一样。
在NAT背景下,网络通信进行的方式:
1.同一个局域网下,两个设备可以相互访问
2.在公网中的两个设备可以相互访问
3.不同局域网内部的两个设备不允许相互访问(无法区分访问时输入的IP地址代表的是哪个局域网中的IP)
4.公网设备尝试访问局域网设备不允许(同上,无法区分IP),但是可以通过内网穿透的方法间接访问。
5.局域网设备可以访问公网设备(网络地址映射)
3.IPV6
使用IPV6可以解决问题的原因是IPV6采用16个字节来表示IP地址。也就是2的128次方。。。。。。这个数字真的是大到离谱,所以IPV6地址很难被占满。
地址管理
网络划分
把一个IP地址分为两个部分,一个是网络号,一个是主机号。

同一个局域网中,网络号必须相同,主机号必须不同;
两个相邻的局域网中,网络号必须不同,主机号无限制

如图所示就是两个相邻的局域网。如果左边的局域网中有一个设备网络号是192.168.1.xx,那么这个设备将无法上网;如果同一个局域网中有两个设备网络号和主机号都相同,这两个设备都无法上网。
但是,图中这个连接两个局域网的路由器就很特殊,他既属于左边这个局域网,又属于右边这个局域网,所以,他有两个IP地址------一个是WAN口,一个是LAN口。

其实对于192.168.100.98哪个部分是网络号,哪个部分是主机号是可以配置的。

子网掩码也是一个32位的整数
换成二进制:11111111 11111111 11111111
左半部分都是1,右半部分都是0,不会出现01交错的情况。1的部分就表示了哪些bit位是网络号 。家用网络,一般都是255.255.255.0
可以将IP地址和子网掩码一起简写成192.168.100.98/24。

像我在校园网中的IP网络划分的规则就和家用的不一样。
特殊IP(记忆)
1.将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局城网;
所以网络设备在局域网中不能把主机号设置成0。
2.将IP增址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
广播地址:往广播地址上发送数据包就会被转发给局域网中的所有设备。
例如:手机投屏时就是通过广播来探索当前局域网中可以投屏的设备的。
3.127.开头的IP地址用于本机环回测试。比如127.0.0.1环回 IP代表当前主机
路由选择
路由选择描述的是通过IP协议进行数据转发的过程。
网络环境非常复杂的环境,任何一个路由器,无法存储所有的网络信息的~
但是每个路由器,是可以知道附近的网络情况(至少知道谁和他相连。当数据包到达某个路由器的时候,就会匹配这个路由器的"路由表 "(路由表就记录了这个路由器周围的设备的IP是啥,以及也会记录每个设备要通过哪个口转发过去)
1.如果目的IP刚好匹配到了路由表中的记录,直接按照当前的对应的口转发过去就行了
2.如果没有匹配到,路由表会有一个特殊的表项,"下一跳"指向的设备,上一级路由器所在的位置~。
这个下一跳是指当这个路由器的路由表没有目的 IP 的匹配记录时,会自动将数据包转发到 "默认路由" 指向的上级路由器,上级路由器的路由表覆盖范围更广,若它的路由表匹配到目的 IP 的网段,就直接转发到对应的路径;若仍无匹配记录,它也会通过自己的默认路由,将数据包转发到更上层的路由器。
以上就是本博客全部内容!
