随笔分类 -  Linux网络编程

摘要:查找信息,Aug 31 18:25:36 collect-28 kernel: printk: 58 messages suppressed. 此报错需要修改内核信息如下; (1) 加大 ip_conntrack_max 值: 查出原本的 ip_conntrack_max 值,指令: cat /proc/sys/net/ipv4/ip_conntrack_max 写入理想的... 阅读全文
posted @ 2013-05-14 01:35 浪里飞 阅读(474) 评论(0) 推荐(0)
摘要:iptables ip_conntrack_max 1、what 允许的最大跟踪连接条目 -允许的最大跟踪连接条目:CONNTRACK_MAX(默认值是 2^16=65536 ) -存储跟踪连接条目列表的哈西表的大小:HASHSIZE -每个哈西表的条目(叫一个bucket),包含了一个链接起来的跟踪连接条目 -哈希表大小HASHSIZE,表现为 条目bu... 阅读全文
posted @ 2013-05-14 01:18 浪里飞 阅读(1403) 评论(0) 推荐(0)
摘要:out of socket memory调整 主要是调整TCP缓冲区 Increasing the TCP send and receive buffers will increase the performance a lot if (and only if) you have a lot of large files to send. 增加TCP 发送和接收缓冲区对性能... 阅读全文
posted @ 2013-04-26 00:49 浪里飞 阅读(629) 评论(0) 推荐(0)
摘要:/proc/sys/net/ipv4/tcp_max_orphans 系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量,那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制,更应该增加这个值(如果增加了内存之后)。每个孤儿套接字最多能够吃掉你64K不... 阅读全文
posted @ 2013-04-26 00:40 浪里飞 阅读(2984) 评论(0) 推荐(0)
摘要:1、滑动窗口 滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发 送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。 TCP的滑动窗口解决了端到端的流量控制问题,允许接受方对传输进行限制,直到它拥有足够的缓冲空间来容纳更多的数据。 2、拥塞窗口 拥塞窗口也看做是发送端用来进行流量控制的窗口。... 阅读全文
posted @ 2013-04-18 02:46 浪里飞 阅读(2384) 评论(0) 推荐(0)
摘要:打印输出tcp拥塞窗口 在内核的函数tcp_getsockopt的代码中,可以看到这个选项TCP_INFO,返回了几乎所有的参数,同时还有其他的许多参数可以得到一些其他的信息。具体每个参数的含义可以参考内核中的注释。 示例 #include <string> #include <string.h> #include <cstdlib> #incl... 阅读全文
posted @ 2013-04-18 02:15 浪里飞 阅读(2948) 评论(0) 推荐(0)
摘要:测试SO_REUSEADDR与绑定 示例代码1 //demo.cpp #include <stdio.h> #include <netdb.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <linux/tcp.h> int SockDemo() ... 阅读全文
posted @ 2013-04-07 23:32 浪里飞 阅读(386) 评论(0) 推荐(0)
摘要:struct linger TCP连接断开的时候调用closesocket函数,有优雅的断开和强制断开两种方式. 那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性。 linger结构体数据结构如下: struct linger { int l_onoff; int l_linger; }; 有三种组合方... 阅读全文
posted @ 2013-02-24 16:37 浪里飞 阅读(2505) 评论(0) 推荐(0)
摘要:长连接和短连接 TCP/IP编程具有较为丰富的内容。其编程的丰富性主要体现在通信方式和报文格式的多样性上。 通信方式 主要有以下三大类: (一)SERVER/CLIENT方式 1.一个Client方连接一个Server方,或称点对点(peer to peer): 2.多个Client方连接一个Server方,这也是通常的并发服务器方式。 (二)连... 阅读全文
posted @ 2012-10-22 22:30 浪里飞 阅读(950) 评论(0) 推荐(0)
摘要:1、函数 #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int inet_aton(const char *cp, struct in_addr *inp); in_addr_t inet_addr(const char *cp); in_addr_t ... 阅读全文
posted @ 2011-09-05 14:06 浪里飞 阅读(410) 评论(0) 推荐(0)
摘要:epoll是做为一个虚拟文件系统来实现的,这样做至少有以下两个好处: 1、可以在内核里维护一些信息,这些信息在多次epoll_wait间是保持的,比如所有受监控的文件描述符。 2、epoll本身也可以被poll/epoll; 【1】epoll的实现中,所等待的设备就绪后,便调用call_back函数,把该设备加入到就绪队列中,避免了像poll那样设备就绪后再... 阅读全文
posted @ 2011-09-03 13:23 浪里飞 阅读(359) 评论(0) 推荐(0)
摘要:Q1 What happens if you add the same fd to an epoll_set twice? A1 You will probably get EEXIST. However, it is possible that two threads may add the same fd twice. This is a harmle... 阅读全文
posted @ 2011-09-03 12:35 浪里飞 阅读(538) 评论(0) 推荐(0)
摘要:说明:本文来自翻译epoll man文档。1、ET,LT这两种事件分发机制的不同。我们假定一个环境: 1. The file descriptor that represents the read side of a pipe ( RFD ) is added inside the epoll device. 2. Pipe writer writes 2Kb of data on the write side of the pipe. 3. A call to epoll_wait(2) is done that will return RFD as ready file descripto 阅读全文
posted @ 2011-09-03 12:21 浪里飞 阅读(1241) 评论(1) 推荐(0)
摘要:linux中使用TCP通信示例socket通信,是最常见的风格应用。示例代码 阅读全文
posted @ 2011-09-02 19:47 浪里飞 阅读(509) 评论(0) 推荐(0)
摘要:1、epoll使用模型示例程序1View Code for(;;){ nfds = epoll_wait(epfd, events, 20, 500); for(i = 0; i < nfds; ++i) { if(events[i].data.fd == listenfd) //监测到有新的连接 { connfd = accept(listenfd, (sockaddr *)&clientaddr, &clilen); //accept这个连接 ev.data.fd = connfd; ... 阅读全文
posted @ 2011-09-02 19:30 浪里飞 阅读(514) 评论(0) 推荐(0)
摘要:1、常用函数 有:epoll_create, epoll_ctl和epoll_wait。Linux-2.6.19又引入了可以屏蔽指定信号的epoll_wait: epoll_pwait。至此epoll家族已全。其中epoll_create用来创建一个epoll文件描述符,epoll_ctl用来添加/修改/删除需要侦听的文件描述符及其事件,epoll_wait/epoll_pwait接收发生在被侦听的描述符上的,用户感兴趣的IO事件。epoll文件描述符用完后,直接用close关闭即可,非常方便。事实上,任何被侦听的文件符只要其被关闭,那么它也会自动从被侦听的文件描述符集合中删除,很是智能。 每 阅读全文
posted @ 2011-09-02 08:09 浪里飞 阅读(1975) 评论(0) 推荐(0)
摘要:1、基于概念 epoll是一种机制,来处理大量并发连接时事件的读写顺序。在linux的网络编程中,很长的时间都在使用select来做事件触发。2.5.X内核后,引入epoll。epoll是Linux内核为处理大批量句柄而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。因为它不会复用文件描述符集合来传递结果而迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的 阅读全文
posted @ 2011-09-02 07:54 浪里飞 阅读(564) 评论(0) 推荐(0)
摘要:1、recv和send函数提供了和read和write差不多的功能。但是他们提供了第四个参数来控制读写操作. int recv(int sockfd,void *buf,int len,int flags) int send(int sockfd,void *buf,int len,int flags) 前面的三个参数和read,write相同,第四个参数能够是0或... 阅读全文
posted @ 2011-08-24 22:52 浪里飞 阅读(2129) 评论(0) 推荐(0)
摘要:1、一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。 SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。TCP,先调用close()的一方会进入TIME_WAIT状态 ... 阅读全文
posted @ 2011-08-23 14:57 浪里飞 阅读(37573) 评论(0) 推荐(4)