网络通信架构

BS架构/CS架构

使用协议 分别对应: TCP / HTTP

在计算机网络和软件开发中,CS架构(Client-Server Architecture,客户端-服务器架构)和BS架构(Browser-Server Architecture,浏览器-服务器架构)是两种主要的应用程序架构。

CS架构(客户端-服务器架构)

CS架构是一种典型的两层结构,包括客户端和服务器两个部分。在这种架构中,客户端和服务器通过网络进行通信,每部分都有明确的职责。

  1. 客户端:

用户界面通常在客户端呈现。

可以是桌面应用程序、移动应用或专用软件。

负责向服务器发送请求,接收和处理服务器响应。

  1. 服务器:

管理数据和业务逻辑。

处理来自客户端的请求,并发送回响应。

通常承载在远程系统上,如数据库服务器、应用服务器等。

  1. 特点:

需要为每种操作系统或平台单独开发客户端。

高效的数据处理和响应能力。

在客户端设备上占用资源(如内存和处理能力)。

BS架构(浏览器-服务器架构)

BS架构是一种基于Web的三层或多层架构,主要通过Web浏览器作为客户端访问服务器上的应用程序。

  1. 浏览器(客户端):

使用标准Web浏览器(如Chrome、Firefox等)作为客户端。

无需安装额外的软件,使用HTML、CSS和JavaScript显示内容。

  1. 服务器:

和CS架构中的服务器类似,处理业务逻辑和数据存储。

通过Web服务(如HTTP服务器)提供页面和数据。

  1. 特点:

跨平台兼容性强,可以在任何支持Web浏览器的设备上运行。

客户端无需安装专用软件,容易维护和更新。

可能依赖网络性能,因为所有操作都在服务器上进行。

对比

部署和维护 :BS架构易于部署和维护,而CS架构通常需要在每个客户端单独安装和更新。
性能: CS架构可以更有效地利用客户端的计算资源,适合高性能要求的应用。BS架构依赖于服务器的性能和网络延迟。
安全性: CS架构中,数据经常在客户端和服务器之间传输,可能需要更复杂的安全措施。BS架构

中,敏感数据主要存储在服务器端。
用户体验: CS架构通常能提供更丰富的用户界面和交互功能。BS架构的用户体验受限于Web技术的能力。

TCP协议

基本概念

TCP(传输控制协议)是一种广泛使用的网络通信协议,设计用于在网络中的计算机之间可靠地传输数据。它是互联网协议套件的核心部分,通常与IP(互联网协议)一起使用,合称为TCP/IP。

TCP协议的基本特点:

1.面向连接 :在数据传输之前,TCP 需要在发送方和接收方之间建立一个连接。这包括三次握手过程,确保两端都准备好进行数据传输。

2.可靠传输 :TCP 提供可靠的数据传输服务,这意味着它保证数据包准确无误地到达目的地。如果发生数据丢失或错误,TCP 会重新发送数据包。

  1. 顺序控制 :TCP 保证数据包的传输顺序。即使数据包在网络中的传输顺序被打乱,接收方也能按照正确的顺序重组这些数据。

  2. 流量控制 :TCP 使用窗口机制来控制发送方的数据传输速率,以防止网络过载。这有助于防止接收方被发送方发送的数据所淹没。

  3. 拥塞控制:TCP 还包括拥塞控制机制,用来检测并防止网络拥塞。当网络拥塞发生时,TCP 会减少其数据传输速率。

  4. 数据分段 :大块的数据在发送前会被分割成更小的段,以便于传输。这些段会被独立发送并在接收端重新组装。

  5. 确认和重传: 接收方对成功接收的数据包发送确认(ACK)信号。如果发送方没有收到确认,它会重传丢失的数据包。

  6. 终止连接:数据传输完成后,TCP 连接需要被正常关闭,这通常涉及到四次挥手过程。

TCP 适用于需要高可靠性的应用,如网页浏览、文件传输、电子邮件等。然而,由于它的这些特性,TCP在处理速度上可能不如其他协议(如UDP)那么快速。

TCP协议中的三次握手和四次挥手是建立和终止连接的重要过程。下面是它们的简要描述:

三次握手(建立连接)

三次握手的主要目的是在两台设备之间建立一个可靠的连接。它包括以下步骤:

  1. SYN:客户端向服务器发送一个SYN(同步序列编号)报文来开始一个新的连接。此时,客户端进入SYN-SENT状态。

  2. SYN-ACK:服务器接收到SYN报文后,回复一个SYN-ACK(同步和确认)报文。此时服务器进入SYN-RECEIVED状态。

  3. ACK:客户端接收到SYN-ACK后,发送一个ACK(确认)报文作为回应,并进入ESTABLISHED(已建立)状态。服务器在收到这个ACK报文后,也进入ESTABLISHED状态。这标志着连接已经建立。

四次挥手(断开连接)

四次挥手的目的是终止已经建立的连接。这个过程包括以下步骤:

  1. FIN:当通信的一方完成数据发送任务后,它会发送一个FIN(结束)报文来关闭连接。发送完FIN报文后,该方进入FIN-WAIT-1状态。

  2. ACK:另一方接收到FIN报文后,发送一个ACK报文作为回应,并进入CLOSE-WAIT状态。发送FIN报文的一方在收到ACK后,进入FIN-WAIT-2状态。

  3. FIN:在等待一段时间并完成所有数据的发送后,CLOSE-WAIT状态的一方也发送一个FIN报文来请求关闭连接。

  4. ACK:最初发送FIN报文的一方在收到这个FIN报文后,发送一个ACK报文作为最后的确认,进入TIME-WAIT状态。经过一段时间后,确保对方接收到了最后的ACK报文,该方最终关闭连接。

在这两个过程中,三次握手主要确保双方都准备好进行通信,而四次挥手则确保双方都已经完成通信并同意关闭连接。

HTTP协议

//抓取到的原始数据就是html

基本概念

HTTP(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是万维网(WWW)的数据通信的基础。了解HTTP的基本概念对于理解现代网络通信至关重要。以下是HTTP的一些核心概念:

1. 请求和响应

HTTP是一个基于请求-响应模式的协议。客户端(通常是Web浏览器)向服务器发送一个HTTP请求,然后服务器返回一个HTTP响应。请求包含请求的资源(如网页),而响应包含请求的资源的内容。

2. HTTP方法

HTTP定义了一系列的方法来表明对资源的不同操作,最常用的包括:get,post
GET: 用于请求资源。
POST: 用于提交数据给服务器(例如,表单数据)。

PUT: 用于上传文件或内容。

DELETE: 用于请求删除资源。

HEAD: 用于获取资源的元信息,而不是资源本身。

3. 状态码

服务器对请求的响应中包含一个状态码,它表示请求的成功或失败,以及失败的原因。常见的状态码包括:

200 OK: 请求成功。

404 Not Found: 请求的资源未找到。

500 Internal Server Error: 服务器内部错误

301 Moved Permanently: 请求的资源已永久移动到新位置。

4. URL(统一资源定位符)

URL是Web上资源的地址。它指定了资源的位置以及用于访问资源的协议(例如,http://)。

5. HTTP头

HTTP请求和响应包含头部信息,这些信息包括元数据,如内容类型、内容长度、服务器信息、客户端信息等。例如, Content-Type 头部指示响应中的媒体类型(如text/html,application/json)。

6. 无状态协议

HTTP是一个无状态协议,这意味着服务器不会保留任何请求的数据(状态)。然而,通过使用如

Cookies这样的机制,可以在多个请求之间维持状态。

7. 安全性(HTTPS)

HTTPS是HTTP的安全版本,它在HTTP和TCP层之间增加了一个加密层(通常是SSL/TLS)。这提供了数

据传输的加密和更好的安全性。

8. RESTful API

RESTful是一种使用HTTP协议的Web服务设计风格,它利用HTTP的方法来实现API的不同操作。在RESTful架构中,每个URL代表一个资源,并使用HTTP的方法(如GET, POST)来处理这些资源。

9. Session和Cookies

由于HTTP本身是无状态的,Cookies和会话(Session)被用来在多个请求之间存储用户数据,从而为用户提供连贯的体验。这些概念构成了HTTP的基础,是理解和使用HTTP协议的关键。每个概念都有它的具体细节和使用场景,了解这些有助于更好地在网络应用开发中应用HTTP。

JSON

JSON概述:

常用网址:json.cn -- 将常用原始数据解析为json格式

https://www.json.cn/

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它易于人阅读和编写,同时也易于机器解析和生成。JSON是基于JavaScript的一个子集,尽管它是独立于语言的,且有多种语言支持。JSON常用于网络应用程序中的数据传输,尤其是在Web应用程序中与后端服务器通信。

JSON优势(使用原因)

不同编程语言处理JSON的方案

相关推荐
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
励志成为嵌入式工程师2 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
记录成长java4 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
前端青山4 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
青花瓷4 小时前
C++__XCode工程中Debug版本库向Release版本库的切换
c++·xcode
睡觉谁叫~~~4 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
音徽编程4 小时前
Rust异步运行时框架tokio保姆级教程
开发语言·网络·rust