文章目录
- 一、IP协议
- IP地址
- 地址管理
- 路由选择
- DNS
- 二、以太网协议
- 以太网帧
- MTU
一、IP协议
IP协议是我们网络层的代表协议,今天我们就来一起学习一下吧,我们这里介绍的主要是IPv4协议。
版本:指定IP协议的版本,版本的取值只有4,6两个
头部长度:用来描述IP报头多长,报头中有一个选项部分,是可有可无的,我们可以自己调节它的大小,单位为4字节
服务类型(TOS):这里给的是8位,实际只有4位有效,分别代表IP协议的四种工作模式(最小延时,最大吞吐量,最高可靠性,最小成本)
总长度: 描述了IP数据报的总长度(报头 + 载荷)
大家需要注意,16位的总长度,是否意味着一个IP数据报,最大只能支持64KB?
这个长度限制确实存在,但我们的IP协议自身就支持对包的拆分和组装,如果一个IP数据报携带的载荷太长了超过64KB,就会在网络层对数据进行拆分,发送发将一个数据报拆成多个IP数据报分别发送,接收方分别接受在进行拼装
这几个字段都是为拆包/组包提供的。
标识符: 唯一标识主机发送的报文,如果被分片了,那么每一个片里的id都是相同的
标志: 相当于一个结束标记
片偏移: 分片相对于原始IP报文的偏移,用来描述当前分片在原报文的什么位置,实际偏移字节是这个数值 * 8表示的
存活时间(TTL): 一个数据报在网络上能够传输的最大时间(这里的单位不是秒,而是次数),一般初始值为64,没经过一个路由,TTL -= 1,如果到达0还未到达就丢弃,防止路由循环
协议: 用来描述上层协议类型,TCP/UDP
报头校验和: 对报头进行检验
这是我们IP协议中比较重要的部分,标识着网络上我们的源主机和目的主机
IP地址
我们这里使用32位2进制表示的,例如:01010000.00110100.01010101.01010010,但我们通常使用点分十进制的方式来标识,例如:62.155.175.25
IP地址的作用是为了给互联网上的每一个网络上的主机分配一个逻辑地址,但是我们这里只有32位,表示着IPv4的数量大概43亿左右,但随着互联网高速发展,IP地址出现不够用的情况,如何解决这种问题呢,有以下几种方案:
1.动态分配IP地址
简单的描述一下,我们的每台主机不是时时刻刻都在工作的,当你需要使用IP地址时,给你动态分配一个,当你不使用时,然后进行释放。虽然这个方案可以省下一些IP地址,但是并没有从根本上去增加IP地址,只是提高了利用率而已
2.NAT网络地址转换
简单地说,就是用同一个IP去代表一批设备,也能够大大提高IP地址的利用率
在我们NAT背景下,将IP地址分为两大类:
1.内网IP(私有IP):10.* , 172.16.* - 172.31.* ,192.168.*
2.外网IP(公用IP):除上面的私有IP之外的都是公有IP
NAT要求我们的公网IP地址必须是唯一的,私网IP可以在不同的局域网里重复出现,当我们的私网里的设备想要访问公网里的设备时,就需要NAT设备(路由器) 将IP地址进行转换,从而进行网络访问
如果我的局域网内多个主机经过该路由器转发给服务器,服务器看到的源IP都是一摸一样的,服务器的响应会先发给路由器,然后路由器再决定发给那个设备
显然NAT机制能够有效的去解决IP地址不够用的情况,但我们的网络环境也会变得更加复杂
3.IPv6
IPv6从根本上解决了IP地址不够用的情况,IPv6是128位表示的,一般使用冒分16进制表示:AD80:0000:0000:0000:ABAA:0000:00C2:0002。我们IPv6所能表示的数字是一个天文数字,有这样一句话,它能够为我们地球上每一粒沙子分配一个IPv6地址。
地址管理
一个IP地址可分为两个部分:网络号和主机号
网络号: 用来表示网段,保证两个连接的网段具有不同的标识(局域网)
主机号: 用来表示主机的,同一网段里可以拥有相同的网络号,但主机号必须不同
通过网络号和主机号的合理设置,就可以保证相互连接的网络里,每台主机的IP地址都是唯一的
最早的时候将IP地址分为5类去划分网络号和主机号的方案
分类 | 范围 |
---|---|
A类 | 0.0.0.0 - 127.255.255.255 |
B类 | 128.0.0.0 - 191.255.255.255 |
C类 | 192.0.0.0 - 223.255.255.255 |
D类 | 224.0.0.0 - 239.255.255.255 |
E类 | 240.0.0.0 - 247.255.255.255 |
这种网络号和主机号的分配方式太过于死板不够灵活,我们来了解一种更加灵活的分配方式
子网掩码
子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。
这样的设定就灵活的多了,我们可以根据局域网的大小,来手动设置网段号和主机号的位数,做到资源的合理分配。
特殊的IP地址
IP地址中主机地址全设为1:标识广播地址,用于给同一局域网所有主机发送数据
IP地址中主机地址全设为0:标识网络号,代表该局域网
127.*:代表环回地址,用于本机到本机测试(为了提高性能,不走网络方式),一般都使用127.0.0.1
还有一个主机号为1,这个是经验之谈,不是绝对的,表示网关IP,也就是局域网的入口
路由选择
简单的来说,路由选择就是在网路上规划一条最佳路径。
但由于网络环境是十分复杂的,任何一个节点是无法感觉整个网络环境的,它只能够认识附近节点。
所以我们路由选择所干的工作就是边走边问路,每当IP数据报经过路由器,都会查看一下路由表,查看下一步往哪里走,如果路由表有记录就直接按照表上信息走就行,如果没有,会有一个默认路径,直到目的地。
我们这里只是简单了解一下大致过程,不去深究。
DNS
DNS:域名解析系统,是一套可以从域名映射到IP的系统。
我们的TCP/IP中使用了IP地址对网络上的一台主机进行标识,但是一串串二进制实在不方便记忆和使用,于是就出现了域名,通过域名系统来映射域名和IP地址,例如百度的域名:www,baidu.com,这样我们想用访问百度就可以使用这个域名去访问,简单好记。
为了网站的域名不能重复,于是我们DNS对域名进行了分级。
.com就是一级域名,类似还有:cn,org,us…
baidu就是二级域名,代表百度公司
www就是三级域名
不仅域名分级了,DNS服务器也是进行分级了。DNS服务器也分为一级域名服务器,二级域名服务器等等。
网络通信发送数据时,如果使用目的主机的域名,需要先通过域名解析查找到对应的IP地址:可以简单理解域名系统为一个树型结构,从下往上查找对应IP地址过程,如果到根服务器还没有找到,那就认为不存在该主机。
二、以太网协议
我们在数据链路层考虑的是相邻两个节点(通过网线/光纤之间相连的两个设备)之间的传输,在这里我们有许多协议,这里我们着重介绍最知名的协议:以太网
以太网帧
我们以太网数据帧由三部分组成:帧头 + 载荷 + 帧尾
这里的源地址,目的地址,不是IP地址,而是MAC地址。,
MAC地址: 用于标识网络设备的物理地址,MAC地址用于识别数据链路层相邻的节点,长度为48位,在我们主机出厂的时候就已经设定好的。一般用冒分十六进制标识:06:11:17:06:rb:11,FF:FF:FF:FF:FF:FF标识广播数据报的MAC地址。
IP地址与MAC地址有什么区别?
IP地址描述的是传输的起点和终点,使用的是网络逻辑地址。
MAC地址描述的是数据链路层每个区间的起点和重点,是给网络硬件设备使用的网络物理地址
类型: 帧协议类型有三种:IP,ARP,RARP
载荷即是完整的IP数据报。
CRC为校验码。
ARP,RARP是我们数据链路层里的其他协议,这个协议大概可以让路由器/交换机能够认识局域网里的其他设备,这个ARP协议能够在路由器/交换机建立一张类似hash表,去建立IP地址与MAC地址之间的关系。
MTU
MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层,产生的限制。
最大传输单元MTU(Maximum Transmission Unit,MTU),是指网络能够传输的最大数据包大小,以字节为单位
大家可以具体看一下MSS与MTU的区别。
MTU具体有多大,和使用的物理介质有很大关系,也有数据链路层所使用的协议有关,以太网协议,MTU为1500字节,如果数据包长度大于MTU则需要进行分片。