计算机网络模型

目录

一、网络分层模型

1.什么是网络模型?

2.网络模型为什么需要分层?

二、TCP/IP网络模型

1.应用层

2.传输层

3.网络层

4.网络接口层

三、HTTP协议

1.什么是HTTP协议?

2.HTTP协议通信过程

3.URL

4.HTTP报文

[4.1 请求报文](#4.1 请求报文)

[4.2 响应报文](#4.2 响应报文)

5.HTTP请求方式

[5.1 GET:获取资源](#5.1 GET:获取资源)

[5.2 POST:新增资源](#5.2 POST:新增资源)

[5.3 HEAD:获取响应报头](#5.3 HEAD:获取响应报头)

[5.4 PUT:修改资源](#5.4 PUT:修改资源)

[5.5 DELETE:删除资源](#5.5 DELETE:删除资源)

[5.6 OPTIONS:查询支持的方法](#5.6 OPTIONS:查询支持的方法)

[5.7 GET和POST请求的区别](#5.7 GET和POST请求的区别)

6.HTTP首部字段

7.HTTP状态码

[7.1 1XX](#7.1 1XX)

[7.2 2XX 成功](#7.2 2XX 成功)

[7.3 3XX 重定向](#7.3 3XX 重定向)

[7.4 4XX 客户端错误](#7.4 4XX 客户端错误)

[7.5 5XX 服务器错误](#7.5 5XX 服务器错误)

8.连接管理

[8.1 短链接和长连接](#8.1 短链接和长连接)

[8.2 管线化连接](#8.2 管线化连接)

9.HTTPS加密

[9.1 HTTP协议存在的问题](#9.1 HTTP协议存在的问题)

[9.2 什么是HTTPS协议?](#9.2 什么是HTTPS协议?)

[9.3 HTTP和HTTPS有什么区别?](#9.3 HTTP和HTTPS有什么区别?)

[9.4 加密方式](#9.4 加密方式)

[9.4.1 对称密钥加密](#9.4.1 对称密钥加密)

[9.4.2 非对称密钥加密](#9.4.2 非对称密钥加密)

[9.5 HTTPS工作流程](#9.5 HTTPS工作流程)


一、网络分层模型

1.什么是网络模型?

网络通信是一个复杂的系统工程 ------ 从用户在手机上点击 "发送" 按钮,到数据跨越千里到达目标设备,需要完成 "数据打包、地址标记、路径选择、错误校验、格式转换" 等一系列操作。网络模型分层(如 OSI 七层模型、TCP/IP 四层模型)本质是 "将复杂问题拆解为可管理的子问题"。

计算机网络从底层的传输到高层的软件设计十分复杂,要合理地设计计算机网络模型,必须采用分层模型,每一层负责处理自己的操作。在这个模型中,每个分层都接收由它的下一层所提供的特定服务,并且负责为自己的上一层提供特定的服务。上下层之间进行交互时所遵循的的约定叫做"接口"。同一层之间的交互所遵循的约定叫做"协议"。

OSI(Open System Interconnect)网络7层模型是ISO组织定义的一个计算机互联的标准分层模型,但它只是一个定义,目的是为了简化网络各层的操作,提供标准接口便于实现和维护,从上至下依次包括:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

2.网络模型为什么需要分层?

如果没有分层,网络通信的所有功能(从物理信号传输到应用数据解析)都需要由一个模块完成,就像用一个程序实现 "快递打包 + 运输 + 配送 + 签收" 的全流程 ------ 任何一个环节的改动(如包装规格变化)都可能影响整个系统,开发和维护几乎不可能实现。

网络分层模型中的每个层级,只需专注于自己的任务,无需关心上层如何使用数据、下层如何传输数据。例如:应用层(如微信)只需按约定格式生成消息,无需关心数据是通过光纤还是 5G 传输;物理层只需传输信号,无需知道信号里是文字还是图片。这种 "分工明确" 的设计,让复杂的网络通信变得可拆解、可实现。

二、TCP/IP网络模型

互联网实际使用的TCP/IP模型是OSI七层网络模型的简化版,一共分为4层:应用层、传输层、网络层、网络接口层(数据链路层、物理层)。

应用层:负责 "用户数据的格式处理"(类似 "快递里的物品包装与拆封")。

传输层:负责 "端到端的数据可靠传输"(类似 "确保快递完整送达");

网络层:负责 "跨网络的路径选择"(类似 "从北京到上海的路线规划");

数据链路层:负责 "相邻设备间的数据帧传输"(类似 "两个城市间的短途运输");

物理层:仅负责 "电信号 / 光信号传输"(类似快递的 "公路 / 铁路等运输通道");

1.应用层

应用层,负责基于某种应用层协议,为用户提供功能服务。不同的网络应用程序,需要不同的应用层协议。应用层不需要关心数据如何传输,只负责将数据包交给传输层即可。(类似"把快递交给快递小哥")。

应用层常见的协议有:

域名系统 DNS(Domain Name System):用于将域名解析成IP地址;

HTTP 协议(HyperText Transfer Protocol):超文本传输协议,最初的目的用于发布和接受HTML网页,是目前互联网应用最广泛的网络协议;

电子邮件协议:常用的电子邮件协议有SMTP、POP3、IMAP4;

远程登录协议:Telnet协议是Internet远程登录服务的标准协议和主要方式,基本功能是允许用户登录进入远程主机系统;

FTP文件传输协议(File Transfer Protocol):FTP协议用于在网络上进行文件传输的一套标准协议,FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信;

应用层将产生的消息或报文(message),发送给传输层。

2.传输层

传输层协议负责定义两台主机进程之间的通信,提供数据传输服务,提供端到端的传输。

在传输层常见的协议有:

TCP(Transmission Control Protocol)协议:传输控制协议,提供面向连接、可靠的数据传输服务。TCP协议中的流量控制、超时重传、拥塞控制等内容,都是为了实现可靠性传输。例如:微信、QQ等IM即时通讯软件发送文字、语音、图片。

UDP(User Datagram Protocol)协议:用户数据报协议,只负责发送数据包,不提供数据包的可靠性传输。所以,UDP的实时性和效率更高。例如:腾讯会议、网络游戏、爱奇艺等软件,更看重数据的实时性和流程性。

传输层会在应用层报文(message)的基础上,进行分段,拆分成若干个TCP报文段(TCP Segment),发送给网络层。

3.网络层

在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。在发送数据时,网络层把传输层产生的报文段或用户数据报封装成分组和包进行传送。

网络层使用的协议是IP协议,负责将数据从一个设备传输到另一个设备。主要的内容包括两点:IP寻址(导航)和路由(方向盘)。

网络层在传输层TCP报文段(TCPSegment)的基础上,加上IP报头,生成IP数据包(Packet),发送给网络接口层。

4.网络接口层

网络层的IP数据包(Packet)发送给网路接口层后,网络接口层会负责将数据包发送给以太网。

但是,以太网并不是按照IP协议的方式来进行通信,它是通过MAC地址进行通信。所以,需要首先通过ARP协议获取对方的MAC地址,然后将收发双方的MAC地址形成一个MAC头部,加入到IP数据包(包)的前面,形成一个数据帧(Data Frame),最后发送到以太网。

三、HTTP协议

1.什么是HTTP协议?

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于服务器与客户端浏览器之间传输超文本数据(文字、图片、视频、音频)的应用层协议。

HTTP是一个属于应用层的协议,同时也是一个双向协议,基于浏览器-服务器架构模型进行工作。浏览器与服务器之间,基于http协议进行通信,浏览器发送请求数据给服务器,服务器根据接收到并处理请求后,向浏览器发送响应信息。

2.HTTP协议通信过程

HTTP 是一个应用层协议,默认端口为80,在传输层使用 TCP协议进行数据的传输。

http协议通信过程包括如下步骤:

当用户发起一个新的请求,浏览器会发起对服务器的TCP连接请求;服务器与浏览器之间会按照TCP协议的三次握手,建立之间的TCP连接;浏览器会按照http协议格式,创建请求数据包(http请求报文)并发送至服务器;服务器会按照http协议格式,解析请求报文并执行请求处理,调用相关业务逻辑方法,产生响应数据;服务器会按照http协议格式,将响应数据封装至响应数据包(http响应报文)并发送至浏览器;浏览器会按照http协议格式,解析响应报文之后将内容呈现给用户。

3.URL

HTTP协议使用 URL( Uniform Resource Locator,统一资源定位符)来定位资源。

格式:http://host[":"port][abs_path]

示例:http://192.168.0.116:8080/index.html

  • http表示要通过HTTP协议来定位网络资源;
  • host表示合法的Internet主机域名或者IP地址;
  • port指定一个端口号,为空则使用缺省端口80;
  • abs_path指定请求资源的URI;

URL是 URI(Uniform Resource Identifier,统一资源标识符)的子集,URL 在 URI 的基础上增加了定位能力。URI 除了包含 URL,还包含 URN(Uniform Resource Name,统一资源名称),它只是用来定义一个资源的名称,并不具备定位该资源的能力。例如 urn:isbn:0451450523 用来定义一个书籍名称,但是却没有表示怎么找到这本书。

4.HTTP报文

4.1 请求报文

浏览器通过URL发起一个请求时,会发送一个http请求报文给目标服务器,服务器根据请求报文中携带的请求数据进行处理。

请求报文结构

  • 第一行包含:请求方式、URL、协议版本
  • 接下来的多行都是http请求首部内容,其中包含若干个http首部字段。
  • 一个空行用来分隔首部和内容主体Body。
  • 最后是请求的内容主体。

示例:

POST http://www.example.com/ HTTP/1.1

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8

Cache-Control: max-age=0

Host: www.example.com

If-Modified-Since: Thu, 17 Oct 2019 07:18:26 GMT

If-None-Match: "3147526947+gzip"

Proxy-Connection: keep-alive

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 xxx

param1=1&param2=2

4.2 响应报文

当服务器处理完请求后,会将响应数据放入http响应报文中返回给浏览器。

响应报文结构:

  • 第一行包含:协议版本、状态码以及描述
    • 最常见的状态码以及描述是:200,OK表示请求成功。
  • 接下来的若干行是首部内容。
  • 一个空行分隔首部和内容主体。
  • 最后是响应的内容主体。

示例:

HTTP/1.1 200 OK

Age: 529651

Cache-Control: max-age=604800

Connection: keep-alive

Content-Encoding: gzip

Content-Length: 648

Content-Type: text/html; charset=UTF-8

Date: Mon, 02 Nov 2020 17:53:39 GMT

Etag: "3147526947+ident+gzip"

Expires: Mon, 09 Nov 2020 17:53:39 GMT

Keep-Alive: timeout=4

Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT

Proxy-Connection: keep-alive

Server: ECS (sjc/16DF)

Vary: Accept-Encoding

X-Cache: HIT

<!doctype html>

<html>

<head>

<title>Example Domain</title>

// 省略...

</body>

</html>

5.HTTP请求方式

HTTP请求报文第一行为请求行,其中包含了请求方式字段,常见的请求方式:GET、POST、HEAD、PUT、DELETE、OPTIONS

5.1 GET:获取资源

GET方法用于使用给定的URL从给定服务器中检索信息,完成从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不会对数据产生其他影响。

5.2 POST:新增资源

POST方法用于将数据发送到服务器以创建或增加资源。使用post方法,如果两个请求相同,后一个请求不会覆盖第一个请求,所以post用于增加资源。

5.3 HEAD:获取响应报头

HEAD 和 GET方法类似,但是不返回响应报文内容主体部分,仅传输响应报头部分。主要用于确认 URL的有效性以及资源更新的日期时间等。

5.4 PUT:修改资源

PUT方法用来修改资源,要求在请求报文的主体中包含数据内容,然后保存到请求URL指定位置。使用put方法,如果两个请求相同,后一个请求会覆盖第一个请求,所以put用于修改资源。

5.5 DELETE:删除资源

DELETE方法用来删除指定的资源。

5.6 OPTIONS:查询支持的方法

查询指定的 URL能够支持的方法。会返回 Allow: GET, POST, HEAD, OPTIONS等请求方式内容。

5.7 GET和POST请求的区别

GET和POST是HTTP请求的两种不同的请求方式,区别主要包括:

1.GET用于获取数据,POST用于增加数据。

2.请求报文格式不同

3.GET使用请求报文中的首部字段URL传递请求参数,POST使用Request Body提交数据。POST也可以在首部字段URL传递请求参数。

4.GET是幂等且可缓存在浏览器中,POST是非幂等且不可缓存。

  • 幂等意思是多次执行相同的操作,结果都是相同的。

6.HTTP首部字段

Host字段:浏览器发送http请求时,用来指定服务器的域名。

例如:Host : www.apesource.com

Content-Length字段:服务器在响应数据时,会通过 Content-Length 字段,表明本次响应数据的长度。

例如:Content-Length: 1000

Connection 字段:Connection字段用于浏览器要求服务器使用长连接,以便其他请求复用该连接。

例如:Connection: keep-alive

Content-Type 字段:Content-Type 字段用于服务器响应时,告诉浏览器,本次响应数据的内容类型。

例如:Content-Type: text/html; charset=utf-8

Accept 字段:Accept 字段用于浏览器发起请求的时候,声明可以接受哪些响应数据格式。

例如:Accept: */*

Content-Encoding 字段:Content-Encoding 字段说明数据的压缩方法,表示服务器响应的数据使用的压缩格式。

例如:Content-Encoding: gzip

Accept-Encoding 字段:客户端在请求时,用 Accept-Encoding 字段说明自己可以接受哪些压缩方法。

例如:Accept-Encoding: gzip, deflate

7.HTTP状态码

服务器返回的 响应报文 中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求后的响应结果。

7.1 1XX

信息1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际工作中使用场景比较少。

7.2 2XX 成功

2xx类状态码表示服务器成功处理了客户端的请求。

【200 OK】最常见的成功状态码,表示一切正常。

【204 No Content】常见的成功状态码,与200 OK基本相同,但响应报文没有body数据。

【206 Partial Content】是应用于HTTP分块下载或断点续传,表示响应返回的body数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。

7.3 3XX 重定向

3xx类状态码表示客户端请求的资源发生了变动,需要客户端用新的URL重新发送请求获取资源,也就是重定向。

【301 Moved Permanently】表示永久重定向,说明请求的资源已经不存在了,需改用新的URL再次访问。

【302 Found】表示临时重定向,说明请求的资源还在,但暂时需要用另一个URL来访问。

7.4 4XX 客户端错误

4xx类状态码表示客户端发送的报文有误,服务器无法处理。

【400 Bad Request】表示客户端请求的报文有错误。

【403 Forbidden】表示服务器禁止访问资源,并不是客户端的请求出错。

【404 Not Found】表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。

【405 Not Allowed】表示服务器不支持客户端采用的请求方式。

7.5 5XX 服务器错误

5xx类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。

【500 Internal Server Error】服务器发生了内部错误。

【501 Not Implemented】表示客户端请求的功能还不支持,类似"即将开业,敬请期待"的意思。

【502 Bad Gateway】通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。

【503 Service Unavailable】表示服务器当前很忙,暂时无法响应服务器,类似"网络服务正忙,请稍后重试"的意思。

8.连接管理

8.1 短链接和长连接

HTTP 1.0 默认使用短连接 ,每次使用HTTP协议进行通信,都需要重新按照三次握手的方式,建立一个独立的TCP连接,响应完毕后,通过四次挥手断开连接。这种重复的连接创建和断开,增加了通信的开销。为了解决这个问题,HTTP/1.1 改用长连接的通信方式,也叫持久性连接。长连接只需要建立一次 TCP 连接就能进行多次 HTTP通信,这种方减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

在 HTTP/1.0 默认是短连接,如果需要使用长连接,则使用 Connection : Keep-Alive

从 HTTP/1.1 默认是长连接,如果要断开连接,需要由客户端或者服务器端提出断开,使用 Connection : close;

8.2 管线化连接

将多个HTTP请求(request)整批提交的技术,在传送过程中不需先等待服务端的回应。管线化机制须通过长连接(persistent connection)完成,仅HTTP/1.1支持此技术(HTTP/1.0不支持)。

9.HTTPS加密

9.1 HTTP协议存在的问题

HTTP由于使用明文传输,所以存在以下安全问题:

(1)使用明文进行通信,内容可能会被窃听,比如说抓包;

(2)不验证通信方的身份,通信方的身份有可能遭遇伪装,比如说钓鱼网站;

(3)无法证明报文的完整性,报文有可能遭篡改,比如强制在线广告植入。

9.2 什么是HTTPS协议?

HTTPS并不是一个新的协议,它使用了隧道进行通信,让HTTP先和SSL(Secure Sockets Layer)通信,再由SSL和TCP通信。通过使用SSL,HTTPS具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。

9.3 HTTP和HTTPS有什么区别?

  • HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL 安全协议,使得报文能够加密传输。
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL 的握手过程,才可进入加密报文传输。
  • HTTP 的端口号是 80,HTTPS 的端口号是 443。
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

9.4 加密方式

9.4.1 对称密钥加密

对称密钥加密(Symmetric-Key Encryption),加密和解密使用同一密钥。

优点:运算速度快;

缺点:无法安全地将密钥传输给通信方。

常见算法:AES算法(支持128/192/256位秘钥)

DES算法(支持56位秘钥)已淘汰

9.4.2 非对称密钥加密

非对称密钥加密,又称公开密钥加密(Public-Key Encryption),加密和解密使用不同的密钥。公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。非对称密钥除了用来加密,还可以用来进行签名。因为私有密钥无法被其他人获取,因此通信发送方使用其私有密钥进行签名,通信接收方使用发送方的公开密钥对签名进行解密,就能判断这个签名是否正确。

优点:可以更安全地将公开密钥传输给通信发送方;

缺点:运算速度慢。

常见算法:RSA算法(支持2048-4096位秘钥)

ECC算法(支持256位秘钥,等效于 3072位RSA秘钥)

9.5 HTTPS工作流程

(1)用户通过浏览器请求https网站,服务器收到请求,选择浏览器支持的加密和hash算法,同时返回数字证书给浏览器,包含颁发机构、网址、公钥、证书有效期等信息。

(2)浏览器对证书的内容进行校验,如果有问题,则会有一个提示警告。否则,就生成随机对称秘钥X,同时使用证书中的非对称加密算法的公钥进行加密,并且发送给服务器。

(3)服务器收到之后,使用非对称加密算法的私钥解密,得到随机对称秘钥X,然后使用随机对称秘钥X对网页内容进行加密,返回给浏览器。

(4)浏览器则使用随机对称秘钥X和之前约定的加密算法进行解密,得到最终的网页内容

相关推荐
我有一棵树1 小时前
file 协议与 http 协议的区别:为什么本地 HTML 无法加载相对路径 JS,以及正确的解决方式
javascript·http·html
oh-pinpin3 小时前
安全配置类
安全·web安全
xixixi777773 小时前
解析一下传输安全——“它是什么”,更是关于“它为何存在”、“如何实现”以及“面临何种挑战与未来”
网络·安全·通信
骥龙4 小时前
4.12、隐私保护机器学习:联邦学习在安全数据协作中的应用
人工智能·安全·网络安全
天硕国产存储技术站4 小时前
DualPLP 双重掉电保护赋能 天硕工业级SSD筑牢关键领域安全存储方案
大数据·人工智能·安全·固态硬盘
jerryinwuhan4 小时前
socket由浅入深
网络
xu_yule6 小时前
网络和Linux网络-3(套接字编程)TCP网络通信代码
linux·网络·tcp/ip
喜欢吃豆7 小时前
使用 OpenAI Responses API 构建生产级应用的终极指南—— 状态、流式、异步与文件处理
网络·人工智能·自然语言处理·大模型
xixixi777778 小时前
解析一下存储安全——“它是什么”,更是关于“它为何存在”、“如何实现”以及“面临何种挑战与未来”
网络·安全·通信