计算机网络

网络体系结构

对于网络体系结构的划分,主要有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)请求行:请求报文的第一行

    • 请求方式:如GETPOST
    • 资源路径(URL:统一资源定位符)
    • HTTP协议的版本
  • (2)请求头:提供有关请求上下文的信息,以便服务器可以定制响应。请求报文的第二行~换行前

    • 格式全是key:value
  • (3)空行

  • (4)请求体:用于客户端向服务端发送需要处理的数据,比如表单数据等

    • GET方法通常将请求体放到URL中,并以key:value的形式给出。如image-20231224161519750
    • POST方法通常使用json格式将请求体放到数据报文的最下方
    1
    2
    3
    4
    5
    6
    POST /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 服务器和浏览器上发现非标准的头字段

下面介绍一些常见的请求头:

image-20231224160307742

响应报文格式

HTTP协议的响应报文由以下几部分构成:

  • (1)响应行:响应报文的第一行

    • HTTP协议的版本
    • 响应的状态码
    • 状态码的描述
  • (2)响应头:响应报文的第二行~换行前

    • 格式全是key:value
  • (3)空行

  • (4)响应体:存放响应数据

响应状态码的分类
分类 分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
常见的响应头

image-20231224161814165

在构造响应头时,要非常注意Content-Type字段,它表明了响应内容的类型,如果指定错误,可能后续会无法正确打开得到的响应数据。

HTTP协议的解析

HTTP协议的解析这件事通常服务端和客户端都需要做

  • 服务端:解析请求报文并返回应答报文
  • 客户端:产生请求报文并解析应答报文

但是一般使用HTTP协议的客户端都是浏览器,而浏览器里面又内置了解析应答报文,并将返回的.html文件渲染成网页的功能,所以一般==只需要==在服务端(后端)代码中对HTTP报文进行解析。但如果客户端并不是浏览器,比如自己写了个依靠百度翻译API的小程序,那么客户端中还是需要对服务端给出的响应报文进行解析的。

协议解析是基于Socket的,以Web服务器为例:具体流程就是服务端一直监听80端口,直到accept()客户端发送的建立TCP的请求,两者通过3次握手建立里TCP连接,接着用Socket接收客户端传来的请求报文,存在一个字符串/数组中,然后按照HTTP协议的格式解析这个请求报文,并构造好响应数据,再由Socket传回客户端。

Web服务器通常指的就是:封装好了解析HTTP协议的服务器程序,主要功能是提供“网上信息的浏览服务”。

有了这些Web服务器程序,开发者就不需要自己对HTTP协议进行解析,可以只用关注业务逻辑的处理,使Web开发更为简单。

HTTPS

DNS解析

关键流程分析

从输入URL到页面显示的流程