目录
IP是一种「不可靠」的「端到端」的数据包 「传输服务」,主要实现两个功能:数据传输和数据分片。
一、IP协议(网络层)
(1)、IP协议的报头格式以及各部分说明:
1、IP数据报的拆包组包
在上图中,可以看到:一个IP数据报总长度为16字节,这看上去和一个UDP数据报的长度相同,最大长度为2^16-1=65535字节,也就相当于64KB。
而虽然IP协议看起来也是有个最大64KB的限制,但实际上,IP协议内置了拆包组包的功能。如果一个数据太长,IP协议就会先将数据自动拆成多个数据报,再进行运输,最后接收方收到数据时,又会重新进行组包。这样一来,就没有单单的64KB的限制了。此外,IP协议的拆包组包功能内置在协议中,不需要程序员实现这一功能,比较方便。
2、8位生存时间
8位生存时间这个字段表示一个IP数据报最多在网络上存活多久,而TTL并不是一个时间单位,它其实是一个以“次数”为单位的概念。
例子:主机A给主机B发送数据,距离较长,数据每次经过一个路由器转发,TTL就减1,而TTL一直减到0还未到达主机B,那么就自动丢弃。一般情况下TTL都是比较充裕的。
3、源IP与目的IP
这是整个IP协议中最核心的部分。
我们将IP地址化作成快递单号上的地址,源IP就表示“发送人地址”,目的IP就表示“收件人地址”。
4、IP协议的两个核心功能
(1)地址管理
地址管理:能够通过一系列的规则,将网络号设备的地址给描述出来。
(2)路由选择
路由选择:根据当下的源地址和目的地址,规划出一条合适的路径。
此处的“路由”指的是IP协议中的“路径规划功能”,为什么要进行规划?
因为通过网络从某一端传输到另一端,在这个过程中,并不是一站到达,它更多的情况下是错综复杂的路线,下图为我们展现出来多种路线。
举一个例子:我准备从家出发到长沙世界之窗,那么我的起始地址是家,目的地址是长沙世界之窗。在此之前,我需要对路线进行规划。我可以选择打车去,坐公交,地铁,拿地铁来说,可能是1号线->6号线->5号线,也可以是1号线->10号线->3号线,以此来提高效率。
但是在 IP 协议中的路由选择与我们上面说的坐地铁选择路线之间有本质区别,更多的是一种 " 探索式 " 的过程。因为当数据到达某个路由器之后,路由器并不能立马为数据规划好一个整套的路线,路由器只能知晓它附近的情况,即它只知道相邻设备的情况。这很好理解,毕竟路由器是一个物理层面的实体,它并不能掌控全局,它的存储空间有限,不可能通过一个路由器的路由表就保存整个互联网环境的所有情况。
二、IPv4协议
在 IPv4 中,计算机主要是通过一个 32位 的二进制数来进行表示一个 IP 地址。
而为了给人们直观地观察 IP 地址,把这个 32位 整数表示成 " 点分十进制 " 的形式。三个点把32位整数分为4个部分,每个部分一个字节,每部分的取值范围是0-255(1111 1111)
特殊地址
①网络号:
如果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地址不够用问题
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 最终才能获取响应。
(2) NAT 机制对应的模型
NAT 机制是当下互联网中解决 IP 地址不够分配的典型情况,也比较的适合当下的网络。
3、IPv6协议
Pv4 是长度为 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的报头长度(是可以变长的)。
4.ARP:(ARP报文不是用来传输数据的,而只是起到简单的辅助作用)
像路由器这样的设备在转发数据的时候,首先会拿到一个目的IP,通过这个目的IP来决定接下来的路怎么去走。而我们前面也讲到了每相邻路径实际是由mac地址来决定的,而目的mac是啥?这就要根据ARP协议,建立起IP=>mac这样的映射关系。
当设备启动的时候,就会向局域网中广播ARP报文,然后每个报文收到后都会给出一个应答,这个应答中就包含了自己的IP和mac地址,然后发起广播的一方就可以根据这些回应建立起这样的映射表了。
这里建立起这样的映射表,通俗一点来讲,还是用老例子:
成都到北京。这就建立起了成都=>河北=>北京这样的映射路线表了
五、DNS协议
①什么是DNS协议?
这是一个域名解析协议,位于应用层
简单来讲,DNS相当于一个翻译官,负责将域名翻译成ip地址
②为什么会有这个协议?
这是因为就算将IP地址点份十进制的形式,但是对于我们来记忆来说还是有一定难度。为了解决这个问题,就决定使用了一串英文字母来表示这个IP地址,而这串英文字母就是域名,类似于www.baidu.com这就是一个域名,而且域名和IP地址是一一对应的关系。