网络原理之TCP_IP地址 & 子网掩码
鸡汤:
谋事在人,成事在天
社会有很多不是自己能把握的东西,不必给自己太多压力,朝着自己小目标尽力而为;结果或许重要,那也是看自己时运如何了。
一、IP4&6
概念:连接到Internet中的每一个节点的唯一标识
组成:网络号+主机号
版本:
1、IPv4 (没有特别指定的版本下,通常所谓的IP地址就是IPv4)
- 一串32位的2进制数,表示2^32个不同的数。
- 分4组,每组之间用小数点 “.” 分割,每一组的8位2进制数使用10进制数表示。
- IPv4的点分十进制记法,每一组的10进制数的范围是:[0,255]。
2、IPv6 (是IPv4 的 2^96 倍)
- 设计用于代替IPv4的下一代互联网协议
- 一串128为的2进制数,表示2^128个不同的数 (2^128可以说是一个天文数字,每个数可以分配给地球上的每一粒沙)
- 分8组每组之间用冒号“:” 分割,每一组16位2进制数,使用16进制数表示。
- IPv6使用冒分十六进制记法。
- 每一组的前导0可以省略;such as 2001:0000:9d38:0b87:14ea:007d:4b65:b04a —> 2001:0:9d38:b87:14ea:7d:4b65:b04a
- 若连续的一组或几组全是0,可以压缩为“::”,但是只能出现一次; such as 0:0:0:0:0:0:0:1 —>::1; 0:0:0:0:0:0:0:0 ---->:: ; ff03:0:0:0:2002:0:0:1001 ----> ff03::2002:0:0:1001
IPv6 我们不细讲,现在其实大部分还是使用的IPv4。感兴趣的可以自己下来网上了解。
1.1、IP4分类
根据网络规模的大小,IP地址分为了 A,B,C,D,E
五类,其中的 A,B,C三类为基本地址。
1、A类:
- 8位网络号+24位主机号。
- A类地址的第一为2进制数总是为
“0”
。- 第一个字节的取值范围 [0,127]
- 网络数:2^(8-1) = 128
- 主机数:2^24-2=16777214
- 特殊用途:
- 0.0.0.0,服务器监听地址,其实全0表示的含义有很多,不过通常表示整个网络”
- 127.0.0.1,回环地址,专用于测试,表示本机;实际上只要是127开头,即127.0.0.0~127.255.255.255,都表示本机
- 保留地址:10.0.0.0~10.255.255.255
2、B类:
- 16位网络号+16位主机号
- B类地址的前两位2进制数总是为
”10“
- 第一个字节的取值范围:[128,191]
- 网络数:2^(16-2)=16384
- 主机数:2^16-2=65534
- 保留地址:172.16.0.0~172.31.255.255
3、C类:
- 24位网路号+8位主机号
- C类地址的前三位2进制数总是为
“110”
- 第一个字节的取值范围:[192,223]
- 网络数:2^(24-3)=2097152
- 主机数:2^(8-2)=254
- 保留地址:192.168.0.0~192.168.255.255
在主机位中:
1、全0表示网络地址;
2、全1表示广播地址;
这两个地址是不能用的,所以计算主机数中都要 “-2”。
5.也有D类和E类,但是我们通常用不动,只重点关注 ABC类即可。
D类:保留用于组播(多播);D类地址前四位2进制数总是“1110”,第一个字节范围[224,239];
E类:用于实验,科研;E类地址前四位2进制数总是“1111”,第一个字节范围[240,255];
总结:
分 类 | 范围 | 适用网络 | 网络数量 | 主机最大连接数 |
---|---|---|---|---|
A 类 | 0.0.0.0 ~ 127.255.255.255 | 大型网络 | 126 | 16777214( 2 24 2^{24} 224-2) |
B 类 | 128.0.0.0 ~ 191.255.255.255 | 中等规模 网络 | 约16000 个 | 65534( 2 16 2^{16} 216-2) |
C 类 | 192.0.0.0 ~ 223.255.255.255 | 小型网络 | - | 254( 2 8 2^8 28-2) |
D 类 | 224.0.0.0 ~ 239.255.255.255 | |||
E 类 | 240.0.0.0 ~ 247.255.255.255 |
先来解释一下为什么会有IP地址,随着时代和科技的发展,网络部分有ICANN负责分配,保障网络地址的全球唯一性,主机地址由各个网络的管理员统一分配,在广域网中我们现在上网都会分配一个唯一IP地址供我们上网.
IP地址的网络号类似于我们的小区,主机号就是类似于小区中具体的人,这个也类似于Http协议里面的URL基本格式中的端口号拉,区分小区中的具体的位置。要想给别人传递消息或者说是寄东西,首先肯定得知道某小区某单元才能把这消息或者快递给到具体的人手中,但在在广域网中我们的IP地址都是唯一的。
1.2 应对IP不够用的问题
在Internet中IPv4是一个32位的二进制数,那么会分2^32 约等于43亿不同的IP地址,但是我们全球现在有80多亿人口,在Internet中每个人都是不同的IP地址,故iP地址肯定是不够的,所以又想到可以用局域网和私有地址来解决问题。我们的局域网就是以路由器中的Lan
口区分,路由器的Wan口就是连接Internet的。我们把唯一的IPv4地址分配给Wan
口,也就说的是外网。
外网是唯一的Ip地址。
局域网就是小区,小区里面的某栋某号可能会跟别人的小区是重号的,所以我们的IP地址就可以重复使用,只是他们不在同一个局域网中。要想在不同局域网中发出数据,就得经过路由器,路由器类似于小区里面的保安,快递小哥把东西给保安,保安再把快递给具体的人,而我们在局域网中使用协议规定的保留网址(私有网址)
根据自己设备的多少可手动设置ip地址。
保留地址(私有地址)的作用就是能在某个局域网中使用ip地址也可以在另一个局域网中也有重复的ip地址,这样确保每个人都可以分配到IP地址上网。
注意如果主机号的全 1,也就是255,”192.168.0.255“那么这个路由器会把接收到的信息全部打包(数据包)发给局域网中的每一个设备。俗称”广播地址“。
1.2.2、NAT机制
上文分析出的原理就称为“NAT机制”,因为Ipv4 不够用,IP分为内网和外网,内网可以在不同局域网中重复,外网是唯一,本质上就是一个大的局域网里的设备,通过路由器共用一个外网IP。
而NAT机制是路由器里的一个机制,这个机制是让外网的设备看不到内网的IP,会把局域网里设备访问广域网服务器IP数据报中的源IP进行替换,替换成路由器的外网的IP 。(何为数据报 可以看这篇帖子中 网络初始&网络编程 中的封装与分用那一部分)
这里两个客户端都连接上了服务器,服务器再根据他们的端口号的不同,来返回不同的应用程序数据,结合IP+port来明确一个唯一的连接。
1.2.2.3 NAPT机制
当客户端分配到相同的源端口,那么路由器就会触发NAPT机制
,路由器就会针对源端口,进行一个替换操作(NAPT)。
路由器如果发现源端口,目的IP和目的端口相同的时候,就会出发NAPT机制
路由器对数据报进行替换:
192.168.0.10:1234 --------------------> 201.1.2.1:1235
这种在路由器内部,就维护了一个映射关系,那么当服务器给主机返回数据的时候,数据先返回到路由器上,路由器通过映射关系找到刚才替换的数据,把之前201.1.2.1:1235 替换回了 192.168.0.10:1234 替换完后再把服务器这个数据转发到局域网里面的设备上。
通过上面的NAT机制和NAPT机制,确实可以把IP地址不够用的问题解决,但是也引来了重要缺陷,局域网中的设备访问外网设备是可以的,但是外网设备访问局域网内部的设备就不行了!!!
综上所述,真正解决IP地址不够用的问题,还是要考IPv6。
对于IP来说,除了管理IP地址外,还有个重要功能,就是路由器的选择,路由器会自己规划出一个通信路径,也就是问路找路的过程。
一个客服端想要和另外的客服端进行通信,那么中间的过程是会经过很多的设备,错综复杂,在这么复杂的环境中路由器会自动找到一条合适的路。
一个主机构造好网络数据报的时候,会先给他局域网里面的路由器发送数据报;如果局域网的这个路由器认识目的IP,就可以直接转发;如果路由器不认识目的IP,路由器就会把这个数据报沿着一条默认的路径继续转发给下一个路由器;重复上述的过程,转发到一定程度,就能找到认识目的IP的路由器。
1.2、子网掩码
1、一组32位的2进制数,与IPv4搭配使用
2、一般而言,总是从1开始,并且有连续的1和连续的0组成
- 掩码中为1的部分,表示对应Ip地址的
网络位
或子网类
- 掩码中为0的部分,表示对应Ip地址的主机位。
标准的掩码:
3、引入子网掩码后,一个IP地址就有3部分组成:
- 网络号+子网号+主机号
A类的主机号多,网络较少;B类比较平均;C类就是网络号多,主机号少。
这里就有个问题了这样一次划分网络都是8位划分,能不能灵活点可以借1位或者借5位这么划分的吗?在这里就需要用的子网掩码的概念了。
划分子网的功能:借主机位表示子网,可将一个大的局域网划分成n个小局域网。
划分子网过后,后面的0都是主机位,主机 2^7-2=126台。
总结出了子网划分的优势:
1、节约IP地址,避免浪费。
2、限定广播的传播。
3、保证网络的安全。
4、有助于覆盖大型地理区域。
计算方式:
- 主机的IP地址与子网掩码进行“按位与”运算 = 主机的子网地址,通过主机的子网地址可以判断主机所属的子网;
- 将子网掩码二进制按位取反,再与 IP 地址位与计算,得到的就是主机号。
4、子网地址相同的主机处于一个“网段”,子网的地址不同的主机处于不同的“网段2”,同一网段的主机可直接通信,不同网段的主机需要使用路由器才能通信
例题:
Ip1:192.168.1.123
Ip2: 192.168.1.131
Mask:255.255.255.128
判断Ip1和Ip2是不是同一个子网地址的网段?
直接带公式:
if(IP1 & Mask == IP2 & Mask){
System.out.println("相同");
} else {
System.out.println("相同");
}
这是伪代码。
二、练习
192.168.16.0 分三个子网
1、他的掩码??
2、每个子网的地址范围
3、每个子网的广播地址
4、每个子网的主机地址范围
① 192.168.16.0 属于c类
三个子网至少要分两个bit位(00,01,10,11)。
255.255.255.11
00 0000
192.168.16.192 ---- 掩码
②192.168.16.00
000000 ~ 00 111111 ---------> 0~63
192.168.16.01
000000 ~ 01 111111 ---------> 64~127
192.168.16.10
000000 ~ 10 111111 ---------> 128~191
192.168.16.11
000000 ~ 11 111111 ---------> 192~255
③ 00 ---------> 192.168.16.64
01 ---------> 192.168.16.127
10 ---------> 192.168.16.191
11 ---------> 192.168.16.255
④00 ---------> 192.168.16.1~1921.68.16.62
01 ---------> 192.168.16.65~192.168.16.126
10 ---------> 192.168.16.129~192.168.16.190
11 ---------> 192.168.16.193~192.168.16.254
切记:全1表示的是广播地址;
全0是有很多种含义的,其中一个是服务器监听地址,就是说,按照socket
协议,我们的服务器在提供服务的时候 需要设定“响应哪一个或哪一些IP地址”。如果我们设定任何地址都是可以连接的,我们在服务器端就是监听0.0.0.0 这个地址,监听这个地址就意味着我们这个服务器可以接受任何一个IP地址的客户端的连接。
后面会详细讲socket协议,也会有代码
所以配置ip地址的时候全1的和全0的都要去掉,不能用,最终计算主机数中都要 “-2”。
三、网络层的ip协议
1、4位版本号就两个其实,ip4,ip6。
2、4位首部长度(header length):IP头部的长度是多少个32bit,也就是 length * 4 的字节数,。4bit表示最大的数字是15,单位是4个字节,因此IP头部最大长度是15*4=60字节 。
3、8位服务类型(TOS)
3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0) ;描述了当前IP协议的形态,网络层中有个很重要的功能,规划两点之间合适的路径,TOS就是在选啥是最后是的,4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要,我们需要在这四种形态中,选择一种形态,作为最适合的依据。
4、16位总长度,就是IP数据报的长度,类似于UDP的数据报长度。
5、16位标识,3位标志位,13位片偏移,这里面涉及到了IP协议的拆包和组包。
IP总长度 是16位 = > 64k 这样的数据,但可能64k不完全能表示数据报,数据报可能大于64k,这时我们对大于64k的数据报进行拆包,拆的每一个包都小于64k,拆的包里面16位标识是相同的,也就是说IP报头是一样的,每一个小包里面都带有一个IP报头,然后由数据链路层,针对分出来的包分别进行封装,再进行发送传输。
最后发给接收方的时候,这些包可能会发生“后发先置”的情况,为了明确顺序,我们需要用13位片偏移来约定每一部分的 顺序(小的在前,大的在后),接收方就会根据片偏移的顺序来进行组包。
最后剩下3位标志位,3位标志位判断条件结束,是确定后续是否还有包。
(1)、这一位是1,表示后续还有其他包;
(2)、这一位是0,表示后面就没有包了。
6、8位生存时间 TTL
单位是转发次数,一个包被构造出来的时候,TTL默认值是64。当这个IP数据报每次经过一个路由器的转发,TTL就会 -1 ,当TTL变成0,这个包就被丢弃,就不会继续转发。意味着一个数据发送到另外一个主机上,中间转发的次数一定不超过64,当超过64还没有到达的时候,那么这个数据永远也不会到达。
7、8位协议
表示传输层使用的是那个协议。TCP 和 UDP都有不同的值,为了在分用的时候,清楚的把网络层的数据交给正确的传输层的协议来处理。
8、16位首部校验和
和UDP校验和是一样的
9、32位源IP,32位目的IP,这个就是IP协议中最关键的信息,类似于收件人地址和发件人地址。
就说上面所说的内容,点分十进制记法的格式。
四、数据链路层中的IP
链路层就是负责相邻两点的之间的通行情况,就是我之前局的例子,把小区里的包裹给到菜鸟驿站(本地)。
1、目的地址和源地址,指的是“mac地址”(物理地址)
4.1、MAC地址
1、每一块网卡的ROM芯片中都固化了一个48位的2进制数,称为“MAC地址”。
2、MAC(Media Access Control),媒体访问控制地址,简称“MAC地址”。
3、MAC地址作用是确保局域网中的每一台主机都有的一个唯一地址
4、MAC地址通常使用十六进制数表示,such as :00-19-21-2E-DA-EC。
5、MAC地址是6个字节,表示范围比IPv4大很多
跟IP地址作用区别:
1、IP地址主要是用来表示转发过程中起点和终点
2、MAC地址则是表示转发过程中任意一个中间过程中的起点和终点。
6、ARP
:表示地址解析协议,负责把IP地址解析为MAC地址;
7、RARP
:逆地址解析协议,负责把MAC地址解析为IP地址;
4.2、MTU
以太网帧格式中的IP数据报 46 - 1500 是以太网数据正帧能够承载的数据范围,这里的1500受限于当前物理层硬件设备的结构,不同的数据链路层协议,搭配不同的物理层设备对应承载数量的最大长度,也不同。
MTU是对上层协议带来的直接影响。正对IP协议,如果IP数据报超过了1500个字节,那么就无法装到一个以太网数据帧中,这是就会触发IP的分包操作,这是以太网数据帧MTU
限制来分;
所以IP分包操作,可以是超过64k这个长度二分,也可以是以太网的MTU限制来分,但是大多数影响分包操作的概率是MTU来分。文章来源:https://www.toymoban.com/news/detail-451230.html
铁汁们,觉得笔者写的不错的可以点个赞哟❤🧡💛💚💙💜🤎🖤🤍💟,收藏关注呗,你们支持就是我写博客最大的动力!!!!文章来源地址https://www.toymoban.com/news/detail-451230.html
到了这里,关于网络原理之TCP-IP地址 & 子网掩码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!