
网络编程
文章平均质量分 94
Yi Ian
这个作者很懒,什么都没留下…
展开
-
Redis 的大 Key 对持久化有什么影响
当 AOF 写回策略配置了 Always 策略,如果写入是一个大 Key,主线程在执行 fsync() 函数的时候,阻塞的时间会比较久,因为当写入的数据量很大的时候,数据同步到硬盘这个过程是很耗时的。AOF 重写机制和 RDB 快照(bgsave 命令)的过程,都会分别通过fork()函数创建一个子进程来处理任务。会有两个阶段会导致阻塞父进程(主线程):创建子进程的途中,由于要复制父进程的页表等数据结构,阻塞的时间跟页表的大小有关,页表越大,阻塞的时间也越长;原创 2025-01-11 08:49:35 · 934 阅读 · 0 评论 -
Redis 大 key 的四个问题
大 key 并不是指 key 的值很大,而是 key 对应的 value 很大。一般而言,下面这两种情况被称为大 key:String 类型的值大于 10 KB;Hash、List、Set、ZSet 类型的元素的个数超过 5000个;原创 2025-01-08 12:18:22 · 889 阅读 · 0 评论 -
100万并发用户的分布式频道聊天系统
以上步骤为实现一个高并发、低延迟、可扩展的分布式频道聊天系统提供了完整的设计与实现流程,包括 WebSocket 服务器的实现、频道隔离、消息队列、Redis 管理、负载均衡和容器化部署。原创 2025-01-05 12:55:56 · 1041 阅读 · 0 评论 -
TCP连接中客户端的端口号是如何确定的?
在 TCP 连接中,客户端在发起连接请求前会先确定一个客户端端口,然后用这个端口去和服务器端进行握手建立连接。那么在 Linux 上,客户端的端口到底是如何被确定下来的呢?事实上很多我们平时遇到的问题都和这个端口选择过程相关,如果能深度理解这个过程,将有助于我们对这些问题的深刻理解。Cannot assign requested address 报错是怎么回事?一个客户端端口可以同时用在两条 TCP 连接上吗?还是让我们借助一段简单到只有两句的代码,从这个来讲起!转载 2022-10-02 18:30:00 · 2890 阅读 · 0 评论 -
为什么服务端程序都需要先 listen 一下
icsk->icsk_accept_queue 定义在 inet_connection_sock 下,是一个 request_sock_queue 类型的对象。是内核用来接收客户端请求的主要数据结构。我们平时说的全连接队列、半连接队列全部都是在这个数据结构里实现的。我们来看具体的代码。*/......}我们再来查找到 request_sock_queue 的定义,如下。//全连接队列//半连接队列......};转载 2022-10-04 19:30:00 · 280 阅读 · 0 评论 -
TCP协议的可靠传输原理
从上面的和中,我们都知道TCP是可靠的传输协议,那么TCP协议是怎么样保证可靠性呢?其实要实现可靠性就是要解决等问题?要解决这些基本问题主要是通过TCP协议的等机制实现。原创 2022-09-26 19:00:00 · 1263 阅读 · 0 评论 -
深入理解Linux 网络包发送过程
所以内核的做法就是每次调用网卡发送的时候,实际上传递出去的是 skb 的一个拷贝。对于上小节函数中,当满足真正发送条件的时候,无论调用的是 __tcp_push_pending_frames 还是 tcp_push_one 最终都实际会执行到 tcp_write_xmit。在上面 __igb_open 函数调用 igb_setup_all_tx_resources 分配所有的传输 RingBuffer, 调用 igb_setup_all_rx_resources 创建所有的接收 RingBuffer。...转载 2022-09-16 18:45:00 · 1841 阅读 · 0 评论 -
Linux网络包接收过程
网络模块是Linux内核中最复杂的模块了,看起来一个简简单单的收包过程就涉及到许多内核组件之间的交互,如网卡驱动、协议栈,内核ksoftirqd线程等。看起来很复杂,本文想通过图示的方式,尽量以容易理解的方式来将内核收包过程讲清楚。现在让我们再串一串整个收包过程。当用户执行完recvfrom调用后,用户进程就通过系统调用进行到内核态工作了。如果接收队列没有数据,进程就进入睡眠状态被操作系统挂起。这块相对比较简单,剩下大部分的戏份都是由Linux内核其它模块来表演了。......转载 2022-09-08 19:00:00 · 1343 阅读 · 0 评论 -
深入理解高性能网络开发路上的绊脚石 - 同步阻塞网络 IO
在网络开发模型中,有一种非常易于开发同学使用的方式,那就是同步阻塞的网络 IO。例如我们想请求服务器上的一段数据,那么 C 语言的一段代码 demo 大概是下面这样:但是在高并发的服务器开发中,这种网络 IO 的性能奇差。因为如果用一句话来概括,那就是:同步阻塞网络 IO 是高性能网络开发路上的绊脚石!转载 2022-09-04 13:33:52 · 282 阅读 · 0 评论 -
深入理解 epoll 的内核实现
回想上面第一节我们在 accept 函数创建 socket 流程里提到的 sock_init_data 函数,在这个函数里已经把 sk_data_ready 设置成 sock_def_readable 函数了。在前面 epoll_ctl 执行的时候,内核为每一个 socket 上都添加了一个等待队列项。当 socket 上数据就绪时候,内核将以 sock_def_readable 这个函数为入口,找到 epoll_ctl 添加 socket 时在其上设置的回调函数 ep_poll_callback。....转载 2022-09-12 19:00:00 · 733 阅读 · 0 评论 -
深入理解Linux IO复用之epoll
在linux中IO复用有select,poll, epoll,但epoll是性能最好的,支持的并发量也最大。所以我们就专门来聊聊它。原创 2022-09-20 19:00:00 · 427 阅读 · 0 评论 -
深入理解TCP三次握手四次挥手
两次握手」:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号「四次握手」:三次握手就是最少次数建立可靠连接,所以不需要使用更多的通信次数问题二SYN攻击的基础是依靠TCP建立连接时三次握手的设计。即攻击者短时间伪造不同 IP 地址的SYN报文,向服务端发送该SYN报文,是服务端进入到SYN_RECV状态,但服务端回应的SYN-ACK报文,无法发送到客户端(因为IP是未知的),而得不到ACK报文应答,慢慢的服务端的半连接队列就会给占满了,使其无法正常提供服务。查看SYN攻击。.....原创 2022-08-26 20:00:00 · 1075 阅读 · 1 评论 -
数据链路层详解
数据链路层: 网络层是进行地址管理和路由选择的,它是为数据报的转发找出一条路来,而数据链路层解决的是两个结点直接的数据交换,数接近于物理层的概念。转载 2022-08-17 21:30:00 · 2978 阅读 · 0 评论 -
OSI七层模型及TCP/IP四层模型详细分析
在计算机网络中有OSI七层模型及TCP/IP四层模型的说法,而且也是计算机很重要的知识。下面我们就来分析一下它们:OSI七层模型及TCP/IP四层模型的对比: 从上面两张图我们知道,每层之间是相互独立的,而且完全解耦,具有很大的灵活性。下面我们就详细的分析每层的作用。为操作系统或网络应用程序提供访问网络通信服务的,它以报文的形式进行数据传输。那么它主要包含的协议有哪些呢?域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务,它通常运行在UDP之上,默认端口53。它主要解决I原创 2022-08-19 18:00:00 · 1177 阅读 · 0 评论 -
深入理解 Linux 的 TCP 三次握手
在后端相关岗位的入职面试中,三次握手的出场频率非常的高。其实在三次握手的过程中,不仅仅是一个握手包的发送 和 TCP 状态的流转。还包含了端口选择,连接队列创建与处理等很多关键技术点。通过今天一篇文章,我们深度去了解了三次握手过程中内核中的这些内部操作。全文洋洋洒洒上万字字,其实可以用一幅图总结起来。服务器 listen 时,计算了全/半连接队列的长度,还申请了相关内存并初始化。...转载 2022-10-10 19:15:00 · 360 阅读 · 0 评论 -
TCP与UDP的区别
在计算机中有一个很重要的知识,即计算机网络,那计算机网络有哪些知识点呢?下面给出一个计算机网络神图如下:从图中我们看以看出,OSI的层级结构有七层:应用层,表示层,会话层,传输层,网络层,数据链路层和物理层。但是如果从TCP/IP来看,它就是四层分别是:应用层,传输层,网络层,网络接口层,如下:那么TCP/IP四层模型与OSI体系结构的关系是怎么样的呢?如下:从网络层级关系中我们看到在TCP/IP四层模型的传输层中有两个很重要的协议就是TCP 和 UDP。......原创 2022-08-12 18:45:00 · 290 阅读 · 0 评论 -
linux进程间通信(IPC) -- 管道(pipe)源码分析
所谓管道,是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件,又称pipe文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入管道;而接收管道输出的接收进程(即读进程),可从管道中接收数据。由于发送进程和接收进程是利用管道进行通信的,故又称管道通信。为了协调双方的通信,管道通信机制必须提供以下3方面的协调能力。互斥。当一个进程正在对pipe进行读/写操作时,另一个进程必须等待。同步。httpshttpshttpshttpshttps。...转载 2022-07-29 17:39:55 · 2114 阅读 · 0 评论 -
Python爬虫之requests库
Python爬虫之requests库JSON什么是JSONJSON的特点JSON键/值对语法JSON格式在Python应用HTTP协议HTTP协议对资源的操作http请求头http响应头HTTP状态码requests库requests介绍和安装requests库requests库的应用例子原创 2022-05-27 19:34:59 · 884 阅读 · 1 评论 -
python网络编程
python网络编程啥是网络编程啥是Socket名词解析Python 网络编程网络服务网络重要模块Socket的基本属性和方法原创 2022-05-18 18:25:22 · 1036 阅读 · 0 评论