WebSocket 详解:实时双向通信是如何实现的?

WebSocket 详解:实时双向通信是如何实现的? 前面几篇分别介绍了 TCP/IP、Socket、HTTP 和 HTTPS。 到这里,一个问题自然出现了: HTTP 已经可以完成客户端和服务器之间的通信,为什么还需要 WebSocket? 因为传统 HTTP 的基本模型是: Client │ │ Request ▼ Server │ │ Response ▼ Client 如果服务器想主动通知客户端,就比较麻烦。 例如: 用户收到新消息 订单状态发生变化 股票价格发生变化 游戏状态发生变化 服务器有数据更新,但客户端没有主动发请求。 传统方案只能不断: Client → Server:有新消息吗? Server → Client:没有 Client → Server:有新消息吗? Server → Client:没有 Client → Server:有新消息吗? Server → Client:有 这就是轮询。 WebSocket 的目标就是解决这类问题: Client ⇄ Server 建立连接之后,双方都可以主动发送数据。 RFC 6455 将 WebSocket 定义为一种基于 TCP 的双向通信协议,协议由连接建立握手和数据帧传输两部分组成。 1. WebSocket 到底是什么? WebSocket 是一个应用层通信协议。 它建立在 TCP 之上:...

2023年09月16日 · 7 min · Leanku

Socket 详解:应用程序如何进行网络通信

Socket 详解:应用程序如何进行网络通信 上一篇《TCP/IP 详解:理解互联网通信的基础》文章介绍了 TCP/IP。 我们知道: 应用层 ↓ TCP / UDP ↓ IP ↓ 网络 TCP/IP 负责完成网络通信,但应用程序并不会直接操作 TCP 报文或者 IP 数据包。 应用程序通常通过操作系统提供的 Socket API 来使用网络能力。 因此,如果 TCP/IP 是网络通信的基础,那么 Socket 就是: 应用程序进入网络世界的接口。 对于后端开发来说,理解 Socket 非常重要。 HTTP Server、MySQL、Redis、RPC、WebSocket,以及各种 TCP 长连接服务,底层都离不开 Socket。 1. Socket 到底是什么? Socket 通常翻译为“套接字”。 它不是一个网络协议,而是一种网络通信接口和抽象。 应用程序可以通过 Socket: 创建通信端点 绑定地址 建立连接 发送数据 接收数据 关闭连接 例如 TCP 服务端的典型流程: socket() ↓ bind() ↓ listen() ↓ accept() ↓ read() / write() ↓ close() 客户端则通常是:...

2023年07月18日 · 6 min · Leanku

TCP/IP 详解:理解互联网通信的基础

TCP/IP 详解:理解互联网通信的基础 我们每天都在使用网络。 打开浏览器访问一个网站、使用 SSH 登录服务器、调用 HTTP API、连接 MySQL、使用 Redis,甚至程序之间建立 TCP 长连接,本质上都离不开一套共同的网络通信基础: TCP/IP 协议族。 很多后端开发者知道 TCP、UDP、IP、端口这些概念,但如果把它们放在一起,经常会产生几个疑问: TCP/IP 到底是什么? TCP 和 IP 分别负责什么? IP 地址和端口有什么区别? TCP 为什么需要三次握手? 数据到底是如何从一台机器到另一台机器的? Socket 又处于什么位置? HTTP 和 TCP 又是什么关系? 理解这些问题之后,后面的 Socket、HTTP、HTTPS、WebSocket 才会真正容易理解。 本文不试图把计算机网络所有知识一次讲完,而是从后端开发最需要掌握的角度,建立一套完整的 TCP/IP 基础认知。 1. TCP/IP 到底是什么? 首先需要纠正一个常见认识: TCP/IP 不是一个单独的协议,而是一组用于网络通信的协议族。 TCP/IP Protocol Suite,也就是 TCP/IP 协议族,包含多个不同层次、不同职责的协议。 例如: 应用层 ├── HTTP ├── DNS ├── SMTP └── SSH 传输层 ├── TCP └── UDP 网际层 ├── IP ├── ICMP └── ....

2023年07月10日 · 5 min · Leanku

服务端基础知识

OSI七层模型 层 作用 注 应用层 为程序提供服务 规范数据格式 表示层 数据格式转换,加密 翻译 会话层 建立和管理会话 没有指定协议 传输层 管理端到端之间的连接 TCP协议、UDP协议 网络层 IP地址和路由 IP地址、ARP协议 数据链路层 链路管理 MAC地址、帧 物理层 提供传输环境 网线、WiFi TCP/IP四层模型 层 包含 应用层 应用层、表示层、会话层 传输层 传输层 网络层 网络层 数据链路层 数据链路层、物理层 ARP协议 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。 TCP/UDP协议 TCP和UDP协议是TCP/IP协议的核心。 TCP 传输协议:TCP 协议是一TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用 TCP三次握手 所谓的“三次握手”:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。 为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。 过程 第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。 第二次握手:服务器收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据(可使用抓包工具tcpdump 命令 tcpdump -nn -i eth0 prot 80) TCP四次挥手 对于一个已经建立的连接,TCP使用改进的四次挥手来释放连接(使用一个带有FIN附加标记的报文段)。TCP关闭连接的步骤如下: 第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。 第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。...

2022年12月17日 · 1 min · Leanku