liwen01 2019.10.24前言UDP协议是User Datagram Protocol的缩写,它是无连接,不可靠的网络协议。一般使用它进行实时性数据的传输,主要是因为它快,但因为它是不可靠的一种传输协议,所以不可避免的会出现丢包现象。本文就具体讨论导致UDP传输数据包丢失的原因以及一些基本的规避方法:路由器转发造成的数据包丢失数据链路层MTU造成的 …
setsockopt
定义用户数据报协议(UDP,User Datagram Protocol),无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。主要特点无连接的,即通信时不需要创建连接(发送数据结束时也没有连接可以释放)所以减小了开销和发送数据前的时延;采用最大努力交付,不保证可靠交付,因此主机不需要维护复杂的连接状态;面向报文,只在应用层交下来的报文前增加了首部后就 …
libevent的bufferevent在event的基础上自己维护了一个buffer,这样的话,就不需要再自己管理一个buffer了。先看看struct bufferevent这个结构体struct bufferevent {struct event_base *ev_base;const struct bufferevent_ops *be_ops;st …
一、TCP连接建立与系统调用基础(一)TCP连接建立过程概述1. 三次握手TCP连接建立是基于三次握手机制。首先,客户端向服务器发送一个带有SYN(同步序列号)标志的数据包,请求建立连接。这个数据包中包含了客户端初始的序列号。服务器收到客户端的SYN包后,会回复一个SYN + ACK包。其中,SYN标志表示服务器也同步自己的序列号,ACK标志是对客户端SYN …
linux服务器开发相关视频解析:linux后台开发之海量、高并发场景下,定时器如何设计5种红黑树的场景,从Linux内核谈到Nginx源码,听完醍醐灌顶网络程序需要处理的第三类事件是定时事件,比如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件,因此有效组织定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑。将每个定时事件分别封装 …
前言c++两个比较好的协程库libgo和libco,本文用纯c的代码实现一个协程ntyco。ntyco源码地址——> gopherWxfNtyCo——>源码里面有注释,本文是对ntyco的整体做一个梳理。如果了解过golang的协程的请注意,golang调度器的策略见→深入理解GMP模型,golang的协程与ntyco的协程不一样,ntyco的调 …
一、线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型。(一)、N:1用户线程模型“线程实现”建立在“进程控制”机制之上,由用户空间的程序库来管理。OS内核完全不知道线程信息。这些线程称为用户空间线程。这些线程都工作在“进程竞争范围”(process contention scope):各 …
Linux网络编程--epoll 模型原理详解以及实例1.简介Linux IO多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。Linux 2.6内核中有提高网络IO性能的新方法,即epoll 。 epoll是什么?按照man手册的说法是为处理大批量句柄而作了改进的poll。要使用epoll只需要以下的三个系统函数调用: epo …
什么是网关服务器初学linux服务器开发时,我们的服务器是很简单的,只需要一个程序完成与客户端的连接,接收客户端数据,数据处理,向客户端发送数据。 但是在处理量很大的情况下,一台机器不能满足我们的需求,此时我们应该怎么办。 我们可以将服务端的任务分摊到多台机器上完成,见下图 从图中可见,此时整个服务端主要分为了三部分。 网关服务器:负责连接客户端与逻辑服务器 …
现在是一个网络时代了。应该不少程序员在编程中需要考虑多机、局域网、广域网的各种问题。所以网络知识也是避免不了学习的。而且笔者一直觉得 TCPIP 网络知识在一个程序员知识体系中必需占有一席之地的。在 TCP 协议中 RST 表示复位,用来异常的关闭连接,在 TCP 的设计中它是不可或缺的。发送 RST 包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓存区 …