Linux网络编程
文章平均质量分 80
响箭零零一
这个作者很懒,什么都没留下…
展开
-
websocket服务器实战
学习websocket首先需要关注websocket的由来以及一些使用场景。首先是因为http在通信的时候存在缺陷,只能由客户端发起请求,服务器响应,造成服务器没办法主动推送消息,客户端需要轮询带来效率上的问题。websocket诞生于2008年,2011年成为国际标准目前所有浏览器都支持websocket,用于建立服务器与客户端的对等通信,通信的发起方可以是客户端也可以是服务器,使得服务器可以主动推送相关信息。标准协议的学习绕不开的就是RFC文档【RFC6455】的学习,首先对于websocket的协议格原创 2022-06-09 22:05:19 · 1970 阅读 · 0 评论 -
UDP用户态协议栈详细实现
网络协议栈网卡,利用netmap利用mmap将网卡数据映射到内存。是一个零拷贝的过程,主要是是指没有经过cpu操作,这里主要是是利用DMA完成的。网络数据加入ringbuffer,一种叫轮询,第二叫事件处理数据。大数据采用轮询,间歇性字符适合事件。...原创 2021-12-05 22:36:18 · 2684 阅读 · 0 评论 -
Ubuntu16.04编译netmap-终极解决方案
Ubuntu16.04编译netmap-终极解决方案1 前言2 环境准备3 netmap下载4 编译5 网卡名称修改6 测试1 前言最近想着自己实现用户态网络协议栈,需要依赖netmap获取底层网卡数据,一般这种三方库编译都是很easy的,我也是抱着这个思想结果遇到很多坑,这里记录一下希望可以给后面的人提供一些参考。2 环境准备首先更新一下源:sudo apt-get update安装依赖库,netmap需要依赖内核的头文件,这里需要提前安装一下apt-get install -y li原创 2021-11-30 17:13:21 · 1683 阅读 · 0 评论 -
协程原理与实现-高并发低内存
1 协程的运用场景在网络高并发的场景下,epoll作为解决方案的首选,基本可以达到C1000K甚至更好的并发量,但是由于需要依靠线程进行异步的回调操作,在一定意义上资源的开销并没有降低,另一方面异步操作带来的问题就是整体复杂度大大提高。协程就是为了解决上述的问题,同步的编程方式,达到异步的性能,最重要的是资源的开销更是小于多线程。3 协程原理协程包括几大部分组成,一个是协程本身,第二个是协程的调度器,第三是协程的切换。整体过程就是当协程创建完成之后,将协程加入到调度器统一进行管理,执行协程是由统一的调原创 2021-11-27 15:49:22 · 535 阅读 · 0 评论 -
KCP源码走读
前言KCP作为一个比较轻量级的UDP可靠数据传输协议,在参照TCP拥塞控制的基础上实现了ARQ的功能。走读源码了解启动的原理,对于UDP可靠传输设计具有借鉴意义。1 整体数据流KCP整体数据流程由四个缓冲队列来完成,数据在缓冲队列进行迁移:其中队列都是排序的,其中接收队列接收的数据必须是联系的,也就是可靠的。2 接收流程2.1用户层从KCP接收数据:用户最终读取一帧数据。int ikcp_recv(ikcpcb *kcp, char *buffer, int len);{ //1. 计算原创 2021-11-24 21:17:19 · 732 阅读 · 0 评论 -
UDP如何实现可靠传输
1 可靠性传输1.1 如何保证可靠性?ACK机制重传机制 重传策略序号机制重排机制窗口机制1.2 ARQ重传时机(1)发送方没有收到ack请求重传;(2)接收方收到的序号有缺失;停等协议每一帧需要等回复后再发送回退N帧重传中间存在丢包后,从丢包位置重传后面所有包选择性重传只重传丢失的包;1.3 RTT和RTORTO:定时器超时时间tcp超时计算:RTO2,练习丢包三次之后变成RTO8,延迟非常大。RTT:网络往返时延1.3 流量控制控制发送方发送速率,称之原创 2021-11-21 21:44:59 · 15123 阅读 · 2 评论 -
POSIX 网络API原理
1 posixAPItcp serversocketbindlistenacceptrecvsendclosetcp clientsocketbind(opction)connectsendrecvclosesocket:创建fd和tcb(tcp control block)网络五元组(remoteip,remotepport,localip,localport,proto)bind:接收或者发送数据,用来填充本机的ip和端口。listen:三次握手,发生在哪一个原创 2021-11-19 20:55:05 · 2149 阅读 · 0 评论 -
企业级TCP处理要点-epoll编程
1 Epoll编程要点1.1 连接建立服务器接收客户端连接:接收过程分为两个步骤首先是服务器注册监听listenfd;第二步是服务接收客户端连接clientfd;所有的socket都是利用epoll_ctl交由epoll进行管理 epfd = epoll_create(10);// 1. 注册监听 listenfd 的读事件struct epoll_event ev = {0, {0}};ev.events |= EPOLLIN;epoll_ctl(epfd, EPOLL_CTL_A原创 2021-11-18 11:58:45 · 1601 阅读 · 0 评论 -
企业级TCP处理要点-网络IO
1 梳理reactor网络编程1.1 连接建立客户端连接服务器,服务器连接第三方服务(数据库);全连接队列:int clientfd = accept(listenfd, addr, sz);int connectfd = socket(AF_INET, SOCK_STREAM, 0);connect(connectfd, (struct sockaddr *)&addr, sizeof(addr));1.2 连接断开主动断开: close shutdown被动断开:read返回值原创 2021-11-18 11:06:17 · 629 阅读 · 0 评论 -
Reactor实战-百万TCP连接
水平触发:小数据listenfd:水平触发边缘触发:数据量比较大分界点:取决于,一次性能否读完数据:一次读完小数据;否则是大数据修改fd数量:ulimit -a协议栈:/etc/sysctl.cofnet.ipv4.tcp_mem = 262144 524288 786432net.ipv4.tcp_wmem= 1024 1024 2048net.ipv4.tcp_rmem = 1024 1024 20481 100listenfd, 分别放在不同的线程2 监听一个端口:88原创 2021-11-17 20:55:28 · 690 阅读 · 0 评论 -
Linux命令进阶-cpu监控内存监控文件IO网络IO性能分析
#Linux命令http://www.brendangregg.comgrepwcscp2 cpu性能top:CPU占用率100%,并不是所有CPU的占用率100%。可能是某个cpu占用率。3 内存4 网络io原创 2021-11-10 20:45:03 · 2352 阅读 · 0 评论 -
网络-IO复用篇
前言IO多路复用的基本用法优势在于:可以等待多个描述符就绪。在网络服务器编程中,IO多路复用目前是最常用的手段。1 select模型1.1 基本语法select是一种典型的bit map管理模式,利用bit位来判断当前集合中IO是否就绪。select函数有五个参数都比较重要。#include<sys/select.h>#include<sys/time.h>int select(int maxfd, fd_set *readset, fd_set *writeset,原创 2021-11-05 21:06:57 · 335 阅读 · 0 评论 -
Linux网络IO基础组件实现
这里写目录标题1 理论基础组件1.1 Epoll模型概述1.1.1 Epoll模型对比Select/poll模型的优势1.1.2 Epoll基本用法1.1.3 Epoll触发方式2 基本实现2.1 Socket管理组件2.1.1 soket监听2.1.2 socket连接2.1.1 soket2.2 Epool事件处理组件1 理论基础组件1.1 Epoll模型概述1.1.1 Epoll模型对比Select/poll模型的优势(1)Epoll可以使用的最大描述符个数将以线性的关系仅仅依赖于内存(2)原创 2021-09-20 17:48:38 · 89 阅读 · 0 评论