真香,数位 Ali 高级工程师遍览中外名书,终成顶级网络编程笔记
水一下,网络编程:
如果你还不知道有什么用处,建议你先把网络编程放一边;先学习你目前最需要用到的知识。等到你有着方便的需求时,你自然就明白网络编程有什么用处了。这也是学习的一种方法,需求导向型的学习方法会有很高的效率。没有需求比没有兴趣更让你的学习效率变得很低。如果真想知道用处,以下可以作为参考:
网络编程可以编写网络通讯程序,比如聊天程序、数据传输程序、文件传输程序等等;
可以让你对网络通讯有更深的理解,当你遇到网络通讯方面的问题时,会有很深入的分析;
为学习涌现很多分布式应用系统打下坚实的基础。
学习网络编程,不需要学习驱动设备程序,两者基本不相关。
该如何学习? 今天小编给大家推荐一本学习网络编程最好用的书籍《LinuxUNIX 网络编程》本书详细介绍了在 UNIX/Linux 系统下基于 TCP/IP 网络套接口的基本编程方法
![](https://static001.geekbang.org/infoq/99/99b09908cf0e6b66f673a8ac0e1188fd.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
目录:
![](https://static001.geekbang.org/infoq/74/748b111982af8a819267f2d221ef0f86.png)
![](https://static001.geekbang.org/infoq/ce/ce340867d55d45cfd1ed4c357de05262.png)
![](https://static001.geekbang.org/infoq/d3/d367b8758ae7e2b31166229a2cae02b8.png)
由于篇幅限制小编,小编只在这里给大家展示目录及部分内容,有需要完整文档的程序猿(媛)可以帮忙转发+关注,添加助理 vx:yunduoa2019
第 1 章 TCP/IP 简介
TCP/IP 协议是网络编程的基础。本章主要介绍 TCP/IP 模型的构成,IP 数据报、TCP 报文的格式,如何建立和释放 TCP 连接。在 TCP 建立和释放连接的过程中,TCP 的状态是随时变化的,状态变化的过程可以用状态转换图表示。
知识点:
✧OSI 模型和 TCP/IP 模型的组成
✧TCP 和 IP 报文的格式
✧建立、释放 TCP 连接的原理
✧TCP 建立和关闭连接时状态的转换
![](https://static001.geekbang.org/infoq/5e/5e4f82415ef34ec80a0aeaeb1e011881.png)
第 2 章套接字编程简介
本章介绍套接字的概念、类型、地址结构和基本函数,这些是使用套接字进行网络编程的基础,主要介绍了套接字的地址结构和地址转换函数,现在多数的 IPv4 代码使用 inet addr 和 inet_ ntoa 函数,但这两个函数却不支持 Ipv6;而两个新函数 inet pton 和 inet ntop 既可用于 IPv4 又可用于 IPv6。
知识点:
✧套接字的作用、类型
✧套接字 地址结构的构成
✧字节排序函数
✧IP 地址转换函数
![](https://static001.geekbang.org/infoq/00/000033478744e3201fd0f8b8db1524d6.png)
第 3 章基本 TCP 套接字编程
本章将介绍如何编写一个 TCP 客户和服务器的简单程序,并给出 TCP 套接字编程所需的基本套接字函数:最后介绍一个完整的 TCP 客户服务器程序的例子。
知识点:
✧使用 TCP 套接字编程的基本步骤
✧实现 TCP 套接字编程的基本函数
✧服务器的 3 种异常情况
![](https://static001.geekbang.org/infoq/9b/9b27386ec6c90de4cfe2b7ec2b2cae4e.png)
第 4 章基本 UDP 套接口编程
使用 TCP 或 UDP 协议编写套接字程序存在着本质差异: UDP 是无连接的、不可靠的数据报协议,而 TCP 是面向连接的、提供可靠的学节流。然而,有些流行的应用程序适合用 UDP 来实现,例如 DNS (域名系统)、NFS (网络文件系统)和 SNMP (简单网络管理协议)都是使用 UDP 协议实现的。本章将介绍编写 UDP 客户和服务器程序所需的基本函数,随后会给出一个完整的 UDP 客户/服务器程序的例子。在本章中还将介绍 connect 在 UDP 套接字编程中的使用和异步错误的概念。
知识点:
✧使用 UDP 套接字编程的基本步骤
✧实现 UDP 套接字编程的基本函数
✧conect 函数在 UDP 套接字编程中的作用
![](https://static001.geekbang.org/infoq/45/4581496ed640deabfe08ce209b0eab71.png)
第 5 章并发服务器
在前面介绍了简单的 TCP 客户服务器程序,其中服务器每次只能处理一个客户 的请求,它的实现虽然很简单但效率却很低。在实际应用中,这样的服务器是不能满足实际需求的。在服务器/客户体系的软件中,服务器的性能占主导地位,通过本章所讲述的并发技术可以极大地提高服务器的处理能力和响应速度。本章将介绍两种实现并发技术的方法:多进程和多线程。
知识点:
✧服务器的分类
✧多进程并发服务器的实现
✧多线程并发服务器的实现
✧线程安全函数
![](https://static001.geekbang.org/infoq/8a/8a575611f8d74cc025f6808ea8e98674.png)
第 6 章名字与地址转换编程
本章首先介绍了什么是域名系统以及域名系统的作用,然后介绍了与域名系统相关的 DNS 记录类型:接下来介绍了有关域名解析的一系列函数, 包括从域名解析 IP 地址的函数、从 IP 地址解析域名的函数,以及 IPv4 和 IPv6 地址解析器选项。与协议无关解析函数等知识:最后通过举例说明域名与 IP 的解析过程。
知识点:
✧域名系统作用
✧域名系统对应 记录
✧从域名解析对应 IP
✧从 IP 解析对应城名
![](https://static001.geekbang.org/infoq/33/3372dbf2e1ffac1d286b40341da18bc3.png)
由于篇幅限制小编,pdf 文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!不会只有大纲和目录,有需要的程序猿(媛)可以帮忙转发+关注,添加助理 vx:yunduoa2019
第 7 章 IPv4 和 lPv6 编程
现今的 Intermet 可能会逐渐从 IPv4 时代过渡到 IPv6 时代,因此现有的基于 IPv4 的应用程序能和新的 1Pv6 应用程序一起运行是十分重要的。 例如,某服务器应用程序不能光提供基于 IPv6 的对客户的服务.同时它也应该能够给 IPv4 的客户提供服务。因此提供一个同时兼容 IPv4 和 IPv6 的服务程序很重要。我们将在本章中讨论 IPv4 和 IPv6 的应用程序怎样才能互相通信。本章中所有主机都运行双重协议栈,即同时支持 IPv4 和 IPv6.
知识点:
✧IPv4 和 IPv6 服务器的工作原理
✧IPv6 如何为 IPv4 客户端服务
✧IPv6 地址测试宏与 IPv6 套接口选项:
![](https://static001.geekbang.org/infoq/f4/f46cd96d4d1c4f327101e25156bdf795.png)
第 8 章守护进程和 inetd 超级服务器
守护进程是在后台运行不受终端控制的进程。UNIX 系统中有很多守护进程在后台运行,执行不同的管理任务。在网络应用方面,许多服务器程序都是以守护进程方式运行的。创建守护进程的方法是使进程不拥有控制终端,这使得守护进程不能 fprinf 到 stder 上,而必须使用其他的方法来登记消息,通常调用 syslog 函数。inetd 超级服务器本身是一个守护进程,但它能够处理许多其他的服务,基于 UDP 或 TCP 的服务器都可以使用 inetd 超级服务器,使得这些服务器的创建和管理较为方便。本章讲解创建守护进程的方法及 inetd 超级服务器的原理。
知识点:
✧守护进程的概念
✧创建守护进程的方法
✧守护进程滴 息的输出
✧inmetd 超级服务器的工作原理
![](https://static001.geekbang.org/infoq/3d/3d8bbcde2583da2ac694f0031496c9e9.png)
第 9 章 I/O 编程
在以前的程序例子中,客户端同时处理两个输入,即标准输入和服务器应答。而现在来:考虑这样一种情况,当客户阻塞于标准输入时(fgets 调用),服务器进程又被杀死。服务器 TCP 虽然正确地给客户发送了一个 FIN,但由于客户正阻塞于标准输入,它直到从套接口读时才能看到此文件结束符(可能会过很长时间)。
知识点:
✧5 个 I/O 模型的比较与区别
✧常用 I/O 相关函数功能
✧高级 IO 函数功能
✧loctl 函数的 6 个使用方面
![](https://static001.geekbang.org/infoq/e0/e0bc9313177d58ec0c70ab5c49f83164.png)
第 10 章广播与多播编程
在本章之前,书中所有示例都是处理单播的,一个进程只与另 个进程对话。 UDP 支持各种形式的地址,而 TCP 只支持单播地址。
知识点:
✧广播的概念
✧广播地址
✧多播的概念
✧多播地址
✧多播程序的编写
![](https://static001.geekbang.org/infoq/e7/e79e3d59f3f2c0a6ca53d98c45967b71.png)
第 11 章路由套接口编程
UNIX 系统集成了路由的功能,它包含相应的路由数据库,可提供路由信息,用户可以使用命令方式来增加、修改、删除路由表中的项目,也可以只查看路由表中的信息。除此之外。应用程序可以使用路由套接口实现对路由表的读/写操作。应用程序通过写操作把消息发送给路由子系统以增加或删除路由:通过读操作接收从路由子系统发送来的路由信息。通常,路由信息的修改由管理员来完成,而应用程序往往只需要系统提供路由信息。本章主要讲述应用程序如何通过路由套接字来获取路由信息。
知识点:
✧路由套接口的作用
✧路由套接口的创建与使用
✧sysctl 操作的使用
✧接口名与索引号的转换
![](https://static001.geekbang.org/infoq/ee/ee82a3b69eb24f6768d2eb106bfbfe0a.png)
第 12 章信号量编程
信号是软件中断的。很多比较重要的应用程序都需要处理信号。信号提供了一种处理事件的方法:终端用户键入中断键。则会通过信号机构停止一个程序。本章先对信号机制进行说明,并说明每种信号的一般用法。
知识点:
✧信号量的作用以及常见的信号量介绍
✧与信号量有关的常见函数使用方法
![](https://static001.geekbang.org/infoq/79/79281ce37483aa2814ee148e3f9bf3b0.png)
第 13 章原始套接口与数据链路访问编程
通过前面的章节,学习了 TCP 和 UDP 的协议以及服务各程序的编写。在本章中将介绍原始套接口,所谓原始套接口是指在传输层下面使用的套接口。
知识点:
✧原始套接口的作用
✧原始套接口的创建与使用
✧使用 SOCK PACKET 访问数据链路层
✧使用 libpcap 访问数据链路层
![](https://static001.geekbang.org/infoq/7f/7fe4922d8806b22268a24c5400a695d7.png)
第 14 章实验指导
本章将主要介绍具体的网络实验。在学习本章过程中,指导教师应首先对实验进行相应讲解(说明在实验中应注意的重点事项,特别要强调有些实验如操作不当可能引起硬件损坏等严重后果),再演示实验内容,然后由学生动手实践操作,最后要求学生写出实验报告。针对不同的层次水平,指导教师可酌情考虑选择其中的部分或自行再增加些内容作为课堂实验。
知识点:
✧Socket 基本编程
✧服务器与单客户的连接处理
✧多进程服务器棋板
✧多线程编写模板
✧线程专用数据 TSD 实现模板
![](https://static001.geekbang.org/infoq/1a/1ae681224b6a3ba4c174bd58f4ab1c7d.png)
领取文章中提及全套资料,只需要:
——对文章将进行转发+评论,关注我之后添加助理 vx:yunduoa2019
评论