
网络
文章平均质量分 53
sdoyuxuan
高产似母猪 一月20篇~ ~
展开
-
epoll高级应用之同时处理 tcp/udp 的服务器
理论同一个 ip+port可以同时的被tcp模块使用也可以同时被udp模块使用。它可以同时处理来自不同请求运输层协议的请求。当不同的数据到达时,应用只需在不同的缓存队列中读取数据即可。图/*server*/#include<stdio.h>#include <unistd.h>#include <fcntl.h>#include <arpa/inet.h>#include <sys/typ原创 2017-09-25 17:58:19 · 808 阅读 · 0 评论 -
epoll
epoll的三个系统调用int epoll_create(int size); 它会创建一个epoll模型在内存中,创建成功后返回该模型的文件描述符。size表最多能注册多少个文件描述符,在Linux 2.6.8 版本之后不在关心。int epoll_ctl(int epfd,int op,int fd,struct epoll_event*event)epfd :epoll模型的文件描述符。原创 2017-07-13 12:54:38 · 578 阅读 · 0 评论 -
服务器与客户端交互状态和socket编程的关系(错误码与socket编程)
正常启动正常交互就是由 connect 函数发起三次握手,三次握手结束后服务器上的对应的连接节点状态为完全连接状态,这个时候放到完全连接队列,服务器调用accept函数从队列中取得节点返回。 正常终止当我们调用close函数,每调用一次对应的socket的引用计数减一,当到0之后内核就会对该连接发送FIN段终止连接SIG_CHLD进程终止的时候会给父进程发SIG_CHLD,这...原创 2018-07-23 00:31:27 · 905 阅读 · 0 评论 -
Thrift 编译报‘uint32_t’ does not name a type
解决方案编译的时候加上HAVE_NETINET_IN_H 宏即可g++ -I SRC/.. SRC/.. -DHAVE_NETINET_IN_H -lthrift -o Server原创 2018-07-31 17:00:31 · 1553 阅读 · 0 评论 -
套接字选项
套接字选项套接字选项是我们网络编程中很重要的一点,有很多方式去设置或者查看一个socket的选项getsocketopt / setsocketoptfcntl ioctlip套接字选项图tcp套接字选项特殊套接字选项有些套接字选项也不是所有的可以直接设置或者查看的,有些选项是需要相应的时机我们才能设置。比如 tcp 的已连接节点(必须得成功...原创 2018-08-05 23:08:24 · 277 阅读 · 0 评论 -
nginx : 500/ 501 / 502 An error occurred
解决方案当我们发生了500 / 501 /502 错误的时候,可能我们配置的nginx的错误页面就是显示这个信息。我们可以看下我们请求的资源是否存在,比如我犯的这个错误就是因为请求CGI时我的这个cgi程序并没有正常运行导致的错误。 ...原创 2018-08-02 16:50:52 · 2318 阅读 · 0 评论 -
Socket条件就绪
读文件描述符就绪当前接受缓冲区的数据量大于SO_RCVLOWAT(接受低水位线,默认1字节)收到FIN段该socket 上产生了一个未处理的errorlisten_socket的完全连接队列有相应的节点读文件描述符就绪发送数据大小大于SO_SNDLOWAT(发送缓冲区低水位线默认2048)半关闭半打开连接,直接再次写入,条件也就绪并触发SIGPIPE(默认半大开半关闭第一...原创 2018-08-12 01:06:47 · 466 阅读 · 0 评论 -
Web性能压测
http_load压测工具 这个工具不适合跑并发量太大的测试,我的机子上最大并发数为4095,因为该程序主要使用的是select进行性能压测,select可载入的文件描述符是有上限的,具体大小为 sizeof(fd_set)*8。还有一个缺点是只支持Get请求 优点是单进程跑压测,不占用系统资源http_load使用方法[yutian@localhost wwwbenchmar...原创 2018-08-30 20:28:42 · 1672 阅读 · 0 评论 -
bind 函数中sockaddr的意义
ip 的意义 对于Client端来说,如果我们绑定了IP表明,这个IP是它的源IP。对于Server端来讲,绑定了IP表明 Server只能接受这个IP上的连接(也就是固定网卡接口了)。 举个列子如果server 绑定的是127.0.0.1 的话,它代表只能接本机的数据包不接受外面发生的数据包,也就是Server绑定127.0.0.1以后,外面client无法连接本地服务器。0 的含义 ...原创 2018-09-18 11:42:08 · 644 阅读 · 0 评论 -
端口复用
端口复用Linux 3.9以上 使用 so_reuseport 选项即可Linux 3.9以下非listen态的端口复用 so_addrreuse 解决listen态的socket 多个进程accept 同一个listen_socket实现端口复用惊群 Linux 2.6以下是有惊群效应,当一个连接到来时,内核会唤醒该listen_socket上调用accept函数的所有...原创 2018-11-27 15:14:22 · 663 阅读 · 0 评论 -
多进程网络模型
代码框架server.c :int main(){ 申请 listensocket while(1) { if((connnectfd = accept(...))==0) { if((childpid == fork())==0) { ...原创 2018-07-08 19:22:37 · 275 阅读 · 0 评论 -
Reactor模式与Proactor模式
ReactorProactorLibevent初识 它主要就是基于Reactor模式的网路库。它把Reactor模式给我们简化,在不同平台下使用不同接口来实现高性能。可能windows下IOCP, Linux下epoll , 有些类Unix系统没有epoll的使用的是 select 。 因为主要它把Reactor做了简化。所以我们直接往Reactor中注册事件然...原创 2018-03-09 18:53:22 · 312 阅读 · 0 评论 -
基于tcp的C/S模型
基于TCP/ip模型下的c/s交互模型tcp网络通信的小知识 1.因为tcp是面向连接的,所以在写基于tcp服务器的代码时,要有listen套接字和accept套接字,而基于udp模型的代码,并且udp客户端直接调用 recvfrom/sendto 直接通信即可,不用调用connect函数,这也分别体现出了它们的特性tcp面向连接,而udp则是无需连接。 2.对于read在网络...原创 2018-02-07 22:52:50 · 5927 阅读 · 0 评论 -
CRC 循环冗余校验
前言 CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式。它通常应用在数据链路层的差错检测。在mac帧中,将原始数据处于除数(生成多项式)把得到的余数叫做FCS(帧校验序列FCS)加到mac帧的尾部。CRC 算法的基本思想是将传输的数据当做一个位数很长的数。将这个数除以另一个数。得到的余数作为校验数据附加到原数据后面。当原数据传输时,当需要检测这个数据是否在传输中出错时,就用除数P进行想用原创 2017-07-02 12:14:26 · 509 阅读 · 0 评论 -
实现一个应用层的定时器T^T
定时器定时器常用于超时重传中,重传有俩种方式一种是快速重传一种是超时重传。这个快速重传指当收到同一个ACK包三次以上则代表丢包了,那么发送端就开始重发丢失的包,这个叫做快速重传RTT。RTO超时重传,这个一般指通过RTT的频率计算出来的一个定时器,只要这个定时器超时了那么我们就启动重传。那么这些机制是底层的机制,也就是系统自己实施的相应机制。那么我们可以自己从应用层上也可以实现重传机制。定时器原创 2017-09-28 13:09:41 · 502 阅读 · 0 评论 -
为什么要Time_wait
Time_wait啊,老哥们肯定会想,time_wait什么鬼? 为毛我主动断开tcp连接。发完最后一个ACK后不能直接断开连接啊,我能做的都做了。但是….. 老铁们你们想一下,ACK丢包是不会重传的,但是FIN呢? 最后被动关闭的一直要是收不到ACK它会怎么想,它肯定认为FIN包丢包了,那怎么样,重发呗。 重发之后呢,如果对端一直不会回复ACK,那么重传一定次数后就会发送重置报文段然后断开连接原创 2017-09-23 17:21:04 · 2773 阅读 · 1 评论 -
tcp的可靠性保证
校验和(校验数据是否损坏);定时器(一定时间内还没收到分组就会重传);序列号(用于检测接受的数据段是否是当前连接的数据段,防止上一连接的延迟数据段到达);确认(接收方告知发送方正确接收分组以及期望的下一个分组);重置(当接受到错误的数据段时会重置连接,错误的数据段指该数据段的序列号非正确序列号);原创 2017-09-16 23:02:53 · 309 阅读 · 0 评论 -
tcp/udp 区别
1.tcp基于连接与udp基于无连接2.对系统资源的要求(TCP较多,UDP少) ,tcp 包头最少20字节,udp只有8字节。3.UDP程序结构较简单4.tcp是基于字节流的,udp是基于数据报的。5.tcp是可靠传输,udp是不可靠传输原创 2017-09-16 22:51:41 · 310 阅读 · 0 评论 -
tcp 的连接队列
连接队列 它指的就是tcp状态节点的队列。tcp 状态分俩种,一种是完全连接状态即(established) , 一种是半连接状态(SYN_SEND 或 SYN_RECV)。 对于服务器来说,listen状态的节点当收到syn同步报文段后,会进行三次握手,当三次握手完成后,就生成一个 established 节点放到完全连接队列中,本质上 listen状态的节点是不负责具体的通信的,它并不接原创 2017-11-30 16:03:02 · 689 阅读 · 0 评论 -
阻塞/非阻塞 I/O 同步与异步
网络I/O模型阻塞I/O模型 阻塞I/O就是,如果I/O条件不就绪的话,那么进程将一直被阻塞住,只有数据到达(I/O条件就绪),进程才从可中断睡眠状态到达就绪态,然后被操作系统调度,然后从函数中返回。非阻塞I/O模型 非阻塞I/O,调用进程并不会被阻塞,当I/O条件不就绪的情况下,它会一直轮询,返回报错EAGAIN,当数据到达后,进行实际的数据I/O。多路复...原创 2017-12-05 19:34:17 · 245 阅读 · 0 评论 -
tcp/ip 详解杂记
滑动窗口 当一个数据段到达时,该数据段最初会被网卡的驱动处理,然后被按序放到ip模块的输入队列中,如果是本机数据,ip层再按序传送给tcp,放置在tcp的接受缓冲区中。 tcp 数据交互过程中,这个是动态的,每次都不一样的,这取决于tcp的接受和发生模块的实现/接受数据的进程,而进程又收操作系统调度的影响,所以每次连接数据交互都是动态的,都是不一样的。 从left 到 right...原创 2018-02-07 22:34:35 · 253 阅读 · 0 评论 -
线程间事件通知
事件通知有的时候我们需要事件通知的场景,比如A线程注册了一个异步的回调,开始处理某些流程,这个时候该处理完毕的都处理完毕了,开始等待回调的结果。B线程进行I/O,I/O完毕进行回调然后填充A线程注册回调时传递的参数。这个时候B线程工作完毕是需要通知A线程,它已经干完毕了A线程可以继续下面的步骤了。那么这个时候就可以进行事件通知了。事件通知方式下面三种方式都可以进行事件通知pipept...原创 2019-01-15 14:31:59 · 1860 阅读 · 0 评论