随笔分类 -  服务器

摘要:TCP/IPTCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议。在应用层有:TCP包括FTP、HTTP、TELNET、SMTP等协议 UDP包括DNS、TFTP等... 阅读全文
posted @ 2015-05-23 17:01 oayx 阅读(22682) 评论(1) 推荐(2) 编辑
摘要:int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen);s(套接字): 指向一个打开的套接口描述字level:(级别): 指定选项代码的类型。SOL_SOCKET: 基本套接口IPPROTO_IP: I... 阅读全文
posted @ 2015-04-25 11:22 oayx 阅读(655) 评论(0) 推荐(0) 编辑
摘要:在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。 对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等 阅读全文
posted @ 2013-10-28 14:59 oayx 阅读(3388) 评论(0) 推荐(1) 编辑
摘要:本文作者:sodme 本文出处:http://blog.csdn.net/sodme 声明:本文可以不经作者同意任意转载、复制、传播,但任何对本文的引用均须注明本文作者、出处及本行声明信息。谢谢! 封包分析的手段,说简单也挺简单的,那就是:比较!要不断地从不同的思维角度对封包进行对比分析,要充分发挥你的想象力不断地截取自己需要的包进行比较。不仅要作横向(同类)的比较,还要作纵向(不同类)的比较。即时对于同一个包,也要不断地反复研究。 初涉封包分析的新手,一般会不知道封包分析究竟该从何入手。基于经验,本文将告诉你一般会从哪些类型的包入手进行分析以及应该怎样对封包进行初步的分析。需要指出的是:.. 阅读全文
posted @ 2013-05-17 22:02 oayx 阅读(1252) 评论(0) 推荐(0) 编辑
摘要:本文作者:sodme 本文出处:http://blog.csdn.net/sodme 声明:本文可以不经作者同意任意转载,但任何对本文的引用都须注明作者、出处及此声明信息。谢谢!! 特别声明: 本人非常欣赏暴雪及他们的游戏,之所以写这个文章,是想让大家了解一些网络封包分析方面的常见方法以及学习暴雪游戏在网络处理方面的经验,偶认为作为一个网络编程者,熟练掌握封包分析的工具和方法应该是其基本功之一。本文所列的所有封包分析内容,全部是采用普通黑箱方式即可得来的,并未涉及对魔兽世界可执行程序的逆向工程。同时,除此文涉及的内容外,本人拒绝向任何人透露更详细的关于魔兽世界封包方面的更多内容,有兴趣者... 阅读全文
posted @ 2013-05-17 21:52 oayx 阅读(1563) 评论(0) 推荐(1) 编辑
摘要:本文作者:sodme 本文出处:http://blog.csdn.net/sodme 声明:本文可以不经作者同意任意转载、复制、传播,但任何对本文的引用都请保留作者、出处及本声明信息。谢谢! 常见的网络服务器,基本上是7*24小时运转的,对于网游来说,至少要求服务器要能连续工作一周以上的时间并保证不出现服务器崩溃这样的灾难性事件。事实上,要求一个服务器在连续的满负荷运转下不出任何异常,要求它设计的近乎完美,这几乎是不太现实的。服务器本身可以出异常(但要尽可能少得出),但是,服务器本身应该被设计得足以健壮,“小病小灾”打不垮它,这就要求服务器在异常处理方面要下很多功夫。 服务器的异常处理包括.. 阅读全文
posted @ 2013-05-17 21:39 oayx 阅读(734) 评论(0) 推荐(0) 编辑
摘要:1、TCP/IP协议栈四层模型 TCP/IP这个协议遵守一个四层的模型概念:应用层、传输层、互联层和网络接口层。 网络接口层 模型的基层是网络接口层。负责数据帧的发送和接收,帧是独立的网络信息传输单元。网络接口层将帧放在网上,或从网上把帧取下来。 互联层 互联协议将数据包封装成internet数据报,并运行必要的路由算法。 这里有四个互联协议: 网际协议IP:负责在主机和网络之间寻址和路由数据包。 地址解析协议ARP:获得同一物理网络中的硬件主机地址。 网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误。 互联组管理协议IGMP:被IP主机拿来向本地多路广播路由器报告主机组成员。 阅读全文
posted @ 2013-05-16 18:29 oayx 阅读(955) 评论(0) 推荐(0) 编辑
摘要:======== TCP ========TCP_Serversocket()bind()listen() accept()write()read()close() 和shutdown() TCP_Client socket() connect() send() 和recv() close() 和shutdown() ======== UDP ======== UDP_Server socket()bind()sendto() 和recvfrom() close() 和shutdown() UDP_Client socket()sendto() 和recvfrom() close() 和shu 阅读全文
posted @ 2013-05-16 18:28 oayx 阅读(854) 评论(0) 推荐(0) 编辑
摘要:简介POSIX thread 简称为pthread,Posix线程是一个POSIX标准线程.该标准定义内部API创建和操纵线程.作用 线程库实行了POSIX线程标准通常称为pthreads.pthreads是最常用的POSIX系统如Linux和Unix,而微软Windowsimplementations同时存在.举例来说,pthreads-w32可支持MIDP的pthread Pthreads定义了一套 C程序语言类型、函数与常量,它以 pthread.h 头文件和一个线程库实现。数据类型 pthread_t:线程句柄 pthread_attr_t:线程属性 线程操纵函数(简介起见,省... 阅读全文
posted @ 2013-05-16 18:27 oayx 阅读(431) 评论(0) 推荐(0) 编辑
摘要:TCP三次握手TCP连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:1.客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。2.服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号y、对客户端的序列号的确认x+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。3. .客户端接收到服务器端返回的SY 阅读全文
posted @ 2013-05-16 18:27 oayx 阅读(378) 评论(0) 推荐(0) 编辑
摘要:阅读本文前,请先参考:select,poll,epoll区别select用法 #include <sys/time.h> #include <sys/types.h> #include <unistd.h> #include <sys/select.h> int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); int pselect(int n, fd_set *readfds, fd_set *writef 阅读全文
posted @ 2013-05-16 18:26 oayx 阅读(613) 评论(0) 推荐(0) 编辑
摘要:领导者/追随者模型(Leader/Followers)这几天翻了些文章,发现对领导者/追随者模型说的比较少,下面就这个模型打个比方:话说一个地方有一群有组织无纪律的人从事山贼这个很有前途的职业。一般就是有一个山贼在山路口察看,其他人在林子里面睡觉。假如发现有落单的过往客商,望风的山贼就会弄醒一个睡觉的山贼,然后自己去打劫。醒来的山贼接替作望风的事情。打劫的山贼搞定以后,就会去睡觉,直到被其他望风的山贼叫醒来望风为止。有时候过往客商太多,而山贼数量不够,有些客商就能侥幸平安通过山岭(所有山贼都去打劫其他客商了)。下面是这个模式的计算机版本:有若干个线程(一般组成线程池)用来处理大量的事件有一个线 阅读全文
posted @ 2013-05-16 18:25 oayx 阅读(1097) 评论(0) 推荐(0) 编辑
摘要:在网络程序中遇到的一些问题进行了总结, 这里主要针对的是我们常用的TCP socket相关的总结, 可能会存在错误, 有任何问题欢迎大家提出.对于网络编程的更多详细说明建议参考下面的书籍《UNIX网络编程》 《TCP/IP 详解》 《Unix环境高级编程》非阻塞IO和阻塞IO:在网络编程中对于一个网络句柄会遇到阻塞IO和非阻塞IO的概念, 这里对于这两种socket先做一下说明基本概念:socket的阻塞模式意味着必须要做完IO操作(包括错误)才会返回。 非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功。设置:一般对于一个socket是阻塞模式还是非阻塞模式有两 阅读全文
posted @ 2013-05-16 18:24 oayx 阅读(650) 评论(0) 推荐(1) 编辑
摘要:TCP/IP协议头部结构体(转)网络协议结构体定义[cpp] view plaincopyprint?//i386islittle_endian. #ifndefLITTLE_ENDIAN #defineLITTLE_ENDIAN(1)//BYTEORDER #else #errorRedefineLITTLE_ORDER #endif //Mac头部,总长度14字节 typedefstruct_eth_hdr{unsignedchardstmac[6];//目标mac地址 unsignedcharsrcmac[6];//源mac地址 unsignedshorteth_type;//以太网类型 阅读全文
posted @ 2013-05-16 18:19 oayx 阅读(25257) 评论(0) 推荐(4) 编辑
摘要:一:IOCP和Epoll之间的异同。异:1:IOCP是WINDOWS系统下使用。Epoll是Linux系统下使用。2:IOCP是IO操作完毕之后,通过Get函数获得一个完成的事件通知。Epoll是当你希望进行一个IO操作时,向Epoll查询是否可读或者可写,若处于可读或可写状态后,Epoll会通过epoll_wait进行通知。3:IOCP封装了异步的消息事件的通知机制,同时封装了部分IO操作。但Epoll仅仅封装了一个异步事件的通知机制,并不负责IO读写操作。Epoll保持了事件通知和IO操作间的独立性,更加简单灵活。4: 基于上面的描述,我们可以知道Epoll不负责IO操作,所以它只告诉你当 阅读全文
posted @ 2013-05-02 09:35 oayx 阅读(39562) 评论(2) 推荐(7) 编辑
摘要:依照惯例,先上代码:[cpp] view plaincopyprint?#pragma once #ifdef WIN32 #include <windows.h> #include <WinSock.h> #else #include <sys/socket.h> #include <fcntl.h> #include <errno.h> #include <netinet/in.h> #include <arpa/inet.h> #define SOCKET int #define SOCKET_ERROR 阅读全文
posted @ 2013-04-13 22:06 oayx 阅读(5697) 评论(4) 推荐(2) 编辑
摘要:1、recv和send 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或是以下的组合_______________________________________________________________MSG_DONTROUTE:不查找路由表MSG_OOB:接受或发送带外数据MS. 阅读全文
posted @ 2013-04-12 12:41 oayx 阅读(11069) 评论(0) 推荐(0) 编辑
摘要:当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:2. TCP短连接我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起cl 阅读全文
posted @ 2013-04-11 22:11 oayx 阅读(1531) 评论(0) 推荐(1) 编辑
摘要:1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:BOOL bDontLinger = FALSE;setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLing 阅读全文
posted @ 2011-12-29 10:37 oayx 阅读(568) 评论(0) 推荐(0) 编辑
摘要:手把手叫你玩转网络编程系列之三 完成端口(Completion Port)详解 ----- By PiggyXP(小猪)前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中……酝酿了两年之后,终于决定开始动笔了,但愿还不算晚….. 这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口的用法,本文附带了有详尽注释的使用MFC编写的图形界面的示例代码。 我的初衷是希望写一份互联网上.. 阅读全文
posted @ 2011-12-19 19:35 oayx 阅读(29560) 评论(18) 推荐(22) 编辑