华为HCIA-Datacom网络技术学习指南

978-7-115-61296-0
作者: 韩立刚张怀亮赵尚刘育欣
译者:
编辑: 秦健

图书目录:

详情

本书基于华为HCIA-Datacom v1.0考试大纲编写,采用基础知识讲解+原理剖析+实战案例分析的方式,以助力读者通过华为HCIA-Datacom认证考试。本书主要内容包括计算机通信基础、IP地址和子网划分、管理华为设备、静态路由、动态路由、交换机组网、网络安全与网络地址转换、网络服务、无线局域网、IPv6、广域网、园区网典型组网案例、SDN和自动化运维等。 本书内容全面、原理剖析深入、案例思路清晰。本书不仅有专业的网络技术基础知识介绍,而且有深入浅出的技术原理解析。本书既可以作为准备参加华为HCIA-Datacom认证考试的学员的自学用书,也可以作为高等院校、培训机构的教学用书。

图书摘要

版权信息

书名:华为HCIA-Datacom网络技术学习指南

ISBN:978-7-115-61296-0

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    韩立刚 张怀亮 赵 尚 刘育欣

责任编辑 秦 健

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e61296”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e61296”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。

内 容 提 要

本书基于华为HCIA-Datacom v1.0考试大纲编写,采用基础知识讲解+原理剖析+实战案例分析的方式,以助力读者通过华为HCIA-Datacom认证考试。本书主要内容包括计算机通信基础、IP地址和子网划分、管理华为设备、静态路由、动态路由、交换机组网、网络安全与网络地址转换、网络服务、无线局域网、IPv6、广域网、园区网典型组网案例、SDN和自动化运维等。

本书内容全面、原理剖析深入、案例思路清晰。本书不仅有专业的网络技术基础知识介绍,而且有深入浅出的技术原理解析。本书既可以作为准备参加华为HCIA-Datacom认证考试的学员的自学用书,也可以作为高等院校、培训机构的教学用书。

前  言

我大学学的是化工工艺专业,1999年毕业后到化肥厂上班,我感觉信息技术(Information Technology,IT)在未来将会得到广泛应用。我认为IT更能体现个人价值,而且学高端IT只需要一台计算机即可。于是我怀揣着对未来美好生活的期待,毅然决定改行,进军IT领域,开始学习IT。

我从一名非计算机专业毕业的大学生到一名IT职业培训讲师,从一个IT“菜鸟”到一位出版10多本计算机图书的作者,从一名化工技术员到一名微软公司的最有价值专家(Most Valuable Professional,MVP),历经20多年,其间有对坚持学习IT的恒心,也有对IT职业培训的思考。随着“互联网时代”到来,我敏锐地察觉到IT培训要和互联网结合,通过在线教育打破教学的时间和空间限制。随着技术发展和人们需求的变化,互联网教育已走向历史的舞台。

由于我自己是非计算机专业出身且从零基础开始学习计算机网络知识,后成为教授计算机网络课程的老师,因此非常了解零基础的学生在学习计算机网络知识过程中所遇到的困惑。在微软公司授权的培训中心工作时我经常给企业网管做培训,通过帮他们解决工作中的问题,形成了实战风格较强的网络课程。计算机专业的学生在学习我的网络课程的过程中能清晰感觉到与学院派讲师的差别。

学习计算机网络就像考驾照,只学习理论知识是不够的,还需要动手实践。

我听过很多老师的计算机网络课程。有些老师参照书本制作PPT,所教授的内容仅局限于书本,对知识没有进一步扩展,和实际没有多少关联,这样的教学过程其实和学生自己看书差不多。授课老师还需要站在学生的角度才能把课讲好。

我教授计算机网络课程20多年,教授计算机网络原理课程12年,每一年都有新的提高,每一遍都有新的认识。如今我把对网络的认识写成这本书,用直白的语言、通俗的案例阐述计算机网络技术,将实战融入理论,并使用华为路由器和交换机搭建计算机网络环境。读者在阅读完本书之后,能够掌握计算机通信理论,使用华为路由器和交换机组建企业局域网和广域网,熟练配置华为设备。

如果你是高校教师,讲台就是舞台,老师就是演员,一本好的教材就是一个好的剧本,它可以让你的舞台表演更加精彩。

如果你是学生,感觉学习计算机网络无从下手,甚至失去信心,不要认为自己不适合学习IT,可能是你没找到适合自己的教材。

本书特色

本书具有如下特色。

理论与实践并重,用理论引导实践,用实践验证理论。

无须购买硬件设备,可使用eNSP软件来模拟网络设备,搭建学习环境。

一图胜千言,本书主要内容配有形象的示意图,以降低读者的学习门槛。

大多数章配备课后习题,以帮助读者夯实基础。

提供教学课件,以视听等多种方式进一步帮助读者理解并掌握本书内容。

为关键知识点和实验章节提供配套的讲解视频。

提供答疑教学服务群,解答师生问题。

本书组织结构

本书共13章,每章讲解的主要内容如下所示。

第1章介绍计算机通信使用的应用层协议、传输层协议、网络层协议和数据链路层协议等基础知识。

第2章介绍IP地址的组成和IP地址分类、子网划分和变长子网划分、使用超网合并网段等。

第3章介绍使用eNSP搭建实验环境,通过Console口、Telnet对路由器进行常规配置,创建登录账户和密码,管理路由器配置文件,以及使用抓包工具捕获链路中的数据包等。

第4章讲解网络畅通的条件,在路由器上添加静态路由,通过路由汇总和默认路由简化路由表等。

第5章介绍OSPF协议的工作特点,以及使用OSPF协议构造路由表等。

第6章介绍配置交换机的端口安全,STP阻断交换机组网的环路,创建VLAN隔绝网络广播,以及使用单臂路由和三层交换实现VLAN间路由等。

第7章介绍在路由器上创建基本访问控制列表(Access Control List,ACL)和高级访问控制列表实现数据包过滤、网络安全,以及使用ACL保护路由器安全等。在路由器上配置NAPT,实现私网访问Internet,配置端口映射实现Internet访问内网服务器。

第8章介绍将路由器配置为DHCP服务器以便为网络中的计算机分配IP地址,实现跨网段分配IP地址,并介绍了网络管理、SNMP、NTP等。

第9章讲解什么是WLAN,以及WLAN业务分类、WLAN的标准、WLAN产品的演进和企业无线网络的配置等。

第10章讲解IPv6地址分类和地址格式、IPv6地址自动配置、IPv6静态路由和IPv6动态路由等。

第11章介绍广域网使用的数据链路层协议,如HDLC、PPP、帧中继等,将路由器配置为PPPoE客户端和PPPoE服务器。

第12章介绍一个企业园区网典型组网案例,通过一个企业的具体应用场景,使用华为设备组建企业园区网、规划内网网段、部署有线和无线网络设备等。

第13章讲解SDN(软件定义网络)、NFV(网络功能虚拟化)、网络编程与自动化运维、使用Python进行网络设备管理等。

本书常用图标

为便于读者理解,本书配套提供了大量讲解图片,其中涉及的图标的含义如下。

在本书中,图中涉及的部分缩写词含义是:E表示Ethernet接口;F或FE表示Fast Ethernet接口;G或GE代表GigabitEthernet接口;S表示Serial接口。

本书读者对象

本书是数据通信基础教辅,定位为本科院校计算机网络方面的教辅,其中的数据通信知识和网络案例是对计算机网络理论的落地,读者学完相关知识后能够考取华为认证网络工程师(Huawei Certified ICT Associate,HCIA)。

本书适合的读者对象如下:

大中专院校网络工程、软件工程等专业学生;

从事IT运维、网络安全、软件开发、软件测试工作的在职人员;

致力于考取计算机专业研究生的学生;

致力于考取HCIA的学生和在职人员。

本书资源

除了纸质图书之外,作者还为本书提供了完整的教学课件(免费)以及配套的视频课程(收费)。教学课件资源可通过本书在异步社区的相应页面进行下载,也可以向本书作者索要。

由于作者水平有限,疏漏之处在所难免,恳请广大读者批评指正。欢迎各位读者扫描下方的二维码加作者微信,及时进行沟通。欲了解作者最新动态和知识点分享,请关注其抖音号。

微信二维码

抖音号

致谢

Internet技术的发展为老师提供了广阔的舞台。感谢51CTO学堂为全国的IT专家和IT教育工作者提供教学平台。

感谢我的学生们,正是与他们的沟通,我才了解到初学者的困惑,授课水平的提升离不开对学生更深入的了解。更感谢工作在一线的IT运维人员,他们反馈的在工作中遇到的疑难问题丰富了我讲课的案例。

感谢那些通过网络视频学习我的课程的学生们,我们虽然没有见过面,但我能够感受到你们想通过知识改变命运的决心和毅力。这也一直激励着我不断提供更丰富的学习资源。

感谢韩旭同学提供的技术校对支持。

韩立刚

资源与支持

本书由异步社区出品,社区(https://www.epubit.com)为您提供相关资源和后续服务。

您还可以扫码二维码, 关注【异步社区】微信公众号,回复“e61296”直接获取,同时可以获得异步社区15天VIP会员卡,近千本电子书免费畅读。

提交勘误

作者、译者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“发表勘误”,输入错误信息,单击“提交勘误”按钮即可,如下图所示。本书的作者和编辑会对您提交的错误信息进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

扫码关注本书

扫描下方二维码,您将会在异步社区微信服务号中看到本书信息及相关的服务提示。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区投稿(直接访问www.epubit.com/contribute即可)。

如果您所在的学校、培训机构或企业想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接通过邮件发送给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。

异步图书”是由异步社区编辑团队策划出版的精品IT图书的品牌,依托于人民邮电出版社几十年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、人工智能、测试、前端、网络技术等。

异步社区

微信服务号

第1章 计算机通信基础

本章内容

应用层协议

传输层协议

网络层协议

数据链路层协议

TCP/IPv4栈和OSI参考模型

本章重点讲解计算机通信使用的协议。计算机通信实际上是指计算机上的应用程序通信,比如通过浏览器访问网站时,浏览器和网站就是计算机上的两个应用程序。适用于访问Internet资源的浏览器有多种,比如360浏览器、谷歌浏览器、火狐浏览器等。Internet上的网站也是由多种服务组成的,比如Windows服务器上的IIS服务、Linux操作系统下的Tomcat服务等。为了让不同的浏览器能够访问不同的网站,需要将访问网站的方法确定下来,这就是协议,网络中访问网站的协议是HTTP。Internet中的应用有很多,每一种应用都有相应的协议,比如发送电子邮件的协议是SMTP,接收电子邮件的协议是POPv3。这些协议称为应用层协议。常见的应用层协议有HTTP、POPv3、SMTP、FTP、DNS、DHCP、Telnet等。

计算机网络有时是不可靠的,有可能拥塞,造成数据包丢失,这就需要网络中的计算机通过可靠的传输协议为应用程序通信提供可靠的数据传输,这些协议称为传输层协议。传输层协议有TCP和UDP等。

由于Internet由众多网络连接而成,因此数据从一个网络到达目的网络可能有多条路径,这就需要有专门为数据包选择转发路径的协议,这些协议称为网络层协议。网络层协议有IP、ICMP、IGMP(Internet Group Management Protocol,互联网组管理协议)和ARP等。

计算机通信通常要经过多条链路,这些链路可以是光纤、双绞线、无线等。计算机通信时发送端需要将数据包从链路的一端传输到另一端,接收端要能够判断出哪儿是数据的头,哪儿是数据的尾,在传输过程中有没有差错等。这就要求发送端和接收端遵循相同的规范即数据链路层协议来封装数据。不同的链路可以选用不同的数据链路层协议,数据链路层协议实现的功能都一样,包括封装成帧、透明传输、差错检验3个。

为了使全球范围内的计算机可以进行开放式通信,国际标准化组织(International Organization for Standardization,ISO)制定了实现网络互连的一个参考模型,即开放系统互连参考模型(Open System Interconnection Reference Model,OSI-RM)。该模型(体系结构标准)定义了网络互连的7层框架,即物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,更多信息请参考1.5.2节。

TCP/IPv4栈是现行的工业标准,它对 OSI-RM模型进行精简,将其合并成4层。TCP/IPv4栈是一组协议,根据功能,这组协议从上到下依次对应应用层、传输层、网络层和网络接口层。

1.1 应用层协议

计算机通信实质上是指计算机上的应用程序通信,通常由客户端向服务端发起通信请求,服务端向客户端返回响应,实现应用程序的功能。

在Internet中应用有多种,如访问网站、域名解析、发送电子邮件、接收电子邮件、文件传输等。如图1-1所示,每一种应用都需要规定好客户端能够向服务端发送哪些请求,服务端能够向客户端返回哪些响应,客户端向服务端发送请求(命令)的顺序,发生意外后如何处理,发送请求和响应的报文有哪些字段,每个字段的长及值代表什么意思等。这些规定就是应用程序通信使用的协议,也称为应用层协议。

图1-1 应用层协议(图中各图标的含义见前言的介绍)

下面列出了计算机网络中常见应用程序使用的协议及其用途。

超文本传送协议(HyperText Transfer Protocol,HTTP)用于访问Web服务。

简单邮件传送协议(Simple Mail Transfer Protocol,SMTP)用于发送电子邮件。

邮局协议第3版(Post Office Protocol version 3,POPv3)用于接收电子邮件。

域名服务(Domain Name Service,DNS)用于域名解析。

文件传送协议(File Transfer Protocol,FTP)用于在Internet中上传和下载文件。

远程登录协议(Telnet protocol,Telnet)用于远程配置网络设备、Linux操作系统和Windows操作系统。

动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)用于计算机或其他网络设备自动配置IP地址、子网掩码、网关和DNS等。

1.1.1 HTTP

访问网站使用的HTTP是应用最为广泛的应用层协议之一。本节通过抓包分析HTTP,查看客户端(Web浏览器)向Web服务器发送的请求(命令)、查看Web服务器向客户端返回的响应(状态码),以及请求报文和响应报文的格式。HTTP实现Web浏览器访问Web服务器的示意如图1-2所示。

图1-2 HTTP

1.请求报文格式

由于HTTP是面向文本的,因此报文中的每一个字段都是一些ASCII字符串,各个字段的长度都是不确定的。如图1-3所示,HTTP请求报文由3个部分组成。

图1-3 请求报文格式

(1)开始行。

开始行用于区分该报文是请求报文还是响应报文。在请求报文中的开始行叫作请求行,而在响应报文中的开始行叫作状态行。开始行的3个字段之间都以空格分隔,最后的“CRLF”中“CR”和“LF”分别代表“回车”和“换行”。

(2)首部行。

首部行用来说明浏览器、服务器或报文主体的信息。首部行可以有0行或多行。每个首部行都有首部字段名及其值,每一行在结束的地方都要有“CRLF”(“回车”和“换行”)。整个首部行结束时,还有一个空行将首部行和后面的实体主体分开。

(3)实体主体。

请求报文一般不用实体主体这个字段,而响应报文也可能没有这个字段。

Web浏览器能够向Web服务器发送以下8种方法(有时也叫动作或命令)来表明Request-URL指定的资源的不同操作方式。

GET:请求获取Request-URL所标识的资源。通过在Web浏览器的地址栏中输入网址的方式访问网页时,Web浏览器采用GET方法向服务器请求网页。

POST:在Request-URL所标识的资源后附加新的数据。要求被请求Web服务器接收附在请求后面的数据,常用于提交表单。比如向Web服务器提交信息、发帖、登录等。

HEAD:请求获取由Request-URL所标识的资源的响应消息报文首部。

PUT:请求Web服务器存储一个资源,并用Request-URL作为其标识。

DELETE:请求Web服务器删除Request-URL所标识的资源。

TRACE:请求Web服务器回送收到的请求信息,主要用于测试或诊断。

CONNECT:用于代理服务器。

OPTIONS:请求查询Web服务器的性能,或者查询与资源相关的选项和需求。

方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,Web服务器应当返回状态码405(Method Not Allowed);当Web服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

2.响应报文格式

通常每一个请求报文发出后,都能收到一个响应报文。响应报文的第一行就是状态行。如图1-4所示,状态行包括3项内容,即HTTP的版本、状态码以及解释状态码的简单短语。

图1-4 响应报文格式

3.HTTP响应报文状态码

HTTP响应报文状态码(Status-Code)都是3位数字的,分为5大类33种,如下所示。

1××表示通知信息,如请求收到或正在处理。

2××表示成功,如接受或知道了。

3××表示重定向,如要完成请求还必须采取进一步的行动。

4××表示客户端错误,如请求中有错误的语法或不能完成。

5××表示服务端出现错误,如由于Web服务器失效而导致无法完成请求。

下面是响应报文中经常见到的几种状态行。

HTTP/1.1 202 Accepted(接受)。

HTTP/1.1 400 Bad Request(错误的请求)。

HTTP/1.1 404 Not Found(找不到)。

综上可知,HTTP定义了Web浏览器访问Web服务器的步骤,能够向Web服务器发送哪些请求(方法),HTTP请求报文格式(有哪些字段,分别代表什么意思)等,也定义了Web服务器能够向Web浏览器发送哪些响应(状态码),HTTP响应报文格式(有哪些字段,分别代表什么意思)等。

举一反三,其他的应用层协议也需要定义以下内容。

客户端能够向服务端发送哪些请求(方法或命令)。

客户端和服务端命令交互顺序,比如针对POPv3,需要先验证用户身份才能接收邮件。

服务端有哪些响应(状态码),每种状态码代表什么意思。

协议中每种报文的格式。如报文包含哪些字段,字段是定长还是变长,如果是变长,字段分隔符是什么等。

在计算机中通过抓包工具可以捕获网卡发出和接收的数据包,当然也能捕获应用程序通信时的数据包。这样就可以查看客户端和服务端的交互过程,即客户端发送了哪些请求,服务端返回了哪些响应。

如图1-5所示,在显示过滤器中输入“http and ip.addr == 202.206.100.34”,单击,应用显示过滤器,此时只显示访问河北师范大学网站的HTTP请求和响应的数据包。单击第1 396个数据包,可以看到该数据包中的HTTP请求报文,可以参照HTTP请求报文的格式进行对比,其请求方法是GET。

第1 440个数据包是Web服务器响应数据包,状态码为404。状态码404代表Not Found(找不到)。

如图1-6所示,第11 626个数据包是HTTP响应报文,状态码为200,表示成功处理了请求,一般情况下都会返回此状态码。可以参照HTTP响应报文的格式进行对比。

图1-5 HTTP请求报文

图1-6 HTTP响应报文

HTTP除定义客户端使用GET方法请求网页以外,还定义了其他很多方法,比如通过Web浏览器向Web服务器提交内容、登录网站、搜索网站等就需要使用POST方法。使用相同的方法,在显示过滤器中输入“http.request.method == POST”,单击,应用显示过滤器。如图1-7所示,单击第19 390个数据包,可以看到Web浏览器使用POST方法将搜索的内容提交给Web服务器。

图1-7 HTTP的POST方法

1.1.2 FTP

FTP是Internet中广泛使用的文件传输协议,用于在Internet上控制文件的双向传输。不同的操作系统有不同的FTP应用程序,而所有这些应用程序在传输文件时都遵守同一种协议。FTP屏蔽了计算机操作系统的各种细节,可以减小或消除在不同操作系统中处理文件的不兼容性,因而适合在不同操作系统之间传送文件。FTP 只提供文件传输的基本服务。它使用传输控制协议(Transmission Control Protocol,TCP)实现可靠传输。

在使用FTP的过程中,用户会遇到两个概念——“下载”(Download)和“上传”(Upload)。“下载”文件就是将文件从远程主机复制到本地计算机中,“上传”文件就是将文件从本地计算机复制到远程主机中。下面通过抓包工具Wireshark来分析FTP工作的过程。

首先在虚拟机中安装Windows Server 2012 R2服务器和FTP服务,然后在客户端(这里以Windows 10操作系统为例)利用抓包工具分析FTP客户端访问FTP服务器的数据包,观察FTP客户端访问FTP服务器的交互过程。在FTP服务器上设置禁止FTP的某些方法,以实现对FTP服务器的安全访问,比如禁止删除FTP服务器中的文件。

当运行抓包工具开始抓包后,通过FTP客户端上传一个test.txt文件,并将其重命名为abc.txt,最后删除FTP服务器上的abc.txt文件。抓包工具会捕获FTP客户端发送的全部请求以及FTP服务器返回的全部响应。如图1-8所示,右击其中的一个FTP数据包,在弹出菜单中单击“追踪流”→“TCP流”,出现图1-9所示的窗口。该窗口中显示了FTP客户端访问FTP服务器交互过程产生的所有数据。在该窗口中可以看到FTP中的方法,其中,STOR方法用于上传test.txt,CWD方法用于改变工作目录,RNFR方法用于重命名test.txt,DELE方法用于删除abc.txt文件。通过抓包工具还可看到FTP的其他方法,如使用FTP客户端在FTP服务器上创建文件夹、删除文件夹、下载文件等操作对应的方法。

图1-8 启用追踪流功能

图1-9 FTP客户端访问FTP服务器交互过程示意

1.1.3 DHCP

在网络中计算机的IP地址、子网掩码、网关和DNS服务器等的设置既可以手动指定,也可以设置成自动获得。若设置成自动获得,就需要使用DHCP客户端从DHCP服务器请求IP地址。本节将讲解DHCP的工作过程以及DHCP的4种报文。

DHCP客户端与DHCP服务器之间通过以下4种报文进行通信,具体过程如图1-10所示。DHCP定义了4种类型的报文。

图1-10 DHCP客户端请求IP地址的过程

DHCP Discover。DHCP客户端会先发送DHCP Discover数据包到网络中,以寻找一台能够提供IP地址的DHCP服务器。

DHCP Offer。当网络中的DHCP服务器接收到DHCP客户端的DHCP Discover数据包后,就会从IP地址池中挑选一个尚未出租的IP地址,然后利用广播的方式发送给DHCP客户端。之所以使用广播方式,是因为此时DHCP客户端还没有IP地址。在尚未与DHCP客户端完成租用IP地址的流程之前,这个IP地址会被暂时保留起来,避免再分配给其他的DHCP客户端。如果网络中多台DHCP服务器均收到DHCP客户端发送的DHCP Discover数据包,并且都响应了DHCP客户端(表示它们都可以提供IP地址给此客户端),那么DHCP客户端会选择收到的第一个DHCP Offer信息。

DHCP Request。当DHCP客户端选择收到的第一个DHCP Offer信息后,就利用广播的方式,响应一个DHCP Request信息给DHCP服务器。之所以使用广播方式,是因为它不但要通知所挑选的DHCP服务器,还必须通知没有选择的其他DHCP服务器,以便这些DHCP服务器将原本欲分配给此DHCP客户端的IP地址收回,以供其他DHCP客户端使用。

DHCP ACK。DHCP服务器收到DHCP客户端请求IP地址的DHCP Request信息后,就会利用广播的方式送出DHCP ACK信息给DHCP客户端。之所以使用广播的方式,是因为此时DHCP客户端还没有IP地址,此信息包含DHCP客户端所需要的TCP/IP配置信息,如子网掩码、默认网关、DNS服务器等。

DHCP客户端在收到DHCP ACK信息后,就完成了获取IP地址的步骤,接下来可以利用这个IP地址与网络中的其他计算机通信。

在DHCP客户端上使用抓包工具Wireshark,捕获DHCP服务器给计算机分配IP地址的4种数据包——DHCP Discover、DHCP Offer、DHCP Request和DHCP ACK。

运行抓包工具Wireshark,将本地连接的地址由静态地址设置成“自动获得IP地址”,将DNS服务器地址设置成“自动获得DNS服务器地址”,单击“确定”按钮,如图1-11所示。

图1-11 设置DHCP客户端

停止抓包,在显示过滤器中输入“ip.addr == 255.255.255.255”。因为在请求IP地址和提供IP地址的过程中目的IP地址都是广播地址。可以看到DHCP服务器给计算机分配IP地址的4种报文。图1-12所示的是DHCP Offer报文的格式。DHCP不仅定义了4种报文格式,而且定义了这4种报文的交互顺序。

图1-12 DHCP Offer报文格式

1.2 传输层协议

计算机网络负责为网络中的计算机和智能设备传输数据。如图1-13所示,服务端给客户端发送一个网页。有可能因网络拥塞而造成数据包丢失,如第5个数据包被路由器丢弃了。由于不同的数据包单独选择转发路径,因此这些数据包也可能不按顺序到达客户机,如第4个数据包已经到达客户端并缓存,而第3个数据包还没到达。

图1-13 数据包在网络中的传输过程

为了在不可靠的网络中为计算机提供可靠的通信,进行通信的计算机就需要有一种机制,使得发送端能够发现丢包后自动重传,接收端能够排序接收的数据包,同时发送端还要能够感知网络是否拥塞,以自动调整发送速率。

TCP可以保障计算机在Internet中实现可靠的数据通信。TCP使得Internet中的各种服务器(如Windows服务器、Linux服务器等)和计算机、智能设备(如安卓手机、苹果手机等)能够相互通信。

1.2.1 TCP的应用场景

TCP为应用层提供可靠的传输服务,发送端按顺序发送数据,接收端按顺序接收数据,其间若发生丢包、乱序等情况,TCP须负责重传和排序。下面是TCP的应用场景。

客户端和服务端需要多次交互才能实现应用程序的功能,比如接收电子邮件使用的POPv3和发送电子邮件使用的SMTP,传输文件使用的FTP。

应用程序传输的文件需要分段传输,比如通过Web浏览器访问网页或者使用QQ聊天软件传输文件时。

例如,从网络中下载一个大小为500MB的电影或200MB的软件,这么大的文件需要拆分成多个数据包进行发送,发送过程可能需要持续几分钟或几十分钟。其间,发送端以字节流的形式将发送的内容一边发送一边放入缓存,传输层会将缓存中的字节流分段并编号,然后按顺序发送。这一过程需要发送端和接收端建立连接,并协商通信过程的一些参数(比如一个段的最大字节等)。需要说明的是,这里所说的段在网络层加上IP首部即可形成数据包。如果因网络不稳定而造成某个数据包丢失,发送端必须重新发送丢失的数据包,否则会造成接收的文件不完整。如果发送端发送速率太快,接收端来不及处理,此时接收端还会通知发送端降低发送速率甚至停止发送,这就是TCP的流量控制功能。Internet中的流量不固定,流量高峰时段可能产生网络拥塞(这一点很好理解,就像城市上下班高峰时的交通堵塞一样)。发生网络拥塞时,来不及转发的数据包就会被路由器丢弃。在传输过程中TCP会一直探测网络是否拥塞,进而来调整发送速率。TCP有拥塞避免机制。

如图1-14所示,发送端的发送速率由网络是否拥塞和接收端接收速率两个因素控制,哪个速率低,就用那个速率发送。

图1-14 TCP拥塞避免机制示意

1.2.2 UDP的应用场景

有些应用程序通信使用TCP效率就会变低。比如在有些应用程序中,客户端只需向服务端发送一个请求报文,服务端返回一个响应报文就完成了相应功能。这类应用程序如果使用TCP,需要发送3个数据包建立连接,再发送4个数据包释放连接,传输效率不高。这类应用程序在传输层中通常使用用户数据报协议(User Datagram Protocol,UDP)。以下是UDP的应用场景。

客户端和服务端通信时,应用程序发送的数据包不需要分段。比如域名解析时,DNS服务器在传输层使用UDP。客户端向DNS服务器发送一个解析某个网站的域名的报文请求,DNS服务器将解析的结果用一个报文返回给客户端。

实时通信。比如使用QQ、微信等实时通信工具进行语音聊天、视频聊天等。这类应用程序的发送端和接收端需要实时交互,也就是不允许有较长的延迟,即便有几句话因为网络拥塞没听清,也不能使用TCP等待丢失的报文,如果等待的时间太长,就无法实现实时通信。

组播或广播通信。比如在学校的多媒体机房中,教师使用的计算机需要向学生使用的计算机分享屏幕,此时可以在教师使用的计算机上安装多媒体教室服务端软件,在学生使用的计算机上安装多媒体教室客户端软件,教师使用的计算机通过组播地址或广播地址发送报文,而学生使用的计算机都能收到报文。

知道了传输层中TCP、UDP两种协议的特点和应用场景,就很容易判断某个应用程序在传输层使用什么协议。接下来分析使用QQ传输文件以及使用QQ聊天在传输层使用什么协议。

使用QQ传输文件的过程通常会持续几分钟或几十分钟,由于无法使用一个数据包完整传输文件,因此需要分段传输文件。由于在传输过程中需要实现可靠传输、流量控制、拥塞避免等功能,因此可以在传输层使用TCP来实现。

在使用QQ聊天的过程中,由于通常一次输入的聊天内容不会有太多文字,因此使用一个数据包就能发送聊天内容。另外说完第一句后,无法确定什么时候会说第二句,即发送数据不是持续的,没必要让通信的两台计算机一直保持连接,因此可以在传输层使用UDP发送QQ聊天内容。

综上可知,应用程序在传输层可以根据通信的特点选择不同的协议。

传输层的UDP是一个无连接的传输协议。UDP为应用程序提供了一种无须建立连接就可以发送IP数据包的方法。

UDP没有对发送的数据包进行排序、丢包重传、流量控制等功能。也就是说,当报文发送之后,无法得知其是否已安全、完整到达。UDP存在的意义更多的是利用UDP加端口号的方式来标识一个应用层协议。

1.2.3 传输层协议和应用层协议之间的关系

应用层协议有很多个,但是传输层协议只有两个。那么如何使用传输层的这两个协议来标识不同的应用层协议呢?

在传输层中可以使用一个16位二进制数来标识一个端口,端口号取值范围为0~65 535,这对一台计算机来说是够用的。

端口号可分为两大类——服务端使用的端口号和客户端使用的端口号。

1.服务端使用的端口号

服务端使用的端口号又可分为两类,最重要的一类叫作熟知端口号(Well-Known Port Number)或系统端口号,数值为0~1 023。因特网编号分配机构(Internet Assigned Numbers Authority,IANA)把这些端口号指派给TCP/IP非常重要的一些应用程序,以便所有的用户都知道。图1-15给出了一些常用的熟知端口号。

图1-15 熟知端口号

另一类叫作登记端口号,数值为1 024~49 151。这类端口号是为没有熟知端口号的应用程序使用的。使用这类端口号必须按照规定的流程在IANA进行登记,以防止重复。比如微软公司的远程桌面协议(Remote Desktop Protocol,RDP)使用的TCP 3 389端口就属于登记端口号。

2.客户端使用的端口号

当通过Web浏览器访问网站或登录QQ等客户端软件与服务端软件建立连接时,计算机会为客户端软件分配临时端口号,这就是客户端端口号,取值范围为49 152~65 535,由于这类端口号仅在客户端进程运行时才动态分配,因此又叫作临时(短暂)端口号。这类端口号是留给客户端进程暂时使用的。当服务端进程收到客户端进程的报文时,就知道了客户端进程所使用的端口号,因而可以把数据发送给客户端进程。通信结束后,已使用过的客户端端口号将不复存在。之后这个端口号也可以供其他客户端进程使用。

下面列出了一些常见的应用层协议默认使用的协议和端口号。

HTTP默认使用TCP的80端口。

FTP默认使用TCP的21端口。

SMTP默认使用TCP的25端口。

POPv3默认使用TCP的110端口。

超文本传输安全协议(HyperText Transfer Protocol Secure,HTTPS)默认使用TCP的443端口。

DNS默认使用UDP的53端口。

RDP默认使用TCP的3 389端口。

Telnet默认使用TCP的23端口。

Windows操作系统访问共享资源时默认使用TCP的445端口。

微软公司的SQL数据库默认使用TCP的1 433端口。

MySQL数据库默认使用TCP的3 306端口。

以上列出的都是默认端口,也可以更改应用层协议所使用的端口。如果不使用默认端口,客户端需要指明所使用的端口。如图1-16所示,服务端运行了Web服务、SMTP服务和POPv3服务,这3个服务分别使用HTTP、SMTP和POPv3与客户端通信。现在网络中的客户端计算机A、计算机B和计算机C分别打算访问服务器的Web服务、SMTP服务和POPv3服务,并发送了3个数据包①、②、③,这3个数据包的目的端口号分别是80、25和110,服务端收到这3个数据包后,会根据目的端口号将数据包提交给不同的服务。

总结:数据包的目的IP地址用于在网络中定位某一个服务端,目的端口号用于定位服务端上的某个服务。

图1-16 端口和服务的关系示意

1.2.4 TCP首部

本节讲解TCP报文的首部格式。由于TCP需要实现数据分段传输、可靠传输、流量控制、网络拥塞避免等功能,因此TCP报文首部比UDP报文首部字段要多,并且其首部长度不固定。如图1-17所示,TCP报文首部的前20字节是固定的,后面的4N字节是根据需要而增加的选项(N是整数)。因此TCP首部的最小长度是20字节。

图1-17 TCP首部

TCP首部固定部分各字段的含义如下。

(1)源端口和目的端口字段各占2字节,分别写入源端口号和目的端口号。

(2)序号字段占4字节。序号范围是[0,232−1],共232(即4 294 967 296)个序号。序号增加到232−1后,下一个序号就又回到0。TCP是面向字节流的。在一个TCP连接中传送的字节流的每一字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值指的是本报文段所发送的数据的第1字节的序号。如图1-18所示,以计算机A给计算机B发送一个文件为例来说明序号和确认号的用法,为了方便说明问题,这里没有展现传输层的其他字段,第一个报文段的序号字段值是1,而携带的数据共有100字节。这就表明:本报文段的数据的第1字节的序号是1,最后1字节的序号是100。下一个报文段的数据序号应当从101开始,即下一个报文段的序号字段值应为101。因此,这个字段的名称也叫作“报文段序号”。

图1-18 序号和确认号的用法

计算机B将接收的数据包放到缓存中,根据序号对接收的数据包中的字节进行排序,计算机B的应用程序会从缓存中读取编号连续的字节。

(3)确认号字段占4字节,是期望接收对方下一个报文段的第一个数据字节的序号。

TCP之所以能够实现可靠传输,是因为接收端收到几个数据包后,就会给发送端一个确认数据包,告诉发送端下一个数据包该发第几字节了。在图1-18中,计算机B收到两个数据包,将两个数据包字节排序得到连续的前200字节,此时计算机B要发一个确认数据包给计算机A,告诉计算机A应该发送第201字节了,这个确认数据包的确认号就是201。确认数据包没有数据部分,只有TCP首部。

总之,应当记住,若确认号是N,则表明到序号N−1为止的所有数据都已正确收到。

由于序号字段有32位,因此可对4GB的数据进行编号。在一般情况下可保证当序号重复使用时,旧序号的数据早已通过网络到达接收端。

(4)数据偏移字段占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。但请注意,“数据偏移”的单位为4字节,由于4位二进制数能够表示的最大十进制数是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度,也就意味着选项长度不能超过40字节。如果只有固定长度的20字节的首部,数据偏移值就是5,写成4位二进制数就是0101。

(5)保留字段占6位,保留为今后使用,目前置为0。

(6)紧急字段URG(URGent)。当URG=l时,表明紧急指针字段有效。它告诉操作系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序传送。例如,已经发送了一个要在远程主机上运行的很长的应用程序,但后来发现了一些问题,需要取消该应用程序的运行,此时用户通过操作键盘发出中断命令(按Control+C组合键)。如果不使用紧急指针,那么中断命令将存储在接收TCP的缓存末尾。只有在所有的数据处理完毕后这个中断命令才交付给接收端的应用程序进程。这样做会浪费许多时间。

当URG=1时,发送端的应用程序进程“告诉”发送端的TCP有紧急数据要传送。于是发送端的TCP把紧急数据插入本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。这时要与首部中的紧急指针字段配合使用。

(7)确认字段ACK(ACKnowledgment)。仅当ACK=1时确认号字段才有效。当ACK=0时,确认号字段无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。

(8)推送字段PSH(PuSH)。当两个应用程序进程进行交互式通信时,有时一端的应用程序进程希望在输入一个命令后立即收到对方的响应。在这种情况下,TCP就可以使用推送(Push)操作,即发送端的TCP把PSH置1,并立即创建和发送一个报文段。接收端的TCP收到PSH=1的报文段,就尽快地(即“推送”向前)交付给接收端的应用程序进程,而不再等到整个缓存都填满后再向上交付。虽然应用程序可以选择推送操作,但推送操作很少被使用。

(9)复位字段RST(ReSeT)。当RST=1时,表明TCP连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后重新建立传输连接。将RST置1,还可以用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可称为重建位或重置位。

(10)同步字段SYN(SYNchronization)。该字段在建立TCP连接时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。因此,SYN置1就表示这是一个连接请求或连接接受报文。关于连接的建立和释放,详见1.2.5节。

(11)终止字段FIN(FINish的意思是“完”“终”)。TCP用该字段来表示释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放传输连接。

(12)窗口字段占2字节。窗口值是范围为[0, 216−1]的整数。TCP有流量控制功能,窗口值用来“告诉”对方:从本报文段首部中的确认号表示的数据字节序号算起,接收端目前允许发送端发送的数据量(单位是字节)。之所以要有这个限制,是因为接收端的数据缓存空间是有限的。总之,窗口值作为接收端让发送端设置发送窗口的依据。使用TCP传输数据的计算机会根据自己的接收能力随时调整窗口值,对方参照这个值及时调整发送窗口,从而实现流量控制。

(13)检验和字段占2字节。检验和字段检验的范围包括首部和数据两部分。

(14)紧急指针字段占2字节。紧急指针仅在URG=1时才有意义,它表示本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完,TCP就“告诉”应用程序恢复正常操作。值得注意的是,即使窗口值为0时也可发送紧急数据。

(15)选项字段长度可变,最长可达40字节。当没有使用选项字段时,TCP的首部长度是20字节。TCP最初只规定了一种选项,即最大报文段长度(Maximum Segment Size,MSS)。MSS是每一个TCP报文段中的数据部分的最大长度。由于数据部分长度加上TCP首部长度才等于整个TCP报文段长度,因此MSS并不是整个TCP报文段的最大长度,而是“TCP报文段长度减去TCP首部长度”。

1.2.5 TCP连接管理

由于TCP是可靠传输协议,因此使用TCP通信的计算机双方在正式通信之前需要先确保对方存在,并协商确定通信的参数,比如接收端的接收窗口大小、支持的MSS、是否允许选择确认(Selective ACKnowledgment,SACK)、是否支持时间戳等。建立连接后就可以进行双向通信了,通信结束后,须释放连接。

TCP连接的建立采用客户端/服务端方式。主动发起建立连接的应用程序进程叫作客户端,而被动等待建立连接的应用程序进程叫作服务端。下面将分别详细介绍TCP连接的建立与释放。

1.TCP连接建立

TCP建立连接的过程如图1-19所示,客户端向服务端发起通信,客户端的TCP模块与服务端的TCP模块之间将通过“3次握手”来建立TCP会话。所谓3次握手,是指在TCP会话的建立过程中共交换3个TCP数据包(没有数据,只有TCP首部)。需要说明的是,不同阶段在客户端和服务端能够看到不同的状态。

图1-19 通过“3次握手”建立TCP连接

服务端启动服务,就会使用TCP的某个端口侦听客户端的请求,等待客户端的连接,状态也会由CLOSED变为LISTEN。下面具体介绍3次握手的过程。介绍描述中的英文缩写是区分大小写的,比如大写ACK表示ACK标记位,小写ack表示确认号的值。

(1)客户端的应用程序发送TCP连接请求报文, 把自己的状态“告诉”服务端,这个报文的TCP首部SYN标记位为1,ACK标记位为0,序号(seq)为x,这个x称为客户端的初始序列号,值通常为0。发送连接请求报文后,客户端就处于SYN_SENT状态。

(2)服务端收到客户端的TCP连接请求后,发送确认连接报文, 将自己的状态“告诉”客户端,这个报文的TCP首部SYN标记位为1,ACK标记位为1,确认号(ack)为x+1,序号(seq)为y,y为服务端的初始序列号。服务端处于SYN_RCVD状态。

(3)客户端收到确认连接报文后,状态就变为ESTABLISHED,再次给服务端发送一个确认报文,用于确认会话的建立。该报文的SYN标记位为0,ACK标记位为1,序号(seq)为x+1,确认号(ack)为y+1。服务端收到确认报文后,状态变为ESTABLISHED。

需要特别注意的是,经过3次握手之后,客户端和服务端之间其实建立了两个TCP会话,一个是从客户端指向服务端的TCP会话,另一个是从服务端指向客户端的TCP会话。客户端是发起通信的一方,说明客户端有信息要传递给服务端,于是客户端首先发送了一个SYN标记位为1的段,请求建立一个从客户端指向服务端的TCP会话,这个会话的目的是控制信息能够正确而可靠地从客户端传递给服务端。服务端在收到SYN标记位为1的段后,会发送一个SYN和ACK标记位都为1的段作为响应。这意味着服务端一方面同意了客户端的请求,另一方面请求建立一个从服务端指向客户端的TCP会话,这个会话的目的是控制信息能够正确而可靠地从服务端传递给客户端。客户端收到SYN和ACK标记位都为1的段后,会响应一个SYN标记位为0、ACK标记位为1的段,表示同意服务端的请求。之后就可以进行双向可靠通信了。

2.TCP连接释放

TCP通信结束后,需要释放连接。TCP连接释放过程比较复杂,我们仍结合双方状态的改变来阐明连接释放的过程。数据传输结束后,通信的双方都可释放连接。如图1-20所示,现在客户端和服务端都处于ESTABLISHED状态,客户端的应用程序进程先向其TCP发出连接释放报文段,停止发送数据,并主动关闭TCP连接。客户端把连接释放报文段首部的FIN标记位置1,序号(seq)为u,它等于前面已传输过的数据的最后1字节的序号加1。这时客户端进入FIN-WAIT-1(终止等待1)状态,等待服务端的确认。请注意,TCP规定:FIN报文段即使不携带数据,也会消耗一个序号。

图1-20 TCP连接释放的过程

服务端收到连接释放报文段后即发出确认,确认号(ack)为u+1,而这个报文段本身的序号是v,此时确认号等于服务器前面已传输过的数据的最后1字节的序号加1。然后服务端进入CLOSE-WAIT(关闭等待)状态。服务端通知高层应用程序进程,从客户端到服务端这个方向的连接释放了,这时的TCP连接处于半关闭(HALF-CLOSE)状态,即客户端已经没有数据要发送,若服务端要发送数据,客户端仍要接收。也就是说,从服务端到客户端这个方向的连接并未关闭。这个状态可能会持续一段时间。客户端收到来自服务端的确认后,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务端发出连接释放报文段。

若服务端没有要向客户端发送的数据,其应用程序进程就通知TCP释放连接。这时服务端发出的连接释放报文段必须使FIN和ACK标记位都为1。现假定服务端的序号为w(处在半关闭状态的服务端可能又发送了一些数据)。服务端还必须重复上次已发送过的确认号(ack)u+1。这时服务端进入LAST-ACK(最后确认)状态,等待客户端的确认。

客户端在收到服务端的连接释放报文段后,必须对此发出确认报文段。在确认报文段中把ACK标记位置1,确认号(ack)为w+1,而自己的序号(seq)为u+1(根据TCP规定,前面发送过的FIN报文段要消耗一个序号)。然后客户端进入TIME-WAIT(时间等待)状态。请注意,现在TCP连接还没有释放。必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,客户端才进入CLOSED状态。RFC 793建议将最长报文段寿命(Maximum Segment Lifetime,MSL),设为2min。但这完全是从工程角度考虑的,对于现在的网络,MSL为2min时可能太长了。因此TCP允许不同的实现根据具体情况使用更小的MSL。因此,从客户端进入时间等待状态后,要经过4min才能进入CLOSED状态,开始建立下一个新的连接。

1.2.6 TCP可靠传输的实现

TCP实现可靠传输使用的是滑动窗口协议和连续自动重传请求(Automatic Repeat-reQuest,ARQ)协议。下面具体介绍滑动窗口协议和连续ARQ协议的工作过程。

双方在建立TCP连接后可以相互传输数据。为了方便讨论问题,这里仅考虑客户端发送数据而服务端接收数据并发送确认的过程。因此客户端叫作发送端,而服务端叫作接收端。

滑动窗口是面向字节流的,为了方便读者记住每个分组的序号,这里假设每一个分组是100字节。为了方便画图,将分组进行编号简化表示,如图1-21所示。不过务必要记住每一个分组的序号。

图1-21 简化分组表示

在建立TCP连接时,服务器已经告诉客户端它的接收窗口为400字节(见图1-22),此时客户端设置一个400字节的发送窗口。如果一个分组为100字节,在发送窗口中就有M1、M2、M3和M4这4个分组,发送端就可以连续发送这4个分组,每一个分组都记录一个发送时间,如图1-22中t1时刻所示,发送完毕后,停止发送。接收端收到这4个连续分组,只需给客户端发送一个确认,确认号(ack)为401,告诉客户端400以前的字节已经全部收到。如图1-22中t2时刻所示,发送端收到M4分组的确认,发送窗口就向前滑动,M5、M6、M7和M8分组进入发送窗口,这4个分组连续发送完毕后,停止发送,并等待确认。这就是滑动窗口协议的工作过程。

图1-22 连续ARQ协议和滑动窗口协议的工作过程

如果M7在传输过程中丢失,服务端收到M5、M6和M8分组,收到连续的M1、M2……M6分组,就会给客户端发送一个确认,该确认的确认号(ack)为601,即“告诉”客户端600以前的字节全部收到。如图1-22中t3时刻所示,客户端收到确认,并不是立即发送M7,而是向前滑动发送窗口,M9和M10分组进入发送窗口,发送M9和M10,那么什么时候发送M7呢?M7超时后就会自动重发,这个超时时间是比一个往返时间长一点的时间。如果发送了M9,M7就超时了,发送顺序变成M9、M7和M10。这就是连续ARQ协议的工作过程。

1.2.7 观察TCP通信过程

图1-23所示是通过SMTP发送电子邮件时捕获的数据包,可以看到建立TCP连接的3个数据包、发送电子邮件的数据包,以及释放TCP连接的4个数据包。图中方框中[SYN]表示数据包的SYN标记位为1,[SYN, ACK]表示数据包SYN标记位和ACK标记位均为1。[FIN, ACK]表示数据包的FIN标记位和ACK标记位均为1。

客户端(客户端的IP地址为192.168.80.222)向服务端(服务端的IP地址为192.168.80.100)发送建立TCP连接的请求,SYN标记位为1(第3个数据包),服务端向客户端发送建立TCP连接的响应,SYN标记位为1(第4个数据包)。

发送完电子邮件后,服务端向客户端发送释放连接的请求,FIN标记位为1(第21个数据包),客户端向服务端发送释放TCP连接的请求,FIN标记位为1(第23个数据包)。

图1-24所示是通过POPv3接收电子邮件时捕获的数据包,可以看到建立TCP连接的3个数据包、接收电子邮件时客户端和服务端交互的数据包,以及释放TCP连接的4个数据包。

图1-23 发送电子邮件的过程

图1-24 接收电子邮件的过程

1.3 网络层协议

要想将传输层的分段发送给目的计算机,还需要给每一个分段增加发送端、接收端的地址和其他字段,添加了地址的分段称为数据包,网络中的路由器根据数据包的目的IP地址确定转发出口。IP负责Internet上设备之间的通信,并规定了将数据包从一个网络传输到另一个网络应遵循的规则。

1.3.1 IP

当采用IP作为网络层协议时,通信的双方都能使用已分配的“独一无二”的IP地址来标识自己。IP地址可被写成4字节(32位)的二进制数形式,但为了方便阅读和分析,人们通常将它写成点分十进制数的形式,即按照4字节进行划分并使用十进制数表示,中间用点分隔,比如192.168.1.1。

IP工作时,需要通过OSPF、IS-IS、BGP等路由协议帮助路由器建立路由表,通过ICMP协助进行网络状态诊断。如果某条链路上涌入的数据包超过路由器的处理能力,路由器就丢弃来不及处理的数据包。由于每个数据包均单独选择转发路径,因此不能保障数据包按顺序到达接收端。IP只负责尽力转发数据包,但不能保证传输的可靠性,既有可能丢包,也不能保证数据包按顺序达到。

IP数据包的封装与转发过程如下。

(1)当网络层收到上层(如传输层)协议传来的数据时会封装一个IP报文首部,并且把源IP地址和目的IP地址都添加到该IP报文首部中。

(2)IP报文经过的网络设备(如路由器)会维护一张指导IP报文转发的路由表,通过读取IP数据包的目的IP地址,根据本地路由表转发IP数据包。

(3)IP数据包最终到达目的主机,目的主机通过读取目的IP地址确定是否接收并进行下一步处理。

IP数据包由首部和数据两部分组成。IP定义了IP首部(即网络层首部),如图1-25所示。IP首部的前一部分是固定长度,共20字节,是所有IP数据包必有的。在首部固定部分的后面是可选字段及填充,其长度是可变的。

图1-25 IP数据包的格式

下面就网络层首部固定部分各个字段进行详细讲解。

版本字段占4位,指IP的版本。IP目前有两个版本——IPv4和IPv6。通信双方使用的IP版本必须一致。目前广泛使用的IP版本号为4(即IPv4)。

首部长度字段占4位。可表示的最大十进制数是15。请注意,这个字段所表示的数的单位是32位二进制数(即4字节),因此,当IP首部的长度为1111时(即十进制数15),首部长度为60字节。当IP首部的长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远从4字节的整数倍开始。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度为20字节(即首部长度为0101),这时不使用任何可选字段。因为首部长度有可变部分,所以需要通过一个字段来指明首部长度。如果首部长度是固定的,也就没有必要有“首部长度”这个字段了。

区分服务字段占8位。配置计算机给特定应用程序的数据包添加一个标志,然后再配置网络中的路由器优先转发这些带标志的数据包,在网络带宽比较紧张的情况下,也能确保这种应用程序的带宽有保障,这就是区分服务,用于确保服务质量(Quality of Service,QoS)。这个字段在旧标准中叫作服务类型,但实际上一直没有被使用过。1998年因特网工程任务组(Internet Engineering Task Force,IETF)把这个字段改名为区分服务(Differentiated Services,DS)。只有在使用区分服务时,这个字段才起作用。

总长度指IP首部和数据的长度,也就是数据包的长度,单位为字节。总长度字段占16位,因此数据包的最大长度为216−1(65 535)字节。实际上传输这样长的数据包在现实中是极少遇到的。

标识(Identification)字段占16位。IP软件在存储器中维持一个计数器,每产生一个数据包,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据包不存在按序接收的问题。当数据包由于长度超过网络的最大传输单元(Maximum Transmission Unit,MTU)而必须分片时,同一个数据包被分成多个片,这些片的标识都一样,也就是这个数据包的标识字段的值被复制到所有的数据包分片的标识字段中。相同的标识字段的值使各数据包分片最后能正确地重装成原来的数据包。

标志(Flag)字段占3位。但目前只有两位有意义。标志字段中的最低位为MF(More Fragment)。MF=1表示后面“还有分片”的数据包;MF=0表示这个分片是若干数据包分片中的最后一个。标志字段中间的一位为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。

片偏移字段占13位。片偏移表示较长的数据包在分片后,某片在原数据包中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8字节为偏移单位。也就是说,每个分片的长度一定是8字节(64位)的整数倍。

生存时间常用的英文缩写是TTL(Time To Live),它表明数据包在网络中的寿命。由发出数据包的源点设置这个字段。其目的是防止无法交付的数据包无限制地在网络中“兜圈子”(例如从路由器R1转发到R2,再转发到R3,然后又转发到R1,从而白白消耗网络资源)。最初的设计是以秒(s)作为TTL值的单位。每经过一个路由器时,就把TTL减去数据包在该路由器中所消耗的时间。若数据包在路由器消耗的时间小于1s,就把TTL值减1。当TTL值减至0时,就丢弃这个数据包。然而随着技术的进步,路由器处理数据包所需的时间不断缩短,一般都远远小于1s,后来就把TTL字段的功能改为“跳数限制”(但名称不变)。路由器在转发数据包之前就把TTL值减1。若TTL值减小到0,就丢弃这个数据包,不再转发。因此,现在TTL的单位不再是秒,而是跳数。TTL的意义是指明数据包在网络中至多可经过多少个路由器。显然,数据包能在网络中经过的路由器的最大数值是255。若把TTL的初始值设置为1,就表示这个数据包只能在本局域网中传送。这是因为这个数据包一旦传送到局域网上的某个路由器,在被转发之前TTL值减小到0,此时会被这个路由器丢弃。

协议字段占8位。协议字段指出此数据包携带的数据使用的是何种协议,以便目的主机的网络层知道应将数据部分上交给哪个处理进程。常用的一些协议和相应的协议字段值如表1-1所示。

表1-1 常用的一些协议和相应的协议字段值

协议名

ICMP

IGMP

IP

TCP

IGP

UDP

IPv6

ESP

OSPF

协议字段值

1

2

4

6

9

17

41

50

89

首部检验和字段占16位。这个字段只检验数据包的首部,但不包括数据部分。这是因为数据包每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。

源IP地址字段占32位。

目的IP地址字段占32位。

1.3.2 ICMP

快递人员在联系不到快递收件人时会电话通知寄件人。同样,计算机发送的数据包如果没有到达目的地,网络中的路由器也要返回一个差错报告报文给发送端,以便报告出现了什么错误。ICMP(Internet Control Message Protocol,互联网控制报文协议)用于在IP主机、路由器之间传递控制消息。控制消息包含网络通不通、主机是否可达、路由是否可用等网络本身的消息。

ICMP报文是在IP数据包内部被传输的,它封装在IP数据包内。ICMP报文通常用于网络层或更高层协议(TCP或UDP)。一些ICMP报文会把差错报告报文返回给用户进程。

在Windows操作系统、Linux操作系统以及网络设备上可以使用ping命令和tracert命令发送ICMP请求报文,以此来测试网络是否畅通或跟踪数据包到达目的IP地址经过的路由器。

例如,在Windows 10操作系统上利用ping命令查询某网站域名,输出结果如下。可以看到发送了4个ICMP请求报文,收到了来自这个地址的4个ICMP响应报文,这说明网络畅通。

C:\Users\hanlg>ping www.ptpress.com.cn
 
正在 Ping www.ptpress.com.cn [39.96.127.170] 具有 32 字节的数据:
来自 39.96.127.170 的回复: 字节=32 时间=10ms TTL=110
来自 39.96.127.170 的回复: 字节=32 时间=11ms TTL=110
来自 39.96.127.170 的回复: 字节=32 时间=10ms TTL=110
来自 39.96.127.170 的回复: 字节=32 时间=11ms TTL=110
 
39.96.127.170 的 Ping 统计信息:
     数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
     最短 = 4ms,最长 = 4ms,平均 = 4ms

使用tracert命令跟踪数据包途经的路由器时,可以看到,沿途经过12个路由器,第13个是目的IP地址。

C:\Users\hanlg>tracert www.ptpress.com.cn
 
通过最多 30 个跃点跟踪
到 www.ptpress.com.cn [39.96.127.170] 的路由:
 
  1     4 ms     6 ms     8 ms  10.206.32.254
  2     5 ms     4 ms     4 ms  10.1.1.1
  3     4 ms     4 ms     5 ms  124.202.175.62
  4    10 ms     4 ms     5 ms  111.24.8.253
  5     9 ms     9 ms     8 ms  111.24.3.161
  6    38 ms    38 ms    59 ms  221.176.24.241
  7    37 ms    38 ms    39 ms  221.176.22.106
  8    53 ms    39 ms    42 ms  221.176.19.198
  9    77 ms    59 ms    48 ms  221.183.55.81
 10    49 ms    63 ms    65 ms  218.189.5.25
 11    61 ms    70 ms    71 ms  218.189.29.122
 12    47 ms    63 ms    46 ms  10.196.94.241
 13    45 ms    55 ms    47 ms  129.226.71.87

下面通过抓包工具来查看ICMP报文的格式。如图1-26所示,PC1通过ping 192.168.8.2命令发送一个ICMP请求报文到目的IP地址,用来测试网络是否畅通。如果PC2收到ICMP请求报文,就会返回一个ICMP响应报文。

图1-26 ICMP请求和响应

下面介绍如何使用抓包工具捕获链路上的ICMP请求报文和ICMP响应报文,并观察这两种报文的区别。

图1-27展示的是ICMP请求报文。请求报文中有ICMP报文类型、ICMP报文代码、校验和以及ICMP数据部分。ICMP请求报文类型值为8,ICMP报文代码值为0。

图1-27 ICMP请求报文

图1-28展示的是ICMP响应报文。ICMP响应报文类型值为0,ICMP响应报文代码值为0。

图1-28 ICMP响应报文

ICMP报文分几种类型,每种类型又通过代码进一步指明ICMP报文所代表的不同含义。表1-2为常见的ICMP报文类型和代码所代表的含义。

表1-2 常见的ICMP报文类型和代码所代表的含义

ICMP报文类型

类型值

代码

描述

请求报文

8

0

请求回显报文

响应报文

0

0

回显应答报文

差错报告报文

3(终点不可到达)

0

网络不可达

1

主机不可达

2

协议不可达

3

端口不可达

4

需要进行分片但设置了不分片

13

由于路由器过滤,通信被禁止

4(源点抑制)

0

源端被关闭

5(改变路由)

0

对网络重定向

1

对主机重定向

11(超时)

0

传输期间生存时间为0

12(参数问题)

0

坏的IP首部

1

缺少必要的选项

由表1-2可知,ICMP差错报告报文类型值有5种,具体介绍如下。

终点不可到达。当路由器或主机没有到达目的IP地址的路由时,就丢弃该数据包,给源点发送终点不可到达报文。

源点抑制。当路由器或主机由于拥塞而丢弃数据包时,就会向源点发送源点抑制报文,使源点知道应当降低数据包的发送速率。

改变路由(重定向)。路由器把改变路由报文发送给主机,让主机知道下次应将数据包发送给哪个路由器(可通过更好的路由发送)。

时间超时。当路由器收到生存时间为0的数据包时,除了丢弃该数据包以外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据包的全部数据包分片时,就把已收到的数据包分片都丢弃,并向源点发送时间超过报文。

参数问题。当路由器或目的主机收到的数据包的首部中部分字段的值不正确时,就丢弃该数据包,并向源点发送参数问题报文。

1.3.3 ARP

多台计算机通过交换机形成一个局域网(通过交换机组建的网络称作以太网),计算机的网卡和路由器的接口均配置了IP地址,以及固定在网卡上的MAC地址。MAC地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡的闪存芯片上。MAC地址在计算机中都是以二进制数表示的,由48位二进制数组成。

以太网中的计算机通信需要添加IP地址和MAC地址,如图1-29所示,计算机A给计算机C发送数据,交换机根据目的MAC地址转发数据。

图1-29 以太网中的IP地址和MAC地址

以太网中的计算机在通信之前需要先获知目的计算机的MAC地址,这就需要一个根据目的IP地址解析出MAC地址的协议。地址解析协议(Address Resolution Protocol,ARP)可以根据IP地址解析出MAC地址,维护IP地址与MAC地址的映射关系,即ARP表项,以实现网段内重复IP地址的检测。

在Windows操作系统中通过ipconfig /all命令即可查看计算机网卡的MAC地址,如下所示。在Windows操作系统中MAC地址称为“物理地址”,其中展示的是十六进制形式的MAC地址。

C:\Users\hanlg>ipconfig /all
Windows IP 配置
  
   连接特定的 DNS 后缀....... : lan
   描述................ : Intel(R) Dual Band Wireless-AC 3165
   物理地址............. : 00-DB-DF-F9-D1-51
   DHCP 已启用........... : 是
   自动配置已启用.......... : 是
   本地链接 IPv6 地址........ : fe80::65d6:9e31:63a0:9dd1%11(首选)
   IPv4 地址............ : 192.168.2.161(首选)
   子网掩码 ............ : 255.255.255.0
   获得租约的时间 ......... : 2022年4月2日 15:46:18
   租约过期的时间 ......... : 2022年4月2日 16:43:43
   默认网关............. : 192.168.2.1
  

网络设备一般都有一个ARP缓存(ARP Cache)。ARP缓存用来存放IP地址和MAC地址的关联信息(即ARP表项)。在发送数据前,设备会先查找ARP表项。如果ARP表项中存在目的设备的ARP表项,则直接采用该表项中的MAC地址来封装帧,然后发送帧;如果ARP表项中不存在相应信息,则通过发送ARP请求报文来获得。

ARP请求报文的工作过程如图1-30所示。计算机A发送ARP请求报文以解析192.168.1.20的MAC地址,因为计算机A不知道192.168.1.20的MAC地址,所以该请求的目的MAC地址写成广播地址即FF-FF-FF-FF-FF-FF,交换机收到后会将该请求转发到全部端口。

图1-30 ARP请求报文的工作过程

当所有主机接收到该ARP请求报文后,都会检查该报文的目的IP地址是否与自身的IP地址匹配。如果不匹配,该主机将不会响应该ARP请求报文;如果匹配,该主机会将ARP请求报文中的源MAC地址和源IP地址记录到自己的ARP表项中,然后通过ARP响应报文进行响应,如图1-31所示。ARP响应报文的目的MAC地址是计算机A的MAC地址。

图1-31 ARP响应报文的工作过程

学习到的IP地址和MAC地址的映射关系会被放入ARP表项中存放一段时间。在有效期内(默认为180s),设备可以直接从这个表项中查找目的MAC地址来进行数据封装,而无须进行ARP查询。过了有效期,系统会自动删除ARP表项。

如图1-32所示,网络中有两个以太网和一个点到点链路。图中的MA、MB……MF代表对应接口的MAC地址。如果计算机A和同一网段的计算机B通信,计算机A发送ARP广播以解析目的IP地址的MAC地址,解析后,以后通信的帧将直接封装目的IP地址和MAC地址。

图1-32 在同一网段通信过程中计算机A发送ARP广播以解析目的IP地址的MAC地址

如果计算机A和不同网段的计算机F进行通信,计算机A需要解析网关的MAC地址。计算机A发送给计算机F的帧如图1-33所示,注意观察该数据包在两个以太网中封装的IP地址和MAC地址。在传输过程中数据包的源IP地址和目的IP地址是不变的。数据包要从计算机A发送到计算机F,需要经路由器R1的C接口转发,因此在以太网1中的数据包封装的源MAC地址是MA,目的MAC地址是MC。数据包到达路由器R2,就要从R2的D接口发送到计算机F,数据包要重新封装数据链路层相关信息,即源MAC地址为MD,目的MAC地址是MF。

图1-33 在跨网段通信过程中计算机A发送ARP广播以解析网关MAC地址

从跨网段通信帧的封装来看,数据包的目的IP地址决定数据包的终点,帧的目的MAC地址决定数据包下一跳是哪个接口。ARP只能解析同一网段的MAC地址。来自其他网段的计算机的数据包的源MAC地址都是路由器接口的MAC地址。在图1-33中计算机F不知道计算机A的MAC地址,计算机F看到的来自计算机A的数据包的源MAC地址是路由器R2接口D的MAC地址。

提示:

ARP只是在以太网中使用,点到点链路在数据链路层通常使用点到点协议(Point-to-Point Protocol,PPP)。因为PPP定义的帧格式没有MAC地址字段,所以也不用ARP解析MAC地址。

通过ARP解析到MAC地址后以太网接口会缓存解析的MAC地址,在Windows操作系统中执行arp -a命令可以查看ARP表项。其中“动态”类型的条目表明MAC地址(物理地址)是ARP解析得到的,一段时间不使用,就会从缓存中将其清除。

C:\Users\hanlg>arp -a
接口: 192.168.2.161 --- 0xb
  Internet 地址         物理地址                类型
  192.168.2.1           D8-C8-E9-96-A4-61     动态
  192.168.2.255         FF-FF-FF-FF-FF-FF     静态
  224.0.0.22            01-00-5E-00-00-16     静态
  224.0.0.251           01-00-5E-00-00-FB     静态
  224.0.0.252           01-00-5E-00-00-FC     静态
  255.255.255.255       FF-FF-FF-FF-FF-FF     静态

图1-34所示是使用抓包工具捕获的ARP请求数据包。其中第27帧是计算机192.168.80.20为解析192.168.80.30的MAC地址发送的ARP请求数据包。该ARP请求数据包的目的MAC地址为FF: FF: FF: FF: FF: FF,这是为了让网络中的所有设备都能收到。其中Opcode是选项代码,指示当前数据包是请求报文还是响应报文,ARP请求报文的值是0x0001,ARP响应报文的值是0x0002,响应报文是单播帧。

第28帧是ARP响应数据包,可以看到该数据包的目的MAC地址不是广播地址,而是192.168.80.20的MAC地址。

ARP是建立在网络中各台主机互相信任的基础上的。计算机A发送ARP广播以解析计算机C的MAC地址,同一网段的计算机都能够收到这个ARP请求报文,任何一个主机都可以给计算机A发送ARP响应报文,这些响应报文可能告诉计算机A错误的MAC地址,计算机A收到ARP响应报文时并不会检测该报文的真实性,而是会将其直接存入本机的ARP表项,这样就存在ARP欺骗的安全隐患。

图1-34 ARP请求数据包和ARP响应数据包

1.4 数据链路层协议

数据链路层协议负责将数据包封装成帧,从链路的一端传到另一端。如图1-35所示,PC1与PC2通信,需要经过链路1、链路2……链路5。计算机连接交换机的链路是以太网链路,以太网链路使用带冲突检测的载波监听多路访问(Carrier Sense Multiple Access with Collision Detection,CSMA/CD)协议。路由器和路由器之间的连接为点到点链路,针对这种链路的数据链路层协议有PPP、高级数据链路控制(High Level Data Link Control,HDLC)协议等。不同的数据链路层协议定义了不同的帧格式。

图1-35 链路和数据链路层协议

通过命令行进入R1路由器的Serial 2/0/0接口视图,执行link-protocol ?命令可以看到该接口支持的数据链路层协议。执行link-protocol ppp命令,可以将该接口配置为使用PPP。

[R1]interface Serial 2/0/0
[R1-Serial2/0/0]link-protocol ?
  fr    Select FR as line protocol
  hdlc  Enable HDLC protocol
  lapb  LAPB(X.25 level 2 protocol)
  ppp   Point-to-Point protocol 
  sdlc  SDLC(Synchronous Data Line Control) protocol 
  x25   X.25 protocol
[Huawei-Serial2/0/0]link-protocol ppp

常见的数据链路层协议有CSMA/CD协议、PPP、HDLC协议、帧中继(Frame Relay,FR)、X.25等,这些数据链路层协议都具备3个基本功能,即封装成帧、透明传输和差错检验。

1.封装成帧

封装成帧是指在网络层的IP数据包的前后分别添加首部和尾部,以构成一个帧。如图1-36所示,不同的数据链路层协议的帧首部和帧尾部包含的信息有明确的规定,帧首部和帧尾部有帧开始符和帧结束符,统称为帧定界符。接收端收到物理层传过来的数字信号,从读取到帧开始符一直到帧结束符,就认为接收到一个完整的帧。

图1-36 通过添加帧首部和帧尾部来封装成帧

在数据传输过程中出现差错时,帧定界符的作用将更加明显。如果发送端在尚未发送完一个帧时突然出现故障,中断发送,接收端收到只有帧开始符没有帧结束符的帧,就认为是一个不完整的帧,必须丢弃。

为了提高数据链路层传输效率,应当使帧的数据部分尽可能大于帧首部和帧尾部的长度。但是每一种数据链路层协议都规定了所能够传送帧的数据部分长度的上限——最大传输单元(MTU),如以太网的MTU为1 500字节。

2.透明传输

帧开始符和帧结束符最好选择不会出现在帧的数据部分的字符,如果帧数据部分出现帧开始符和帧结束符,就要插入转义字符,接收端接收时看到转移字符就会将其去掉,把转义字符后面的字符当作数据来处理。如图1-37所示,某数据链路层协议的帧开始符为SOH,帧结束符为EOT。转义字符选定为ESC。节点A给节点B发送数据帧,在将其发送到数据链路之前,在数据中出现SOH、ESC和EOT字符编码之前的位置插入转义字符ESC的编码,这个过程就是字节填充。节点B接收之后,再去掉填充的转义字符,视转义字符后的字符为数据。

节点A在发送帧之前在原始数据中的必要位置插入转义字符,节点B收到后去掉转义字符,又得到原始数据。中间插入转义字符是要让传输的原始数据原封不动地发送到节点B,这个过程称为“透明传输”。

图1-37 使用字节填充实现透明传输

3.差错检验

现实的通信链路通常都不会是理想的。也就是说,比特在传输过程中可能会产生差错。1可能会变成0,而0也可能变成1,这就叫作比特差错。比特差错是传输差错中的一种。在一段时间内,错误传输的比特数与所传输比特总数之比称为误码率。例如,误码率为10−10时,表示平均每传送1010个比特就会出现一个比特的差错。误码率与信噪比有很大的关系。提高信噪比,就可以使误码率降低。但实际的通信链路并非理想的,它不可能使误码率降到0。因此,为了保证数据传输的可靠性,计算机在通过网络传输数据时,必须采用各种差错检验措施。目前在数据链路层广泛使用的是循环冗余校验(Cyclic Redundancy Check,CRC)差错检验技术。

想让接收端能够判断帧在传输过程中是否出现差错,需要在传输的帧中包含用于检验错误的信息,这部分信息称为帧检验序列(Frame Check Sequence,FCS)。如图1-38所示,使用帧的数据部分和数据链路层首部来计算FCS,并将其放到帧的末尾。接收端收到后,再使用帧的数据部分和数据链路层首部计算FCS,比较两个FCS是否相同,如果相同则认为在传输过程中没有出现差错,否则接收端丢弃该帧。

图1-38 帧检验序列工作过程

1.5 TCP/IPv4栈和OSI参考模型

1.5.1 TCP/IPv4栈

通过对应用层协议、传输层协议、网络层协议和数据链路层协议的讲解,可以看出计算机通信使用的是一组协议,这一组协议称为TCP/IPv4栈。TCP/IPv4栈是目前结构最完整、使用最广泛的通信协议,可使采用不同硬件结构、不同操作系统的计算机相互通信。如图1-39所示,TCP/IPv4 栈的每一个协议都是独立的,它们共同工作才能实现网络中计算机之间的通信。TCP/IPv4栈的主要协议有TCP和IPv4两个。

图1-39 TCP/IPv4栈包含的协议

为什么说计算机通信需要这一组协议呢?怎么理解分层呢?各层之间又具有怎样的关系呢?下面以网络购物为例进行说明。

在网络购物的过程中,商家和顾客之间需要购物协议,双方按照电子商务网站规定的流程完成交易:商家提供商品;顾客浏览商品,选定商品款式,网上付款到电子商务网站;商家发货;顾客收到货后确认收货,电子商务网站将货款支付给商家;如果顾客对收到的商品不满意,还可以退货;顾客可以评价购买的商品。这就是购物的流程,也可以认为是网络购物所使用的“协议”。购物协议的甲方、乙方分别是商家和顾客,网络购物协议规定了购物流程,即商家的行为、顾客的行为、操作顺序等。例如,商家不能在顾客付款前发货,顾客不能在未购物的情况下对商品做出评价等。这样的“网络购物协议”就相当于计算机通信时使用的应用层协议。类似的还有网络订餐、访问网站、收发电子邮件、远程登录等,每一种应用程序都需要应用层协议。

那么,只要有网络购物协议(这一层协议)就能实现网络购物吗?众所周知,购买的商品还需要快递员送到顾客手中,如果顾客不满意,退货时也需要快递给商家。也就是说网络购物还需要快递公司提供物流功能。顺丰速递、圆通速递、中通快递等快递公司实现的均是此类功能,即为网络购物提供物流服务。

值得注意的是,快递公司投递快件也需要一层协议,即快递协议。快递协议规定了快件投送的流程以及投送快递需要填写的快递信息。客户按照快递单要求的内容,在指定的地方填写相关信息。快递公司根据收件人所在的城市分拣快件,选择托运路线,到达目的城市后,快递人员根据快递单上的具体地址信息投送快件给收件人。图1-40展示了一份快递单。IP定义的IP首部就相当于快递公司的快递单,其目的就是把数据包发送到目的IP地址。

类似快递公司为网络购物提供物流服务,TCP/IPv4栈所包含的四层协议间也存在“服务”关系,即下层协议为其上层协议提供服务。

图1-40 快递单

图1-41展示了TCP/IPv4栈的分层和每层协议的作用范围。既然是协议,就有甲方和乙方。应用层协议的甲方、乙方分别是服务端和客户端,实现应用程序的功能。传输层协议的甲方、乙方分别位于相互通信的两台计算机中,TCP为应用层协议实现可靠传输,UDP为应用层协议提供报文转发服务。网络层协议中的IP为数据包跨网段转发选择路径,IP是多方协议,包括通信的两台计算机和沿途经过的路由器。网络接口层负责将网络层的数据包从链路的一端发送到另一端。同一链路中的设备是网络接口层协议的对等实体。网络接口层协议的作用范围是一段链路,不同类型的链路有不同的网络接口层协议。如图1-41所示,以太网链路使用CSMA/CD协议,点到点链路使用PPP。

图1-41 TCP/IPv4栈的分层及每层协议的作用范围

下面介绍将计算机通信协议分层后的好处。

(1)各层之间是独立的。某一层并不需要知道它的下一层如何实现,仅需要知道下一层通过层间接口所提供的服务。上层对下层来说就是要处理的数据,如图1-42所示。应用层协议要传输的数据称为报文,加上TCP首部后称为段,段加上IP首部后称为数据包,数据包加上以太网首部后称为帧,这个过程叫作封装。接收端收到帧后,去掉以太网封装的首部,去掉IP首部,去掉TCP首部,应用程序接收到报文,这个过程称为解封。

图1-42 各层之间的关系

(2)灵活性高。某一层有所改进和变化时不会影响其他层。比如IPv4实现的是网络层功能,如果升级为IPv6,实现的仍然是网络层功能;传输层的TCP和UDP不用做任何变动,网络接口层使用的协议也不用做任何变动。如图1-43所示,计算机可以使用TCP/IPv4和TCP/IPv6进行通信。

图1-43 IPv4和IPv6实现的功能一样

(3)各层都可以采用最合适的技术来实现。比如适合布线的就使用双绞线连接网络,有障碍物的就通过无线网络覆盖等。

(4)促进标准化工作。路由器实现网络层功能,交换机实现网络接口层功能,不同厂家的路由器和交换机能够相互连接以实现计算机通信,就是因为有了网络层标准和网络接口层标准。

(5)分层后有助于将复杂的计算机通信问题拆分成多个简单的问题,以及排除网络故障。比如,由于计算机没有设置网关而造成的网络故障属于网络层问题;由于MAC地址冲突而造成的网络故障属于网络接口层问题;由于Web浏览器设置了错误的代理服务器而导致无法网站的网络故障属于应用层问题。

1.5.2 OSI参考模型与TCP/IPv4栈之间的关系

前面内容介绍的TCP/IPv4栈是Internet通信的工业标准。网络刚开始出现时,典型情况下只能在同一制造商制造的计算机之间进行通信。20世纪70年代后期,ISO创建的OSI参考模型打破了这一壁垒。

OSI参考模型将计算机通信过程按功能划分为7层,并规定了每一层实现的功能。这样Internet设备供应商以及软件公司就能参照OSI参考模型来设计自己的硬件和软件。不同供应商的网络设备之间能够协同工作。

OSI参考模型不是具体的协议,TCP/IPv4栈才是具体的协议。那么怎么理解它们之间的关系呢?例如,ISO定义了汽车参考模型,规定汽车要有动力系统、转向系统、制动系统、变速系统等,这就相当于OSI参考模型定义的计算机通信每一层所要实现的功能。汽车厂商(如奥迪)参照汽车参考模型研发汽车,实现了汽车参考模型的全部功能,那么此时的奥迪汽车就相当于TCP/IPv4栈。而如果奥迪汽车的动力系统有的使用汽油,有的使用天然气,发动机有的是8缸,有的是10缸,那么实现的功能就都是汽车参考模型的动力系统功能。同样,OSI参考模型只定义了计算机通信每层要实现的功能,并没有规定如何实现以及实现的细节,不同的协议栈实现方法可以不同。

在ISO制定的OSI参考模型中,计算机通信构架可以分成7层,各层的具体介绍如下。

应用层:应用层协议用于实现应用程序的功能。Internet中的应用程序有很多种,比如访问网站、收发电子邮件、访问文件服务器等,因此,应用层协议也有很多种。应用层协议规定了客户端能够向服务端发送哪些请求(命令)、服务端能够向客户端返回哪些响应、使用的报文格式、命令的交互顺序等。

表示层:表示层为应用层传送的信息提供表示方法。如果应用层传输的是字符文件,则要使用字符集将其转换成数据;如果应用层传输的是图片文件或应用程序的二进制文件,则要通过编码将其转换成数据。数据在传输前是否压缩、是否加密处理都是表示层要解决的问题。发送端的表示层和接收端的表示层是协议的双方,加密和解密、压缩和解压缩、将字符文件编码和解码都要遵循表示层协议的规范。

会话层:会话层为通信的客户端和服务端建立会话、保持会话和断开会话。建立会话:计算机A和计算机B之间进行通信,就要建立一条会话以供它们使用;在建立会话的过程中会经历身份认证、权限鉴定等环节。保持会话:建立会话后,通信双方开始传输数据,当数据传输完成后,会话层不一定会立即断开这条通信会话,它会根据应用程序和应用层的设置对会话进行维持,在会话维持期间,通信双方可以随时使用会话传输数据。断开会话:当应用程序或应用层规定的超时时间到期,或计算机A/B重启、关机,或手动断开会话,会话层会断开计算机A和计算机B之间的会话。

传输层:传输层主要为主机之间通信的进程提供端到端服务,以及处理数据包错误、数据包次序错误等传输问题。传输层是计算机通信架构中关键的一层,它使用了网络层提供的数据转发服务,可以向上层屏蔽下层数据的通信细节,使用户完全不用考虑物理层、数据链路层和网络层工作的详细情况。

网络层:网络层负责数据包从源网络传输到目的网络过程中的路由选择工作。Internet是一个由多个网络组成的集合。正是借助网络层的路由选择功能,多个网络之间的通信才得以畅通,信息才得以共享。

数据链路层:数据链路层负责将数据从链路的一端传输到另一端,传输的基本单位为帧,并为网络层提供差错控制和流量控制服务。

物理层:物理层是OSI参考模型中的底层,主要定义了系统的电气、机械、过程和功能标准,如电压、带宽、最大传输距离和其他特性。物理层的主要功能是利用传输介质为数据链路层提供物理传输工作。物理层传输的基本单位是比特,即0和1,也就是最基本的电信号或光信号。

TCP/IP分层对OSI参考模型进行了合并简化,如图1-44所示。

图1-44 OSI参考模型和TCP/IP分层的对应关系

1.6 习题

一、选择题

1.计算机通信实现可靠传输的是TCP/IPv4栈的哪一层?(  )

A.物理层

B.应用层

C.传输层

D.网络层

2.由IPv4升级到IPv6,对TCP/IPv4栈来说是哪一层做了更改?(  )

A.数据链路层

B.网络层

C.应用层

D.物理层

3.ARP有何作用?(  )

A.将计算机的MAC地址解析成IP地址

B.域名解析

C.可靠传输

D.将IP地址解析成MAC地址

4.TCP和UDP端口号的范围是多少?(  )

A.0~256

B.0~1 023

C.0~65 535

D.1 024~65 535

5.下列网络协议中,默认使用TCP的25端口的是________?(  )

A.HTTP

B.Telnet

C.SMTP

D.POPv3

6.在Windows操作系统中,查看侦听的端口使用的命令是________?(  )

A.ipconfig /all

B.netstat -an

C.ping

D.Telnet

7.在Windows操作系统中,ping命令使用的协议是________?(  )

A.HTTP

B.IGMP

C.TCP

D.ICMP

8.关于OSI参考模型中网络层的功能,说法正确的是________。(  )

A.OSI参考模型中最靠近用户的一层,为应用程序提供网络服务

B.在设备之间传输比特流,规定了电平、速率和电缆针脚

C.提供面向连接或非面向连接的数据传递以及进行重传前的差错检测

D.提供逻辑地址,供路由器确定路径

9.OSI参考模型从高层到低层分别是________。(  )

A.应用层、会话层、表示层、传输层、网络层、数据链路层、物理层

B.应用层、传输层、网络层、数据链路层、物理层

C.应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

D.应用层、表示层、会话层、网络层、传输层、数据链路层、物理层

10.网络管理员使用ping命令来测试网络的连通性,在这个过程中下面哪些协议可能会被使用到(多选)。(  )

A.ARP

B.TCP

C.ICMP

D.IP

二、简答题

1.图1-45所示是在Windows操作系统(客户端)上捕获的访问文件服务器(服务端)共享文件夹的数据包,根据图中显示的内容回答以下问题。

图1-45 捕获的数据包

(1)文件服务器的IP地址和MAC地址是什么?

(2)建立TCP连接的3个数据包是哪3个?服务端在建立TCP连接时接收窗口是多少字节?

(3)SMB(Server Message Block,服务器信息块)协议属于哪一层的协议?SMB协议在传输层使用的是TCP还是UDP?端口号是多少?

2.根据图1-46所示的第7个数据包在传输层中的内容,写出第8个数据包在传输层中Sequence Number的值,以及Source Port和Destination Port的值。

图1-46 传输层中的数据包

3.某台计算机中了“病毒”,在网上发ARP广播,观察图1-47中的数据包,找出是哪一台计算机发送的ARP广播。

图1-47 ARP广播

4.TCP/IP按什么分层?写出每层协议实现的功能。

5.列出几个常见的应用层协议。

6.应用层协议要定义哪些内容?

7.写出传输层的两个协议及其应用场景。

8.写出网络层的4个协议及其功能。

相关图书

内网渗透技术
内网渗透技术
一书读懂物联网:基础知识+运行机制+工程实现
一书读懂物联网:基础知识+运行机制+工程实现
华为网络技术系列 园区网络架构与技术(第2版)
华为网络技术系列 园区网络架构与技术(第2版)
云数据中心网络架构与技术(第2版)
云数据中心网络架构与技术(第2版)
Dapr与.NET微服务实战
Dapr与.NET微服务实战
IPv6网络部署实战(锐捷版)
IPv6网络部署实战(锐捷版)

相关文章

相关课程