
网络
voidccc
这个作者很懒,什么都没留下…
展开
-
到底该如何理解socket的阻塞/非阻塞/同步/异步
这4个名词的解释网络上有很多种版本和很多种比喻,个人不太喜欢打比方的方式来理解技术问题,因为很难有贴切的比喻,稍不注意就把人带到沟里.我们这里只通过技术模型来理解这4个术语,忽略这些名词广义上的定义,通过分析下面这个具体的场景来分享下我对他们的理解:场景:假设要通过一个socket发送的数据是5k大小的一段文本,内核的发送缓冲区4k.首先要搞明白一个基础问题,当我们在socket上原创 2013-02-27 21:40:03 · 1448 阅读 · 0 评论 -
tcpdump重要笔记
关于tcpdump的重要笔记,无关痛痒的参数就不写了。只说一些我认为值得注意的原创 2014-08-27 17:23:29 · 4336 阅读 · 0 评论 -
给tcpdump加点颜色看看
发布一个与tcpdump配合使用的Python脚本,可以为tcpdump的输出结果着色.红色是IP头。绿色是TCP头的定长部分,黄色是TCP头的可变长部分,即可选项。白色就是应用层socket数据。原创 2014-08-24 22:59:04 · 1937 阅读 · 1 评论 -
从epoll构建muduo-11 单线程Reactor网络模型成型
mini-muduo v0.10版本,修整代码版本。mini-muduo完整可运行的示例可从github下载,使用命令git checkout v0.10可切换到此版本,在线浏览此版本到这里。这个版本的改动不大,主要修改了命名规范问题,借着这个版本重点分析一下muduo里的三个文件描述符。原创 2013-12-08 19:08:27 · 3889 阅读 · 2 评论 -
从epoll构建muduo-2 最简单的epoll
mini-muduo v 0.01版本,这是mini-muduo的第一个版本,整个程序是一个100行的epoll示例下面粘贴的代码省略了头文件引用,完整可运行的示例可从github下载,使用命令git checkout v0.01可切换到此版本,在线浏览到这里#define MAX_LINE 100#define MAX_EVENTS 500#define MAX_LISTENFD原创 2013-04-12 14:07:58 · 6045 阅读 · 2 评论 -
从epoll构建muduo-13 Reactor + ThreadPool 成型
本版是个里程碑版本,可以通过本版了解多线程是如何通过IO线程读/写网络数据的,在前一个版本v0.12重点介绍了基础知识的前提下,本篇着重分析多线程逻辑里最重要的三个方法EventLoop::runInLoop/EventLoop::queueInLoop/EventLoop::doPendingFunctors。下面逐步介绍本版本修改的细节,三个方法放在最后的EventLoop节。原创 2014-06-28 22:00:36 · 2871 阅读 · 0 评论 -
从epoll构建muduo-7 加入IMuduoUser
mini-muduo v0.06版本,这个版本应该算是一个里程碑版本,最重要的修改是将库和库的用户分离。完整可运行的示例可从github下载,使用命令git checkout v0.06可切换到此版本,在线浏览此版本到这里1 在这个版本中,我们的网络库才真正的能被称为“库”。整个mini-muduo程序现在被分成了两部分,一边是库,另一边是库的用户。EchoServer这个类就是用户了,用户关原创 2013-04-25 16:50:00 · 3063 阅读 · 1 评论 -
从epoll构建muduo-4 加入Channel
mini-muduo v 0.03版本,这是个版本最重要的修改是加入了一个名为Channel的类。完整可运行的示例可从github下载,使用命令git checkout v0.03可切换到此版本,在线浏览此版本到这里介绍一下Channel类,先看其声明,这里特别要注意_events和_revents,前者是要关注的事件,后者是发生的事件,不仔细看容易混淆。名字的来源是poll(2)的struc原创 2013-04-15 12:56:58 · 4514 阅读 · 0 评论 -
从epoll构建muduo-5 加入Acceptor和TcpConnection
mini-muduo v0.04版本,这是个版本最重要的修改是加入了两个类Acceptor和TcpConnection。完整可运行的示例可从github下载,使用命令git checkout v0.04可切换到此版本,在线浏览此版本到这里1 回顾下v0.03版本,所有的socket事件都是在TcpServer::OnIn(命名不规范后续会改动)里处理的,包括接受新连接和读写数据,那实在是没原创 2013-04-16 23:15:21 · 3414 阅读 · 0 评论 -
从epoll构建muduo-9 加入onWriteComplate回调和Buffer
mini-muduo v0.08版本,这个版本完善了缓冲区的实现。mini-muduo完整可运行的示例可从github下载,使用命令git checkout v0.08可切换到此版本,在线浏览此版本到这里 本版本有两处重要修改,首先实现了IMuduoUser的onWriteComplate回调,这样当用户一次传送大量数据到网络库时,用户会在数据发送完成后收到通知。当然了发送小量数据完成时也原创 2013-05-14 23:11:38 · 2966 阅读 · 0 评论 -
从epoll构建muduo-10 Timer定时器
mini-muduo v0.09版本,实现了Timer定时器。mini-muduo完整可运行的示例可从github下载,使用命令git checkout v0.09可切换到此版本,在线浏览此版本到这里。这个版本是一个里程碑版本,到这个版本为止,可以说一个单线程的Reactor模式网络库基本成型,程序里的类各司其职,协同完成网络数据的首发。后续版本只是在此基础上增加了多个工作线程(耗费CPU原创 2013-05-21 14:35:10 · 6148 阅读 · 7 评论 -
从epoll构建muduo-6 加入EventLoop和Epoll
mini-muduo v0.05版本,完整可运行的示例可从github下载,使用命令git checkout v0.05可切换到此版本,在线浏览此版本到这里 本版将程序的主要类都加入进来了,这个版本可以作为一个里程碑版本,最重要的修改是加入了两个类EventLoop和Epoll。加入这两个类后,程序代码逻辑就相对清晰多了。为了有个更直观的了解,我们对照之前介绍的最简单epoll示例(从epoll构原创 2013-04-24 00:11:07 · 3919 阅读 · 2 评论 -
从epoll构建muduo-3 加入第一个类,顺便介绍reactor
mini-muduo v 0.02版本,这个版本添加的内容非常少,完整可运行的示例可从github下载,使用命令git checkout v0.02可切换到此版本,在线浏览到这里#include "TcpServer.h"int main(int args, char** argv){ TcpServer tcpserver; tcpserver.start();原创 2013-04-13 00:01:14 · 4574 阅读 · 0 评论 -
从epoll构建muduo-8 加入发送缓冲区和接收缓冲区
mini-muduo v0.07版本,这个版本是加入了发送缓冲区和接收缓冲区的初始版本,后续v0.08完善了缓冲区的实现。mini-muduo完整可运行的示例可从github下载,使用命令git checkout v0.07可切换到此版本,在线浏览此版本到这里1 为什么要有发送缓冲区和接收缓冲区,muduo作者已经在>节中详细介绍过了。建议有条件的同学直接看书。我觉得这部分知识非常重要所以原创 2013-04-27 17:24:25 · 3799 阅读 · 5 评论 -
从epoll构建muduo-12 多线程入场
多线程代码被加入到mini-muduo,本篇主要介绍Linux多线程编程的5个类1 Mutex2 Condition3 BlockingQueue4 Thread5 ThreadPool原创 2014-06-12 23:29:00 · 4945 阅读 · 0 评论 -
Socket连接出错总结
下面7种情况是我认为最容易出现的TCP/IP连接错误。[1] kill pid/应用崩溃/正常关机 这几种情况下操作系统会正常将连接关闭,主动发送FIN完成4次分组交换[2] 操作系统崩溃/机器断电 两种情况 1 如本端不再启动则不会有任何响应到对端,对端会执行[6]的超时重传重过程 2 如果机器后来又启动了,则会在对端写时返回RST原创 2013-05-30 21:08:08 · 2969 阅读 · 0 评论 -
RST与epoll的EPOLLHUP事件
当socket的一端认为对方发来了一个不存在的4元组请求的时候,会回复一个RST响应,在epoll上会响应为EPOLLHUP事件,目前我已知的两种情况会发响应RST[1] 当客户端向一个没有在listen的服务器端口发送的connect的时候 服务器会返回一个RST 因为服务器根本不知道这个4元组的存在 [2] 当已经建立好连接的一对客户端和服务器,客户端突然操作系统崩溃,或者拔掉原创 2013-02-27 22:11:42 · 17576 阅读 · 2 评论 -
从epoll构建muduo-1 mini-muduo介绍
前段时间看了陈硕写的muduo网络库(github, 书, blog),觉得这是一个学习网络编程的非常好的素材。为了更好的了解这个库,自己花了点时间,模仿其源码从零开始编写了一个极小的mini-muduo(起这名字没版权问题吧:-)),代码编写过程中有很多收获,我打算写几篇文章记录下心得。有几个问题先说明一下:Q1:网络库很多,为什么选择muduo? 1 库的功能相对完整,基原创 2013-04-10 16:36:51 · 14291 阅读 · 5 评论