目录
网络层重点协议(IP 协议)
一、地址管理
1.如何解决上述地址不够用问题?
2.NAT 机制
2.1 NAPT
2.2 在 NAT 背景下如何通信?
3.IPv6
4.IP地址
4.1 ABCDE类
4.2 子网掩码
4.3 特殊的 IP 地址
二、路由选择
1.路由器
1.1 网关
1.2 路由
数据链路层重点协议
1.以太网
1.1 认识以太网
1.2 以太网帧格式
2.MTU
2.1 认识MTU
2.2 MTU对IP协议的影响
2.3 MTU的值是几?
关于 TCP/IP协议的 应用层和传输层的重点知识,请看博客:【网络原理】TCP/IP协议
IP 协议做的两部分核心工作
1️⃣地址管理
每个网络上的设备,要能分配一个地址(唯一)
2️⃣路由选择
A 给 B 发消息,具体走哪条路线?
协议头格式如下:
32位的整数,最多能表示多少个不同的地址呢?42亿9千万
显然上述地址是不够用的,那么应该怎么办?
在这里我们需要记住几个数:
一个字节: 0 ---->255 -128 ----> +127
两个字节: 0 ----> 65535 -32768 ----> +32767
三个字节: 0 ----> 42亿9千万 -21亿 ----> +21亿
1️⃣动态分配 IP 地址
✨设备上网才分配,不上网就不分配;此时就可以省下一大批 ip 地址。但是并没有增加 ip 的数量,只能一定程度的缓解,不能彻底解决问题
2️⃣NAT 机制
把IP地址分成“外网IP”’和“内网IP”,用一个外网IP代替N个内网IP
举个例子:
就好比你买了一个快递,地址写的XXX省XXX县XXX区XXX大学,不用写几号楼,几零几。但是一个大学里有好多人,那怎么确定是谁的包裹,所以我们就可以通过收件人和联系电话再来做进一步的区分。
把所有的 IP 地址分成两大类:
内网IP: 10.* 172.16.*-172.31.* 192.168.*
外网IP(公网): 剩下的ip
❗❗外网 IP 必须是唯一的;内网 IP 则可以重复出现(尤其是在不同的局域网中)
内网设备如果要访问外网,会给他分配一个外网 IP ,但是这个外网 IP 不是这个设备独占的,而是这个内网中所有的设备都共用一个外网 IP
一个外网 IP 代表一系列的设备
❓❓IP 如何进行工作的
假设现在有设备A和设备B要同时访问服务器的8080端口:
1):设备A =》路由器 =》 服务器
设备A发给路由器的IP数据报:
源IP 192.168.0.2 源端口:1000
目的IP:1.2.3.4 目的端口:8080路由器正常是要把这个数据报原封不动的转发,但是此时触发了NAT机制,于是就产生了“移花接木”
路由器把IP数据报中的源IP进行了替换,替换成路由器的外网IP
路由器发给服务器的消息:
源IP:1.2.3.5 源端口:1000
目的IP:1.2.3.4 目的端口:8080
2):设备B =》 路由器 =》 服务器
设备B先给路由器发IP数据报:
源IP:192.168.0.3 源端口:1000
目的IP:1.2.3.4 目的端口:8080此时路由器发给服务器是同样触发NAT机制,再次“进行替换”
路由器发给服务器的消息:
源IP:1.2.3.5 端口:1001(此时刚才的源IP:1.2.3.5 源端口:1000 已经被用过了,如果使用同样的,那么路由器无法区分出这个请求到底是哪个主机的)需要使用不同的端口
目的IP:1.2.3.4 目的端口:8080
服务器看见两个请求,但是源端口不一样,所以服务器在返回数据时就可以根据源端口,来分别返回不同的数据。
具体图解:
NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
NAT路由器收到外部的数据时, 又会把目标IP从202.244.174.37替换回10.0.0.10;
在NAT路由器内部, 有一张自动生成的, 用于地址转换的表;
当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系
那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的。那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机? 这时候 NAPT 来解决这个问题了。使用 IP+port 来建立这个关联关系。
主机 163.221.120.9 的端口号是 80,私网中有 2 个客户端 10.0.0.10 和 10.0.0.11 同时进行通信,并且这 2 个客户端的本地端口都是 1025。此时,仅仅转换 IP 地址为全局地址 202.244.174.37 ,会令转换后的数字完全一致。因此,为了区分这 2 个会话,只要将 10.0.0.11 的端口号转换为 1026 就可以解决问题。NAPT 路由器通过生成转换表,就可以正确地转换地址跟端口的组合,使客户端A、B能同时与服务器之间进行通信。这种关联关系也是由NAT路由器自动维护的。例如在TCP的情况下,建立连接时,就会生成这个表项; 在断开连接后,就会删除这个表项
外网设备 -> 外网设备:不需要任何 NAT ,直接就能通信
内网设备 -> 其他内网设备:不允许
外网设备 -> 内网设备:不允许
内网设备 -> 外网设备:对应的内网设备的路由器,触发 NAT 机制进行 ip 替换,此时就会给这个网络数据报的源 ip 替换成路由器自己的 ip,此时一个外网 IP 就能代表一大批内网中的设备
当前,动态分配 + NAT 来解决 IP 不够用的问题的;但是并没有让 IP 地址变多,只是提高利用率的方式来解决问题;要想从根本上解决问题,需要提供更多的 IP 地址,则会有第三种解决方案:IPv6
之前所学的 IP 协议叫做 IPv4:使用4个字节,32位来表示 ip 地址
IPv6:是更新一些的 IP 协议,使用16个字节,128位来表示 ip 地址
2^128 = 2^32 * 2^32 * 2^32 * 2^32;这个数字巨大无比,相当于给地球上的每一粒沙子分配一个 ip 地址都是够用的
概念:IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。
组成:IP地址分为两个部分,网络号和主机号
网络号:标识网段(表示一个局域网),保证相互连接的两个网段具有不同的标识;
对于网络号主机号的划分,主要有两种分类方式:
1️⃣IP 地址分类(ABCDE)简单了解
格式:子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字“1”表示,1 的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。
计算方式:
将 IP 地址和子网掩码进行“按位与”操作(二进制相同位,与操作,两个都是1结果为1,否则为0),得 到的结果就是网络号
将子网掩码二进制按位取反,再与 IP 地址位与计算,得到的就是主机号。
假定子网掩码是 255.255.255.0
1️⃣主机号为 0 的 ip
例如:192.168.0.0 就是网络号,局域网里不应该存在某个主机,主机号是0
2️⃣主机号全为1
例如:192.168.0.255 广播地址——将IP地址中的主机地址全部设为1,就成为了广播地址。往这个地址上发送 udp 数据报,此时这个数据报就会被转发给整个局域网中的所有主机(TCP 不支持广播)
3️⃣IP 为 172 开头的:127.*称为环回ip
127.0.0.1是最常用的
环回 ip 对应特殊的虚拟网卡 IO,通过环回 ip 传输的数据,走这个虚拟网卡(这个过程没有 IO 操作,纯内存操作),要比一般的这种普通 ip 的数据传输要快
4️⃣主机号为1
192.168.0.1 一般作为“网关ip”;网关即局域网的出入口
描述的是:从 A 到 B 之间,具体线路怎么走(A 和 B 之间存在很多种不同的路线,具体走哪条路??路由选择要做的事情就是这个)
路由器主要有两个作用:
路由器作为网关,可以划分公网和局域网,某些路由器还可以将局域网划分为多个子网(不同网段)
所谓路由,即在复杂的网络结构中,找出一条通往终点的路线;网络通信(网络数据传输),路由器中的路由功能,就类似于规划路线,往哪个方向行进能更快到达目的地。
IP 数据报 在进行网络转发的过程中,就是一个“逐渐问路”的过程,每个路由器只能认识周围的情况,很可能问的目标并不知道(目的 ip 在路由表中,没有匹配结果),此时就会走路由器给指定的一条默认的路径(路由表中的“下一条表项”,就会把数据报指引更上一级的路由器,越上级的路由器就见多识广)
"以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等;例如以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等;以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等;
把上述数据链路层数据帧,最大荷载长度称为 MTU ;如果承载的数据长度超过MTU,就会在 IP 层进行分包,使每个分出来的结果都能在 MTU 之内
MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层,产生的限制。
以太网帧中的数据长度规定最小46字节,最大1500字节 ,ARP数据包的长度不够46字节,要在后面补填充位;最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);不同的数据链路层标准的MTU是不同的;
由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。
1.将较大的IP包分成多个小包,并给每个小包打上标签;
2.每个小包IP协议头的 16位标识(id) 都是相同的;3.每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0);4.到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;5.一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数据;
虽然 IP 能拆包,仍然不能改变 UDP 最大长度是 64K 这样的现实(由于拆出的这些 IP 数据报中只有一份 UDP 首部,这个首部里就能够填写 UDP 长度的地方,页还是只有 2 个字节。则64K (即65535) 这个限制还是存在的)
如果面试中被问到,MTU的值是几?
千万不要回答 1500!!!因为不同的数据链路层协议,MTU 不一样,只有以太网才是1500!!