内容简介
本书是目前国内外出版的计算机网络类教材中第一本以开放源代码实现形式介绍网络及应用问题的教科书。本书自底向上介绍网络的各层协议,每部分内容不仅介绍网络的基本概念、原理,而且还介绍网络的实现原理并给出实现的开源代码。通过56个开源网络的实现,详细讲解协议及设计的实现方法。学生通过实际动手和本书的全面指导,可以对网络有更加深刻的理解,动手能力将得到实质性的提高,可以有效解决学生学习计算机网络知识后不知所以然的问题。
本书可作为计算机科学或电子工程的本科生或一年级研究生的计算机网络教材,还可以作为计算机网络教师的教学参考书,也可供数据通信行业的专业工程师使用。
目录
Computer Networks:An Open Source Approach
出版者的话
译者序
前言
作者简介
第1章基础知识
1.1计算机网络互联的需求
1.1.1连通性:节点、链路、路径
1.1.2可扩展性:节点的数量
1.1.3资源共享
1.2基本原理
1.2.1性能测量
1.2.2控制平面上的操作
1.2.3数据平面上的操作
1.2.4互操作性
1.3互联网体系结构
1.3.1连通性解决方案
1.3.2可扩展性解决方案
1.3.3资源共享的解决方案
1.3.4控制平面和数据平面操作
1.4开放源代码实现
1.4.1开放与封闭
1.4.2Linux系统中的软件体系结构
1.4.3Linux内核
1.4.4客户端和守护进程服务器
1.4.5接口驱动程序
1.4.6设备控制器
1.5本书路标:数据包的生命历程
1.5.1数据包数据结构:sk_buff
1.5.2在Web服务器中数据包的生命历程
1.5.3数据包在网关中的生命历程
1.6总结
演变的沙漏
常见陷阱
进一步阅读
常见问题解答
练习
第2章物理层
2.1一般性问题
2.1.1数据和信号:模拟的或数字的
2.1.2发送和接收流
2.1.3传输:线路编码和数字调制
2.1.4传输损失
2.2介质
2.2.1有线介质
2.2.2无线介质
2.3信息编码和基带传输
2.3.1信源编码和信道编码
2.3.2 线路编码
2.4数字调制和多路复用
2.4.1通带调制
2.4.2多路复用
2.5主题
2.5.1扩频
2.5.2单载波与多载波
2.5.3多输入、多输出
2.6总结
常见陷阱
进一步阅读
常见问题解答
练习
第3章链路层
3.1一般问题
3.1.1成帧
3.1.2寻址
3.1.3差错控制和可靠性
3.1.4流量控制
3.1.5介质访问控制
3.1.6桥接
3.1.7链路层的数据包流
3.2点到点协议
3.2.1数据链路控制
3.2.2点到点协议
3.2.3因特网协议控制协议
3.2.4以太网上的PPP(PPPoE)
3.3以太网(IEEE 802.3)
3.3.1以太网的演变:蓝图
3.3.2以太网MAC
3.3.3以太网的主题
3.4无线链路
3.4.1IEEE 802.11无线局域网
3.4.2蓝牙技术
3.4.3WiMAX技术
3.5桥接
3.5.1自学习
3.5.2生成树协议
3.5.3虚拟局域网
3.6网络接口的设备驱动程序
3.6.1设备驱动程序的概念
3.6.2在Linux设备驱动程序中如何与硬件通信
3.7总结
常见陷阱
进一步阅读
常见问题解答
练习
第4章互联网协议层
4.1一般问题
4.1.1连通性问题
4.1.2可扩展性问题
4.1.3资源共享问题
4.1.4IP层协议和分组流概述
4.2数据平面协议:互联网协议
4.2.1互联网协议版本4
4.2.2网络地址翻译
4.3互联网协议版本6
4.3.1IPv6头部格式
4.3.2IPv6扩展头部
4.3.3IPv6中的分段
4.3.4IPv6地址的表示法
4.3.5IPv6地址空间分配
4.3.6自动配置
4.3.7从IPv4到IPv6的迁移
4.4控制平面协议:地址管理
4.4.1地址解析协议
4.4.2动态主机配置
4.5控制平面协议:错误报告
4.6控制平面协议:路由
4.6.1路由原理
4.6.2域内路由
4.6.3域间路由
4.7组播路由
4.7.1将复杂性迁移到路由器
4.7.2组成员管理
4.7.3组播路由协议
4.7.4域间组播
4.8总结
常见陷阱
进一步阅读
常见问题解答
练习
第5章传输层
5.1一般问题
5.1.1节点到节点与端到端
5.1.2差错控制和可靠性
5.1.3速率控制:流量控制和拥塞控制
5.1.4标准编程接口
5.1.5传输层分组流
5.2不可靠的无连接传输:UDP
5.2.1头部格式
5.2.2差错控制:每个分段的校验和
5.2.3承载单播/组播实时流量
5.3可靠的面向连接的传输:TC
摘要与插图
"基础知识第1章
Computer Networks:An Open Source Approach
基础知识
计算机网络或数据通信是有关计算机系统或设备之间通信的一组规则。它有其自身的需求和基本原理。自从1969年ARPANET(美国国防部研究计划局网络,后改名为因特网)建立了第一个节点后,存储转发分组交换技术就成为因特网体系结构,这是一个满足需求和数据通信基本原理的解决方案。这种解决方案于1983年与TCP/IP协议套件融合,此后就开始了演变过程。
互联网,或TCP/IP协议套件,其实只是恰好占据统治地位的众多可能解决方案之一。当然还存在其他的解决方案,也能符合需求并能满足数据通信的基本原理。例如,也是开发于20世纪70年代的X25和开放系统互连(OSI),却被TCP/IP所替代。异步转移模式(ATM),曾经在20世纪90年代风靡一时,但因为难以与TCP/IP协议兼容而消失匿迹。多协议标签交换(MPLS)得以幸存下来,因为它从一开始就是作为TCP/IP协议的补充而设计的。
同样,在各种计算机系统或设备上也有许多互联网解决方案的实现。其中,开源实现与互联网架构一样共享同一种开放的和自底向上的精神,为公众提供实际可获得的软件源代码。在这种自底向上的方法中,志愿者能够贡献自己的设计或实现,同时寻求开发人员社区的支持和共识,这与受驱动的自顶向下的方法刚好相反。因为是开源和免费提供,所以这些实现能够作为各种网络机制如何在特定情况下工作的可靠的运行例子。
在本章中,我们让读者熟悉本书通篇用到的计算机网络基础知识。11节通过用连通性、可扩展性和资源共享对计算机网络进行定义以便标识进行数据通信的关键需求,还介绍了分组交换的概念。12节阐述了数据通信的基本原理。先定义带宽、提供负载、吞吐量、延迟、延迟变化和丢失等性能测量。然后,解释了用于处理控制分组和数据分组的协议和算法的设计问题。因为互联网是计算机网络的一种可能解决方案,所以13节介绍了连通性、可扩展性和资源共享以及控制分组和数据分组处理的互联网版本的解决方案。14节讨论了开源实现是如何进一步在运行的系统尤其是在Linux操作系统中实现互联网解决方案。我们说明了各种协议和算法模块在计算机系统的内核、驱动程序、守护程序以及控制器中实现的原因和方式。我们在15节利用分组经过Web服务器和中间互联设备中各种模块的历程画出了本书的学习路标。本节还为理解以后章节中将描述的开源实现奠定基础。互联网解决方案的设计和开源实现的贡献者,连同其他昙花一现的网络技术,将放在附录A中作为本章补充材料加以复习。
通过本章学习后,读者应该能够解释:1)为什么互联网解决方案是以目前这样的方式设计的;2)这种开放的解决方案是如何在实际系统中实现的。
11计算机网络互联的需求
对计算机网络的一套需求可以转化为在设计、实施、操作计算机网络时必须满足的一组目标。多年来,这组目标也在逐渐变化,但其核心需求仍保持不变:“通过各种共享媒体和设备连接越来越多的用户和应用程序,以便它们可以相互通信。”这句话表明数据通信的三个需求以及要解决的有关问题:1)连通性:谁以及如何连接;2)可扩展性:有多少连接;3)资源共享:如何利用连接。本节将介绍这些核心需求并讨论大多数计算机网络(不仅是互联网)满足这些需求的通用解决方案。
111连通性:节点、链路、路径
计算机网络,从连通性方面,可视为“从一组节点和链路构造的连通图,这里任何一对节点可以通过由一系列联系起来的节点和链路组成的路径到达彼此”。我们人类用户之间需要连通性以便交换消息或加入谈话,应用程序之间需