NO WAY OUT | 无往不前


  • 首页

  • 分类

  • 欧拉计划

  • ARTS计划

  • 归档

  • 标签

  • 关于

  • 搜索

TCP 的粘包拆包以及解决方案

发表于 2021-08-23 | 分类于 网络 | | 阅读次数:

TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。即面向流的通信是无消息保护边界的。

TCP 底层并不了解上层业务数据的具体含义,它会根据 TCP 缓冲区的实际情况进行包的划分,所以在业务上认为一个完整的包可能会被 TCP 拆分为多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是 TCP 粘包 和 拆包。

阅读全文 »

一文彻底搞懂 TCP 三次握手、四次挥手过程及原理

发表于 2021-08-20 | 分类于 网络 | | 阅读次数:

TCP 协议简述

TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。
无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,连接是通过 三次握手 进行初始化的。
同时由于 TCP 协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP 是 全双工模式,所以需要 四次挥手 关闭连接。

阅读全文 »

Redis 持久化机制

发表于 2021-08-15 | 分类于 Redis | | 阅读次数:

Redis 是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失。幸好 Redis 还为我们提供了持久化的机制,分别是 RDB(Redis DataBase) 和 AOF(Append Only File)。

持久化流程

Redis 的数据持久化就是可以将数据保存在磁盘上,主要有下面五个过程:

(1)客户端向服务端发送写操作(数据在客户端的内存中)。

(2)数据库服务端接收到写请求的数据(数据在服务端的内存中)。

(3)服务端调用 write 这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中)。

(4)操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中)。

(5)磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上)。

阅读全文 »

Zookeeper 实现消息队列

发表于 2021-08-12 | | 阅读次数:

Zookeeper 实现配置中心

发表于 2021-08-12 | | 阅读次数:

Zookeeper 实现注册中心

发表于 2021-08-12 | | 阅读次数:

Zookeeper 实现分布式事务

发表于 2021-08-12 | | 阅读次数:

Zookeeper 实现分布式锁

发表于 2021-08-12 | | 阅读次数:

Zookeeper 实现负载均衡

发表于 2021-08-12 | | 阅读次数:

WebRTC 中的 RTP 及 RTCP 介绍

发表于 2021-08-12 | 分类于 WebRTC | | 阅读次数:

WebRTC 技术是激烈的开放的 Web 战争中一大突破。- Brendan Eich, inventor of Java

UDP 还是 TCP?

如果抛开 WebRTC,让你自己实现一套实时互动直播系统,在选择网络传输协议时,你会选择使用 UDP 协议还是 TCP 协议呢?

这个问题在 2011 年至 2012 年一直是一件困扰着我们整个团队的大事儿,因为当时在国内很少有用 UDP 作为底层传输协议的。UDP 虽然传输快,但不可靠,尤其是在用户的网络质量很差的情况下,基本无法保障音视频的服务质量。

当时能想到的解决方案是,如果采用 UDP 作为底层传输协议,那就使用 RUDP(可靠性 UDP),只有这样才能保障传输过程中不丢包。但有人提出反对意见,认为如果想不丢包,就该使用 TCP,因为 RUDP 可靠性做到极致就变成 TCP 了,那为什么不直接使用 TCP 呢?

面对这种情况,2019 年的你会做何种选择呢?UDP 还是 TCP?你能拿出让人真正信服的理由吗?

现在让我告诉你正确答案:必须使用 UDP,必须使用 UDP,必须使用 UDP,重要的事情说三遍。

阅读全文 »
123…6
xiaolong

xiaolong

51 日志
18 分类
62 标签
RSS
GitHub Twitter weibo LinkedIn
© 2017 — 2021 xiaolong
since 2017