05 计算机网络
计算机网络
网络体系结构
对于网络体系结构的划分,主要有2种形式:
OSI七层网络模型
看赛博二哈的八股(第115条)
OSI(Open Systems Interconnection)模型由ISO提出,是一个理论分层框架,用于标准化网络通信过程。虽然实际网络并未完全采用OSI,但它对理解网络协议分层至关重要。
层数 | 名称 | 功能 | 协议/设备示例 | 关键词 |
---|---|---|---|---|
7 | 应用层 | 提供用户接口,实现具体应用功能(如文件传输、邮件收发) | HTTP、FTP、SMTP、DNS | |
6 | 表示层 | 数据格式转换(加密、压缩、编码) | SSL/TLS、JPEG、ASCII | |
5 | 会话层 | 建立、管理、终止应用程序间的会话 | NetBIOS、RPC | |
4 | 传输层 | 提供端到端的可靠/不可靠传输(流量控制、错误恢复) | TCP、UDP | 端口号、TCP、 UDP |
3 | 网络层 | 路由选择、IP寻址,实现主机间通信 | IP、ICMP、路由器 | IP地址、路由 器、ping通 |
2 | 数据链路层 | 将比特流封装成数据帧(使用MAC地址在网卡间通信) | ARP、网卡、交换机、 PPTP、L2TP、ATMP | MAC地址,网卡 |
1 | 物理层 | 通过物理介质传输bit流;确定机械和电气规范 | 网线、光纤、集线器、RJ45接口 |
TCP/IP四层模型
TCP/IP模型是互联网的实际协议栈,由IETF定义,去除了OSI中冗余的会话层和表示层,合并了数据链路层和物理层。
也有的地方把TCP/IP说成5层模型,实际上是把“网络接口层”拆成了“数据链路层+物理层”
层数 | 名称 | 对应OSI层 | 核心功能 | 协议/设备示例 |
---|---|---|---|---|
4 | 应用层 | 应用层+表示层+会话层 | 处理高级协议(如HTTP、FTP) | HTTP、DNS、SMTP、WebSocket |
3 | 传输层 | 传输层 | 端到端通信(可靠TCP/高效UDP) | TCP、UDP |
2 | 网络层 | 网络层 | IP寻址、路由选择 | IP、ICMP、路由器 |
1 | 网络接口层 | 数据链路层+物理层 | 物理传输(帧封装、比特流) | Ethernet、Wi-Fi、网卡 |
OS内核对于网络协议栈的实现,只实现到了==传输层==,即完成了设备之间的TCP或者UDP透传,使他们之间能够通信。而==应用层==的通信协议通常==要自己实现==。
比如我想把数据发到ONENET平台并显示,就得按HTTP或者别的协议那样组织数据帧,然后再用TCP透传发过去;毕设的时候我要用上位机显示一个波形,那么也可以自定一个协议,两边数据按这个协议进行打包和解析。这种自定义的协议也属于应用层。
面试题
核心协议与机制
TCP
UDP
HTTP
定义
HTTP协议是一种请求—响应类型的==应用层协议==,每次使用时,都是客户端向服务端发送一个资源请求,然后服务端给客户端一个响应。正是因为它这种”请求—响应“式的工作方式,该协议被广泛的应用于网页访问:当用要访问某个页面时,实际上就是浏览器向Web服务器请求该页面的.html
文件,页面会响应该请求,把页面返回给浏览器
- 我们常说的webserver指的是HTTP(s)协议的服务端,负责处理HTTP请求,返回网页或数据
- HTTP(s)服务端通常使用80/8080/443端口,但不强制。不过用浏览器访问网站的url默认使用的是80/443端口,如果HTTP服务端部署在其他端口,客户端在访问时需要在url手动加上
特点
- 传输层基于TCP协议来传输数据(HTML文件、图片文件、查询结果等)
- 一次请求对应一次响应
- 该协议是无状态协议,对事物处理没有记忆,每次请求—响应都是独立的
请求报文格式
HTTP协议的请求报文由以下几部分构成:
(1)请求行:请求报文的第一行
- 请求方式:如
GET
、POST
… - 资源路径(URL:统一资源定位符)
- HTTP协议的版本
- 请求方式:如
(2)请求头:提供有关请求上下文的信息,以便服务器可以定制响应。请求报文的第二行~换行前
- 格式全是
key:value
- 格式全是
(3)空行
(4)请求体:用于客户端向服务端发送需要处理的数据,比如表单数据等
GET
方法通常将请求体放到URL
中,并以key:value
的形式给出。如POST
方法通常使用json
格式将请求体放到数据报文的最下方
1
2
3
4
5
6POST /devices/949021331/datapoints?type=3 HTTP/1.1
api-key:oMgRtpcLmtaawvMYwY4=ZAvBVVU=
Host:api.heclouds.com
Content-Length:%d
{"Heart_Rate":1,"SpO2":1,"P_NUM":1}
常见的请求方式
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体 |
2 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体,POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面 |
6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器 |
7 | OPTIONS | 允许客户端查看服务器的性能 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 |
常见的请求头
HTTP头部字段可以自己根据需要定义,因此可能在 Web
服务器和浏览器上发现非标准的头字段
下面介绍一些常见的请求头:
响应报文格式
HTTP协议的响应报文由以下几部分构成:
(1)响应行:响应报文的第一行
- HTTP协议的版本
- 响应的状态码
- 状态码的描述
(2)响应头:响应报文的第二行~换行前
- 格式全是
key:value
- 格式全是
(3)空行
(4)响应体:存放响应数据
响应状态码的分类
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
常见的响应头
在构造响应头时,要非常注意Content-Type
字段,它表明了响应内容的类型,如果指定错误,可能后续会无法正确打开得到的响应数据。
HTTP协议的解析
HTTP协议的解析这件事通常服务端和客户端都需要做
- 服务端:解析请求报文并返回应答报文
- 客户端:产生请求报文并解析应答报文
但是一般使用HTTP协议的客户端都是浏览器,而浏览器里面又内置了解析应答报文,并将返回的.html
文件渲染成网页的功能,所以一般==只需要==在服务端(后端)代码中对HTTP报文进行解析。但如果客户端并不是浏览器,比如自己写了个依靠百度翻译API的小程序,那么客户端中还是需要对服务端给出的响应报文进行解析的。
协议解析是基于
Socket
的,以Web服务器为例:具体流程就是服务端一直监听80端口,直到accept()
客户端发送的建立TCP的请求,两者通过3次握手建立里TCP连接,接着用Socket
接收客户端传来的请求报文,存在一个字符串/数组中,然后按照HTTP协议的格式解析这个请求报文,并构造好响应数据,再由Socket
传回客户端。
Web服务器通常指的就是:封装好了解析HTTP协议的服务器程序,主要功能是提供“网上信息的浏览服务”。
有了这些Web服务器程序,开发者就不需要自己对HTTP协议进行解析,可以只用关注业务逻辑的处理,使Web开发更为简单。