🌈🌈关于** TCP/IP协议的 应用层和传输层的重点知识,请看博客:【网络原理】TCP/IP协议**
🔥网络层重点协议(IP 协议)
IP 协议做的两部分核心工作
1️⃣地址管理
每个网络上的设备,要能分配一个地址(唯一)
2️⃣路由选择
A 给 B 发消息,具体走哪条路线?
一、地址管理
协议头格式如下:
🙈32位的整数,最多能表示多少个不同的地址呢?42亿9千万
显然上述地址是不够用的,那么应该怎么办?
在这里我们需要记住几个数:
一个字节: 0 ---->255 -128 ----> +127
两个字节: 0 ----> 65535 -32768 ----> +32767
三个字节: 0 ----> 42亿9千万 -21亿 ----> +21亿
1.如何解决上述地址不够用问题?
1️⃣动态分配 IP 地址
✨设备上网才分配,不上网就不分配;此时就可以省下一大批 ip 地址。但是并没有增加 ip 的数量,只能一定程度的缓解,不能彻底解决问题
2️⃣NAT 机制
把IP地址分成“外网IP”’和“内网IP”,用一个外网IP代替N个内网IP
举个例子:
就好比你买了一个快递,地址写的XXX省XXX县XXX区XXX大学,不用写几号楼,几零几。但是一个大学里有好多人,那怎么确定是谁的包裹,所以我们就可以通过收件人和联系电话再来做进一步的区分。
2.NAT 机制
🌈把所有的 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 发送数据时就会生成表中的映射关系
2.1 NAPT
那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的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的情况下,建立连接时,就会生成这个表项; 在断开连接后,就会删除这个表项
2.2 在 NAT 背景下如何通信?
外网设备 -> 外网设备:不需要任何 NAT ,直接就能通信
内网设备 -> 其他内网设备:不允许
外网设备 -> 内网设备:不允许
内网设备 -> 外网设备:对应的内网设备的路由器,触发 NAT 机制进行 ip 替换,此时就会给这个网络数据报的源 ip 替换成路由器自己的 ip,此时一个外网 IP 就能代表一大批内网中的设备
当前,动态分配 + NAT 来解决 IP 不够用的问题的;但是并没有让 IP 地址变多,只是提高利用率的方式来解决问题;要想从根本上解决问题,需要提供更多的 IP 地址,则会有第三种解决方案:IPv6
3.IPv6
之前所学的 IP 协议叫做IPv4:使用4个字节,32位来表示 ip 地址
IPv6:是更新一些的 IP 协议,使用16个字节,128位来表示 ip 地址
2^128 = 2^32 * 2^32 * 2^32 * 2^32;这个数字巨大无比,相当于给地球上的每一粒沙子分配一个 ip 地址都是够用的
4.IP地址
概念:IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。
作用:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地 址,以此来屏蔽物理地址的差异。
格式:IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如: 01100100.00000100.00000101.0000011
组成:IP地址分为两个部分,网络号和**主机号 **
网络号:标识网段(表示一个局域网),保证相互连接的两个网段具有不同的标识;
主机号:标识主机(标识了一个局域网的主机),同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;
** 对于网络号主机号的划分,主要有两种分类方式:**
4.1 ABCDE类
1️⃣IP 地址分类(ABCDE)简单了解
4.2 子网掩码
格式:子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字“1”表示,1** 的数目等于网络位的长度;右边是主机位,用二进制数字“0”****表示,0的数目等于主机位的长度。 **
计算方式:
将** IP 地址和子网掩码进行“按位与”操作(二进制相同位,与操作,两个都是1结果为1,否则为0),得 到的结果就是网络号**
将子网掩码二进制按位取反,再与 IP 地址位与计算,得到的就是主机号。
4.3 特殊的 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 之间存在很多种不同的路线,具体走哪条路??路由选择要做的事情就是这个)
1.路由器
路由器主要有两个作用:
1.1 网关
路由器作为网关,可以划分公网和局域网,某些路由器还可以将局域网划分为多个子网(不同网段)
1.2 路由
所谓路由,即在复杂的网络结构中,找出一条通往终点的路线;网络通信(网络数据传输),路由器中的路由功能,就类似于规划路线,往哪个方向行进能更快到达目的地。
IP 数据报 在进行网络转发的过程中,就是一个“逐渐问路”的过程,每个路由器只能认识周围的情况,很可能问的目标并不知道(目的 ip 在路由表中,没有匹配结果),此时就会走路由器给指定的一条默认的路径(路由表中的“下一条表项”,就会把数据报指引更上一级的路由器,越上级的路由器就见多识广)
🌴数据链路层重点协议
1.以太网
1.1 认识以太网
"以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了
一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等;
例如以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等;
以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等;
1.2 **以太网帧格式 **
2.**MTU **
2.1 认识MTU
把上述数据链路层数据帧,最大荷载长度称为 MTU ;****如果承载的数据长度超过MTU,就会在 IP 层进行分包,使每个分出来的结果都能在 MTU 之内
MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层,产生的限制。
以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
不同的数据链路层标准的MTU是不同的;
2.2 MTU对IP****协议的影响
由于数据链路层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) 这个限制还是存在的)
2.3 MTU的值是几?
🙈如果面试中被问到,MTU的值是几?
🙉千万不要回答 1500!!!因为不同的数据链路层协议,MTU 不一样,只有以太网才是1500!!
版权归原作者 奋斗小温 所有, 如有侵权,请联系我们删除。