文章目录

  • 网络通讯基础
    • 1 TCP/IP
      • 1.1 链路层
        • 1.1.1 接入点模式
        • 1.1.2 无线终端模式
        • 1.1.3 混合模式
      • 1.2 网络层
        • 1.2.1 IPv4 / IPv6
        • 1.2.2 子网掩码
        • 1.2.3 MAC地址和ARP
      • 1.3 传输层
        • 1.3.1 TCP协议
        • 1.3.2 UDP协议
      • 1.4 应用层
        • 1.4.1 HTTP协议
          • 1.4.1.1 HTTP请求
          • 1.4.1.2 HTTP响应
        • 1.4.2 DNS(Domain Name System/域名系统)

网络通讯基础

1 TCP/IP

TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式。TCP/IP是一组协议的代名词。

TCP/IP协议被划分为4层

分层名称 包含协议
应用层 HTTP, FTP, mDNS, WebSocket, OSC …
传输层 TCP, UDP
网络层 IP
链路层(也称网络接口层) Ethernet, Wi-Fi …

1.1 链路层

链路层的主要作用是实现设备之间的物理链接。举例来说,我们日常使用的WiFi就是链路层的一种。

ESP8266利用WiFi联网时有三种工作模式。

  1. 接入点模式(Access Point, 也称 AP)
  2. 无线终端模式(Wireless Station)
  3. 混合模式(Wireless Station + AP)

1.1.1 接入点模式

ESP8266可以建立WiFi网络供其它设备连接。当ESP8266以此模式运行时,我们可以使用手机搜索ESP8266所发出的WiFi网络并进行连接。

1.1.2 无线终端模式

ESP8266可通过WiFi连接无线路由器。这与用您的手机通过WiFi连接无线路由器的模式相同。

1.1.3 混合模式

所谓混合模式即以上两种模式的混合。

1.2 网络层

尽管设备可以通过链路层联网,但是光有链路层还无法实现设备之间的数据通讯。因为网络设备没有明确的标识。网络设备无从知晓要向谁传输数据,也无法确定从何处获取数据。

在网络中传输数据的过程中,每一台网络设备都有独立的地址,数据在这些独立的地址间实现传输。网络设备的地址就是IP地址

网络层主要作用是通过IP协议为联网设备提供IP地址

有了IP地址还不够,因为要确保网络中所有设备IP地址不重复,还需要DHCP(Dynamic Host Configuration Protocol) 服务器来实现这一功能。

当网络中所有设备都有了独立的IP地址后,设备之间就可以收发数据了。

1.2.1 IPv4 / IPv6

IP协议有两个版本,分别是IPv4IPv6。IPv6是IPv4的升级版本,因为IPv6可以为更多的网络设备提供独立的IP地址。在本教程中,我们将着重讲解IPv4,因为大多数网络系统仍在使用IPv4。

IPv4版本的IP地址由4个数字组成,如 192.168.0.200 这个IP地址由两部分组成。其中前三个数字(192.168.0)是设备所连接的本地局域网络地址(也称子网地址)。而最后一个数字200是该设备在本地局域网络中的地址编号。

举例来说,我们有一个手机,一台电脑和一个NodeMCU开发板。如下图所示,现在我们将这三台设备同时连接到家中的WiFi路由器。家中的WiFi路由器会通过它内置的DHCP服务器功能为这三台设备分配一个独立的IP地址。假设我们的NodeMCU IP地址是192.168.0.2,手机是192.168.0.3,电脑是192.168.0.4。到这里,我们的手机,电脑和NodeMCU就可以使用各自的IP地址彼此收发数据了。

1.2.2 子网掩码

与网络设备相同,网络本身也有自己的地址。

如果我们将网络与网络叠加就可以编织成一张无限大的网,而组成这张大网的每一个小网都可以被称作子网络。通常我们家中的网络是不需要多个子网络的。但是对于大型企业或工业项目,由于联网设备数量很大,一个子网无法满足需求。这时我们就可以将多个网络连接在一起形成一张巨型网络。那么当这些子网组成“大网”后,为了便于网络管理,我们为每一个组成大网的子网络都分配一个独立的地址,这个地址就是子网地址

那么子网地址长什么样呢?其实您已经见过它了。它就在网络设备的IP地址里面。我们再来看一看刚刚给您举得这个例子。请看下图:

在以上的例子里,我们可以看到这三台设备的IP地址都有一个共同点。他们的IP地址前三位数字都是相同的,即192.168.0。这就是子网地址。同时请注意,这三台设备的IP地址最后一个数字是不同的。而这最后一个数字就是这三台设备在网络中的独立序号。

那么问题就来了,对于一个IP地址来说,是不是总是前三个数字是子网地址,而最后一个数字是设备序号呢? 不是的。

到这里可能有的朋友会感到困惑了。一个IP地址中,到底哪一部分是子网地址,而哪部分是该设备在子网中的设备序号呢?

在以上示例中,我们的IP地址前三位是子网地址,这是因为我们在对网络设备进行设置的时候,预先设置好子网掩码是 255 . 255 . 255 . 0。可以看到,这个子网掩码也是由4个数字组成的。而且这个子网掩码中只有255和0 这两种数字。而255所在的位置是前3位,最后一位是0。

为了便于您理解子网掩码的概念,我们再把刚才的例子找出来。在这个例子里,这三台网络设备的IP地址唯一区别就是最后一个数字。

也就是说,这几台设备的IP地址相同部分对应子网掩码是255的部分,而设备IP地址不同的部分对应子网掩码0。

这就是子网掩码的基本工作原理了。我们用255这个数字标出IP地址的哪一部分是子网地址。而用0这个数字来表示IP地址的哪一部分是设备部分。

到这里,我们也就基本上理解了子网掩码的基本工作原理。请注意,我在这里一直强调基本二字。这是因为子网掩码的工作原理比以上所讲述的要复杂。然而具体子网掩码是如何发挥作用的,这已经超出了这篇教程的范围。所以我们就点到为止了。关于子网掩码,假如您想要进行更深入的学习,可以参考其它的网络资源,这个知识点的教程资源还是很丰富的。

1.2.3 MAC地址和ARP

网络设备间要想实现通讯,设备之间不光要知道彼此的IP地址,还要知道设备的MAC地址(也叫MAC码)。

网络中的每一个设备都有一个独立的MAC地址。这个MAC地址是固化在网络设备硬件中的。我们可以通过系统设置或工具软件改变MAC地址,但这也仅仅是临时的修改,而不是真正将设备硬件的MAC地址进行永久性的更改。如果想永久性的修改MAC地址,那就要借助硬件产商所提供的工具软件了。

为了说明MAC地址的用途,我们还是用刚刚的网络示例。如下图所示:

假如我们的ESP8266想要发送数据给网络中的手机, 首先ESP8266要知道手机的IP地址是192.168.0.3。除了这个信息以外,ESP8266还要知道手机的MAC地址。

现在问题就来了,如果ESP8266和手机都是刚刚连入WIFI的, 它们从来没有互相通讯过,因此它们是不可能知道彼此的MAC地址。这可怎么办?

要想解决这个问题,ESP8266会向网络中的所有设备广播一条“寻人启事”。这条广播信息的内容大概是这样的。“各位网络中的兄弟姐妹,我是住在IP地址192.168.0.2的设备。我的MAC码是AB-CD。我现在要发送数据给住在IP地址192.168.0.3的设备。请192.168.0.3地址的设备告知你的MAC码。” (注意:现实中的MAC码肯定不是AB-CD这 4个字母构成的。这里为了便于您的理解而将MAC地址进行了简化。)

如果手机听到了这条广播就会回复一条信息给ESP8266,大概的信息是这样的:“你好!我是住在192.168.0.3的设备。我的MAC码是EF-GH。”发送这条信息的同时,手机也会把ESP8266所拥有的IP地址以及MAC码记录下来,以备后用。

到这里,ESP8266和手机就彼此知道了对方的IP地址和MAC码了。接下来他们就可以愉快的网络通(Liao)讯(Tian)了。这种让两台完全不认识彼此的设备获取到对方IP和MAC地址的协议就是ARP了。

1.3 传输层

网络设备通讯时,数据丢失和数据受损的情况经常出现。传输层的
TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)协议可以用来解决这一问题。通常我们会选择这两种协议中的一种来保证数据传输的准确性。具体选择哪一种协议要看我们使用的是何种网络应用。因为不同的网络应用对于数据的传输要求是不同的。

举例来说,对于网络游戏而言,我们对数据的传输速率要求很高。因为玩家在发出了一个游戏控制指令后,这个指令需要以最快的速度传送给游戏服务器。如果传输速度跟不上,游戏体验将会大打折扣。相反,有一些网络应用对数据传输速度要求较低,但是对数据传输的准确性要求是极高的。比如电子邮件应用。当我们发出电子邮件以后,通常我们不太介意这封邮件的传输速度。邮件可以是1分钟后送达,也可以是10分钟后送达。这没有什么影响。但是邮件的信息内容是绝对要保证准确的。

这就引出了TCP和UDP这两种协议的应用范围。

1.3.1 TCP协议

TCP协议可以更好的保证数据传输的准确性,但是传输速度比UDP协议而言要慢一些。TCP协议的特点是可以保证所有数据都能被接收端接收,数据的传输顺序也不会被打乱,而且如有数据损坏则重发受损数据。基于以上功能特点,TCP通常用于电子邮件及文件上传等。

1.3.2 UDP协议

UDP协议并不能保证所有数据都被接收端所接受。一旦出现数据受损的情况,UDP协议将会抛弃受损的数据。这些数据一旦被抛弃将会永久性的消失,发送端不会因为数据受损而重新发送。因此UDP协议远不如TCP协议可靠。但是既然是这样,为何还有人会选择UDP协议呢?这是因为UDP比TCP速度快。因此UDP协议通常用于网络游戏以及语音聊天或视频聊天应用。

1.4 应用层

1.4.1 HTTP协议

应用层中有很多种协议,最常见是HTTP协议。它常被用来传输网页数据。我们这篇教程也将着重介绍HTTP协议。
HTTP协议由请求和响应构成。也就是说,HTTP的工作模式很像是一问一答。

1.4.1.1 HTTP请求

举例来说,当您在浏览器输入www.taichi-maker.com这一网址并按下回车,这时候浏览器会把这一操作转换成一个HTTP请求。
这个HTTP请求主要分为两大部分。一部分是请求头(Request Header)一部分是请求体(Request Body)。对于我们学习物联网知识来说,请求头是我们重点要关注的内容。而请求体的知识已经超越这篇教程的范围,不在这里详述。

请看以下是简化后的请求头内容:
GET / HTTP/1.1
Host: www.taichi-maker.com

在以上的HTTP请求中:
GET” 是一个读取请求。也就是请求网站服务器把网页数据发送过来。
/” 的作用就是要告诉网站服务器,我这个读取请求的内容是网站根目录下的内容。换句话说,就是请求服务器把网站首页的网页数据发过来。
HTTP/1.1” 是指请求所采用的HTTP协议版本是1.1。

Host: www.taichi-maker.com”表示请求的域名是 www.taichi-maker.com 也就是太极创客网站的域名。
以上是HTTP协议的 GET 请求中最关键的内容。

在 HTTP 协议中,GET只是诸多请求方法中的一种。以下是HTTP协议中的其它请求方法:
HTTP1.0定义了三种请求方法: GET, POSTHEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACECONNECT 方法。

关于请求方法,我们这里主要介绍的只有GET。其它的请求方法已经超越了我们这个教程的范围,就不在这里继续深入讲下去了。感兴趣的话,您可以通过互联网找到这方面的教程资源。

1.4.1.2 HTTP响应

接下来我们再看一看浏览器发送以上HTTP请求后,接收到的服务器HTTP响应。HTTP响应内容也是分为两个部分,一部分是响应头(Response Header)一部分是响应体(Response Body)。其中响应体部分是可选项,也就是说有些HTTP响应只有响应头,而响应体是空的。

我们先来给大家介绍响应头部分。
由于响应头信息量比较大,我们还是选出主要内容给大家讲解。如下所示:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8

HTTP/1.1”这个信息我们刚刚在HTTP请求部分中介绍过。它的含义就是此HTTP响应所采用的协议版本是1.1。
200”这个代码可能有些朋友会感觉陌生。但是如果我说起“404”这个数字可能大家会感到更熟悉吧?无论是200也好还是404也好,这些都是HTTP响应状态码。它的作用是以代码的形式表达服务器在接到请求后的状态。“200”代表服务器成功找到了请求的网页资源(这一点大家在后面的OK中也已经体现出来了)。 “404”代表服务器无法找到请求的网页资源。

Content-Type” 指示响应体的内容是什么类型。这里的响应体内容类型是“text/htm”,即网页HTML代码。通过这一行响应头信息,我们的浏览器将会知道,在这一个响应中的响应体部分都是HTML网页代码。于是浏览器将会做好准备,将网页代码翻译成我们人类容易读懂的格式并且呈现在浏览器中。

我们再举一个例子,假设某一个响应头中“Content-Type” 类型是”image/jpeg”。这就意味着该响应体中的信息是一个jpeg格式的图片,那么浏览器也就会按照jpeg的解码方式将图片呈现在我们的面前。

在以上示例中,我们使用互联网浏览器来讲解HTTP的请求和响应。当我们使用NodeMCU来开发物联网项目时,发出HTTP请求的就不再是浏览器而是NodeMCU开发板了。而读取这些响应请求的也将是NodeMCU开发板。那么,究竟如何让NodeMCU发出HTTP请求,而NodeMCU又是如何解读HTTP响应呢?这些都依赖于我们为NodeMCU开发的控制程序。这些内容会在后续的教程里给大家详细介绍。

以下是常见的服务器状态码:

  • 100~199:成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。
  • 200~299:成功接收请求并已完成整个处理过程。常用200
  • 300~399:完成请求,客户需进一步细化请求。
  • 400~499:客户端的请求有错误,常用404和403(403的含义是权限不够,服务器拒绝访问。)
  • 500~599:服务器端出现错误,常用500

1.4.2 DNS(Domain Name System/域名系统)

在之前的教程中,我曾经给大家讲过网络中的所有设备都具有独立的IP地址。这一点对于网站服务器来说也不例外。当我们使用浏览器访问某一个网站时,实际上我们是通过浏览器向网站服务器发送HTTP请求。然而网站服务器的IP地址很难记忆,比如太极创客网站的域名由两个单词组成,taichi是太极,maker是创客。这很好记,但是要想记住太极创客服务器的IP就没那么容易了。因为那是4个毫无规律的数字。

为了解决IP地址不好记这一问题,DNS被派上了用场。

我们可以把DNS看作是一个巨型电话本。电话本中的联系人一栏就是网站的域名,而电话本中的电话号码一栏则是这些网站的IP地址。有了DNS我们就可以使用简单易记的域名来访问网站了。

还是用太极创客网站来举例吧,每当我们在浏览器中输入域名www.taichi-maker.com并按下回车后,这时浏览器首先会向DNS服务器发送请求,请求的内容大致如下:“亲爱的DNS服务器,我那个明明可以靠脸吃饭却偏偏要学物联网的主人想访问一个域名是www.taichi-maker.com的网站。麻烦您把这个域名的网站服务器IP地址告诉我好吗?” DNS服务器在接收到这一请求后,会做出以下应答:“亲爱的浏览器,您要的网站服务器ip地址是 12 . 34 . 56 . 78。” 浏览器在接收到这一IP地址后,就开始向这个IP地址所对应的网站服务器正式发出HTTP GET请求了。

内容来自 -----> 太极创客
详情可见太极创客官网,内有Arduino、ESP32等详细教程
http://www.taichi-maker.com

【ESP32_8266_WiFi (一)】网络通信基础相关推荐

  1. Java基础通信_Java网络通信基础编程(必看篇)

    方式一:同步阻塞方式(BIO): 服务器端(Server): package com.ietree.basicskill.socket.mode1; import java.io.IOExceptio ...

  2. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)...

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义:       这里 ...

  3. python网络通信效率_Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)...

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义: 这里的客户端一般 ...

  4. 第1章 网络通信基础

    第1章 网络通信基础 文章目录 第1章 网络通信基础 1.1 网络类型 1.1.1 局域网与广域网 1.1.2 网络设备 1.1.3 网络拓扑形态 1.2 传输介质 1.3 通信方式 1.3.1 冲突 ...

  5. 【计算机网络】网络通信基础(IP地址,端口号,五元组,OSI七层模型,TCP/IP五层模型,封装和分用)

    目录 初识网络 网络通信基础 IP地址 端口号 认识网络协议 五元组 协议分层 封装和分用 初识网络 网络互连 随着时代发展,需要计算机之间相互通信,共享软件和数据,即多台计算机相互协同工作来完成某个 ...

  6. 网络通信基础:ICMP基础通识

    (本文均是以<精通linux内核网络>作为依据讲解)前面已经对基础的osi的网络通用模型进行了讲解 所以在知道了什么是OSI的7层网络模型之后,在看看ICMP,会对ping的理解就会更加透 ...

  7. 网络通信基础知识普及篇

    因为日常可以接触到,交换机和服务器的一个日常维护,在加上我们做的设备属于,通信方向的设备,所以,对一些网络通信的知识,都会储备一些(以下知识点总结:来源 <精通linux内核网络>,< ...

  8. 网络通信基础知识(三)

    3.8.4.1.路由器(相当于网关) (1)路由器是局域网和外部网络通信的出入口 (2)路由器将整个internet划分成一个个的局域网,却又互相联通. (3)路由器对内管理子网(局域网),可以在路由 ...

  9. 网络通信基础知识(一)

    3.8.2.1.网络通信的发展历程 (1)单机阶段 (2)局域网阶段(也有一台电脑做为一个局域网的情况) (3)广域网internet阶段(要实现很多个局域网之间的通信,出现了广域网,可实现任意两台电 ...

最新文章

  1. how tomcat works(第17章: 启动Tomcat)
  2. python中range 10 0_如何在python中使用range方法
  3. linux常用命令之lsof 、netstat、ipcs、ldd
  4. 中石油训练赛 - Edit Distance(思维+构造)
  5. php msi安装教程,如何判断msi安装包程序是否安装及安装路径
  6. CUDNN v3特性
  7. JS Math方法、逻辑
  8. idc机房安装服务器系统,IDC机房如何部署IP KVM
  9. 循环冗余校验(CRC,模2运算)
  10. 软件开发过程与项目管理(7.软件项目进度计划)
  11. 帕斯卡齿轮机械计算机原理,20世纪的黑科技,上万个零件的老式机械计算器,复杂程度惊人!...
  12. PDF convert(多个pdf合并的脚本)
  13. 488. 祖玛游戏【我亦无他唯手熟尔】
  14. 矩阵连乘问题(动态规划)
  15. 十六进制文件读取并转换成二进制文件
  16. 探讨刀塔传奇是怎么防止客户端作弊的
  17. Python使用Turtle画孟加拉国国旗
  18. 内存和FLASH的区别
  19. c++学习笔记- 自制魔兽显血改键
  20. 大数据知识图谱项目——基于知识图谱的医疗知识问答系统(详细讲解及源码)

热门文章

  1. 【手绘漫画】图解LeetCode之两两交换链表中的节点(LeetCode 24)
  2. 如何使用 cri-docker 解决 Kubernetes 1.24 不支持 Docker 的问题
  3. 什么是vue全家桶?
  4. 【模拟】变态杀人狂(约瑟夫问题)
  5. AST学习笔记 至少入个大门
  6. 陌陌推出“树莓”APP入局种草赛道,如何避免碰瓷“小红薯”?
  7. 打印机出现“你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问。
  8. bash破壳漏洞分析(二)
  9. 计算机老师工作年度总结,计算机老师年终工作总结3篇
  10. 华为云数据灾备解决方案,你最佳的安全卫士