92-ICMP 协议(基础)

ICMP 协议(Internet Control Messages Protocol,网际控制报文协议)是网络层最重要的协议之一。前面的实验我们也看到了,它由 IP 协议承载,封装在 IP 协议的数据...
系统运维 2017/05/17 353

91-接收 IP 数据报

本文我们需要用到一种新的类型的套接字 —— Raw Sockets,原始套接字。如此重要的知识点,没有出现在大标题中,实在很抱歉。 它出现的理由很简单,我们可以自己构造一个完整的 IP 数据报,通过...
系统运维 2017/05/16 318

90-IP 协议(基础)

本章开始讲解 ICMP 协议,通过学习 ICMP 协议,我们可以顺便掌握 Raw Sockets,中译名为原始套接字。在学习 ICMP 前,还需要简单的了解一下 IP 协议。 IP 协议是 TCP/...
系统运维 2017/05/16 308

89-非阻塞 accept

不知道你是否还记得异常连接—— accept 返回前连接终止。这篇文章探讨的是在 accept 函数调用前,连接被异常终止的情况。 不过,很遗憾我们并未观察到 accept 产生异常。man 手册中...
系统运维 2017/05/14 369

88-非阻塞 connect 版本的 web 客户程序

1. web 客户程序 目标: 1) web 客户程序建立与某个 web 服务器的 HTTP 连接,然后获取主页(这只是一个开胃菜,测试我们的 web 程序是否正常工作)。 2) 同时请求...
系统运维 2017/05/14 270

87-非阻塞 connect

非阻塞i/o 上调用 connect 比非阻塞 i/o 上调用 read/write 要麻烦一点,一方面 connect 函数不能像 read/write 那样反复调用,它只能调用一次;另一方面,co...
系统运维 2017/05/12 287

86-时间获取客户端

本文来一点比较轻松的话题,来写一个客户端,从时间服务器(daytime server) 上取得时间并打印。 1. daytime 服务器 daytime 服务器我们不用自己写了,这个网站列举了...
系统运维 2017/05/10 291

85-使用多线程改写回射客户端

上一篇文章中,我们已经见识了非阻塞I/O + 缓冲区改写回射客户端的复杂性。本文我们使用多线程来重写客户端,后面可以看到,这个版本要简洁的多。 1. 程序路径 本文使用的程序托管在 gitos 上...
系统运维 2017/05/09 285

84-使用非阻塞 I/O 改写回射客户端

这个程序,应该是相当复杂的。读完它需要一些耐心,不过我会力求突显程序的结构,删除无关的代码。 1. 回顾旧程序 旧版本程序的结构如下: while(1) { rfds = {stdi...
系统运维 2017/05/08 399

83-非阻塞 I/O

回顾一下上一篇文章,阻塞版本的 writen 固然好用,但是也有风险,我们不能把希望寄托在增加客户端 TCP 发送缓冲区和接收缓冲区的大小上,而是应该采取更加有保障的措施。前面说过,可以使用非阻塞 I...
系统运维 2017/05/08 300

友情链接