
网络编程
AG_
这个作者很懒,什么都没留下…
展开
-
【网络编程】TCP数据报格式
TCP数据报格式 TCP数据段与UDP协议一样也有源端口号和目的端口号,通讯的双方由IP地址和端口号标识。32位序号、32位确认序号、窗口大小稍后详细解释。4位首部长度和IP协议头类似,表示TCP协议头的长度,以4字节为单位,因此TCP协议头最长可以是4x15=60字节,如果没有选项字段,TCP协议头最短20字节。URG、ACK、PSH、RST、SYN、FIN是六个控制位,本节稍后将解原创 2017-10-19 22:40:13 · 450 阅读 · 0 评论 -
【Linux网络编程】深入理解Linux五种网络IO模型
相信很多从事linux后台开发工作的都接触过同步&异步、阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞、异步就是非阻塞,下面我们先剖析下这几个概念分别是什么含义。同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。例如普通B/S模式(同步):提交请求->等待服务器处理->处理完转载 2017-10-19 13:22:02 · 2126 阅读 · 0 评论 -
【Windows网络编程】完成端口IOCP原理及案例
IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求。这样就有很多的线程并行地运行在系统中。而这些线程都是可运行的,Windows内核花费大量的时间在进行线程的上下文切换,并没有多少时间花在线程运行上。再加上创建新线程的开销转载 2017-10-19 13:09:43 · 1449 阅读 · 0 评论 -
【Windows网络编程】完成端口IOCP介绍(超详细)
这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口的用法,本文附带了有详尽注释的使用MFC编写的图形界面的示例代码。 我的初衷是希望写一份互联网上能找到的最详尽的关于完成端口的教学文档,而且让对Socket编程略有了解的人都能够转载 2017-10-19 13:05:44 · 9113 阅读 · 7 评论 -
【网络编程】netcat使用方法
netcat被誉为网络安全界的‘瑞士军刀',相信没有什么人不认识它吧...... 一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据。它被设计成一个稳定的后门工具,能够直接由其它程序和脚本轻松驱动。同时,它也是一个功能强大的网络调试和探测工具,能够建立你需要的几 乎所有类型的网络连接,还有几个很有意思的内置功能(详情请看下面的使用方法)。 在中国,它的WI转载 2017-10-21 09:34:04 · 920 阅读 · 0 评论 -
【网络编程】Epoll模型讲解
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要转载 2017-10-21 10:48:50 · 235 阅读 · 0 评论 -
【网络编程】epoll反应堆简单版
//反应堆简单版#include #include #include #include #include #include #include #include #include #include #define _BUF_LEN_ 1024#define _EVENT_SIZE_ 1024//全局epoll树的根int gepfd = 0;void readD转载 2017-10-21 11:05:33 · 358 阅读 · 0 评论 -
【网络编程】epoll边缘触发(ET模式)
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __转载 2017-10-21 10:53:33 · 684 阅读 · 0 评论 -
【网络编程】高性能网络编程之reactor反应堆与定时器管理
反应堆开发模型被绝大多数高性能服务器所选择,IO多路复用是它的实现基础。定时触发功能通常是服务器必备组件,反应堆模型往往还不得不将定时器的管理囊括在内。本篇将介绍反应堆模型的特点和用法。首先我们要谈谈,网络编程界为什么需要反应堆?有了IO复用,有了epoll,我们已经可以使服务器并发几十万连接的同时,维持高TPS了,难道这还不够吗?我的答案是,技术层面足够了,但在软件工程层面却是不转载 2017-10-23 12:59:23 · 248 阅读 · 0 评论 -
【网络编程】高性能网络编程之tcp连接的内存使用
当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣。socket编程方法提供了SO_SNDBUF、SO_RCVBUF这样的接口来设置连接的读写缓存,linux上还提供了以下系统级的配置来整体设置服务器上的TCP内存使用,但这些配置看名字却有些互相冲突、概念模糊的感觉,如下(sysctl -a命令可以查看这些配置):[cpp] vi转载 2017-10-23 13:01:16 · 257 阅读 · 0 评论 -
【网络编程】深入理解TCP的工作机制详解
TCP的特点及其目的为了通过IP数据报实现可靠性传输,需要考虑很多事情,例如数据的破坏、丢包、重复以及分片顺序混乱等,TCP通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制等实现可靠性传输。通过序列号与确认应答提高可靠性在TCP中,当发送端的数据达到接收主机事,接收机主机会返回一个已收到消息的通知。这个消息叫做确认应答(ACK, Positive Ackn转载 2017-10-20 13:49:55 · 480 阅读 · 0 评论 -
【Windows网络编程】Select网络模型
#include #include #define PORT 6000#pragma comment (lib, "Ws2_32.lib")fd_set g_fdClientSock; //file discriotin set集合int clientNum = 0;BOOL WinSockInit(){ WSADATA data = { 0 }; if (WSA原创 2017-10-19 13:01:13 · 412 阅读 · 0 评论 -
【Windows网络编程】EventSelect网络模型
//解决select模型工作者线程时间片未充分利用的问题#include #include #define PORT 6000#pragma comment (lib,"Ws2_32.lib")SOCKET ArrSocket[1024] = { 0 };WSAEVENT ArrEvent[1024] = { 0 };DWORD dwTotal = 0;DWORD dwIndex原创 2017-10-19 12:58:43 · 437 阅读 · 0 评论 -
【网络编程】UDP数据报格式
UDP数据报格式 UDP数据段下面分析一帧基于UDP的TFTP协议帧。以太网首部0000: 00 05 5d 67 d0 b1 00 05 5d 61 58 a8 08 00IP首部0000: 45 000010: 00 53 93 25 00 00 80 11 25 ec c0 a8 00 37 c0 a80020: 00 01UDP首部0020: 0原创 2017-10-19 22:45:44 · 8057 阅读 · 0 评论 -
【网络编程】IP数据报格式
IP段格式 IP数据报格式IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍。对于IPv4,4位版本字段是4。4位首部长度的数值是以4字节为单位的,最小值为5,也就是说首部长度最小是4x5=20字节,也就是不带任何选项的IP首部,4位能表示的最大值是15,也就是说首部长度最大是60字节。8位TOS字段有3个位用来指定IP数据报的优先级(目前已经废弃不用),还有4个位表示可原创 2017-10-19 22:48:21 · 397 阅读 · 0 评论 -
【网络编程】TCP通讯时序详解(三次握手和四次挥手)
TCP通信时序下图是一次TCP通讯的时序图。TCP连接建立断开。包含大家熟知的三次握手和四次握手。 TCP通讯时序在这个例子中,首先客户端主动发起连接、发送请求,然后服务器端响应请求,然后客户端主动关闭连接。两条竖线表示通讯的两端,从上到下表示时间的先后顺序,注意,数据从一端传到网络的另一端也需要时间,所以图中的箭头都是斜的。双方发送的段按时间顺序编号为1-10,各段中原创 2017-10-19 22:51:32 · 6306 阅读 · 0 评论 -
【网络编程】IOCP模型与EPOLL模型的比较
一:IOCP和Epoll之间的异同。异:1:IOCP是WINDOWS系统下使用。Epoll是Linux系统下使用。2:IOCP是IO操作完毕之后,通过Get函数获得一个完成的事件通知。Epoll是当你希望进行一个IO操作时,向Epoll查询是否可读或者可写,若处于可读或可写状态后,Epoll会通过epoll_wait进行通知。3:IOCP封装了异步的消息事件的通知机制,同时封装转载 2017-10-19 13:16:23 · 448 阅读 · 0 评论 -
【网络编程】滑动窗口详解 (TCP流量控制)
滑动窗口 (TCP流量控制)介绍UDP时我们描述了这样的问题:如果发送端发送的速度较快,接收端接收到数据后处理的速度较慢,而接收缓冲区的大小是固定的,就会丢失数据。TCP协议通过“滑动窗口(Sliding Window)”机制解决这一问题。看下图的通讯过程: 滑动窗口1. 发送端发起连接,声明最大段尺寸是1460,初始序号是0,窗口大小是4K,表示“我的接收缓冲区还有4原创 2017-10-19 22:54:51 · 1593 阅读 · 0 评论 -
【网络编程】TCP状态转换图(重点)
TCP状态转换这个图N多人都知道,它排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻的认识,不能只停留在一知半解之中。下面对这张图的11种状态详细解析一下,以便加强记忆!不过在这之前,先回顾一下TCP建立连接的三次握手过程,以及 关闭连接的四次握手过程。 TCP状态转换图CLOSED:表示初始状态。原创 2017-10-19 22:58:19 · 469 阅读 · 0 评论 -
【网络编程】TCP异常断开处理方法
TCP异常断开心跳检测机制在TCP网络通信中,经常会出现客户端和服务器之间的非正常断开,需要实时检测查询链接状态。常用的解决方法就是在程序中加入心跳机制。Heart-Beat线程这个是最常用的简单方法。在接收和发送数据时个人设计一个守护进程(线程),定时发送Heart-Beat包,客户端/服务器收到该小包后,立刻返回相应的包即可检测对方是否实时在线。该方法的好处是通用,但缺点就原创 2017-10-19 23:02:24 · 6169 阅读 · 0 评论 -
【网络编程】socket通信流程图(tcp)
啥也不说直接上图原创 2017-10-19 23:09:16 · 6765 阅读 · 0 评论 -
【Windows网络编程】重叠IO网络模型
//把数据从网卡复制到程序的buffer,但是也要时间。。重叠io就是解决这个问题#include #include #define PORT 6000#define MSGSIZE 1024#pragma comment (lib,"Ws2_32.lib")BOOL WinSockInit(){ WSADATA data = { 0 }; if (WSAStartup(M转载 2017-10-19 13:02:12 · 507 阅读 · 1 评论 -
【boost】简单的Boost::asio 高性能C/S服务器模型
Boost::Asio 在底层封装的了操作系统的高效I/O模型。实现了很高的并发量和吞吐量。其中操作系统主要实现了两种I/O模型Reactor和Proactor。接下来探讨一下两种I/O多路复用模式:一般地,I/O多路复用机制都依赖于一个事件多路分离器(EventDemultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器转载 2017-10-24 14:07:40 · 1046 阅读 · 0 评论