2020-07-18 09:19
⁄ 工业·编程
⁄ 共 971字
1. 五种I/O模型
网络编程,经常接触下述的I/O相关的概念:
同步(Synchronous)
异步(Asynchronous)
阻塞(Blocking)
非阻塞(Non-blocking)
信号驱动(Signal driven)
他们之间的关系如下图:
引用网上一个比喻:
你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下”,然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
而异步通信机制,书店老板直...
网络编程阅读全文
2020-05-25 06:55
⁄ 工业·编程
⁄ 共 563字
Wireshark 这个抓包工具比较强大,具体的网上能查到很多,我只是简单说下一些常用的命令:
ip.addr==需要查的IP地址 and tcp.port==443 : 查询地址和端口号匹配的记录 ip and (tcp.port==4437 or tcp.port==5775) :查询协议和端口号匹配的记录
选中要看的那条记录--右击--Follow TCP Stream 就能看到包里的信息了。如果是明文可以直接看到内容,如果加密了看到的就是乱码。
Wireshark虽然强大,但是无法抓取本地...
RawCap, Wireshark, 网络编程阅读全文
2020-04-27 15:35
⁄ 工业·编程
⁄ 共 3868字
下图是盗用自《Linux多线程服务端编程,使用muduo C++网络库》一书6.6.2章节(以及下面的时序图也是盗用该书的图)。该图列举出大部分常用的网络编程模型,当然了,这里并没有列出Boost.Asio的proactor模式。
其中表中的“互通”是指多个客户端(连接)间是否能方便地交换数据,如chat聊天程序;UNP是指经典的《Unix网络编程卷一:套接字联网API》一书章节。而我们的evpp库实际上是用到了“方案9”,方案9的时序图如下:
可以看出...
evpp, 网络编程阅读全文
2020-04-26 15:28
⁄ 工业·编程
⁄ 共 9988字
evpp是奇虎360内部使用的开源多线程网络库,集tcp/udp/http多种协议的服务器和客户端支持。它可以不依赖boost库,使用现代c++14语言(evpp/invoke_timer.cc的lambda表达式使用到了c++14的特性)进行编码。本项目高度参考了muduo网络库,而底层使用现成的libevent库作为事件驱动库,典型的一个reactor网络编程模式的例子,本文就是通过分析evpp源码来达到学习c++网络编程的效果。
muduo代...
evpp, 网络编程阅读全文
2020-03-31 17:08
⁄ 工业·编程
⁄ 共 117字
1.sendfile用于两个fd之间零拷贝;
2.splice类似sendfile但是两个fd之中至少有一个是pipe;
3.tee类似splice但是两个fd都必须是管道,而且tee不消耗输入fd的数据;
4.另外还有些参数使用上的区别。
网络编程阅读全文
2020-03-13 07:32
⁄ 工业·编程
⁄ 共 561字
1)熟悉TCP/IP协议族的基本原理
IP地址的分类,定义,获得,大概的管理方法
TCP、UDP等主要协议的特点,主要格式,以及重要字段在协议交互中起到的作用。
2)对于简单的TCP/IP协议导致的问题,有基本的判断
熟悉网络问题的解决方法,一个问题,应该是由上而下(top-button),还是由下而上(button-top)来分析?
3)基本的编程知识。
在系统内,构建简单通信。
在系统间,构建简单的通信。
熟悉系统内的API,知道在什么时候,改...
网络编程阅读全文
2020-03-11 07:05
⁄ 工业·编程
⁄ 共 264字
首先看完tcp卷1,对基本概念有所了解;
然后看完卷2,熟悉freebsd实现的代码流程;
再能看完linux系统的tcp实现,以及ip路由层的实现,能说出收发包的关键流程,以及tcp状态机的变化流程,对常见的tcp问题定位有一个方向;
知道tcp涉及的rfc文档,有些厂商自己实现的tcp协议栈可能不太符合规范,通信起来偶尔会遇到一些奇怪的问题,争论起来最好是拿标准规范来说明;
熟悉常用的tcp工具,tcpdump,wireshark,tc,scapy等;
熟...
网络编程阅读全文
2020-01-03 17:35
⁄ 工业·编程
⁄ 共 2936字
void *us_loop_ext(struct us_loop_t *loop) {
return loop + 1;
}
void *us_socket_ext(int ssl, struct us_socket_t *s) {
#ifndef LIBUS_NO_SSL
if (ssl) {
return us_internal_ssl_socket_ext((struct us_internal_ssl_socket_t *) s);
}
#endif
return s + 1;
}
void *us_i...
uSockets, uWebSockets, 网络编程阅读全文
2020-01-02 17:30
⁄ 工业·编程
⁄ 共 18054字
uSockets主要数据结构:
struct us_poll_t {
uv_poll_t uv_p;
LIBUS_SOCKET_DESCRIPTOR fd;//这个其实就是把平台摸平了的fd
unsigned char poll_type;
};
/* Internal callback types are polls just like sockets */
struct us_internal_callback_t {
alignas(LIBUS_EXT_ALIGNMENT) struct us_poll_t p;
struct us...
uSockets, uWebSockets, 网络编程阅读全文
2020-01-01 17:27
⁄ 工业·编程
⁄ 共 502字
最近在学习websockets的库,cpp主要有三个,websocketpp/libwebsockets/uwebsockets.看了一下简单明了的就是uWebSockets了,但是这个代码写的确实有点抽象。。。不太像我的风格。websocketpp要boost,有点巨大,不想用,libwebsockets虽然是c的,但是它的samples写的太磋,不太想用。纠结来纠结去还是用uWebSockets了,网址:https://github.com/uNetworking/uWebSockets uWebSockets依赖uSockets: https://github...
uSockets, uWebSockets, 网络编程阅读全文