网络通信
文章平均质量分 60
游戏猫
多年游戏开发经验,在这里分享经验和心得
展开
-
libevent源码分析之时间管理和定时器
一、概述libevent提供了高性能定时器的功能,方便执行延迟回调逻辑。二、基本实现原理在添加事件监听的时候,可以不指定fd和监听的事件,指定超时的时间,实现定时器功能。定时器的底层实现包含两个部分:最小堆:按事件的超时时间构造,超时时间最早的在堆顶。通用超时队列:这个可以个性化设置每个队列的超时时间,添加事件时时间相同的放到同一个队列里,在最小堆里只添加一个队列首部的事件到最小堆。能避免大量事件都放到最小堆,导致最小堆添加、删除时性能变差的问题。三、最小堆实现最小堆的实现采用了典型的数原创 2021-01-25 01:32:37 · 660 阅读 · 0 评论 -
libevent源码分析之IO多路复用
一、IO多路复用概念IO多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞,挂起线程,直到阻塞超时。二、libevent的IO多路复用应用libevent支持多种IO多路复用机制,保障了跨平台和性能。支持的IO多路复用包括:机制平台selectunix、linuxwin32selectwinpollunix、linuxepollunix、linuxkqu原创 2021-01-24 18:50:12 · 406 阅读 · 1 评论 -
libevent源码分析之Reactor模式
一、概述libevent使用了Reactor模式,实现了高效的事件驱动机制。二、Reactor定义1、Reactor是一种事件驱动机制。应用程序不是主动的调用某个系统API完成处理,Reactor逆置了事件处理流程,应用程序注册回调函数到Reactor上,如果相应的事件(比如读、写、错误)发生,Reactor将回调应用程序注册的接口。2、Reactor结构五个关键的参与者:描述符(handle):由操作系统提供,用来识别每一个事件,如socket描述符、文件描述符等。同步事件分离器(demul原创 2021-01-23 18:03:44 · 487 阅读 · 1 评论 -
libevent源码分析之目录结构说明
一、概述1、目录分类:头文件:分为提供给外部使用的头文件和内部使用的头文件。reactor框架:包括事件的定义、事件的监听和触发、定时器功能。io多路复用封装:包括select、poll、epoll、iocp、kqueue等。socket、收发缓冲区封装:网络缓冲区evbuffer实现,bufferevent管理了socket和网络缓冲区。基础数据结构:链表、最小堆、红黑树、哈希表等。dns、http库:基于libevent实现。其他:辅助功能函数、日志。2、具体文件说明1)原创 2021-01-17 07:47:20 · 248 阅读 · 0 评论 -
libevent源码分析之概述
一、libevent特性libevent是一个轻量级的开源高性能网络库,应用广泛。比如大家比较熟悉的memcached、chrome等。Libevent具有以下优点:事件驱动,高性能轻量级,专注于网络跨平台,在主流操作系统上都能运行。可扩展性,考虑各种使用的情景,提供良好的性能。方便可靠,只需要调用少量的libevent接口就能使用很好地使用libevent库。二、libevent主要功能libevent采用了Reactor反应堆模式。具备reactor模式响应快、编程简单、可扩展、原创 2021-01-11 03:09:49 · 418 阅读 · 0 评论 -
网络缓冲区的4种实现方法
一、概述网络缓冲区用于缓冲待发送的数据或接收了待处理的数据,发送缓冲区可以积累一定量的数据再发送,接收缓冲区可以积累一定量的数据,解决粘包导致的没有收到完整的数据包,缓冲起来等包数据完整了再提交给业务逻辑处理。二、实现方案根据我的经验,这里将介绍四种实现机制,包括单块连续内存缓冲,环形缓冲,环形分块缓冲,链表分块缓冲。1. 单块连续内存缓冲单块连续缓冲是最简单地实现机制。这种方案采取一块连续的内存来作为缓冲区,随着数据的写入和读取,有效数据块会逐渐往后移动,在合适的时机把整块有效数据移动到头部。如原创 2020-11-06 01:15:04 · 3353 阅读 · 0 评论 -
Enet实现原理
一、Enet简介在UDP(用户数据报协议)的基础上提供一个相对薄,简单且健壮的网络通信层,它的主要功能是可选的可靠,按顺序传送数据包。Enet省略了某些更高级别的网络功能,例如身份验证,服务发现,加密或其他特定于应用程序的类似任务,因此该库保持灵活,可移植且易于嵌入。二、为啥需要EnetTCP不支持多信道TCP需要用户自己处理粘包问题UDP不支持排序,连接管理,带宽资源管理,数据包的大小有限制Enet实现了基于单一UDP,具有UDP和TCP等价功能,但比同时集成UDP和TCP更干净的统一原创 2020-07-02 20:50:08 · 7556 阅读 · 0 评论 -
网络术语汇总
链路层:MTU(Maximum Transfer Unit) 最大传输单元以太网中的一般为1500字节网络层:TTL(Time To Live)限制了IP包被路由器丢弃之前允许通过的跳数,最大255。传输层:MSS(Maximum Segment Size) 最大报文段大小TCP的报文段中的数据部分的最大字节数,MTU减去IPv4包头和TCP的包头,一般MSS=1500-20-20 = 1460字节RTT(Round-Trip Time)从发送端发送数据开始,到发送端收到来自接收原创 2020-05-24 23:51:37 · 516 阅读 · 0 评论 -
IO多路复用之select详解
一、select用户select是 I/O多路复用系统函数,用来等待文件描述符状态的改变。它会一直阻塞,直到一个或多个文件描述符集合称为就绪态或者指定一个超时时间。它不适合文件数量庞大、I/0流量频繁的时候,它会随着fd的数量增大性能下降明显。二、接口windows定义:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout)linux定义:原创 2020-05-22 01:55:04 · 1394 阅读 · 0 评论 -
Linux网络指令汇总
1、ifconfig 显示网卡信息2、ping 查看与目标机器的网络是否通畅,还可以用来测试丢包率,延迟ping 192.168.0.13、telnet 看是否可以连上目标机器和端口telnet 127.0.0.1 804、traceroute 查看到目标机器的路由信息traceroute www.baidu.com5、curl 访问一个http地址,获得返回结果curl ...原创 2019-07-30 11:20:04 · 170 阅读 · 0 评论 -
TCP协议头分析
1、TCP是什么TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。2、TCP协议头3、各字段含义TCP源端口(Source Port):16位的源端口,表示发送方应用程序的端口。源端口和源IP地址标示报文发送端的地址。TCP目的端口(Destination port):16位的目的端口,指明报文接...原创 2019-03-27 15:08:45 · 713 阅读 · 0 评论 -
流量控制和拥塞控制的区别
TCP的流量控制和拥塞控制一、提要1、TCP的流量控制和拥塞控制看上去是两个比较相近的概念,容易产生混淆。但事实上,他们在期望的目标和使用的方法是完全不同的。2、流量控制解决的是发送方和接收方速率不匹配的问题,发送方发送过快接收方就来不及接收和处理。采用的机制是滑动窗口的机制。3、拥塞控制解决的是避免网络资源被耗尽的问题,通过大家自律的采取避让的措施,来避免网络有限资源被耗尽。想想BT,利用UDP...原创 2018-09-23 01:09:41 · 21084 阅读 · 0 评论 -
修改socket的发送缓存区
vi /etc/sysctl.conf cat /proc/sys/net/core/rmem_max sysctl -p原创 2018-07-05 12:44:43 · 950 阅读 · 0 评论 -
TCP建立连接和断开连接流程
一、基本描述TCP协议为提供面向连接的服务,需要先建立连接,然后才可以通信,通信结束时,需要断开连接。二、建立连接流程建立连接的过程也叫做三次握手,流程如下:1、首先,一定是由客户端发起连接请求,服务端来接收连接请求。客户端发起连接请求后,会先给服务端发送一个SYN包。2、服务端收到SYN包,会回复SYN的ACK,同时再回复SYN,但SYN和ACK是一起...原创 2016-12-26 19:32:45 · 9391 阅读 · 0 评论 -
TCP的ACK原理和延迟确认机制
一、ACK定义TCP协议中,接收方成功接收到数据后,会回复一个ACK数据包,表示已经确认接收到ACK确认号前面的所有数据。ACK字段长度为32位,能表示0~2^32-1之间的值。二、ACK作用发送方在一定时间内没有收到服务端的ACK确认包后,就会重新发送TCP数据包。发送方收到了ACK,表明接收方已经接收到数据,保证了数据的可靠达到。三、ACK机制接收方在接收到...原创 2016-12-27 20:27:37 · 18347 阅读 · 0 评论 -
Nagle算法遇上延迟ACK
转自 http://www.cnblogs.com/wanpengcoder/p/5366156.html1. Nagle算法:是为了减少广域网的小分组数目,从而减小网络拥塞的出现;该算法要求一个tcp连接上最多只能有一个未被确认的未完成的小分组,在该分组ack到达之前不能发送其他的小分组,tcp需要收集这些少量的分组,并在ack到来时以一个分组的方式发送出去;其中小分组的定义是小于MSS的任何分组转载 2017-01-04 19:56:13 · 702 阅读 · 0 评论 -
基本类型序列化和反序列化
基本类型序列化和反序列化TypeDef.h源码#pragma once#include "stdafx.h"typedef bool Bool;typedef unsigned char Byte;typedef char SByte;typedef short Int16;typedef unsigned short UInt16;typedef int Int32;typedef原创 2016-12-23 14:13:49 · 1573 阅读 · 0 评论 -
P2P打洞原理
一、P2P时,为何需要打洞?两个局域网内的客户端没法直接连接,通过打洞可以实现两个局域网内的客户端间通信。二、基础知识介绍1、两个内网的客户端没法直接建立通信,需要公网上的服务器来协助2、内网客户端和公网服务器通信时,会经过路由器,再到达公网服务器3、公网服务器和内网客户端通信时,也会经过路由器,再达到内网客户端4、路由器具有NAT功能,即网络地址转换功能,实现内网地址、端口和公网地址、端口的转换5原创 2016-12-23 14:08:07 · 1285 阅读 · 0 评论