🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!
人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习!欢迎志同道合的朋友一起加油喔🦾🦾🦾
目标梦想:进大厂,立志成为一个牛掰的Java程序猿,虽然现在还是一个🐒嘿嘿
谢谢你这么帅气美丽还给我点赞!比个心
目录
IP是一种 「不可靠」的 「端到端」的数据包 「传输服务」,主要实现两个功能:数据传输 和 数据分片。
一.IP协议 (网络层)
①IP协议的报头格式以及各部分说明:
1. IP 数据报的拆包组包
在上图中,我们可以看到:一个 IP 的数据报总长度为 16位,这看上去和 一个UDP 数据报的长度相同,最大都为 64KB.
而虽然 IP协议 看起来也是有个最大 64KB 的限制,但实际上,IP协议 内置了拆包组包的功能。如果一个数据太长了,IP协议 就会先将数据自动拆成多个数据报,再进行传输,最后接收方收到数据时,又会重新进行组包。这样一来,就没有单单的 64KB 的限制了。此外,IP协议 的拆包组包功能是内置在协议中的,不需要程序员实现这一功能,比较方便。
2. 8 位生存时间
8 位生存时间这个字段表示 一个 IP数据报 最多在网络上存活多久,而 TTL 并不是一个时间单位,它其实是一个以 " 次数 " 为单位的概念。
比方说,主机A 给距离较远的 主机B 发送数据,数据每次经过一个路由器转发,TTL 就减 1,而 TTL 一直减到 0 还未到达 主机B 目的 IP,那么就被自动丢弃。而一般情况下 TTL 的次数都较为充裕。
那么,8 位生存时间这个字段,主要是用来防止出现路由器之间的循环。( A -> B -> C -> A )
3. 源 IP 与目的 IP
这是整个 IP 协议中最核心的部分。
我们将 IP地址 比作成快递单号上的地址,源IP 就表示 " 发件人地址 ",目的IP 就表示 " 收件人地址 "。
4. IP协议 的两个核心功能
地址管理:能够通过一系列的规则,将网络上设备的地址给描述出来。
地址管理中的一些重点部分在下面的 IPv4 协议中会详细介绍到,现在请继续往下看。
路由选择:根据当下的源地址和目的地址,规划出一条合适的路径。
此处的 " 路由 " 指的是 IP协议 中的 " 路径规划功能 ",为什么要进行规划?
因为通过网络从某一端传输到另一端,在这个过程中,并不是 " 一站到达 ",它更多的情况下是错综复杂的路线,下图为我们展现出来了这样的情况。
举第一个例子:小明准备从家里出发去市中心购物,那么他就得先明确起始地和目的地,起始地是家,目的地是商场。可想而知,小明在去之前,就必须得规划好路线。坐公交车、坐地铁、或坐出租车…假设他坐地铁,而坐地铁又分为很多种路线,可能先是 1号线 > 6号线 > 5号线,也有可能是 1号线 > 10号线 > 3号线 > 16 号线…他在去之前就能够规划好路线,以此来提高效率。
但是在 IP 协议中的路由选择与我们上面说的坐地铁选择路线之间有本质区别,更多的是一种 " 探索式 " 的过程。因为当数据到达某个路由器之后,路由器并不能立马为数据规划好一个整套的路线,路由器只能知晓它附近的情况,即它只知道相邻设备的情况。这很好理解,毕竟路由器是一个物理层面的实体,它并不能掌控全局,它的存储空间有限,不可能通过一个路由器的路由表就保存整个互联网环境的所有情况。
举第二个例子:杰克第一次来到一个陌生的城市,他也准备去市中心购物。但这时候,他就只能向路人问路,但是路人每次只能列出一个大致的方向。
当杰克遇到第一个路人A,
路人A 说:我不知道商场在哪,但我知道你从这里坐 3号线坐到 xxx路,那里一定有购物的地方,即使没有,你也可以再问问别人…
之后杰克应了路人A 的话,坐了 3号线,当他从 3号线下来的时候,找了半天没找到商场,于是又问了路人B,
路人B 说:你从这里直走,走到头,再往左转,就能看到购物的地方。
于是杰克又应了路人B 的话,到了他说的地方,只是发现了服装专卖店,并不是商场,于是他又问了路人C
…
在刚刚的例子中,每一个路人,就相当于一个路由器。每个路人都有一个自己熟悉的范围,但一个路人并不知道一套完整的路线,只知道一个大致的方向。而这个例子,就类似于路由器中的一种核心数据结构:" 路由表 "。
二、IPv4 协议
在 IPv4 中,计算机主要是通过一个 32位 的二进制数来进行表示一个 IP 地址。
而为了给人们直观地观察 IP 地址,把这个 32位 整数表示成 " 点分十进制 " 的形式。三个点把32位整数分为4个部分,每个部分一个字节,每部分的取值范围是0-255(1111 1111)
例如:下面的就为人们日常使用的 IP 地址格式
192.168.1.102
特殊地址
①网络号:
如果IP的主机号全为0,该IP就表示一个网络号(局域网中的一个正常设备,主机号不能为0)
②广播地址:
如果IP的主机号全为1,该IP就是一个"广播地址",往这个IP发送的消息,整个局域网都可以收到。
③环回IP:
如果IP地址是以127开头,就表示这是一个"环回IP",即表示主机自己
如果IP地址是10开头,或者192.168或者127.16-127.31开头的,表示该IP是一个局域网内部的IP(内网IP),剩下的IP被称为是外网IP(直接在广域网上使用的)。
注意:!!!
外网IP一定是唯一的,每个外网IP都会对应一个唯一的设备,而内网IP只在当前局域网内部是唯一的,但是在不同的局域网内可以有内网相同的IP设备。
关于 IP 地址,涉及一个较为重要的问题:IPv4 协议对应的 IP地址 够用吗?
IPv4 协议对应的 IP地址 实际上使用 32位 整数来表示的,而 32 位的二进制数最多也就只能表示 42亿9千万之多,这是因为当初设计者就是这么设计的,他们也没有想到今天这个时代,互联网发展的如此迅速。
所以说,针对一个城市、一个人口不那么多的国家,IP 地址或许已经够用了。
但如果要做到全球通信,就很困难了,因为可能我们每个人不止一个网络设备,公司也不可能按数量为员工分配刚刚好的设备。
三、如何解决 IP地址的不够用问题
1. 动态分配 IP
本质上说,动态分配 IP 的思想就是:一个设备接入网络了,就为其分配一个 IP,另一个设备没接入网络,就不为其分配 IP. 但是这种办法,终归治标不治本。
因为在当下社会,很多人手机可能就已经全天 24小时 开着网络了。
2. NAT 机制
NAT:Network Address Translation ( 网络地址转换 )
NAT 机制的思想实际上就是使用一个 全局的 IP 地址,来代表一批私有 IP 的主机。
(1) 根据例子理解 NAT 机制
在下图中,在局域网1 中,全局 IP 123.456.12.7 这个地址用来表示整个局域网内的主机地址。在局域网2 中,也是同样的操作。而由于不同的局域网可以使用重复的主机 IP,这样一来,就可以 " 重复使用相同的 IP地址了 ",以此间接达到地址复用的目的。
在上图中,类似于 192.168.xxx.xxx 这样的 IP 是一个局域网内部的 IP,局域网内部的 IP 在同一个局域网内部不能重复,但两个不同的局域网可以使用重复的局域网 IP.
当使用局域网1 中的主机1 尝试发送请求,想与使用广域网范围的设备进行通信的时候,主机1 就要先将 IP 地址转换为路由器对应的 全局IP,通过这个 全局IP 再来和广域网范围的设备进行通信;而当广域网范围的设备返回响应的时候,也先是返回到路由器上,路由器再将 全局IP 转换为 主机1 的 私有IP,这样一来,主机1 最终才能获取响应。
简单说明通过 IP,发送与接收数据的过程:
主机1 发送数据,源 IP -> 目的 IP 的过程:
私有IP 192.168.0.10 -> 全局IP 123.456.12.7 -> 广域网的目的 IP
主机1 接收广域网返回响应的过程:
广域网的目的 IP -> 全局IP 123.456.12.7 -> 私有IP 192.168.0.10
举个例子:大学生在学校拿快递的时候,学校附近可能不止一家菜鸟驿站,而不同的菜鸟驿站中取件码可以相同,但这些菜鸟驿站基本上是围绕着大学的学生服务的。那么某某大学就相当于是一个广域网,某个菜鸟驿站就相当于某个局域网对应的 全局IP,菜鸟驿站中的取件码就相当于各个主机,因为各个取件码依赖着所属的菜鸟驿站,而快递员送快递的时候,根据快递类型又来放入不同的菜鸟驿站中。
(2) NAT 机制对应的模型
NAT 机制是当下互联网中解决 IP 地址不够分配的典型情况,也比较的适合当下的网络。
对上图的发送数据与返回数据进行说明:
- NAT 路由器发送数据时,将 源IP 从 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 发送数据时就会生成表中的映射关系。
3. IPv6 协议
IPv4 是长度为 32位的数据,而 IPv6 是长度为 128位 的数据,读者可以使用计算器计算一下,IPv6 是一个巨大的数字。
IPv6 相当于釜底抽薪,它从根本上解决了 IPv4 协议的地址不够用问题。虽然 IPv6 已经提出了很多年了,但在当下的网络时代, IPv6 的普及程度,仍然相对较低,使用 IPv6 的 IP 远远少于使用 IPv4 的 IP.
原因就是 IPv6 和 IPv4 互不兼容,所以如果你要想升级成 IPv6,得把相关的网络设备,例如交换机、路由器、服务器…都得升级成 IPv6. 而这需要很大的一笔费用才能支持更换这些设备。此外,原先使用 IPv4 的网络设备使用寿命一般较长,也无需更换。
四.以太网协议 (数据链路层)
①什么是以太网协议?
以太网协议不仅仅规定了数据链路层的内容,也规定了物理层的内容。
②认识以太网数据帧:
1.mac地址:
很多人在这里会感到困惑,明明已经有了IP地址,那么为什么还要有mac地址呢?
这是因为,在很久很久以前,网络层协议和数据链层协议都是独立研发出来的。因此,你是否会觉得当今来看的话有些重复,然而在如今,当然又有新的见解了咯。
如今,IP地址是用来表示一次传输过程中的起点和终点。
而mac地址是用来表示一次传输过程中的两个相邻节点的地址,也就是说,一个以太网数据帧每次转发的时候,它的源mac地址和目的mac地址均会发生改变。
举个通俗的例子:
我从成都到北京,源IP地址为成都,目的IP地址为北京。
而我先从成都到河北,再从河北到北京,就涉及到两组mac地址(源mac地址:成都,目的mac地址:河北 => 源mac地址:河北,目的mac地址:北京)
2.帧尾:
帧尾的功能同UDP中一致起的是校验的作用,它是基于CRC算法的校验和。
3.MTU:(46~1500表示数据的加载范围)
MTU表示一个以太网数据帧能够承载的数据范围。
而这个范围取决于硬件设备,而以太网也是和硬件设备密切相关的,而不同的数据链路层设备对应的协议可能不同,MTU也就不同。那么要是数据报超过了MTU怎么办?这就会用到我们前面讲的IP分包,IP分包的并不是给IP报头64k准备的,更多的是用于此处适应数据链路层的MTU。
MTU与TCP协议的联系:
MSS:是TCP在IP不分层的情况下,所能搭载的最大载荷。与此同时,MTU也取决于TCP和IP的报头长度(是可以变长的)。
而MTU和MSS的联系:
4.ARP:(ARP报文不是用来传输数据的,而只是起到简单的辅助作用)
像路由器这样的设备在转发数据的时候,首先会拿到一个目的IP,通过这个目的IP来决定接下来的路怎么去走。而我们前面也讲到了每相邻路径实际是由mac地址来决定的,而目的mac是啥?这就要根据ARP协议,建立起IP=>mac这样的映射关系。
当设备启动的时候,就会向局域网中广播ARP报文,然后每个报文收到后都会给出一个应答,这个应答中就包含了自己的IP和mac地址,然后发起广播的一方就可以根据这些回应建立起这样的映射表了。
这里建立起这样的映射表,通俗一点来讲,还是用老例子:
成都到北京。这就建立起了成都=>河北=>北京这样的映射路线表了
五.DNS协议
①什么是DNS协议?
这是一个域名解析协议,位于应用层
简单来讲,
DNS
相当于一个翻译官,负责将域名翻译成ip
地址②为什么会有这个协议?
这是因为就算将IP地址点份十进制的形式,但是对于我们来记忆来说还是有一定难度。为了解决这个问题,就决定使用了一串英文字母来表示这个IP地址,而这串英文字母就是域名,类似于www.baidu.com这就是一个域名,而且域名和IP地址是一一对应的关系。
③ DNS在全球是如何进行推广使用的?
如今host文件也不再使用了,因为全世界的域名太多了,任凭这样改的话,是非常低效的,因此就成立了一个机构专门负责维护这里的域名和IP地址的对应关系,假如你想申请一个域名的话,就可以去这个机构报备一下就可以。
这个机构维护一组服务器就会把hosts文件存到这个服务器里面(域名解析服务器),要是自己想对其域名进行解析的话,就访问一下这个总的服务器就OK。
这个时候就会有人说,那这个多麻烦,每个设备上网要是都去访问这个解析服务器,那这个服务器的压力也太大了吧。
因此就把这个总的域名解析服务器设为根域名解析服务器,另外在每个国家每个地区都有各自的网络运行商,这些运营商就会就近架设域名解析镜像服务器(定时回合根域名解析服务器进行同步),像我们平时上网的话就会访问这些就近的镜像服务器。
④DNS遇到的问题:
不知道大家在上网的时候有没有遇到这样的问题:QQ能登录上,但是打不开浏览器。这就是因为就近的域名解析镜像服务器挂了(QQ使用的是自己写死的IP来访问QQ服务器,是不需要进行域名解析的)。
既然遇到了问题,那么我们该如何解决?
手动更改自己的域名解析服务器:打开我的电脑网络设置找到更改适配器选项,点击以太网属性,选择TCP/IP将自动获取域名解析服务器改成手动获取就可以。需要获取的域名解析服务器可以在网上进行搜索。
每当我们查询了DNS后,主机会对其进行缓存一段时间,当我们下次访问同一域名,就可以省略查询DNS的过程了,对于DNS域名和IP的对应关系是很少会改变的。