
Linux网络编程
tianmo2010
这个作者很懒,什么都没留下…
展开
-
Linux tcpdump命令详解
简介用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 实用命令实例默认启动tc转载 2012-12-01 14:01:49 · 2602 阅读 · 1 评论 -
HTTP协议的详解
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation原创 2011-09-15 21:00:37 · 2338 阅读 · 0 评论 -
linux socket编程详解
随着互联网的普及,互联网信息交流的需求占住人们生活的大部分。那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。1、网络中进程之间如何通信?本地的进程间通信(I...转载 2011-03-21 23:02:00 · 1836 阅读 · 1 评论 -
epoll应用服务端和客户端
read函数只是一个通用的读文件设备的接口。是否阻塞需要由设备的属性和设定所决定。一般来说,读字符终端、网络的socket描述字,管道文件等,这些文件的缺省read都是阻塞的方式。如果是读磁盘上的文件,一般不会是阻塞方式的。但使用锁和fcntl设置取消文件O_NOBLOCK状态,也会产生阻塞的read效果。一、服务器端实现int onRead(int fd, void *buffe原创 2013-05-08 13:04:10 · 1785 阅读 · 0 评论 -
socket通信socketpair
这篇文章主要介绍的是socketpair()函数,至于函数的详细介绍,大家可以参看:man socketpair 介绍的还是可以的。下面是中文简介:函数原型#include #include int socketpair(int d, int type, int protocol, int sv[2]); 参数介绍:socketpair()函数建立一对匿名的已经连接的套原创 2013-05-08 12:59:10 · 2094 阅读 · 0 评论 -
Last-Modified 与 If-Modified-Since详解
在http中Last-Modified 与If-Modified-Since 都是用于记录页面最后修改时间的 HTTP 头信息,注意,在这 Last-Modified 是由服务器往客户端发送的 HTTP 头,另一个 If-Modified-Since是由客户端往服务器发送的头,可以看到,再次请求本地存在的 cache 页面时,客户端会通过 If-Modified-Since 头将先前服务器端发过来原创 2013-04-23 15:59:32 · 5739 阅读 · 0 评论 -
linux下select, poll和epoll IO模型的详解
一、epoll 介绍epoll 可是当前在 Linux 下开发大规模并发网络程序的热门人选, epoll 在 Linux2.6 内核中正式引入,和 select 相似,其实都 I/O 多路复用技术而已 ,并没有什么神秘的。其实在linux 下设计并发网络程序,向来不缺少方法,比如典型的 Apache 模型( Process Per Connection ,简称 PPC ), TPC ( Thr...原创 2011-08-11 10:21:12 · 23962 阅读 · 6 评论 -
Linux网络编程知识积累
一、封装send函数size_t socket_send(int sockfd, const char* buffer, size_t len){ size_t tmp, total = len; const char *p = buffer; while (1) { tmp = send(sockfd, p, total, 0); if (tmp < 0) {原创 2011-11-20 19:57:23 · 1096 阅读 · 0 评论 -
socket常用结构体详解
①sockaddr的数据结构: struct sockaddr{ unsigned short sa_family;//地址族,AF_xxx AF_INET 不涉及转序的问题 char sa_data[14]; //14字节的协议地址,网络字节序};此时:struct in_addr{ unsigned long s_addr;}sa原创 2011-05-29 13:14:00 · 2725 阅读 · 0 评论 -
linux非阻塞的socket EAGAIN的错误处理
在Linux中使用非阻塞的socket的情形下。(一)发送时 当客户通过Socket提供的send函数发送大的数据包时,就可能返回一个EAGAIN的错误。该错误产生的原因是由于send 函数中的size变量大小超过了tcp_sendspace的值。tcp_sendspace定义了应用在调用send之前能够在kernel中缓存的数据量。当应用程序在socket中设置了O_NDELA原创 2013-03-19 14:40:37 · 19325 阅读 · 0 评论 -
session与cookie的详解
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用C原创 2012-05-08 20:50:45 · 1171 阅读 · 0 评论 -
Linux中select IO复用机制
函数作用:系统提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。关于文件句柄,其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、st...原创 2011-07-10 14:05:09 · 11237 阅读 · 3 评论 -
线程池服务模型
这两天没事,看了一下Memcached和libevent的源码,做个小总结。 1、入门1.1、概述Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库。Libevent有几个显著的亮点: (1)事件驱动(event-driven),高性能;(2)轻量级,专注于网络,不如 ACE 那么臃肿庞大; (3)源代码相当精炼、易读原创 2012-10-31 13:51:59 · 1587 阅读 · 0 评论 -
如何使用strace+pstack利器分析程序性能
引言有时我们需要对程序进行优化、减少程序响应时间。除了一段段地对代码进行时间复杂度分析,我们还有更便捷的方法吗?若能直接找到影响程序运行时间的函数调用,再有针对地对相关函数进行代码分析和优化,那相比漫无目的地看代码,效率就高多了。将strace和pstack工具结合起来使用,就可以达到以上目的。strace跟踪程序使用的底层系统调用,可输出系统调用被执行的时间点以及各个调用转载 2012-12-01 13:32:42 · 906 阅读 · 0 评论 -
在tcp连接的三次握手中最后一次中丢包
在tcp三次握手中 第二次握手完成后connect 就成功返回了 如果第三次握手的ack包丢了 此时 客户端已认为连接是成功的 如果没有应用层的心跳包 客户端会一直维护这个连接 请问如何避免这种情况?服务器收到SYN包后发出SYN+ACK数据包,服务器进入SYN_RECV状态。而这个时候客户端发送ACK给服务器失败了,服务器没办法进入ESTABLISH状态,这个时候肯定不能传输原创 2013-01-14 20:10:52 · 5661 阅读 · 1 评论 -
服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下:http://blog.youkuaiyun.com/shootyou/article/details/6615051里头的分析过程有提到,通过查看服务器网络状态检测到服务器有大量的CLOSE_WAIT的状态。 在服务器的日常维护过程中,会经常用到下面的命令:[plain] view plaincopyprint?...转载 2012-08-27 11:03:48 · 5725 阅读 · 0 评论 -
优化内核参数,减少TCP连接中的TIME_WAIT(经典)
vi /etc/sysctl.conf 编辑/etc/sysctl.conf文件,增加三行: 引用 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 说明: net.ipv4.tcp_sync原创 2012-06-03 16:58:40 · 2463 阅读 · 0 评论 -
TCP/IP详解
一 TCP、IP三次握手和四次挥手图解二 三次握手和四次挥手解释1、建立连接协议(三次握手)(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。(3)原创 2012-03-17 13:25:06 · 989 阅读 · 0 评论 -
TCP 滑动窗口协议详解
什么是滑动窗口协议? 一图胜千言,看下面的图。简单解释下,发送和接受方都会维护一个数据帧的序列,这个序列被称作窗口。发送方的窗口大小由接受方确定,目的在于控制发送速度,以免接受方的缓存不够大,而导致溢出,同时控制流量也可以避免网络拥塞。下面图中的4,5,6号数据帧已经被发送出去,但是未收到关联的ACK,7,8,9帧则是等待发送。可以看出发送端的窗口大小为6,这是由接受端告知的(事实上必原创 2012-04-21 21:15:00 · 1843 阅读 · 0 评论 -
accept死循环
场景:一个多线程服务器,每个线程执行一个事件循环。在事件循环开始前,调用 socket/bind/listen 监听端口,然后将监听句柄(fd)添加到 epoll,然后开始事件循环,执行 epoll_wait。epoll_wait 返回有效事件时,对于监听事件,调用 accept 建立新连接,将该连接句柄添加到 epoll;对于普通连接,调用 read/write 进行网络 IO 及其他处理逻辑。转载 2016-11-28 17:08:05 · 1911 阅读 · 0 评论 -
深入理解HTTP协议
最近在调试 前后端分离的请求测试,遇到了一个406错误, 无法接受,于是开始了人肉搜索406最后 还是HTTP头部信息里的Accept:application/json 这个Accept 导致的, 后端设置了只允许application/json 这种形式,so前端模拟请求的时候,你也要和后端沟通好,然后发送请求参数,就可以了!正好,也忘得差不多了,下面我们就来总结和回顾转载 2011-09-24 10:39:55 · 1882 阅读 · 0 评论 -
Epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:EAGAIN: 再试一次,EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block,perror输出: Resource temporarily unavailable总结:这个错误表示资源暂转载 2013-06-17 15:56:36 · 1706 阅读 · 0 评论 -
nginx的进程模型
nginx采用的也是大部分http服务器的做法,就是master,worker模型,一个master进程管理站个或者多个worker进程,基本的事件处理都是放在woker中,master负责一些全局初始化,以及对worker的管理。 在nginx中master和worker的通信是通过socketpair来实现的,每次fork完一个子进程之后,将这个子进程的socketpaire句柄传递给转载 2013-01-22 17:32:00 · 1100 阅读 · 0 评论 -
epoll原理与应用详解
epoll简介epoll 是Linux内核中的一种可扩展IO事件处理机制,最早在 Linux 2.5.44内核中引入,可被用于代替POSIX select 和 poll 系统调用,并且在具有大量应用程序请求时能够获得较好的性能( 此时被监视的文件描述符数目非常大,与旧的 select 和 poll 系统调用完成操作所需 O(n) 不同, epoll能在O(1)时间内完成操作,所以性能相原创 2013-01-14 20:30:26 · 2438 阅读 · 0 评论 -
linux下epoll内核源代码剖析
epoll原理简介通过上面的分析,poll运行效率的两个瓶颈已经找出,现在的问题是怎么改进。首先,每次poll都要把1000个fd 拷入内核,太不科学了,内核干嘛不自己保存已经拷入的fd呢?答对了,epoll就是自己保存拷入的fd,它的API就已经说明了这一点——不是 epoll_wait的时候才传入fd,而是通过epoll_ctl把所有fd传入内核再一起"wait",这就省掉了不必要的重原创 2011-09-02 18:18:59 · 1851 阅读 · 0 评论 -
LNMP构建高性能Web服务器
平台搭建环境 : CentOS5.2 32/x86_64 GNU/Linux (32/64操作系统均通过,推荐使用 64位操作系统 )目标: 构建高性的 LEMP环境提供 WEB服务一、系统安装 1. 系统分区建议 /boot 100M ( 大约100左右)SWAP 物理内存的2倍(如果你的物理内存大于4G,分配4G即可)/原创 2011-11-13 16:37:41 · 1496 阅读 · 0 评论 -
嵌入式Web服务器BOA和CGI编程开发
一 嵌入式WEB服务器常见的有lighttpd,shttpd,thttpd,boa,mathopd,minihttpd,appweb,goahead二 嵌入式Web服务器BOA的移植方法 随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在 嵌入式设备上运行一个支持脚本或CGI功能的Web服务器原创 2011-09-10 13:11:47 · 9884 阅读 · 2 评论 -
Socket通信过程和函数详解
①什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的 Socket数据原创 2011-06-13 19:12:00 · 3815 阅读 · 0 评论 -
常见web服务器模型集合
一)采用多进程模式的web服务器//=============================================================// 文件名称:web.c// 功能描述:HTTP Server// 维护记录:2011-11-10 V1.0// 维护成员: tianmo//======================================原创 2011-09-10 13:15:52 · 1968 阅读 · 0 评论 -
Linux中open函数详解
open(打开文件) 相关函数 read,write,fcntl,close,link,stat,umask,unlink,fopen 头文件 #include #include #include 定义函数 int open( const char * pathname,int flags); int open( const ch原创 2011-10-10 21:27:30 · 6097 阅读 · 1 评论 -
Linux下用socket实现远程执行命令
服务器端程序:/********************************************************** * server.c * 服务器端程序 * *********************************************************/#include#include#include#include#include#原创 2012-03-06 20:49:43 · 4875 阅读 · 0 评论 -
Linux操作系统的网络操作和配置
使用ifconfig命令配置以太网ifconfig [ ]当IP地址使用标准的A,B,C类地址时,广播地址和子网掩码可以省略,系统会自动判断广播地址和子网掩码的值并进行设置,否则必须指出广播地址和子网掩码。#ifconfig eth0 10.0.0.222 Mask 255.255.255.0 Broadcast 10.0.0.255例如:#ifconfig eth0原创 2011-11-18 18:33:14 · 1854 阅读 · 0 评论 -
Linux下可ping IP地址,但是ping不通域名
可能解决问题的方法一:在/etc/resolv.conf中添点东西格式如下: nameserver xxx.xxx.xxx.xxx nameserver xxx.xxx.xxx.xxx 后面的ip地址是dns服务器的地址,可以添加多个地址如:nameserver 202.106.46.151然后 service network restart 可能解决问原创 2011-11-18 21:33:12 · 9215 阅读 · 1 评论 -
高性能Socket服务器编程
网络编程一直都是最吸引人、最有挑战的编程领域。从这篇文章开始,将同大家一起向这个领域出发,并接受各种难题的挑战,你准备好了吗?写在开始之前在开始之前,达达有一些题外话想先跟大家说说。在阅读这一系列的文章时,我希望大家始终记住以下几点:1. 软件开发没有银弹,人们总是试图找到问题的唯一解和最优解,但事实是每个问题都有N种解,并且在不同情况下最优解是不一样的,如果非要说软件原创 2012-03-10 15:40:41 · 1811 阅读 · 0 评论 -
Linux平台模拟ATM机系统
系统描述:1.服务器端存储有客户的账号,姓名,以及存款数额,该数据存放在info.txt文件里面;2.客户端模拟系统,把要模拟存,储客户的系列操作全部数据放在info.txt文件里面。3.模拟过程为:事先启动服务器端,然后再启动客户端,该过程开始模拟,要支持多点请求服务,以及程序的可靠,稳定,以及高效。4.该模拟过程在Linux平台下面开发,采用Socket TCP/IP通信,服务原创 2012-03-16 14:28:54 · 2133 阅读 · 0 评论 -
TCP/IP的time_wait状态详解
Socket中的TIME_WAIT状态在高并发短连接的server端,当server处理完client的请求后立刻closesocket此时会出现time_wait状态然后如果client再并发2000个连接,此时部分连接就连接不上了,用linger强制关闭可以解决此问题,但是linger会导致数据丢失,linger值为0时是强制关闭,无论并发多少多能正常连接上,如果非0会发生部分原创 2012-04-07 21:33:03 · 10308 阅读 · 2 评论 -
Linux syslog日志监控服务器
目前,linux依旧使用syslogd作为日志监控进程,而在主流的linux发行版中依旧使用sysklog这个比较老的日志服务器套件。从前一篇日志可以看到,对其进行必要的配置能减少很多麻烦,并且可更有效的从系统日志监控到系统的状态。理解并完善一个syslog的配置,对于系统管理员来说显得尤为重要。一、配置文件 以红旗DC Server 5.0为例,默认的日志服务器就是sysklog套原创 2011-11-18 20:52:57 · 3326 阅读 · 0 评论 -
Unix网络API
索引: 1.字节序函数2.字节操作函数3.地址转换函数4.readn、writen和readline5.测试描述符类型6.socket函数7.connect函数8.bind函数9.listen函数10.accept函数11.close函数12.getsockname和getpeername13.select函数14.shutdown函数1转载 2012-11-09 14:25:57 · 1344 阅读 · 0 评论 -
GET与POST区别
HTTP定义了与服务器交互的不同方法,最基本的方法是 GET和 POST.HTTP-GET和HTTP-POST是使用HTTP的标准协议动词,用于编码和传送变量名/变量值对参数,并且使用相关的请求语义。每个HTTP-GET和HTTP-POST都由一系列HTTP请求头组成,这些请求头定义了客户端从服务器请求了什么,而响应则是由一系列HTTP应答头和应答数据组成,如果请求成功则返回应答。 HT原创 2011-05-31 13:00:00 · 1247 阅读 · 0 评论 -
查看Apache并发请求数及其TCP连接状态
这两天搭建了一组Apache服务器,每台服务器4G内存,采用的是prefork模式,一开始设置的连接数太少了,需要较长的时间去响应用户的请求,后来修改了一下Apache 2.0.59的配置文件httpd.conf# prefork MPM# StartServers: number of server processes to start# MinSpareServers: minimum原创 2011-11-13 18:06:20 · 1087 阅读 · 0 评论