ESP32S3网络编程学习笔记(0)—— 计算机网络基础科普

前言

(1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动/单片机/RTOS的实习岗位,可C站直接私聊,或者邮件:zhangyixu02@gmail.com,此消息至2025年1月1日前均有效
(2)本人也是刚自学计算机网络不久,所以说可能存在一些不专业的地方,我也只能尽自己能力可能查阅多的资料,确保本文不会出现错误。
(3)本文更多的是用于科普和简单的网络应用层开发需要了解的知识,因此并不会讲解的过于深入!

计算机网络发展的五步

第一步 — 批处理(Batch Processing)

(1)在上个世纪,计算机发展初期。计算机属于稀缺产品,世界上最顶尖的大学也可能只有一台计算机。为了能够让尽可能多的人使用到计算机,于是当时的大佬提出了批处理(Batch Processing) 系统。
(2)所谓的批处理系统流程如下
<1>一个科学家,将自己科研编写好的程序存入磁带。
<2>之后这个人需要带着磁带跑到专门进行计算机管理与运维的计算机中心。
<3>计算机中心的专门操作人员利用读卡机读取磁带程序,然后将计算机逐步执行命令,并且将结果利用打印机打印到纸张上。
<4>因为计算机中心的计算机很少,不可能只为一个科学家服务,所以这名科学家需要等待数日。结果出来之后,科学家即可返回计算机中心取回纸张,得到最终程序结果。

在这里插入图片描述

第二步 — 分时系统(TSS(Time Sharing System))

(1)上面的步骤无疑非常麻烦,一个科学家幸幸苦苦把程序编写完成还需要排队等候。
(2)为了解决这个问题,20世纪60年代,大佬们推出了分时系统(TSS(Time Sharing System)),这个系统就是一台主机,多个终端设备(终端设备一般是一个键盘输入,一个打印机将结果输出)。

在这里插入图片描述

(3)利用分时系统,虽然现在只有一台主机,但是每个人都好像有了一个自己的计算机一样。
(4)这里其实也可以解释,为什么Linux中,我们会设置很多个用户,用户组。因为主机装上Linux之后,他给每个终端设备分发一个用户,这样就不会互相打扰。

第三步 — 局域网(私网)

(1)伴随科技发展与进步,计算机不再仅仅局限于在研究机关使用, 一般的企业也逐渐开始使用计算机。
(2)企业内部需要用不同的计算机处理不同的事务,为了提高工作效率, 人们开始研究计算机与计算机之间通信的技术。于是就诞生了局域网的概念。

MAC地址

(1)局域网其实就是一台交换机连接多台主机,每个主机中的网卡负责对外通讯。而每个网卡都有全球唯一MAC地址,主机中的网卡告诉交换机,我要和谁进行通讯,这样就形成的通讯网络。
注意:交换机出现之前,还有一个集线器,现在基本不用了,如需了解请自行查找资料。

在这里插入图片描述

MAC地址可以重复吗?

(1)前面我们说了,MAC地址是全球唯一的,为什么现在还需要问这个问题呢?MAC地址是一个有限的数字,只要是有限的数字,就必然会有用完的一天。而且从上面的知识我们知道即使MAC地址相同, 只要不是同属一个数据链路就不会出现问题。(如果这里理解为,班级A 有小明,班级B也有小明,只要一个班上只有一个小明,那么小明这个名字在所在班级就具有特殊性)
(2)正因为上面的原因,在全世界, MAC地址也并不总是唯一的。 人们可以在微机板上自由设置自己的MAC地址。 再例如, 一台主机上如果启动多个虚拟机,由于没有硬件的网卡只能由虚拟软件自己设定MAC地址给多个虚拟网卡, 这时就很难保证所生成的MAC地址是独一无二的了。
(3)但是, 无论哪个协议成员通信设备, 设计前提都是MAC地址的唯一性。 这也可以说是网络世界的基本准则。

MAC地址可能会被耗尽吗?

(1)Mac地址是48位二进制数,约281万亿Mac地址。我们常说的IPv4是一个32位二进制数,约43亿IP地址。2019年11月26日,全球所有43亿IPv4地址已分配完毕。而Mac地址池可是比IP地址池大了6万多倍,而且重复的Mac地址只要不在一个局域网内就能正常使用,Mac地址相当于永远都消耗不完。

第四步 — 互联网(公网)

(1)局域网的实现,解决了公司内部的不同计算机的数据交流问题。但是,随着时代的发展,计算机的普及,普通人也能够有使用计算机的资格了。
(2)现在有一个问题,如果一个大佬研发了一款好用的软件,想让全世界人都能够体验到,这个怎么办呢?于是互联网就随之产生。
(3)互联网其实也没有那么的神秘,你其实可以理解为一个包含整个地球的局域网。
(4)虽然是,互联网可以理解为包含了整个地球的局域网,但问题是。全球这么多台计算机,怎么能够高效的通讯呢?
(5)举个不恰当的例子,每个中国人都有一个属于自己的独一无二的身份证号码,这个可以理解为MAC地址。如果上海的小明想给北京的小红写邮件,难道直接告诉邮局小红的身份证号码,然后让邮局在茫茫人海一个一个的是对照身份证号码找到小红吗?
(6)通过上面的例子,我们明显可以看出,这种方法并不合理。从实际的角度来看,小明应该告诉邮局,小红的地理位置,然后邮局通过这个地理位置找到小红。地理位置就是接下来要讲的IP地址。

IP地址

(1)对于应用层网络编程,我们重点就是要关心的IP地址,上面的简单过一下就行了。IP地址与MAC地址之间的ARP协议的内容请自行了解。
(2)IP地址可以指示网络的物理位置,于是我可以测试一下,我博客网址所在服务器位置。首先打开命令行ping一下我的博客网址,知道我博客IP地址为117.149.203.51

在这里插入图片描述

(3)然后利用IP归属地查询这个网站查看一下,我的博客地址所属的服务器在浙江温州。

在这里插入图片描述

IPv4和IPv6

(1)上面我们说了2019年11月26日,全球所有43亿个 IPv4地址 已分配完毕。为了解决这个问题,大佬们提出了IPv6IPv6能够给地球上每一粒沙子都分配一个IP地址。
(2)虽然说IPv6这么强大,但是IPv6并不兼容IPv4,而且IPv4使用这么久了,很难短时间直接替代。于是大佬们用了各种补丁,来延长IPv4的寿命。

第五步 — 物联网

(1)上面说的互联网只是电脑能够互相通讯了,物联网要实现的是,全球所有设备能够实现上网,都能够交互。

计算机网络的基础知识

TCP/IP分层

五层模型

(1)如果接受过专业的计算机网络学习的同学肯定了解OSI七层模型,但是在实际应用中,一般都是采用的TCP/IP的五层模型。对应关系如下图

在这里插入图片描述

(2)如下为TCP/IP每一层所对应的内容

TCP/IP层 网络设备 协议/内容
应用层 HTTP、MQTT
传输层 四层交换机,工作在四层的路由器 TCP、UDP
网络层 路由器、三层交换机 IPv4、IPv6、ARP、ICMP
数据链路层 网桥、交换机、网卡 MAC地址
物理层 电缆、光纤、无线电波、双绞线 0和1的数据

TCP/IP的封装、解封、运输过程

(1)对于TCP/IP的数据传输,如果用户想要发送某个数据,需要层层封装之后才能够使用。下图是封装过程,后续会讲解IP首部和TCP/UDP首部的内容,其他内容无需过多关心。

在这里插入图片描述

(2)当数据到达目标主机之后,数据会被层次解封,最终只剩下用户数据。

在这里插入图片描述

(3)在数据传输过程中,源主机将数据封装,在中转的路线中,中转设备收到数据会将解封物理层链路层网络层。之后中转设备会根据IP地址找到最短路径,并修改链路层中的MAC地址进行跳转。
(4)中转设备发送数据,会将数据重新封装,其中,网络层的源IP和目的IP并不会发送改变。但是链路层的源MAC地址和目的MAC地址会改变。详细内容建议去学体系的计算机网络,该部分不做赘述。

在这里插入图片描述

IPv4的分类

(1)虽然说IPv4已经耗尽,最新推出了IPv6,但是现如今使用最多的依旧是IPv4,因此我只讲解IPv4的一些内容。

5类IPv4地址

(1)IPv4分为5类地址,其作用如下

  • A类地址(1.0.0.0 - 126.0.0.0):大型组织和政府机构
  • B类地址(128.0.0.0 - 191.255.0.0):中等规模的组织
  • C类地址(192.0.0.0 - 223.255.255.0):任何需要的组织
  • D类地址(224.0.0.0 - 239.255.255.255):组播
  • E类地址(240.0.0.0 - 255.255.255.255):实验/科研

网络号和主机号

(1)地址分为网络号和主机号,因为D类用于组播,E类是科研,因此这里不做讲解。在下图中,net-id表示网络号,host-id表示主机号。

在这里插入图片描述

(2)网络号相同的是属于同一个网络中,在同一个网络中,计算机才能够互相通讯。如果不在同一个网络中,计算机之间想要通讯,就需要通过其他设备进行中转,例如路由器。

子网掩码

(1)对于A和B类IP地址,他们的网络所能够容纳的主机相当之多。 随着互联网的覆盖范围逐渐增大, 网络地址会越来越不足以应对需求, 直接使用A类、 B类、 C类地址就更加显得浪费资源。为了减少浪费,于是大佬们推出了子网掩码的概念。
(2)子网掩码是为了克服IP地址分类太粗糙。从只有网络号主机号两个级别,变成了网络号子网号主机号三个级别。

在这里插入图片描述

(3)为了作到对前面的IPv4做兼容,所以说,IP地址还是延续之前的两级IP地址。只不过,对于支持三级IP地址的设备,还需要在计算机中填入一个子网掩码。这样就能够实现对前期设备的兼容,同时增加子网号的内容。

在这里插入图片描述

(4)子网掩码用二进制方式表示的话, 也是一个32位的数字。 它对应IP地址网络标识部分的位全部为“1”,对应IP地址主机标识的部分则全部为“0”。 子网掩码必须是IP地址的首位开始连续的“1”(最初提出子网掩码时曾允许出现不连续的子网掩码, 但现在基本不允许出现这种情况) 。
(5)子网掩码有两种表示方法
<1>以172.20.100.52的前26位是网络地址的情况为例, 以下是其中一种表示方法, 它将IP地址与子网掩码的地址分别用两行来表示。

在这里插入图片描述

<2>另一种表示方式如下所示。 它在每个IP地址后面追加网络地址的位数(这种方式也叫“ 后缀” 表示法) 用“/”隔开。

在这里插入图片描述

公网和私网

(1)前面说了,IPv4的地址有限,在计算机网络的设计初期,下图范围内的IP地址都属于私有IP。私有IP最早没有计划连接互联网, 而只用于互联网之外的独立网络。 然而, 当一种能够互换私有IP与全局IPNAT技术诞生以后, 配有私有地址的主机与配有全局地址的互联网主机实现了通信。

在这里插入图片描述

(2)下图就是NAT技术图。其实很好理解,意思就是说,家庭的网络是局域网,只有我们购买了路由器,才能够联网。家庭的局域网对外是只有一个公网IP

在这里插入图片描述

(3)除了私网以外的IP地址都是公网IP了吗?不全对,还需要将下面这两段地址剔除,才能够算公网IP

  • 0.X.X.X:不会被分配给网络设备,而是用于特殊用途。
  • 127.X.X.X:这个地址范围被保留用于环回(loopback)接口,即主机自身通信使用。

IP首部

(1)上面说了,链路层一般我们都不需要管,硬件会帮我们处理好。作为上层开发,我们只需要了解IP即可,IP地址本质上就是对底层的MAC地址进行抽象的作用。
(2)这里我只会说我认为需要了解的部分,其他内容自行了解。
<1>我们之前说了,IP地址分为IPv4IPv6两个版本,因此IP数据包的前4bit用于指示当前的IP采用的是哪个版本。
<2>第一个字节的1631bit用于指示当前的IP数据报有多长,IP数据包并不是固定长度,而是可变的,因此必须指示报文长度。虽然是,这里分配的总长度为2字节,能够分配65535字节数据。但是IPv4数据包通常最大为1500字节,这是因为在实际应用中,IP数据包的长度可能会受到其他因素的影响,例如网络环境路由器设置等。
<3>第二字节的015bit是标识。因为IP数据包不能太长,否则会导致网络资源的浪费,但是我们有时候又需要发送很长的,于是就要采用切片技术。如果数据被切片了,一台设备短时间收到多个IP数据,设备怎么知道哪些数据是一起的呢?于是就由这个标识决定,标识相同的IP数据报文标识是同一块数据被切片之后的结果。
注意:即使标识相同, 如果目标地址、 源地址或协议不同的话, 也会被认为是不同的分片。
<4>第三字节的04bit是标志,标识能否数据能否切片,如果能够切片,是否为最后一帧数据。
<5>第四字节的415bit是片偏移,因为IP的首部是存在一个可变部分,因此我们需要指示真正的数据部分位于TCP的哪里。

在这里插入图片描述

端口号

(1)通过IP地址和MAC地址,我们能够找到目标主机了。但是这个时候有一个问题,张三QQ李四发消息,我怎么确保数据是发送到了QQ上而不会发送到微信里面呢?
(2)于是就需要端口号指示数据到底是发送到主机中的哪一个进程中了。
(3)对于端口号的使用范围

  • 0到1023:这些端口明确绑定某些服务协议,不能随便分配。
  • 1024 ~ 49151:松散的绑定一些服务,是公司和其他用户向互联网名称与数字地址分配机构(ICANN)登记的端口号,利用因特网的传输控制协议(TCP)和用户数据报协议(UDP)进行通信的应用软件需要使用这些端口。在大多数情况下,这些应用软件和普通程序一样可以被非特权用户打开。
  • 49152 ~65535:这一部分被称为动态/私有端口,这类端口号仅在客户进程运行时才动态选择,因此又叫做短暂端口号。被保留给客户端进程选择暂时使用的。也可以理解为,客户端启动的时候操作系统随机分配一个端口用来和服务器通信,客户端进程关闭下次打开时,又重新分配一个新的端口。

TCP

(1)在互联网传输过程中,传输是不可靠的。为了保证数据的可靠传输,于是大佬们提出了TCP协议,在不可靠的链路上实现可靠的数据传输。
(2)为了达到可靠的数据传输,于是TCP就有了三次握手和四次挥手的概念。

三次握手

(1)TCP建立时候,会有三次握手。为了方便理解,我将举个生活中的例子:
<1>张三在qq上给李四发消息:“王者,来不?”
<2>过了5分钟,李四看到消息回应:“在。”这句话表示李四收到了张三的信息。
<3>之后李四又要回复是否打游戏,于是说:“上号!”这个表示,李四答应通讯请求。
<4>张三看到李四有在线,并且能够打游戏,于是说:“开!”

在这里插入图片描述

(2)如上四步中的2和3步,李四可以直接回应:“在,上号!”这样就可以将收到信息和答应通讯合并成一步。于是下图三步,我们可以称为TCP的三次握手。

在这里插入图片描述

四次挥手

(1)张三李四通过三次握手,成功建立了联系,已经在上号打游戏了。此时,张三女朋友要求张三陪她出去逛街。
<1>张三:“女朋友要我和她出去逛街,我要退了。”
<2>李四:“老哥,打完这把再退,别挂机啊!”
<3>十分钟之后,李四:“打完了,你去陪女朋友吧,我也溜了。”
<4>张三:“行,我退了。”
(2)在这个过程中,第二步和第三步是无法同时间发送的,毕竟MOBA类游戏只要开了,就必须打完,不能坑队友。
(3)在第四步,张三也要给一个回应信息,如果李四可能会以为张三女朋友等太久,自己出去逛街了,还能再打游戏,就傻等。
(4)下面这张图,就是TCP的四次挥手。

在这里插入图片描述

TCP首部

(1)通过上面抽象的讲法,我们似乎理解了TCP三次握手和四次挥手,但是如果要真正的明白握手和挥手过程,我认为还是需要看看TCP首部信息。这里依旧只会讲我认为需要了解的部分。
<1>序列号是指发送数据的位置。 在TCP的三次握手、四次挥手和数据传输过程都有用到,用来标记字节流的序号,因为数据传输过程中并不总是有序到达,为了保证数据的无差错传输,必须把每个报文段标记一个序号,这个序号表示一个报文段开始的位置,如果一个报文段序列号为1,报文段长100字节,那么下一个报文段就为101。序列号不会从0或1开始, 而是在建立连接时由计算机生成的随机数作为其初始值。
<2>确认号是指下一次应该收到的数据的序列号。接收方在收到数据后需要给发送方一个确认,告诉接收方收到了某一个报文。而接收方收到的报文段很多,为了让接收方知道是哪一个报文段的确认,TCP协议规定了确认号为期待收到的下一个报文段的序列号。假设接收方收到了一个报文段序列号为1,报文长100字节,那么确认号为101,表明1~100的数据都已经收到。
<3>数据偏移表示TCP所传输的数据部分应该从TCP包的哪个位开始计算。因为TCP的首部大小为20~60字节可变范围,所以我们需要指示TCP的数据实际位置。
<4>控制位有6个字段,主要是用于保证TCP传输的稳定性。具体细节自行了解,不做赘述。
<5>窗口表示接收方允许发送方发送报文段的多少,以字节为单位,在数据传输过程中是动态变化的。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。如果序号序列号为1,窗口大小为1000,则表明接受方的缓存空间可以接受1000字节(序号为1~1000)的数据。TCP不允许发送超过窗口所示大小的数据。 不过, 如果窗口为0, 则表示可以发送窗口探测, 以了解最新的窗口大小。 但这个数据必须是1个字节。

在这里插入图片描述

TCP应用场景

  • 网页浏览(HTTP):HTTP协议基于TCP,网页浏览需要可靠的数据传输和顺序性,因此使用TCP来传输网页内容。
  • 文件传输(FTP、SFTP):文件传输需要确保数据的完整性和可靠性,因此常使用TCP来传输文件,如FTP(File Transfer Protocol)和SFTP(SSH File Transfer Protocol)等。
  • 电子邮件传输(SMTP、POP3、IMAP):SMTP、POP3和IMAP等协议都是基于TCP的,因为电子邮件需要可靠的传输和顺序性。
  • 远程登录(SSH):SSH(Secure Shell)用于远程登录和执行命令,采用TCP协议进行数据传输,确保安全和可靠。
  • 数据库访问(MySQL、PostgreSQL):数据库访问需要可靠的数据传输和事务处理,常使用TCP来传输数据库查询和更新操作。

UDP

UDP首部

(1)UDP头部很好理解,不做赘述。

在这里插入图片描述

UDP与TCP特点

(1)上面介绍了TCP,我们再来看看TCPUDP的区别:

在这里插入图片描述

<1>对于TCP而言,需要三次握手来建立连接,而UDP无需建立连接,是直接传输数据。

在这里插入图片描述

<2>UDP能够支持一对一的单播通讯,还能够进行多播广播。而TCP只能够进行一对一的单播通讯

在这里插入图片描述

<3>在前面讲解TCP首部的时候,我们说了TCP首部有一个序列号,序列号能够指示发送的数据位置,因此,对于TCP而言是面向字节流是以字节为单位发送数据,并且一个数据包可以以字节大小来拆分成多个数据包,以方便发送。TCP可以先将数据存放在发送缓冲区中,可以等待数据到一定大小发送,也可以直接发送,没有固定大小可言。而对于UDP而言,如果长度过长需要应用层协议主动将其裁剪到适合长度,所以说,UDP是直接面向报文传输。

在这里插入图片描述

<4>TCP在不可靠的网络上提供可靠的服务,而UDP不能确保服务的可靠性。

在这里插入图片描述

<5>UDP首部开销更小,只有固定的8字节。而TCP的首部开销大,为20~60字节。

在这里插入图片描述

STA和AP是什么

(1)STAstation模式,如果我们手机/电脑要连接家庭WIFI,那么手机/电脑就属于STA模式。
(2)AP: access point,我们手机打开热点,让别人连接,此时我们的手机就是处于AP模式。其他人的手机就处于STA模式。
(3)AP+STA:我们手机连接上家庭WIFI,然后又打开热点,此时手机就处于AP+STA模式。

参考

(1)B站:计算机网络TCP/IP协议-从双绞线到TCP
(2)腾讯云:Mac 地址会重复吗?Mac 地址也会耗尽吗?
(3)C站:【LWIP】初学STM32+LWIP+网络遇到的基础问题记录
(4)C站:IPv4 地址分类及地址段划分规则
(5)图解TCPIP(第5版)
(6)B站:计算机网络TCP/IP协议-从双绞线到TCP
(7)B站:10分钟速通计算机网络 每个开发者都具备的计算机常识
(8)C站:IP、TCP、UDP首部详解
(9)B站:计算机网络简明教程及仿真实验
(10)C站:TCP首部详解
(11)C站:TCP/IP协议端口分配规则与分类
(12)知乎:STA和AP的区别?

相关推荐

  1. ESP32网络编程-OTA方式升级固件(基于Arduino IDE)

    2024-04-08 01:18:02       37 阅读
  2. ESP32网络编程-OTA方式升级固件(基于Web浏览器)

    2024-04-08 01:18:02       38 阅读
  3. 网络学习笔记 01 计算机硬件基础 - 数据的表示

    2024-04-08 01:18:02       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 01:18:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 01:18:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 01:18:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 01:18:02       18 阅读

热门阅读

  1. Linux——gdb

    2024-04-08 01:18:02       14 阅读
  2. WPF —— 后台实现fromto动画实例

    2024-04-08 01:18:02       14 阅读
  3. 加密攻击

    2024-04-08 01:18:02       9 阅读
  4. DtDay1

    DtDay1

    2024-04-08 01:18:02      13 阅读
  5. 设计原则、设计模式、设计模式项目实战

    2024-04-08 01:18:02       11 阅读
  6. 蓝桥杯 第 9 场 小白入门赛 盖印章

    2024-04-08 01:18:02       11 阅读
  7. C# BitConverter

    2024-04-08 01:18:02       13 阅读
  8. Leetcode 506. 相对名次

    2024-04-08 01:18:02       21 阅读
  9. Leetcode 539. 最小时间差

    2024-04-08 01:18:02       15 阅读
  10. Docker容器的IP地址

    2024-04-08 01:18:02       42 阅读