
网络编程
hai0808
这个作者很懒,什么都没留下…
展开
-
实例浅析epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO
一.基本概念 我们通俗一点讲:Level_triggered(水平触发):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据一次性全部读写完(如读写缓冲区太小),那么下次调用 epoll_wait()时,它还会通知你转载 2016-10-31 10:39:03 · 7747 阅读 · 5 评论 -
DPDK 全面分析
PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家。高性能网络技术随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁平化的网络结构到基于 SDN 分层的网络结构,无不体现出这种创新与融合。这在使得网络变得更加可控制和成本更低的同时...转载 2018-05-17 09:53:09 · 2351 阅读 · 0 评论 -
VPP源码架构介绍
VPP架构:VPP介绍VPP:(the vector packet processor)是一个可扩展框架,可提供开箱即用的交换机/路由器功能。是Linux基金会下开源项目FD.io的一个子项目,由思科贡献的开源版本,目前是FD.io的最核心的项目。 VPP实现的优点是其高性能,成熟的技术,其模块化和灵活性以及丰富的功能集。 VPP技术基于成熟的技术,据说支撑了超过十亿美元的思科产品。它的模块化设计...转载 2018-05-17 09:58:39 · 2952 阅读 · 0 评论 -
epoll_wait被signal信号中断时的处理
#include <iostream>#include <map>#include <signal.h>#include "util/vl_netutil.h"using namespace std;using namespace SNL;#define DEL_CLOSE(mapOffset,iEpollFD,iCurFD,ev) epoll_ctl( iE...转载 2018-05-28 13:25:44 · 4375 阅读 · 0 评论 -
epoll_wait被signal信号中断时的处理
libevent 用fd事件来通知epoll_wait,处理事件。epoll_wait在信号处理后,会返回-1 ,错误码为EINTR,直接return 0nginx用全局变量来通知进程,epoll_wait在信号处理后,会返回-1 ,错误码为EINTR,在主循环里处理事件...原创 2018-05-28 14:58:02 · 2897 阅读 · 0 评论 -
tcpdump命令
抓取包详情-nnA$ tcpdump -i eth0 -nnA 'port 80 and src host 192.168.1.231'抓取本地网络间通信sudo tcpdump -i lo -nnA host 127.0.0.1 and port 31004sudo tcpdump -i lo -vvvnnAX host 127.0.0.1 and port 31004 ...原创 2018-06-05 20:27:33 · 463 阅读 · 0 评论 -
再谈应用环境下的TIME_WAIT和CLOSE_WAIT
昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下:http://blog.youkuaiyun.com/shootyou/article/details/6615051里头的分析过程有提到,通过查看服务器网络状态检测到服务器有大量的CLOSE_WAIT的状态。 在服务器的日常维护过程中,会经常用到下面的命令: netstat -n | awk '/^tcp/ ...转载 2018-07-20 09:53:31 · 264 阅读 · 0 评论 -
epoll示例(水平触发)
#include<stdio.h>#include<unistd.h>#include<sys/epoll.h>struct t_connection{ int fd; void *(*call)(t_connection*);};void* f(t_connection* c){ char bu...原创 2018-11-21 16:59:51 · 448 阅读 · 0 评论 -
epoll示例(边沿触发)
#include<stdio.h>#include<unistd.h>#include<sys/epoll.h>struct t_connection{ int fd; void *(*call)(t_connection*);};void* f(t_connection* c){ char bu...原创 2018-11-22 10:14:32 · 340 阅读 · 0 评论 -
TCP可靠性的保证机制总结
TCP保证可靠性主要依靠下面7种机制: 1、检验和 TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首部,检验范围包括TCP首部及数据部分,但是UDP的检验和字段为可选的,而TCP中是必须有的。计算方法为:在发送方将整个报文段分为多个16位的段,然后将所有段进行反码相加,将结果存放在检验和字段中,接收方用相同的方法进行计算,如最终结果为检验字段所有位是全1则正确(UDP中为0是正...转载 2019-02-26 10:16:17 · 250 阅读 · 0 评论 -
curl测试返回时间
curl测试返回时间curl -o /dev/null -s -w '%{time_connect}:%{time_starttransfer}:%{time_total}\n' 'www.baidu.com'&原创 2018-03-26 16:20:39 · 2804 阅读 · 0 评论 -
Linux下使用popen()执行shell命令
简单说一下popen()函数函数定义#include <stdio.h>FILE * popen(const char *command , const char *type );int pclose(FILE *stream);函数说明 popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。这个管道必须由pclose(...转载 2018-03-02 09:26:30 · 1077 阅读 · 0 评论 -
Fiddle抓包Https
1. 打开fiddler配置Tools –> Fiddler Options. 2. 打开HTTPS配置项,勾选“CaptureHTTPS CONNECTs”,同时勾选“Decrypt HTTPStraffic”,弹出的对话框选择是(这里是按照fiddler自己的证书)如果跟我一样手机跟电脑是用wifi进行链接的话还需要选择“…fromremote clients only”。如果需要原创 2018-01-12 09:30:01 · 624 阅读 · 0 评论 -
epoll的总结 LT和ET使用EPOLLONESHOT
epoll的总结 LT和ET使用EPOLLONESHOT在前面说过,epoll有两种触发的方式即LT(水平触发)和ET(边缘触发)两种,在前者,只要存在着事件就会不断的触发,直到处理完成,而后者只触发一次相同事件或者说只在从非触发到触发两个状态转换的时候儿才触发。这会出现下在一种情况,如果是多线程在处理,一个SOCKET事件到来,数据开始解析,这时候这个SOCKET又来了同样一个这转载 2016-10-31 15:10:31 · 1114 阅读 · 0 评论 -
5种服务器网络编程模型讲解
http://www.cricode.com/3510.html1.同步阻塞迭代模型同步阻塞迭代模型是最简单的一种IO模型。其核心代码如下:bind(srvfd);listen(srvfd);for(;;){ clifd = accept(srvfd,...); //开始接受客户端来的连接 read(clifd,buf,...);转载 2016-11-30 14:23:22 · 592 阅读 · 0 评论 -
惊群现象
今天再看nginx架构发现了它也存在惊群现象,之前师兄的socks5代理服务器同样存在着惊群现象。惊群(thundering herd)是指,只有一个子进程能获得连接,但所有N个子进程却都被唤醒了,这种情况将使性能受损。nginx架构如上图所示,每个worker都是从master fork过来,在master里先建立好需listen的socket之后,然后f转载 2017-03-30 19:48:51 · 388 阅读 · 0 评论 -
setsockopt
#include int setsockopt( int socket, int level, int option_name,const void *option_value, size_t option_len);第一个参数socket是套接字描述符。第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把level设置为 SOL_SOCKET。opt转载 2017-05-10 10:22:26 · 287 阅读 · 0 评论 -
Socket中listen
listen函数摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程。在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接。listen函数在一般在调用bind之后-调用accept之前调用,它的函数原型是:intlisten(int sockfd, int backlog)转载 2017-11-30 15:34:21 · 1086 阅读 · 0 评论 -
【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—实践篇
1. 查看系统网络配置和当前TCP状态 在定位并处理应用程序出现的网络问题时,了解系统默认网络配置是非常必要的。以x86_64平台Linux kernelversion 2.6.9的机器为例,ipv4网络协议的默认配置可以在/proc/sys/net/ipv4/下查看,其中与TCP协议栈相关的配置项均以tcp_xxx命名,关于这些配置项的含义,请参考这里的文档,此外,还可以查看l转载 2017-12-19 20:00:48 · 479 阅读 · 0 评论 -
nginx自定义http头
1.FCGX中,自定义头可以从环境变量获得。2.获取时名字前面要加HTTP_,字母要全部大写。3.发送头不能有下划线_,不然该字段会被过滤掉,传不到后台4.发送头有-,会被转为下划线,如user-name到后台后为HTTP_USER_NAME5.Fcgi中全局变量environ是获取所有环境变量6.可以用getenv 或者 FCGX_GetParam获取单个环境变量。7....原创 2018-01-02 10:46:49 · 1129 阅读 · 0 评论 -
spawn-fcgi
在运行spawn-fcgi时出现错误:spawn-fcgi: child exited with: 0-f 使用绝对路径!!!! /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 30012 -f /home/share/nginx-1.13.4/fcgi-2.4.0/examples/echo原创 2018-01-02 19:01:28 · 2143 阅读 · 0 评论 -
tcpdump
1. tcpdump -D 获取网络适配器列表,以下是在Ubuntu上获取到的结果: root@holmesian-laptop:~# tcpdump -D 1.eth0 2.wlan0 3.usbmon1 (USB bus number 1) 4.usbmon2 (USB bus number 2) 5.usbmon3 (USB bus number 3)转载 2016-10-29 14:14:26 · 505 阅读 · 0 评论 -
避免僵尸进程
写在前面1.前面已经介绍了,进程等待的相关知识,以及进程等待的必要性:https://blog.youkuaiyun.com/xu1105775448/article/details/801712442.上一篇关于信号的博客里介绍了Linux下又一种进程等待方式:https://blog.youkuaiyun.com/xu1105775448/article/details/80771363下面通过代码,为了观...转载 2019-03-05 16:53:54 · 226 阅读 · 0 评论