网络编程
QQ276592716
这个作者很懒,什么都没留下…
展开
-
IOCP编程之基本原理
在我的博客之前写了很多关于IOCP的“行云流水”似的看了让人发狂的文章,尤其是几篇关于IOCP加线程池文章,更是让一些功力不够深厚的初学IOCP者,有种吐血的感觉。为了让大家能够立刻提升内力修为,并且迅速的掌握IOCP这个Windows平台上的乾坤大挪移心法,这次我决定给大家好好转载 2011-10-08 15:15:14 · 811 阅读 · 0 评论 -
网络编程:Reactor与Proactor的概念
两种I/O多路复用模式:Reactor和Proactor一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理器。两个与事件分离器有关转载 2013-03-21 21:54:57 · 734 阅读 · 0 评论 -
粘包问题
一两个简单概念长连接与短连接:1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。2.短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点 通讯,比如多个Client连接一个Server. 二 什么时候需要考虑粘包问转载 2013-05-13 20:51:15 · 555 阅读 · 0 评论 -
Linux下的I/O
Linux的I/O机制经历了一下几个阶段的演进:(1)同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。(2)同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。(3)异步阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是I/O操作并不阻塞。通过select/poll/epoll等函数转载 2014-02-21 16:50:18 · 781 阅读 · 0 评论 -
syn flood 原理及防护
一、为什么Syn Flood会造成危害这要从操作系统的TCP/IP协议栈的实现说起。当开放了一个TCP端口后,该端口就处于Listening状态,不停地监视发到该端口的Syn报文,一旦接收到Client发来的Syn报文,就需要为该请求分配一个TCB(Transmission Control Block),通常一个TCB至少需要280个字节,在某些操作系统中TCB甚至需要1300个字节,并返回一转载 2014-02-23 21:09:33 · 1530 阅读 · 0 评论 -
为什么TCP连接需要三次握手分开需要四次握手?
TCP的三次握手和四次断开TCP是一个面向连接的服务,面向连接的服务是电话系统服务模式的抽象,每一次完整的数据传输都必须经过建立连接,数据传输和终止连接3个过程,TCP建立连接的过程称为三次握手,下面看一下三次握手的具本过程TCP三次握手过程1 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,主机A告诉主机B 两件事转载 2014-02-23 16:54:21 · 22451 阅读 · 1 评论 -
网络编程中的reactor与proactor
首先,他们都解决了等待多个事件发生的问题,对多个事件源进行了多路分解。效率上面:reactor在缓冲区与内核的拷贝上面比proactor多了好几次,reactor在事件发生的时候是串行执行的,而proactor支持异步操作。引用别人的一个说法:reactor完成的时候只是告诉你有可读或者可写等消息,proactor已经帮你读到你要的缓冲区里面了。reactor比原创 2014-02-13 20:12:00 · 1008 阅读 · 0 评论 -
浅谈 non-blocking I/O Multiplexing + poll/epoll 的正确使用
在前面的文章中曾经粗略讲过poll,那时是用阻塞IO实现,在发送和接收数据量都较小情况下和网络状况良好的情况下是基本没有问题的,read 不会只接收部分数据,write 也不会一直阻塞。但实际上poll IO复用经常是跟非阻塞IO一起使用的,想想如果现在内核接收缓冲区一点数据没有,read 阻塞了,或者内核发送缓冲区不够空间存放数据,write 阻塞了,那整个事件循环就会延迟响应,比如现在又有转载 2014-03-19 15:36:12 · 880 阅读 · 0 评论 -
Epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:EAGAIN: 再试一次,EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block,perror输出: Resource temporarily unavailable总结:这个错误表示资源暂转载 2014-03-24 17:33:10 · 725 阅读 · 0 评论 -
unix网络编程-第十一章-小结
出于可靠和冗余的目的,必须要设置多个名字服务器解析器使用UDP向本地名字服务器发出查询。如果答案太长,超出了UDP消息的承载能力,本地名字服务器和解析器会自动切换到TCP。不适用DNS也能获取名字和地址信息,用hosts文件。鼓励用getaddrinfo函数替代gethostbyname有些端口号在TCP上面用一种服务,在UDP上面用完全不同的另一种服务。getaddrinfo原创 2012-08-01 20:13:53 · 620 阅读 · 0 评论 -
unix网络编程-十五,十六章-小结
15.unix域协议是在单个主机上执行客户/服务器通信的一种方法,所用的API就是在不同主机上执行客户/服务器通信所用的APIunix域套接字通常比通信两端位于同一个主机的TCP套接字快出一倍unix域套接字可用于在同一个主机上的不同进程之间传递描述符unix域套接字较新的实现把客户的凭证(用户ID和组ID)提供给服务器,从而能够提供额外的安全检查措施。socketpair创建原创 2012-08-14 19:34:33 · 632 阅读 · 1 评论 -
unix网络编程-十二,十三章-小结
12以太网首部中包含的类型字段值为0x0800,它把本以太网帧标识为一个IPv4帧。0x86dd,标识为一个IPv6帧。IPv4模块结合其上的TCP模块检测到IPv4数据报的目的端口对应一个IPv6套接字,于是把该数据报IPv4首部中的源IPv4地址转换成一个等价的IPv4映射的IPv6地址。该连接上其余的数据报同样都是IPv4数据报。一般来说,一个IPv6地址无法表示成一个IPv4地原创 2012-08-06 20:11:27 · 938 阅读 · 0 评论 -
Linux网络编程socket选项之SO_LINGER,SO_REUSEADDR
Linux网络编程中,socket的选项很多.其中几个比较重要的选项有:SO_LINGER(仅仅适用于TCP,SCTP), SO_REUSEADDR. SO_LINGER 在默认情况下,当调用close关闭socke的使用,close会立即返回,但是,如果send buffer中还有数据,系统会试着先把send buffer中的数据发送出去,然后close才返回. SO_L转载 2012-02-24 11:26:51 · 854 阅读 · 0 评论 -
epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:* EAGAIN: 再试一次* EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block* perror输出: Resource temporarily unavailable转载 2012-02-26 11:50:24 · 2428 阅读 · 0 评论 -
epoll下ET模式为何一定要用要用非阻塞的模式~
在ET模式中,对于读写请求,阻塞和非阻塞都可以解决问题。但是,对于accept之类的连接请求就不行了。根本原因我认为是连接是涉及网络双方的交互,比如三次的握手。这样即使epoll已经等待连接事件,但是不能保证能接收到新连接。而recv等数据已经到本机的内核缓冲区了,剩下的都是本机数据的读取操作,是必然可以解决的。终上所述,影响网络双方的操作都该注意是否使用非阻塞模式,在设置相应的套接字原创 2012-02-26 12:01:28 · 2048 阅读 · 0 评论 -
unix网络编程-第七章-小结
套接字选项 通用,IPv4,IPV6,TCP和SCTPfcntl函数,因为它是把套接字设置为非阻塞式I/O型或信号驱动式I/O型以及设置套接字属主的POSIX的方法。套接字选项粗分为两大基本类型:一是启用或者禁止某个特性的二元选项,二是取得并返回我们可以设置或检查的特定值的选项。设置或获取选项有时序上的考虑如果想在三路握手完成时确保这些套接字选项中的某一个是给已连接套接字设置的,那原创 2012-07-07 18:01:21 · 831 阅读 · 0 评论 -
unix网络编程-第八章-小结
使用UDP编写的常用应用程序有:DNS,NFS,SNMP写一个长度为0的数据报是可行的。在UDP情况下,这会形成一个只包含一个IP首部和一个8字节UDP首部而没有数据的IP数据报。UDP是无连接的,也就没有关闭UDP之类的事情。对于一个UDP套接字,如果进程首次调用sendto时它没有绑定一个本地端口,那么内核就在此时为它选择一个临时端口。跟TCP一样,客户可以显示的调用bind,很少原创 2012-07-10 02:03:47 · 534 阅读 · 0 评论 -
unix网络编程-第九章-小结
SCTP中的通知使得一个应用程序能够知晓用户数据到达意外的重要协议事件一对多的形式给应用程序开发人员提供这样的能力:编写的服务器程序无需管理大量的套接字描述符。一到多式的套接字上,用于标识单个关联的是一个关联标识。当一个客户关闭其关联时,其服务器也将自动关闭同一个关联,服务器主机内核不再有该关联的状态。可用于致使在四路握手的第三个或第四个分组中捎带用户数据的唯一办法就是使用一对多形原创 2012-07-11 15:19:22 · 659 阅读 · 0 评论 -
unix网络编程-第五章-小结
最近有个记笔记的习惯,很好~通配地址 INADDR_ANY 捆绑通配地址是在告知系统:要是系统是多宿主机,我们将接受目的地址为任何本地接口的连接。POSIX保证被捕获的信号在其信号处理函数运行期间总是阻塞的。SIGALRM通常是为I/O操作设置超时,这种情况下我们希望受阻塞的系统调用被该信号中断掉。POSIX系统的信号处理总结为:(这部分在unix环境高级编程中记得有讲过,可是忘了原创 2012-07-01 22:36:19 · 1084 阅读 · 0 评论 -
unix网络编程-第六章-小结
I/O复用场合:1.当客户处理多个描述符(通常是交互和网络套接字)时,必须使用I/O复用。2.一个客户同时处理多个套接字是可能得。3.如果一个TCP服务器既要处理监听套接字,又要处理已连接套接字。4.如果一个服务器既要处理TCP,又要处理UDP,一般要用I/O复用。5.如果一个服务器要处理多个服务或者协议。I/O复用并非只限于网络编程,许多重要的应用程序也需要使用这项技术。原创 2012-07-02 22:58:49 · 811 阅读 · 0 评论 -
unix网络编程-第十章-小结
SCTP中的流不同于TCP中的字节流,它是关联内部具有先后顺序的一个消息序列。SCTP的多流特性能够尽可能地减少头部阻塞。希望在发送完一个应答消息后终止一个连接:1.sctp_sndrcvinfo结构的sinfo_flags字段中设置MSG_EOF2.另一种方法是把MSG_ABORT标志应用于sinfo_flags字段。ABORT块导致的是优雅的中止性关闭让客户知晓服务器退出的原创 2012-07-13 11:31:12 · 581 阅读 · 0 评论 -
网络编程:Reactor与Proactor的概念
1、标准定义两种I/O多路复用模式:Reactor和Proactor一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理转载 2015-12-24 01:04:19 · 665 阅读 · 0 评论