简介

计算机网络协议是在计算机网络中进行通信和数据交换的规则和约定集合。它定义了计算机网络中数据的格式、传输方式、错误检测和纠正、网络设备的工作方式以及网络中各个实体之间的通信流程等。

下面是一些常见的计算机网络协议:

  1. TCP/IP协议:TCP/IP协议是互联网的核心协议,它包括TCP(传输控制协议)和IP(Internet协议)两个主要协议。TCP协议提供可靠的、面向连接的数据传输,而IP协议负责在网络中寻址和路由数据包。

  2. HTTP协议:HTTP(超文本传输协议)是应用层协议,用于在Web浏览器和Web服务器之间传输超文本文档。它是无状态的,通过请求-响应模型进行通信。

  3. HTTPS协议:HTTPS(安全超文本传输协议)是在HTTP基础上加入了安全层的协议,使用SSL/TLS加密算法保证通信的安全性。

  4. FTP协议:FTP(文件传输协议)用于在客户端和服务器之间传输文件。它支持文件上传、下载、删除和重命名等操作。

  5. SMTP协议:SMTP(简单邮件传输协议)用于在网络中发送和传输电子邮件。它定义了电子邮件的格式和传输方式。

  6. POP3协议:POP3(邮局协议版本3)是用于接收电子邮件的协议,它允许用户从邮件服务器上下载邮件。

  7. DNS协议:DNS(域名系统)协议用于将域名解析为相应的IP地址。它提供了域名到IP地址之间的映射服务。

  8. ICMP协议:ICMP(Internet控制消息协议)用于在IP网络中传输错误报文和状态信息。它用于网络故障诊断和管理。

以上只是一小部分常见的计算机网络协议,实际上还有许多其他的协议和标准,用于不同的网络通信需求和场景。这些协议共同构成了计算机网络的基础,使得不同设备和系统能够进行有效的通信和数据交换。

Web服务

Web服务原理和技术

  • Web Service,是面向服务计算模式的一部分,用于互联网上的信息交换

  • Web Service的主题非常广泛,非常复杂,涉及许多概念,协议和技术,而且它们源自不同的学科,诸如分布式计算系统,计算机网络,计算机体系结构,中间件,软件工程,编程语言,数据库系统,安全性和知识表示等,并且它们以各种错综复杂的方式组合在一起。
  • 此外,还需要一些处理业务流程与组织的新技术,这些新技术既要发现企业存在的问题,又要在实际应用中解决这些问题

维基百科

  • Web服务是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作
  • 根据W3C的定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作

  • 网络服务通常是许多应用程序接口(API)所组成的,它们透过网络,例如国际互联网(Internet)的远程服务器端,执行客户所提交服务的请求

  • 尽管W3C的定义涵盖诸多相异且无法介分的系统,不过通常我们指有关于主从式架构(Client-server)之间根据SOAP协议进行传递XML格式消息
  • 无论定义还是实现,Web服务过程中会由服务器提供一个机器可读的描述(通常基于WSDL)以辨识服务器所提供的WEB服务
    • SOAP, 一个基于XML的可扩展消息信封格式,需同时绑定一个网络传输协议。这个协议通常是HTTP或HTTPS,但也可能是SMTP或XMPP。
    • WSDL, 一个XML格式文档,用以描述服务端口访问方式和使用协议的细节。通常用来辅助生成服务器和客户端代码及配置信息。
    • UDDI, 一个用来发布和搜索WEB服务的协议,应用程序可借由此协议在设计或运行时找到目标WEB服务。
    • 这些标准由这些组织制订:W3C负责XML、SOAP及WSDL;OASIS负责UDDI。

阮一峰网络日志

  • 想要理解Web service,必须先理解什么是Service(服务)

  • 传统上,我们把计算机后台程序(Daemon)提供的功能,称为”服务”(service)
  • 比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个”服务”。
  • 通俗地说,”服务”就是计算机可以提供的某一种功能

  • 根据来源的不同,”服务”又可以分成两种:
    • 一种是”本地服务”(使用同一台机器提供的服务,不需要网络)
    • 另一种是”网络服务”(使用另一台计算机提供的服务,必须通过网络才能完成)
  • 举例来说
    • 我现在有一批图片,需要把它们的大小缩小一半。那么,我们可以把”缩放图片”看成是一种服务。
    • 你可以使用”本地服务”,在自己计算机上用软件缩小图片,也可以使用”网络服务”,将图片上传到某个网站,让服务器替你缩小图片,完成后再通过网络送回给你。
    • 这就好比,一件事你可以自己做,也可以交给另一个人去做。肚子饿了,你可以自己做饭,也可以打电话去订一份比萨,让店家替你做好送上门。
  • “网络服务”(Web Service)的本质,就是通过网络调用其他网站的资源

  • 如果一个软件的主要部分采用了”网络服务”,即它把存储或计算环节”外包”给其他网站了,那么我们就说这个软件属于Web Service架构
  • Web Service架构的基本思想,就是尽量把非核心功能交给其他人去做,自己全力开发核心功能。

使用Web服务的方式

  • Web服务实际上是一组工具,并有多种不同的方法调用之。
  • 三种最普遍的手段是:远程过程调用(RPC),服务导向架构(SOA)以及表述性状态转移(REST)。

  • 远程过程调用
    • Web服务提供一个分布式函数或方法接口供用户调用,这是一种比较传统的方式。通常,在WSDL中对RPC接口进行定义(类似于早期的XML-RPC)。
    • 尽管最初的Web服务广泛采用RPC方式部署,但针对其过于紧密之耦合性的批评声也随之不断。这是因为RPC式WEB服务实质上是利用一个简单的映射,以把用户请求直接转化成为一个特定语言编写的函数或方法。
    • 如今,多数服务提供商认定此种方式在未来将难有作为,在他们的推动下,WS-I基本协议集(WS-I Basic Profile)已不再支持远程过程调用。
  • 服务导向架构
    • 现在,业界比较关注的是遵从服务导向架构(Service-oriented architecture,SOA)概念来构筑WEB服务。
    • 在服务导向架构中,通讯由消息驱动,而不再是某个动作(方法调用)。这种WEB服务也被称作面向消息的服务
    • SOA式WEB服务得到了大部分主要软件供应商以及业界专家的支持和肯定。
    • 作为与RPC方式的最大差别,SOA方式更加关注如何去连接服务而不是去特定某个实现的细节。WSDL定义了联络服务的必要内容
  • 表述性状态转移
    • 表述性状态转移式(Representational state transfer,REST)Web服务类似于HTTP或其他类似协议,它们把接口限定在一组广为人知的标准动作中(比如HTTP的GET、PUT、DELETE)以供调用。
    • 此类WEB服务关注与那些稳定的资源的互动,而不是消息或动作
    • 此种服务可以通过WSDL来描述SOAP消息内容,通过HTTP限定动作接口;或者完全在SOAP中对动作进行抽象。

WebSocket

维基百科

  • WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信,位于OSI模型的应用层。
  • WebSocket协议在2011年由IETF标准化为RFC 6455,后由RFC 7936补充规范。Web IDL中的WebSocket API由W3C标准化

  • WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。
  • 在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输

简介

  • WebSocket是一种与HTTP不同的协议。两者都位于OSI模型的应用层,并且都依赖于传输层的TCP协议
  • 为了实现兼容性,WebSocket握手使用HTTP Upgrade头从HTTP协议更改为WebSocket协议。

  • WebSocket协议支持Web浏览器(或其他客户端应用程序)与Web服务器之间的交互,具有较低的开销,便于实现客户端与服务器的实时数据传输
  • 服务器可以通过标准化的方式来实现,而无需客户端首先请求内容,并允许消息在保持连接打开的同时来回传递。
  • 通过这种方式,可以在客户端和服务器之间进行双向持续对话。
  • 通信通过TCP端口80或443完成,这在防火墙阻止非Web网络连接的环境下是有益的。
  • 另外,Comet之类的技术以非标准化的方式实现了类似的双向通信
    • Comet是一种用于web的推送技术,能使服务器实时地将更新的信息传送到客户端,而无须客户端发出请求,
    • 目前有两种实现方式,长轮询和iframe流。
  • 与HTTP不同,WebSocket提供全双工通信。
  • 此外,WebSocket还可以在TCP之上实现消息流。TCP单独处理字节流,没有固有的消息概念。
  • 在WebSocket之前,使用Comet可以实现全双工通信。
  • 但是Comet存在TCP握手和HTTP头的开销,因此对于小消息来说效率很低。WebSocket协议旨在解决这些问题。

  • WebSocket协议规范将ws(WebSocket)和wss(WebSocket Secure)定义为两个新的统一资源标识符(URI)方案,分别对应明文和加密连接。
  • 除了方案名称和片段ID(不支持#)之外,其余的URI组件都被定义为此URI的通用语法。

背景

  • 早期,很多网站为了实现推送技术,所用的技术都是轮询
  • 推送技术(英语:Push technology),或者说是是一种基于Internet通信方式的服务器推送,其中要求通信的请求是由发布者或中央服务器发起。与 pull/get 形成对比,额外消息传输的相应一般由接收者或客户端发起。
  • 轮询,是指由浏览器每隔一段时间(如每秒)向服务器发出HTTP请求,然后服务器返回最新的数据给客户端。
  • 这种传统的模式带来很明显的缺点,即:
    • 浏览器需要不断的向服务器发出请求,然而HTTP请求与回复可能会包含较长的头部,其中真正有效的数据可能只是很小的一部分,所以这样会消耗很多带宽资源
  • 比较新的轮询技术是Comet。这种技术虽然可以实现双向通信,但仍然需要反复发出请求。而且在Comet中普遍采用的HTTP长连接也会消耗服务器资源
  • 在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯
  • Websocket与HTTP和HTTPS使用相同的TCP端口,可以绕过大多数防火墙的限制。默认情况下,Websocket协议使用80端口;运行在TLS之上时,默认使用443端口。

握手协议

  • WebSocket 是独立的、创建在TCP上的协议。
  • Websocket 通过 HTTP/1.1 协议的101状态码进行握手。
  • 为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称握手(Handshaking)。

  • 典型的WebSocket握手请求
    • 客户端请求:
      1
      2
      3
      4
      5
      6
      7
      8
      
        GET /chat HTTP/1.1
        Host: server.example.com
        Upgrade: websocket
        Connection: Upgrade
        Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
        Origin: http://example.com
        Sec-WebSocket-Protocol: chat, superchat
        Sec-WebSocket-Version: 13
      
    • 服务器回应:
      1
      2
      3
      4
      5
      
      HTTP/1.1 101 Switching Protocols
      Upgrade: websocket
      Connection: Upgrade
      Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
      Sec-WebSocket-Protocol: chat
      
  • 字段说明:
    • Connection必须设置Upgrade,表示客户端希望连接升级。
    • Upgrade字段必须设置Websocket,表示希望升级到Websocket协议。
    • Sec-WebSocket-Key是随机的字符串,服务器端会用这些数据来构造出一个SHA-1的信息摘要。
      • 把“Sec-WebSocket-Key”加上一个特殊字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,然后计算SHA-1摘要,之后进行Base64编码,将结果做为“Sec-WebSocket-Accept”头的值,返回给客户端。
      • 如此操作,可以尽量避免普通HTTP请求被误认为Websocket协议。
    • Sec-WebSocket-Version 表示支持的Websocket版本。RFC6455要求使用的版本是13,之前草案的版本均应当弃用。
    • Origin字段是必须的。如果缺少origin字段,WebSocket服务器需要回复HTTP 403 状态码(禁止访问)。
    • 其他一些定义在HTTP协议中的字段,如Cookie等,也可以在Websocket中使用

阮一峰网络日志

  • 已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?
  • 因为 HTTP 协议有一个缺陷:通信只能由客户端发起。
  • 举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

  • 这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。
  • 我们只能使用”轮询“:每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室

  • 轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。
  • 因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的

简介

  • WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了
  • 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种

  • 其他特点包括:
    • 建立在 TCP 协议之上,服务器端的实现比较容易。
    • 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器
    • 数据格式比较轻量,性能开销小,通信高效。
    • 可以发送文本,也可以发送二进制数据。
    • 没有同源限制,客户端可以与任意服务器通信。
    • 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL

Web3和区块链

  • 互联网迄今有两个阶段:Web 1.0 和 Web 2.0
  • 下一个阶段自然就是 Web 3.0(简称 Web3)

  • Web 1.0 阶段,用户是单纯的内容消费者,内容由网站提供,网站让你看什么,你就看什么,典型例子就是新闻门户网站。
  • Web 2.0 阶段,用户是内容的生产者,网站只是一个向用户提供服务的平台,典型的 Web 2.0 平台有维基百科、抖音、微信等等

  • Web3 的很多特征还不明确,但是国外很多文章认为,它跟区块链有关。
    • Web 1.0 是用户读取互联网,Web 2.0 是用户写入互联网,Web3 是用户生活在互联网
    • 娱乐、工作、学习、消费、交际,都在网上发生。网站不仅提供服务,还是一个生活空间,人们的一部分生活可以在网上完成
    • 在教育网站学习,在会议网站开会,在社交网站交友,在游戏网站玩乐。所有网站共同构成了一个无所不包的网络世界
  • 所有网站的生活功能,如果能够连在一起,让用户无缝地从一个场景进入另一个场景,那就构成了一个虚拟世界。这大概就是最近很热门的元宇宙(metaverse)的样子
  • 到了那个阶段,用户不再是访问网站,而是进入虚拟世界,过着虚拟的线上生活

  • 这样的虚拟世界,显然不能被一家或几家巨头垄断,否则我们就会依赖这些巨头,不得不遵守它制定的规则。当你的生活都在虚拟世界里面,某一天巨头突然决定关闭你的账号,你的虚拟人生岂不嘎然而止了!
  • 这就是很多人提出 Web3 应该是分布式的原因。这有两层含义:
    • 它不是集中式的,就没有单一的公司可以控制它;
    • 任何一种服务都有多家提供商,通过分布式协议连起来,用户可以极小的成本,从一个提供商转移到另一个服务商。
  • 如果 Web3 确定是分布式的,那么区块链简直就是天然的基础设施。因为区块链是分布式数据库的一种实现,本身就是分布式的,而且信息一旦上链,就无法修改
  • 这解决了 Web3 的核心问题:不同网站的数据交换。
  • 不同网站都可以自由读写同一个用户的数据,并且这些数据是可以信赖的,从而保证用户进入另一个网站,就好像进入同一个世界的不同地区
  • 一旦 Web3 构建于区块链之上,按照区块链的设计,用户需要有一个数字钱包,它是你在虚拟世界的身份证和银行账户。
  • 你的身份、财产、消费,都通过这个数字钱包来标识。网站通过数字钱包的 ID,来识别你是谁

  • 我翻开谷歌一查,这WEB3.0就没有一个正常的解释, 歪歪斜斜的搜索结果每页上都写着 “去中心化” “分布式” “用户拥有” “区块链” “虚拟经济” “价值重塑” “Token” 几个大词,我横竖睡不着,仔细看了半夜,才从字缝里看出来,满本上都写着两个字“炒币”