计算机网络之IP协议与以太网

举报
未见花闻 发表于 2022/07/31 21:49:22 2022/07/31
【摘要】 本篇文章将介绍网络层和数据链路层的协议——IP协议与以太网,包括协议的格式,以及协议中每个字段的作用。

⭐️前面的话⭐️

本篇文章将介绍网络层和数据链路层的协议——IP协议与以太网,包括协议的格式,以及协议中每个字段的作用。

📒博客主页:未见花闻的博客主页
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📌本文由未见花闻原创!
📆华为云首发时间:🌴2022年7月31日🌴
✉️坚持和努力一定能换来诗与远方!
💭参考书籍:📚《计算机网络》,📚《图解TCP/IP》
💬参考在线编程网站:🌐牛客网🌐力扣
博主的码云gitee,平常博主写的程序代码都在里面。
博主的github,平常博主写的程序代码都在里面。
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

🍒1.IP协议

🍇1.1IP协议格式

IP是网络层传输的一种主流的传输协议,目前包括两个版本,一个是IPv4,另一个是IPv6,从全球范围来看IPv4仍然占据主流地位,不过在国内IPv6基本上部署的差不多了。
下面关于IP协议格式的介绍以IPv4为主。

🍉1.1.1IPv4格式

IPv4协议格式如下:
IPv4
版本(4位):用来描述IP协议的版本,0100表示版本为4,即IPv4,如果版本为0111表示版本为6,即IPv6。
常见版本号

首部长度(4位):表示IP协议首部的长度,单位是4字节,因此IP协议首部最大长度为15*4=60字节。
服务类型TOS(8位):实际只有4位是有效的,TOS用来切换IP传输的状态,TOS有效的4位分别表示最小延时,最大吞吐量,最高可靠性,最小成本,这四种状态,在同一时间传输时,只能选择一种。

TOS

数据总长度(16位):与UDP中表示的最大报文长度类似,表示数据载荷的最大长度,最大长度不超过16位,即64k,如果数据大小超过64k了,则需要对数据进行分包发送,虽然分包是下策,但是IP协议自身已经实现了有关分包组包的操作,保证组包后数据的顺序不被打乱,实现有关分包组包字段为16位标识,3位标志,13位片偏移。
标识(16位):其实相当于“快递编号”,如果一个快递太大了需要分开发送,那么分开发送的这几个包裹的“快递单号”是一样的,标识就是起到一个类似的作用,就是当将数据分包发送时,同一个数据报的数据,标识是相同的。
标志(3位):其实有效的就1位,即第三位,3位中,第一位保留备用,第二位为1表示禁止分片,为0表示允许分片,第三位表示数据分包时,如果是源数据的最后一个包,则会将标志位置为0,否则为1

标志位

片偏移(13位):由13位构成,用来标识被分片的每一个分段相对于原始数据的位置,这样就算出现先发的包后到的情况,也能确定该包在原始数据中的位置。
生存时间TTL(8位):它最初的意思是以秒为单位记录当前包在网络上应该生存的期限,然而,在实际中它是指可以中转多少个路由器的意思。每经过一个路由器,TTL会减少1,直到变成0则丢弃该包(TTL占8位,因此可以表示0~255的数字。因此一个包的中转路由的次数不会超过 2 8 = 256 2^8 =256 个。由此可以避免IP包在网络内无限传递的问题。)
协议(8位):表示传输层使用的是哪一种协议,比如TCP的编号是6,UDP编号为17
首部校验和(16位):用来校验数据是否正确。
源地址,目标地址(32位):源地址表示发送方的IP地址,目标地址表示接收方的IP地址,大小为32位,也就是说最多能够给大约42亿9000万的设备分配地址,由于互联网的快速发展,IP地址快不够用了,所以就有了IPv6,据说它能够给地球上的每一粒沙子分配地址。对于IPv4中的IP地址,通常使用点分十进制的方式来表示IP地址,就是将32位等分成4份每份8位,比如192.168.31.70这样的一串数字。
可选项:长度可变,通常只在进行实验或诊断时使用。该字段包含如下几点信息:安全级别,源路径,路径记录,时间戳。
填充:选项可能不是32位的整数倍,为此,通过向字段填充0,调整为32比特的整数倍。

🍉1.1.2IPv6协议格式

关于IPv6相比于IPv4的变化,《图解TCP/IP》有如下解释:

IPv6中为了减轻路由器的负担,省略了首部校验和字段(因为TCP和UDP在做校验和计算的时候使用伪首部,所以可以验证IP地址或协议是否正确。因此,即使在IP层无法提供可靠传输,在TCP或UDP层也可以提供可靠传输的服务。关于这一点可以参考TCP或UDP的详解。)。因此路由器不再需要计算校验和,从而也提高了包的转发效率。此外,分片处理所用的识别码成为可选项。为了让64位CPU的计算机处理起来更方便,IPv6的首部及可选项都由8字节构成。

IPv6协议结构如下:
IPv6
对比与IPv4做出一些总结:

  1. 版本的作用与IPv4相同。
  2. 通信量类与IPv4的TOS作用类似。
  3. 流标号听说用于服务质量控制,emm,不太了解。
  4. 有效载荷长度和IPv4数据总长度意思一样,不够IPv6称自己能够最大能够一次发送4G的数据,听说是可选项的功劳。
  5. 下一个首部字段,相当于IPv4协议字段。
  6. 源地址与目标地址相当于IPv4的源地址与目标地址,IPv6拥有128位,我算算,位数相当于IPv4的四倍,那么能够表示地址的大小就是IPv4能够表示地址大小的4次幂,太恐怖了,听说能够给地球上的每一粒沙子编号。
  7. 跳数限制相当于IPv4的生存时间TTL。

🍇1.2IP地址

上面说了那么多有关IP协议格式,但IP地址究竟是什么呢?对于IPv4,IP地址本质上就是一串32位的序号而已,以点分十进制的方式呈现出来,即平均将这32位平分为4份,每份8位,使用.分割,每份数据的范围为0-255,比如192.168.31.70就是一个IP地址。

IP地址分为两个部分,即网络号+主机号,网络号能够描述当前的网段信息(局域网标识),主机号区分了局域网中的主机。

要求在同一个局域网内,网络号必须相同,主机号不能相同,两个相邻的局域网(同一台路由器连接),网络号是不同的。

比如上面的192.168.31.70192.168.31表示网络号,70表示主机号。但是网络号的位数与主机号的位数是固定的吗?当然不是,在计算机网络,有一个专有名词叫做子网掩码 ,它也是一个32位的数,对应IP地址的每一位,如果为1就表示这一位是网络号,为0就表示主机号,子网掩码不会混着排列,左边为1表示网络号,右边为0表示主机号。

打开电脑的命令行,输入ipconfig,就能获取到本机的IP地址:

IP
就能获取到本机的IP地址和子网掩码,上图表示的子网掩码表示前24位是网络号,后8位表示主机号,毕竟自己的路由器也连接不了不少设备,8位完全够用,如果是公司或者学校,主机号很可能会长一点。

一些特殊的IP地址,如果IP地址的主机号为0,那么这个IP就是网络号,一般局域网内正常的设备主机号不会为0,如果IP地址的主机号全为1,那么这个IP就表示广播IP地址,即在这个广播地址上发送消息,整个局域网都会收到。

还有,127开头的IP地址,表示环回IP,就是表示主机自己,比较常用的就是127.0.0.1。IP地址是10开头,192.168开头,172.16~172.31开头的IP地址是同一个局域网内部的IP(内网IP),除去上面这一些类型的IP地址,剩下的IP称为外网IP,也就是直接在广域网使用的IP。

有关局域网与广域网IP我有以下几点说明:

  1. 内网IP在局域网内部是唯一的,但是在不同的局域网内,可以存在相同的IP地址。
  2. 外网IP是唯一的,每个外网IP对应一个唯一的设备。

我们知道,IPv4地址最多能够支持42亿9000万的设备编号,但是随着互联网的迅速发展,很快就不够用了,因此提出了三种解决方案:

  1. 动态分配IP地址,就是当设备上网的时候才分配IP,否则不分配IP,这种方案指标不治本,问题并没有完全解决。
  2. NAT机制,当前网络环境使用的就是这种方案,就是让多个设备使用同一个外网IP,我们用的最多就是运营商的IP,这就把网络分为了两个部分,一个是局域网,另一个是广域网,当我们多个设备连接上运营商提供的网络时,这些设备就组成了一个局域网,IP通常是198.168开头,而我们知道不同局域网的IP是允许相同的,外网IP是唯一,这就缓解了外网IP分配的压力,对于外网IP,我们在互联网任意的位置都能访问,而对于内网IP,只能在所在的局域网内才能访问。同样,这个方法,只是解燃眉之急,治标不治本。
  3. IPv6,我们前面说过,IPv6的IP地址大小是128位,位数是IPv4的4倍,那么能够支持编号数是IPv4的4次幂,听说能够为地球上的每一粒沙子进行编号,我们知道,制造电脑需要硅,硅由沙子提取,如果能够为沙子编号,那电脑等设备也不在话下,至少在人类到达星际文明之前都是够用的,这是根本方法。

关于NAT机制,我再补充一点,就是多个设备使用一个IP地址,在这多个设备组成的局域网中,有多台设备访问外网的同一服务器,服务器收到的IP地址是一样的,那该如何区分请求是来自那一台设备呢?很简单,通过端口进行识别,如果在这个局域网在存在相同的端口号,则系统会重新分配端口号,当然如果这个局域网连接的设备太多了,端口号不够用了那就好出现问题了,这也是NAT机制的问题,最根本的方法是使用IPv6。

既然IPv6这么香,为什么现在还流行IPv4+NAT呢?主要的原因就是IPv6与IPv4不兼容,那就造成需要升级IPv6就得换设备,那换设备要钱吧,那这钱谁出呢?但是我们国内IPv6升级的差不多了,主要是工信部给力啊。

🍇1.3路由选择

路由选择其实就是规划路径,数据想要从一个设备到另一个设备,需要先规划一条路出来,然后数据沿着这条路进行传输,传输到目标IP地址。

但是仅仅拥有目标IP是不够的,在数据发送的过程中还需要类似于“指明路由器”的类似信息,才能发送到目标地址。
也就是说,数据传输过程中如果不知道目标地址在哪,它就会找就近的人问路,就算给不出一条具体的路径,但是也会获得一个大致的方向,然后数据会沿这个方向走一段距离,找到另外一个路由器,这个过程也被称为下一跳,找到路由器后,又会进行问路,如果路由器知道目标地址在哪里,就会把路径的细节告诉这个数据,然后数据就会按照这个路径找到目标地址,如果这个路由器也不知道在哪,就会给出一个方向,以此类推,直到找到这个目标地址为止。

那路由器为什么能够找到目标地址,或者大致的一个方向呢,这是路由器中维护了一个路由信息表,表里面记录一些网段信息以及每个网络号对应的网络接口。至于路由器时如何形成路由表的,一是当路由器接入网络后,就会和相邻的设备“认识认识”,在认识的时候就构造了这个信息表,二是通过网络管理员手动导入。

🍒2.以太网

数据经过网络层的封装后,会进入数据链路层进一步封装,数据链路层最常用的协议就是“以太网”,协议格式如下:
以太网数据帧
目的地址,源地址(6字节):数据链路层的地址是MAC地址,表示物理层地址,每一个设备只有一个物理层地址,这在硬件出厂时就已经写死的(大部分),它的地址长度比IPv4长了6w多倍,如80-30-49-26-8E-D9就是一个物理地址,在命令行输入ipconfig /all就能够查看自己设备的物理地址。
帧尾(4字节):帧尾的功能一般是校验,它是一个叫做FCS(Frame Check Sequence,帧检验序列)或CRC算法实现的校验和。

以太网数据帧的最大数据载荷称为MTU,这个范围一般取决于硬件设备,不同硬件设备的MTU也不同。数据链路层考虑的是相邻设备,或者说是直接连接设备的数据传输,考虑到这个细节的时候,就需要关注传输的硬件设备,不同的硬件,搭载的数据量也不同。

除了MTU还有一个类似的概念,那就是MSS,表示在不分包的情况下,除去IP与TCP首部能够搭载的最大容量。

MSS
ARP报文,并不是用来传输数据的,而是一个辅助信息,就是将IP地址与MAC地址一一对应起来,建立成一个类似哈希表的映射关系,MAC地址每传输一次都会发生改变。当设备启动的时候,就会在所处的局域网发起一个广播,获取局域网内设备的IP与MAC地址,根据各个设备响应的信息就能建立一个IP与MAC对应的映射表。

🍒3.DNS域名解析

对于我们人类来书说,IP地址并不好记,为了方便人类的记忆,就将IP地址用一个域名(比如www.baidu.com)来指代,而DNS能够将IP与域名对应起来,形成映射关系。

DNS最开始的时候就是一个hosts文件,不过随着发展,现在就有一个机构专门在服务器上维护hosts文件,如果你需要域名解析,就可以访问它们的网站获取。
hosts
当然,就一个根服务器是满足不了全球用户的访问的,于是运营商就就近架设了镜像的服务器,镜像服务器会定时同步根服务器上的数据。

当我们主机查询一次DNS后,会把查询结果缓存保留一段时间,这样下一次访问网站的时候就不用频繁地查询DNS了,一般情况下,电脑会自动获取DNS域名解析地址(默认项)。
打开电脑的网络设置,点击“更多网络适配器选项”。
1
右键WLAN或以太网,选择属性。
2
选择IPv4的属性就能设置了。
3
这样就可以自己去设置DNS域名解析的地址了,常用的有114.114.114.114,当然还有很多很多,网上一查全都是。


下期预告:一文带你认识HTML

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。