我们将应用层, 表示层, 会话层并作应用层, 从 TCP/IP 五层协议的角度来阐述每层的由来与功能, 搞清楚了每层的主要协议, 就理解了整个物联网通信的原理.
首先, 用户感知到的只是最上面一层 -- 应用层, 自上而下每层都依赖于下一层, 所以我们从最下层开始切入, 比较好理解.
每层都运行特定的协议, 越往上越靠近用户, 越往下越靠近硬件.
一, 物理层
由来: 孤立的计算机之间要一起 "玩耍", 就必须接入 Internet, 即计算机之间必须完成组网.
物理层功能: 主要是基于电器特性发送高低电压(电信号), 高电压对应数字 1, 低电压对应数字 0.
二, 数据链路层
由来: 单纯的电信号 0 和 1 没有任何意义, 必须规定电信号多少位一组, 每组什么意思.
数据链路层功能: 定义了电信号的分组方式.
以太网协议:
早期的时候各个公司都有自己的分组方式, 后来形成了统一的标准, 即以太网协议 Ethernet.
Ethernet 规定:
一组电信号构成一个数据包, 叫做 "帧"
每一数据帧分成: 报头 head 和数据 data 两部分.
head 包含:(固定 18 个字节)
发送者 / 源地址, 6 个字节
接收者 / 目标地址, 6 个字节
数据类型, 6 个字节
data 包含:(最短 46 字节, 最长 1500 字节)
数据包的具体内容
head 长度 + data 长度 = 最短 64 字节或桩长 1518 字节, 超过最大限制就分片发送.
Mac 地址:
head 中包含的源和目标地址由来: ethernet 规定接入 internet 的设备都必须具备网卡, 发送端和接收端的地址便是指网卡的地址, 即 Mac 地址.
Mac 地址: 每块网卡出厂时都被烧制上一个世界唯一的 Mac 地址, 长度为 48 位 2 进制, 通常由 12 位 16 进制数表示(前六位是厂商编号, 后六位是流水线号).
广播:
有了 Mac 地址, 同一网络内的两台主机就可以通信了(一台主机通过 arp 协议获取另外一台主机的 Mac 地址).
ethernet 采用最原始的方式, 广播的方式进行通信, 即计算机通信基本靠吼.
三, 网络层
网络层由来: 有了 ethernet,Mac 地址, 广播的发送方式, 世界上的计算机就可以彼此通信了, 问题是世界范围的互联网是由一个个彼此隔离的小的局域网组成的, 那么如果所有的通信都采用以太网的广播方式, 那么一台机器发送的包全世界都会收到, 这就不仅仅是效率低的问题了, 这会是一种灾难.
上图结论: 必须找出一种方法来区分哪些计算机属于同一广播域, 哪些不是, 如果是就采用广播的方式发送, 如果不是, 就采用路由的方式(向不同广播域 / 子网分发数据包),Mac 地址是无法区分的, 它只跟厂商有关.
网络层功能: 引入一套新的地址用来区分不同的广播域 / 子网, 这套地址即网络地址.
1,IP 协议:
规定网络地址的协议叫 ip 协议, 它定义的地址称之为 ip 地址, 广泛采用的 v4 版本即 ipv4, 它规定网络地址由 32 位 2 进制表示.
范围 0.0.0.0-255.255.255.255
一个 ip 地址通常写成四段十进制数, 例: 172.16.10.1
2, 子网掩码:
所谓 "子网掩码", 就是表示子网络特征的一个参数. 它在形式上等同于 IP 地址, 也是一个 32 位二进制数字, 它的网络部分全部为 1, 主机部分全部为 0. 比如, IP 地址 172.16.10.1, 如果已知网络部分是前 24 位, 主机部分是后 8 位, 那么子网络掩码就是 11111111.11111111.11111111.00000000, 写成十进制就是 255.255.255.0.
子网掩码是用来标识一个 IP 地址的哪些位是代表网络位, 以及哪些位是代表主机位. 子网掩码不能单独存在, 它必须结合 IP 地址一起使用. 子网掩码只有一个作用, 就是将某个 IP 地址划分成网络地址和主机地址两部分.
为什么要区分网络位和主机位?
这就像寄信, 你给你的南方姑娘寄信, 她肉身在厦门, 详细地址是厦门鼓浪屿三街 27 号, 那网络位就相当于城市, 详细地址就是主机位, 网络位帮你定位到城市, 主机位帮你找到你的南方姑娘. 路由器通过子网掩码来确定哪些是网络位, 哪些是主机位.
区分网络位和主机位是为了划分子网, 就是把一个大网络分成多个小网络, 为什么要分子网呢?
广播风暴: 6 万台主机在一个网段里, 通信基本靠吼, 任何一个人要吼一嗓子, 6 万多个人必须被动听着, 一会你的网络就瘫痪啦.
地址浪费: 运营商在公网上有很多级联的路由器, 有时候 2 个路由器之间只会用掉几个 IP, 如果不进行子网划分, 那同网段的其它主机也就都不能用了. 举例两个级联路由器的接口 ip 分别为 222.34.24.12/24,222.34.24.13/24, 此可承载 255 个主机的网段只用了 2 个 IP, 那其它的就全浪费了, 因为不能再分配给别人.
划分子网本质上就是借主机位到给网络位, 每借一位主机位, 这个网段的可分配主机就会越少, 比如 192.168.1.0/24 可用主机 255 个, 借一位变成 192.168.1.0/25, 那可用主机就从 255-128=127 个了(从最大的值开始借), 再借一位 192.168.1.0/26, 那可用主机数就变成了 255-(128+64)=63 个啦.
3,IP 地址分类:
IP 地址根据网络 ID 的不同分为 5 种类型, A 类地址, B 类地址, C 类地址, D 类地址和 E 类地址.
1,A 类 IP 地址: 一个 A 类 IP 地址由 1 字节的网络地址和 3 字节主机地址组成, 网络地址的最高位必须是 "0", 地址范围从 1.0.0.0 到 126.0.0.0. 可用的 A 类网络有 126 个, 每个网络能容纳 1 亿多个主机.
2,B 类 IP 地址 : 一个 B 类 IP 地址由 2 个字节的网络地址和 2 个字节的主机地址组成, 网络地址的最高位必须是 "10", 地址范围从 128.0.0.0 到 191.255.255.255. 可用的 B 类网络有 16382 个, 每个网络能容纳 6 万多个主机 .
3,C 类 IP 地址: 一个 C 类 IP 地址由 3 字节的网络地址和 1 字节的主机地址组成, 网络地址的最高位必须是 "110". 范围从 192.0.0.0 到 223.255.255.255.C 类网络可达 209 万余个, 每个网络能容纳 254 个主机.
4,D 类地址用于多点广播 (Multicast): D 类 IP 地址第一个字节以 "lll0" 开始, 它是一个专门保留的地址. 它并不指向特定的网络, 目前这一类地址被用在多点广播(Multicast) 中. 多点广播地址用来一次寻址一组计算机, 它标识共享同一协议的一组计算机.
5,E 类 IP 地址 以 "llll0" 开始, 为将来使用保留.
全零 ("0.0.0.0") 地址对应于当前主机. 全 "1" 的 IP 地址 ("255.255.255.255") 是当前子网的广播地址.
回环地址(127.0.0.1) 又称为本机地址, 那它跟 0.0.0.0 是什么区别呢? 那得先了解回环接口
环回接口(loopback). 平时我们用 127.0.0.1 来尝试自己的机器服务器好使不好使. 走的就是这个 loopback 接口. 对于环回接口, 有如下三点值得注意:
传给环回地址 (一般是 127.0.0.1) 的任何数据均作为 IP 输入.
传给广播地址或多播地址的数据报复制一份传给环回接口, 然后送到以太网上. 这是因为广播传送和多播传送的定义包含主机本身.
任何传给该主机 IP 地址的数据均送到环回接口.
4,IP 报文:
IP 协议是 TCP/IP 协议的核心, 所有的 TCP,UDP,IMCP,IGCP 的数据都以 IP 数据格式传输, 要注意的是, IP 不是可靠的协议, 这是说, IP 协议没有提供一种数据未传达以后的处理机制 -- 这被认为是上层协议 --TCP 或 UDP 要做的事情. 所以这也就出现了 TCP 是一个可靠的协议, 而 UDP 就没有那么可靠的区别. 这是后话, 暂且不提.
IP 协议头
挨个解释它是教科书的活, 我们感兴趣的只是那八位的 TTL 字段, 还记得这个字段是做什么的么? 这个字段规定该数据包在穿过多少个路由之后才会被抛弃(这里就体现出来 IP 协议包的不可靠性, 它不保证数据被送达), 某个 ip 数据包每穿过一个路由器, 该数据包的 TTL 数值就会减少 1, 当该数据包的 TTL 成为零, 它就会被自动抛弃. 这个字段的最大值也就是 255, 也就是说一个协议包也就在路由器里面穿行 255 次就会被抛弃了, 根据系统的不同, 这个数字也不一样, 一般是 32 或者是 64.
5,ARP 协议
ARP 协议由来: 计算机通信基本靠吼, 即广播的方式, 所有上层的包到最后都要封装上以太网头, 然后通过以太网协议发送, 在谈及以太网协议时候, 我门了解到通信是基于 Mac 的广播方式实现, 计算机在发包时, 获取自身的 Mac 是容易的, 如何获取目标主机的 Mac, 就需要通过 arp 协议.
ARP 协议功能: 播的方式发送数据包, 获取目标主机的 Mac 地址.
协议工作方式: 每台主机 ip 都是已知的.
例如: 主机 172.16.10.10/24 访问 172.16.10.11/24.
1, 首先, 通过 ip 地址和子网掩码区分出自己所处的子网.
场景 | 数据包地址 |
---|---|
同一子网 | 目标主机 mac,目标主机 ip |
不同子网 | 网关 mac,目标主机 ip |
2, 分析 172.16.10.10/24 与 172.16.10.11/24 处于同一网络(如果不是同一网络, 那么下表中目标 ip 为 172.16.10.1, 通过 arp 获取的是网关的 Mac).
源 mac | 目标 mac | 源 ip | 目标 ip | 数据部分 | |
---|---|---|---|---|---|
发送端主机 | 发送端 mac | FF:FF:FF:FF:FF:FF | 172.16.10.10/24 | 172.16.10.11/24 | 数据 |
3, 这个包会以广播的方式在发送端所处的子网内传输, 所有主机接收后拆开包, 发现目标 ip 为自己的, 就响应, 返回自己的 Mac.
查看本机 arp 表的命令(在终端窗口中输入):arp -a
6,ICMP 协议
前面讲到了, IP 协议并不是一个可靠的协议, 它不保证数据被送达, 那么, 自然的, 保证数据送达的工作应该由其他的模块来完成. 其中一个重要的模块就是 ICMP(网络控制报文)协议.
当传送 IP 数据包发生错误 -- 比如主机不可达, 路由不可达等等, ICMP 协议将会把错误信息封包, 然后传送回给主机. 给主机一个处理错误的机会.
我们一般主要用 ICMP 协议检测网络是否通畅, 基于 ICMP 协议的工具主要有 ping 和 traceroute.
ping
ping 这个单词源自声纳定位, 而这个程序的作用也确实如此, 它利用 ICMP 协议包来侦测另一个主机是否可达. 原理是用类型码为 0 的 ICMP 发请 求, 受到请求的主机则用类型码为 8 的 ICMP 回应. ping 程序来计算间隔时间, 并计算有多少个包被送达. 用户就可以判断网络大致的情况. 我们可以看到, ping 给出来了传送的时间和 TTL 的数据.
traceroute(Linux 后者 Mac os)或者 tracert(Windows 系统)
用来查看从当前主机到某地址一共经过多少条路由.
四, 传输层
传输层的由来: 网络层的 ip 帮我们区分子网, 以太网层的 Mac 帮我们找到主机, 然后大家使用的都是应用程序, 你的电脑上可能同时开启 qq, 暴风影音, 迅雷等多个应用程序, 那么我们通过 ip 和 Mac 找到了一台特定的主机, 如何标识这台主机上的应用程序呢? 答案就是端口, 端口即应用程序与网卡关联的编号.
传输层功能: 建立端口到端口的通信.
补充: 端口范围 0-65535,0-1023 为系统占用端口.
传输层有两种协议, TCP 和 UDP, 见下图.
1,TCP 协议
可靠传输, TCP 数据包没有长度限制, 理论上可以无限长, 但是为了保证网络的效率, 通常 TCP 数据包的长度不会超过 IP 数据包的长度, 以确保单个 TCP 数据包不必再分割.
为什么 tcp 是可靠的数据传输?
最可靠的方式就是只要不得到确认, 就重新发送数据报, 直到得到对方的确认为止.
TCP 报文
TCP 的 3 次握手和 4 次挥手:
2,UDP 协议
不可靠传输,"报头" 部分一共只有 8 个字节, 总长度不超过 65,535 字节, 正好放进一个 IP 数据包.
3, 总结
TCP 协议虽然安全性很高, 但是网络开销大, 而 UDP 协议虽然没有提供安全机制, 但是网络开销小, 在现在这个网络安全已经相对较高的情况下, 为了保证传输的速率, 我们一般还是会优先考虑 UDP 协议!
五, 应用层
1, 应用层简介
应用层直接和应用程序接口并提供常见的网络应用服务. 它是开放系统的最高层, 是直接位应用程序提供服务的. 其作用是在实现多个系统应用进程相互通信的同时, 完成一系列业务处理所需的服务. 其服务元素分为两类: 公共应用服务元素 CASE 和特定应用服务元素 SASE.
位于计算机网络体系结构的最上层, 前面四层做的所有事情就是为了他服务, 他也是设计和建立计算机网络的最终目的, 通俗的讲, 就是我们开发的应用软件, 就处于这一层, 比如, QQ, 浏览器访问网页, 等等你看得到的应用软件都是在这一层, 但是这些软件在运行的过程中, 也需要依靠一些特定的协议才能完成相应的功能, 比如浏览器通过网址访问网页, 其中是如何做到的, 这就是我们所要学习的东西.
2, 应用层中的两种应用软件: 客户 / 服务器和 P2P 体系结构
(1)客户 / 服务器
这种类型, 就是我们很熟悉的客户端, 服务器模型, 客户端请求服务器, 服务器响应客户端这样的一种方式进行 "交流".
(2)P2P
也称为对等体系结构. P2P 相当于每个人的电脑度可以当服务器, 也可以当客户端, 不单单限制于只能客户端访问服务器, 你自己的计算机可以去访问别人的计算机上的内容, 别的同样可以访问你计算机上的内容, 这样达到一种共享的状态.
3,DNS 协议
(1)DNS 概述
Domain Name System 域名系统. 也可以叫做域名解析协议. 在我们在浏览器访问网页的时候, 通常度是用我们所熟悉的一连串有意义的英文字符标识, 比如 www.baidu.com,www.sohu.com 等.
但是我们学了前面的知识, 计算机并不是通过这些字符串去找到对应的计算机, 而是通过 32 位的二进制, 也就是我们的 IP 地址来找. 所以就有了 DNS 协议. 他的作用就是将域名解析成对应的 IP 地址.
因为让我们人去记那些 IP 地址, 很难记得住, 所以就想办法让 IP 地址转变为了现在的域名, 在进行访问的时候, 只需要将域名解析为对应的 IP 地址就行了, 这个域名也很有讲究, 其中分为好多层域名, 是独一无二的. 这里不细讲这个, 只要我们知道, 域名通过 DNS 能找到对应的 IP 地址就行了.
(2)DNS 协议工作过程
1)通过域名访问网页
2)计算机会先将域名发送到一个解析域名的服务器上
2.1)在其服务器上有很多服务器, 能解析各种各样的域名, 比如有专门解析. org 的, 解析. com 的, 解析. net 的. 等等, 最主要的有一个根域名服务器
2.2)域名解析 (在服务器上查找 IP 地址) 的过程有两种算法, 迭代查询, 递归查询. 一般是两种查询的结合
2.3)本机计算机找到其中一台解析域名的服务器(可能是. com), 如果没有找到对应的 IP 地址, 那么就会去找根域名服务器, 根域名服务器知道所有的子服务器, 所以他肯定知道该域名所对应的 IP 地址在那个子服务器中, 所以告诉第一次查询的服务器要他去另一台服务器上找, 找到了, 就将其返回给计算机, 以后在有另一台计算机也通过这个域名访问, 那么第一台服务器会有原来的域名 IP 地址的缓存, 就不用去找根服务器了.
3)找到了, 就能找到我们要访问的服务器了.
4,HTTP 协议
(1)HTTP 简介
1)超文本传输协议 (HTTP,HyperText Transfer Protocol) 是互联网上应用最为广泛的一种网络协议. 所有的 WWW 文件都必须遵守这个标准.
2)HTTP 是一个客户端和服务器端请求和应答的标准 (TCP). 客户端是终端用户, 服务器端是网站. 通过使用 web 浏览器, 网络爬虫或者其它的工具, 客户端发起一个到服务器上指定端口(默认端口为 80) 的 HTTP 请求.(我们称这个客户端)叫用户代理 (user agent). 应答的服务器上存储着(一些) 资源, 比如 html 文件和图像.(我们称)这个应答服务器为源服务器 (origin server). 在用户代理和源服务器中间可能存在多个中间层, 比如代理, 网关, 或者隧道(tunnels). 尽管 TCP/IP 协议是互联网上最流行的应用, HTTP 协议并没有规定必须使用它和(基于) 它支持的层. 事实上, HTTP 可以在任何其他互联网协议上, 或者在其他网络上实现.
3)通常, 由 HTTP 客户端发起一个请求, 建立一个到服务器指定端口 (默认是 80 端口) 的 TCP 连接. HTTP 服务器则在那个端口监听客户端发送过来的请求. 一旦收到请求, 服务器 (向客户端) 发回一个状态行, 比如 "HTTP/1.1 200 OK", 和 (响应的) 消息, 消息的消息体可能是请求的文件, 错误消息, 或者其它一些信息. HTTP 使用 TCP 而不是 UDP 的原因在于 (打开) 一个网页必须传送很多数据, 而 TCP 协议提供传输控制, 按顺序组织数据, 和错误纠正.
4)通过 HTTP 或者 HTTPS 协议请求的资源由统一资源标示符 (Uniform Resource Identifiers)(或者, 更准确一些, URLs) 来标识.
(2)统一资源定位符 URL
URL: 统一资源定位符, 通过下面格式, 可以看出, 就是用来定位我们所需要资源在服务器上的位置.
格式:<协议>://<主机>:<端口>/<路径>
协议: http
主机: 域名 / IP 地址, 原理度一样, 到头来还是会转换为 IP 地址, 通过这个才能找到目标服务器
端口: 在传输层需要使用的, 访问目的主机的哪个端口号.
路径: 精准的定位我们所需要的资源位置,
平常会省略协议和端口号, 因为这些都是默认的, 在访问主页时, 路径也会省略. 比如 www.baidu.com 这个默认进入百度的主页完整写法 http://www.baidu.com:80/index.html http://www.baidu.com/index.html .
(3)超文本传输协议
作用: 怎样向服务器请求文档, 服务器怎么把文档传送给浏览器, 通俗点讲, 就是我们想服务器访问网页资源时, 服务器如何把网页上的东西传给我们.
客户端向服务器: 请求报文 服务器向客户端: 响应报文
其实就是: 在通过 URL 访问你服务器时, 就会发送一个请求报文, 告诉服务器需要哪些东西, 服务器知道后, 返回一个响应报文给客户端, 其中就会带有一些网页信息. 就是通过这个来达到传送网页资源的目的, 现在来具体看看, 请求报文和响应报文的格式.
(4)请求和响应报文的格式
可参见我的另一篇博文 https://www.cnblogs.com/Kwan-C/p/11459247.html
(5)HTTP 协议的功能
HTTP 协议 (HyperText Transfer Protocol, 超文本传输协议) 是用于从 WWW 服务器传输超文本到本地浏览器的传输协议. 它可以使浏览器更加高效, 使网络传输减少. 它不仅保证计算机正确快速地传输超文本文档, 还确定传输文档中的哪一部分, 以及哪部分内容首先显示 (如文本先于图形) 等.
HTTP 是客户端浏览器或其他程序与 Web 服务器之间的应用层通信协议. 在 Internet 上的 Web 服务器上存放的都是超文本信息, 客户机需要通过 HTTP 协议传输所要访问的超文本信息. HTTP 包含命令和传输信息, 仅可用于 Web 访问, 也可以用于其他因特网 / 内联网应用系统之间的通信, 从而实现各类应用资源超媒体访问的集成.
我们在浏览器的地址栏里输入的网站地址叫做 URL (Uniform Resource Locator, 统一资源定位符). 就像每家每户都有一个门牌地址一样, 每个网页也都有一个 Internet 地址. 当你在浏览器的地址框中输入一个 URL 或是单击一个超级链接时, URL 就确定了要浏览的地址. 浏览器通过超文本传输协议(HTTP), 将 Web 服务器上站点的网页代码提取出来, 并翻译成漂亮的网页.
来源: https://www.cnblogs.com/Kwan-C/p/11508684.html