随笔分类 -  网络基础

7层网络模型
摘要:OSI是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。 OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 其中高层,即7、6、5、4层定义了应用程序的功能,下面3层,即3... 阅读全文

posted @ 2015-03-18 23:30 kangbry

socket可读可写
摘要:一、 下列四个条件中的任何一个满足时,socket准备好读: 1.socket接收缓冲区中已经接收的数据的字节数大于等于socket接收缓冲区低潮限度的当前值;对这样的socket的读操作不会阻塞,并返回一个大于0的值(即:准备好读入的数据的字节数).我们可以用socket选项SO_RCVLOWAT... 阅读全文

posted @ 2014-11-14 20:54 kangbry

udp协议
摘要:UDP(User Data Protocol,用户数据报协议)1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收... 阅读全文

posted @ 2014-11-12 11:50 kangbry

socket错误
摘要:EINTR: 阻塞的操作被取消阻塞的调用打断。如设置了发送接收超时,就会遇到这种错误。只能针对阻塞模式的socket。读,写阻塞的socket时,-1返回,错误号为INTR。另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。如果recv... 阅读全文

posted @ 2014-11-02 10:42 kangbry

阻塞socket和非阻塞socket
摘要:读操作 对于阻塞的socket,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返回。当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数。当sockt的接收缓冲区中的数据大于期望读取的字节数时,读取期望读取的字节数,返回实际读取的长度。 对于... 阅读全文

posted @ 2014-11-01 22:39 kangbry

select模型
摘要:在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: 1) 我们所关心的文件描述符 2) 对每个描述符,我们所关心的状态。(我们是要想从一个文件描述符中读或者写,还是关注一个描述符中是否出现异常) 3) 我们要等待多长时间。(我们可以等待无限长... 阅读全文

posted @ 2014-10-31 21:55 kangbry

socket选项
摘要:当调用closesocket关闭套接字时,SO_LINGER将决定系统如何处理残存在套接字发送队列中的数据。处理方式无非两种:丢弃或者将数据继续发送至对端,优雅关闭连接TCP_NODELAY: 表示立即发送数据.SO_RESUSEADDR: 表示是否允许重用Socket 所绑定的本地地址.SO_TI... 阅读全文

posted @ 2014-10-20 22:57 kangbry

iocp,epoll编程
摘要:约定: 等待事件处理完毕后,才重新投递下一个异步操作on_recv事件epoll和iocp一样处理,都只关注可读事件iocp 可以读事件on_recv->修改m_b_posting_recv正在递收数据标记为false->判断是否在收数据m_b_recving(不要同时调多个recv)->将之前缓冲... 阅读全文

posted @ 2014-10-20 22:39 kangbry

tcp 三次握手/四次挥手/状态变迁
摘要:http://blog.chinaunix.net/uid-22312037-id-3575121.html1 序号: seq 序号 用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记2 确认序号: ack序号, 只有ack标志位为1时, 确认序列号才有效 ack = seq +... 阅读全文

posted @ 2014-04-13 20:22 kangbry

服务器基本知识
摘要:一 负载均衡负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到服务器列阵,籍此提供快速获取重要数据,解决大量并发访问服务问题。 两种含义:1 单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高,这就是常说的集群(clustering)技术。2 大量的并发访问或数据流量分担到多台节点设备上分别处理,减 阅读全文

posted @ 2014-04-09 10:24 kangbry

Reactor和Proactor
摘要:http://www.cnblogs.com/dawen/archive/2011/05/18/2050358.html两种I/O多路复用模式:Reactor和Proactor一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理器。两个与事件分离器有关的模式是Reactor和Proactor。Reactor模式采用同步IO,而Proa 阅读全文

posted @ 2014-04-02 22:09 kangbry

libevent学习 事件主循环
摘要:libevent的事件主循环主要通过event_base_loop()函数完成 开始 -> 如果发现系统时间被向后调整,校正系统时间 -> 根据timer heap中event的最小超时事件计算系统i/o demultiplexer的最大等待时间 -> 更新last wait time 清空time cache -> 调用i/o demultiplexer等待就绪的i/o events -> 检查signal的激活标,如果被设置,则检测激活signal event,并把event插入到激活链表中 -> 将就绪的i/o event插入到激活链表中 -> 阅读全文

posted @ 2014-04-02 21:53 kangbry

libevent学习 事件流程
摘要:使用libevent设置定时器1 首先应用程序准备并初始化event,设置好事件类型和回调函数 a. evet_init() 初始化libevent库 相当于初始化一个Reactor实例 b. event_set()设置回调函数和关注的事件 c event_base_set() 设置event从属的event_base2 向libevent添加该事件event,对于定时事件,libevent使用小根堆管理,key为超时时间,对于信号量和i/o事件,libevent将其放入到等待链表中,是一个双向链表结构 a event_add 添加事件 相当于Reactor::register_handler 阅读全文

posted @ 2014-04-02 21:33 kangbry

libevent学习 Reactor模式
摘要:Reactor逆置了事件处理流程, 应用程序需要提供相应接口注册到Reactor上,如果相应的事件发生,Reactor将主动调用应用程序注册的接口Reactor模型框架组件:事件源,Reactor框架,多路复用机制和事件处理程序事件源: linux是文件描述符 windows是socket或者handle,统称句柄集, 程序在指定句柄上注册关心的事件event demultiplexer -- 事件多路分发机制:由操作系统提供的i/o多路复用机制,比如select和epoll.程序首先将关心的句柄及其事件注册到event demultiplexer上,当有事件到达时,event demulti 阅读全文

posted @ 2014-04-02 20:33 kangbry

iocp/epoll/select
摘要:1.iocp是在io操作完成之后,才通过get函数返回这个通知,epoll的工作原理是你想进行io操作时,先向epoll查询是否可读或者可写,如果处理可读或者可写状态后,epoll会通过epoll_wait的函数通知你2.iocp,epoll二者都可以通过指针携带应用层数据,当事件通知到来时,系统不... 阅读全文

posted @ 2012-10-10 18:05 kangbry 阅读(319) 评论(0) 推荐(0)

iocp模型
摘要:主要api a. 创建完成端口 HANDLE WINAPI CreateIoCompletionPort( HANDLE FileHandle, HANDLE ExistingCompletionPort, ULONG_PTR CompletionKey DWORD NumberOfConcurr... 阅读全文

posted @ 2012-10-10 16:05 kangbry 阅读(617) 评论(0) 推荐(0)

epoll模型
摘要:1. 主要函数 a. epoll_create(int size) a) 创建epoll句柄,size告诉内核监听数目的大小 b) 返回一个epoll专用的文件描述符b. epoll_ctl(int epfd,int op,int fd,struct epoll_event* event) a) 控... 阅读全文

posted @ 2012-10-10 14:04 kangbry

ip服务
摘要:ip提供不可靠,无连接的数据报传送服务不可靠 a. 不能保证ip数据报能成功到达目的地无连接 a. 不维护任务关于后续数据报的状态信息ip数据报格式(不包括可选字段20个字节) a. 4位版本 4位首部长度 8位服务类型 16位总长度 b. 16位标识 3位标志 13位片偏移 c. 8位生存时间 8位协议 16位首部检验和 d. 32位源ip地址 e. 32位目的ip地址ip数据报 a. 服务类型包括 3bit优先权子字段,4bit的TOS子字段,1bit未用位但需置0,4bit的TOS分别表示 最小时延,最大吞吐量,最高可靠性,最小费用 b. 标识字段唯一地标识主机发送的每一份数据报,通常每 阅读全文

posted @ 2012-10-08 17:06 kangbry 阅读(203) 评论(0) 推荐(0)

tcp服务
摘要:tcp提供面向连接,可靠的字节流服务tcp面向连接 a. 两个tcp应用端在彼此交换数据前须建立tcp连接tcp可靠性 a. 应用数据被分割成适合tcp的数据块,tcp传递给ip的信息单位称为报文段 b. tcp发出一个段后,启动定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段 c. tcp收到发自tcp连接另一端的数据,它将发送一个确认,这个确通常推迟几分之一秒 d. tcp保持它首部和数据的效验和,这是一个端到端的检验和,目的是检测数据在传输过程中的变化,如果收到段的检验和有差错,tcp将丢弃这个报文段和不确认收到此报文段e. tcp报文段到达可能失序,如有 阅读全文

posted @ 2012-10-08 17:05 kangbry 阅读(295) 评论(0) 推荐(0)

socket基本函数 (三)
摘要:9. 地址转换函数 在socketaddr_in结构中,sin_addr用来指定主机地址.它的类型是in_addr结构. in_addr结构定义为: struct in_addr{ union{ struct {u_char s_b1,s_b2,s_b3,s_b4;} S_un_b;struct {u_short s_w1,s_w2;} S_un_w; u_long S_addr; }S_un; }; unsigned long inet_addr(const char FAR* cp); 将点分十进制格式的IP地址转换为in_addr结构的地址. char FAR* inet_ntoa(st 阅读全文

posted @ 2012-02-27 01:02 kangbry 阅读(215) 评论(0) 推荐(0)

导航