第一章.HCIA复习
引入场景
其实IA我们主要学习的无非就是数据包在网络中传递的基本过程,我们设计一个场景,通过回顾web页面的请求过程,将IA学过的基本网络工作原理来串一遍。
(在本例中,ISP网络为学校提供了DNS服务,所以,DNS服务器驻留在ISP网络内,而不再学校网络内。DHCP.服务器运行在路由器中,就像常见的情况一样。)
首先,小明拿了一台电脑,通过网线,接入到校园网内部。其目的是为了访问baidu网站,即baidu的web服务器(上图写的是谷歌服务器)。
这里,我们先来思考一个问题,这里说的可以访问baidu服务器是啥意思?
其实说白了就是小明想通过baidu来查询一些资料信息,那么,就需要和baidu服务器交互,将他想查询的信息告诉百度服务器,之后,再由baidu服务器将他期望得到的结果反馈回来。整个这个过程其实就是我们网络中进行信息交互的一个过程。
当然,我们发送的查询信息和收到的结果肯定都是文字,图片或者视频这样人类可以识别的内容。我们将这些称为抽象语言。那我们的电脑可以识别这些抽象语言吗?电脑可以直接传递这些抽象语言吗?答案一定是否定的,电脑电脑,从名字我们就可以推断出来,他所识别的一定是电信号。并且,我们通过计算机网络传递的也是电信号,可以想象一下,我们绝对不可能说是将某一段网线剪断,里面直接播放一段音乐出来吧。
那对于机器而言,他们识别的或者传递的都是电信号,而我们想要去传递的是我们自己可以识别的抽象语言那这之间就必然会存在一个转换过程在里面。而我们计算机首要要完成的一个任务就是要完成这个转换过程才行。他需要将这些抽象语言转换成电信号供其处理或者传递。那我们就先来分析一下我们计算机将抽象语言转换成电信号的过程吧。
首先,我们需要把抽象语言转换称编码。因为抽象语言的处理和传递都需要依赖应用程序,而这些程序都是由我们的编程语言来完成的。不同的编程语言都只是人类和计算机沟通的工具,最终他们需要统一转换成机器语言,我们可以称其为编码。也就是说,计算机处理数据的第一步就是将抽象语言转换成编码。
这些编码依然不是数据处理的最终形态,因为他们还是无法直接被计算机识别。计算机识别的是电信号,也就是高低电平的电脉冲信号。我们的数据需要具备类似的特征才能够被转换。而具备类似特征的便是我们熟知的二进制。所以,我们还需要把编码转换成二进制。都变成二进制之后,就需要依据这些二进制的数字特征,转换成高低电平的电脉冲信号了。
如果将计算机看作是一个工厂,那以上的这些步骤就需要分配到不同的工序来完成。大概可以分为四个工序:
抽象语言---编码
编码---二进制
二进制---电信号
处理电信号
以上是我们大概总结的一个计算机信号转换的过程。当然,这些处理和传递的过程-定是需要依照一-定的标准来执行的,这些标准我们称之为协议。为了更方便的统一标准,我们也专门为整个通信过程建立了标准化的模型,也就是我们的OSl参考模型。
OSI参考模型
这是我们要复习的第一个模块,也是网络基础知识中的一个重点。
首先从名字说起:O--代表的是open,可以理解为开放的意思。S--代表的是system,可以理解为系统。l--代表的是Interconnection,可以翻译为互联。整个翻译下来应该是开放式系统互联参考模型。一般书本上存在OSI/RM这样的写法,其中RM是Reference Model的意思,翻译为参考模型。
说下这个模型出现的背景,这个模型是1979年ISO(国际标准化组织)颁布的。当时社会上人们对计算机网络技术的认知逐渐成熟。各大厂商竞相推出自己的通信标准,导致市场百花齐放,但这样并不利于/界通信的统一,想要完成统一,就必须需要一个统一的标准才行。这时候,ISO站出来了,推出了OSI七层参考模型。
回顾下OSI参考模型的七层:
应用层
首先是应用层。其最主要作用就是完成我们刚才归纳的第一步工序,将抽象语言转换成编码,因为这个过程本身就是由程序编译来完成的。(有的地方说明应用层是提供人机交互的接口,也非常的准确,因为,应用程序本身就是联通了人和设备)
OSI参考模型的最高层。其功能是实现应用进程(如用户程序、终端操作员等)之间的信息交换。同时,还具有一系列业务处理所需要的服务功能。应用层一般包括公共应用服务要素(CASE)和特定应用服务要素(SASE>。其中CASE提供应用进程中最基本的服务,向应用进程提供信息传送所必需的、但又独立于应用进程通信的能力。SASE实质上是各种应用进程在应用层中的映射,每一个SASE都针对某一类具体应用,例如文件传送、访问和管理(FTAM)、虚拟终端(VT)、消息处理系统(MHS)、电子数据互换(EDI)和目录查询等。
应用层向应用程序提供服务,这些服务按其向应用程序提供的特性分成组,并称为服务元素。有些可为多种应用程序共同使用,有些则为较少的一类应用程序使用。应用层是开放系统的最高层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务。
应用层是OSI参考模型的最高层,它是计算机用户,以及各种应用程序和网络之间的接口,该层的主要功能是:直接向用户提供服务,完成用户希望在网络上完成的各种工作。它在其他6层工作的基础上,负责完成网络中应用程序与网络操作系统之间的联系,建立与结束使用者之间的联系,并完成网络用户提出的各种网络服务及应用所需的监督、管理和服务等各种协议。此外该层还负责协调各个应用程序间的工作。应用层的具体功能如下:
-
用户接口:应用层是用户与网络,以及应用程序与网络间的直接接口,使得用户能够与网络进行交互式联系。
-
实现各种服务:该层具有的各种应用程序可以完成和实现用户请求的各种服务。
表示层
下来是表示层。他承接的就是我们的第二道工序,将编码转换为二进制。其实这个工作也可由应用程序独立完成。(有些地方说其作用是编码,解码,加密解密等,其实质就是将格式进行统一,最终都统一成为计算机需要识别的二进制)
数据表示形式的控制层,其主要功能是把应用层提供的信息变换为能够共同理解的形式,提供字符代码、数据格式、控制信息格式、加密等的统一表示。表示层的作用之一是为异种机通信提供一种公共语言,以便能进行互操作。这种类型的服务之所以需要,是因为不同的计算机体系结构使用的数据表示法不同。例如,IBM主机使用EBCDIC编码,而大部分PC机使用的是ASCII码。在这种情况下,便需要表示层来完成这种转换。通过前面的介绍,我们可以看出,会话层以下5层完成了端到端的数据传送,并且是可靠的、无差错的传送。但是数据传送只是手段而不是目的,最终是要实现对数据的使用。由于各种系统对数据的定义并不完全相同,最易明白的例子是键盘——其上的某些键的含义在许多系统中都有差异。这自然给利用其它系统的数据造成了障碍。表示层和应用层就担负了消除这种障碍的任务。
表示层是OSI模型的第六层,它对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。该层的主要功能是:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。表示层的具体功能如下:
-
数据格式处理:协商和建立数据交换的格式,解决各应用程序之间在数据格式表示上的差异。
-
数据的编码:处理字符集和数字的转换。
-
压缩和解压缩:为了减少数据的传输量,这一层还负责数据的压缩与恢复。
-
数据的加密和解密:可以提高网络的安全性。
会话层
在下来是会话层。会话层的主要工作是维持网络应用和网络服务器之间的会话链接。比如我们的QQ,我们QQ挂在这随时可以收到别人发过来的消息。注意,这个消息不是别人的主机直接发给你的,而是通过QQ服务器中转后发给你的。我们能随时收到这个消息,就说明我们和服务其之间的会话链接并没有中断。而维持这一过程的就是我们的会话层的工作。当然,我们也可以看出来,并不是所有的应用都需要维持这样的会话来连接的,所以,会话层的工作也并不是一个必须的处理,这也取决于具体的应用。
会话单位的控制层,其主要功能是按照在应用进程之间约定的原则,按照正确的顺序收、发数据,进行各种形态的对话。会话层规定了会话服务用户间会话连接的建立和拆除规程以及数据传送规程。
会话层提供的服务是应用建立和维持会话,并能使会话获得同步。会话层使用校验点可使通信会话在通信失效时从校验点继续恢复通信。这种能力对于传送大的文件极为重要。会话层,表示层,应用层构成开放系统的高3层,面向应用进程提供分布处理、对话管理、信息表示、检查和恢复与语义上下文有关的传送差错等。为给两个对等会话服务用户建立一个会话连接,应该做如下几项工作:
-
将会话地址映射为运输地址;
-
数据传输阶段;
-
连接释放。
会话层是OSI模型的第5层,是用户应用程序和网络之间的接口,该层的主要功能是:组织和协调两个会话进程之间的通信 ,并对数据交换进行管理。当建立会话时,用户必须提供他们想要连接的远程地址。而这些地址与MAC地址或网络层的逻辑地址不同,它们是为用户专门设计的,更便于用户记忆。域名就是一种网络上使用的远程地址。会话层的具体功能如下:
-
会话管理:允许用户在两个实体设备之间建立、维持和终止会话,并支持它们之间的数据交换。
-
会话流量控制:提供会话流量控制和交叉会话功能。
-
寻址:使用远程地址建立会话连接。
-
出错控制:从逻辑上讲会话层主要负责数据交换的建立、保持和终止,但实际的工作却是接收来自传输层的数据,并负责纠正错误。
传输层
端开放系统之间的数据传送控制层。主要功能是端开放系统之间数据的收妥确认。同时,还用于弥补各种通信网路的质量差异,对经过下三层之后仍然存在的传输差错进行恢复,进一步提高可靠性。另外,还通过复用、分段和组合、连接和分离、分流和合流等技术措施,提高吞吐量和服务质量。
传输层是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用。当网络层服务质量不能满足要求时,它将服务加以提高,以满足高层的要求;当网络层服务质量较好时,它只用很少的工作。传输层还可进行复用,即在一个网络连接上创建多个逻辑连接。传输层也称为运输层。传输层只存在于端开放系统中,是介于低3层通信子网系统和高3层之间的一层,但是很重要的一层。因为它是源端到目的端对数据传送进行控制从低到高的最后一层。
有一个既存事实,即世界上各种通信子网在性能上存在着很大差异。例如电话交换网,分组交换网,公用数据交换网,局域网等通信子网都可互连,但它们提供的吞吐量,传输速率,数据延迟通信费用各不相同。对于会话层来说,却要求有一性能恒定的界面。传输层就承担了这一功能。它采用分流/合流,复用/介复用技术来调节上述通信子网的差异,使会话层感受不到。
此外传输层还要具备差错恢复,流量控制等功能,以此对会话层屏蔽通信子网在这些方面的细节与差异。传输层面对的数据对象已不是网络地址和主机地址,而是会话层的界面端口。上述功能的最终目的是为会话提供可靠的,无误的数据传输。传输层的服务一般要经历传输连接建立、数据传送、传输连接释放3个阶段才算完成一个完整的服务过程。而在数据传送阶段又分为一般数据传送和加速数据传送两种。
OSI下3层的任务是数据通信,上3层的任务是数据处理。而传输层(Transport Layer)是OSI模型的第4层。该层提供建立、维护和拆除传输连接的功能,起到承上启下的作用。该层的主要功能是:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输,同时向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。
TCP
TCP报文由首部和数据两部分组成。首部一般由20-60字节(Byte)构成,长度可变。其中前20B格式固定,后40B为可选。 因为,TCP报文还得传给下层网络层,封装成IP包,而一个IP包最大长度为65535,同时IP包首部也包含最少20B,所以一个IP包或TCP包可以包含的数据部分最大长度为65535-20-20=65495B。
TCP报文中数据部分是可选的,即TCP报文可以不包含数据(同理IP包也可以不包含数据)。不含数据的TCP报文通常是一些确认和控制信息类的报文,如TCP建立连接时的三次握手和TCP终止时的四次挥手等。
- 1、源端口号(Source Port) 16位的源端口字段包含初始化通信的端口号。源端口和IP地址的作用是标识报文的返回地址。
- 2、目的端口号(Destination Port) 16位的目的端口字段定义传输的目的。这个端口指明接收方计算机上的应用程序接口。
- 3、序列号(Sequence Number) 该字段用来标识TCP源端设备向目的端设备发送的字节流,它表示在这个报文段中的第几个数据字节。序列号是一个32位的数。
- 4、确认号(Acknowledge Number) TCP使用32位的确认号字段标识期望收到的下一个段的第一个字节,并声明此前的所有数据已经正确无误地收到,因此,确认号应该是上次已成功收到的数据字节序列号加1。收到确认号的源计算机会知道特定的段已经被收到。确认号的字段只在ACK标志被设置时才有效。
- 5、首部长度 长度为4位,用于表示TCP报文首部的长度。用4位(bit)表示,十进制值就是[0,15],一个TCP报文前20个字节是必有的,后40个字节根据情况可能有可能没有。如果TCP报文首部是20个字节,则该位应是20/4=5。
- 6、保留位(Reserved) 长度为6位,必须是0,它是为将来定义新用途保留的。
- 7、标志(Code Bits)长度为6位,在TCP报文中不管是握手还是挥手还是传数据等,这6位标志都很重要。6位从左到右依次为:
• URG:紧急标志位,说明紧急指针有效; • ACK:确认标志位,多数情况下空,说明确认序号有效; 取1时表示应答字段有效,也即TCP应答号将包含在TCP段中,为0则反之。 • PSH:推标志位,置位时表示接收方应立即请求将报文交给应用层; • RST:复位标志,用于重建一个已经混乱的连接,用来复位产生错误的连接,也会用来拒绝错误和非法的数据包。 • SYN:同步标志,该标志仅在三次握手建立TCP连接时有效 • FIN:结束标志,表示发送端已经发送到数据末尾,数据传送完成,发送FIN标志位的TCP段,连接将被断开。
- 8、窗口大小(Window Size) 长度为16位,TCP流量控制由连接的每一端通过声明的窗口大小来提供。
- 9、检验和(Checksum) 长度为16位,该字段覆盖整个TCP报文端,是个强制性的字段,是由发送端计算和存储,到接收端后,由接收端进行验证。
- 10、紧急指针(Urgent Pointer) 长度为16位,指向数据中优先部分的最后一个字节,通知接收方紧急数据的长度,该字段在URG标志置位时有效。
- 11、选项(Options) 长度为0-40B(字节),必须以4B为单位变化,必要时可以填充0。通常包含:最长报文大小(MaximumSegment Size,MSS)、窗口扩大选项、时间戳选项、选择性确认(Selective ACKnowlegement,SACK)等。
- 12、数据 可选报文段数据部分。
- 8、窗口大小(Window Size) 长度为16位,TCP流量控制由连接的每一端通过声明的窗口大小来提供。
- 9、检验和(Checksum) 长度为16位,该字段覆盖整个TCP报文端,是个强制性的字段,是由发送端计算和存储,到接收端后,由接收端进行验证。
- 10、紧急指针(Urgent Pointer) 长度为16位,指向数据中优先部分的最后一个字节,通知接收方紧急数据的长度,该字段在URG标志置位时有效。
- 11、选项(Options) 长度为0-40B(字节),必须以4B为单位变化,必要时可以填充0。通常包含:最长报文大小(MaximumSegment Size,MSS)、窗口扩大选项、时间戳选项、选择性确认(Selective ACKnowlegement,SACK)等。
- 12、数据 可选报文段数据部分。
UDP
UDP数据报由首部和数据两部分组成,其中首部只有8B(字节)。
- 1、源端口号(Source Port) 长度为16位,指明发送数据的进程。
- 2、目的端口号(Destination Port) 长度为16位,指明目的主机接收数据的进程。
- 3、长度 长度为16位,该字段值为报头和数据两部分的总字节数。
- 4、检验和(Checksum) 长度为16位,UDP检验和作用于UDP报头和UDP数据的所有位。由发送端计算和存储,由接收端校验。
- 5、数据
网络层
网络层的产生也是网络发展的结果。在联机系统和线路交换的环境中,网络层的功能没有太大意义。当数据终端增多时。它们之间有中继设备相连,此时会出现一台终端要求不只是与惟一的一台而是能和多台终端通信的情况,这就产生了把任意两台数据终端设备的数据链接起来的问题,也就是路由或者叫寻径。另外,当一条物理信道建立之后,被一对用户使用,往往有许多空闲时间被浪费掉。人们自然会希望让多对用户共用一条链路,为解决这一问题就出现了逻辑信道技术和虚拟电路技术。
中继控制层,其主要功能是利用数据链路层所保证的邻接节点间的无差错数据传输功能,通过路由选择和中继功能,实现两个端系统之间的数据传输。为此,网络层还具有多路复用功能,采用统计时分复用原理,将一条数据链路复用为多条逻辑信道,从而实现一个数据终端设备利用一条物理电路同时和多个远程数据通信设备的通信。网络层规定了网路连接的建立和拆除规程以及数据传送规程等。
网络层为建立网络连接和为上层提供服务,应具备以下主要功能:
-
路由选择和中继;
-
激活,终止网络连接;
-
在一条数据链路上复用多条网络连接,多采取分时复用技术;
-
检测与恢复;
-
排序,流量控制;
-
服务选择;
-
网络管理。
网络层(Network Layer)是OSI模型的第三层,它是OSI参考模型中最复杂的一层,也是通信子网的最高一层,它在下两层的基础上向资源子网提供服务。其主要功能是:在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接,将数据设法从源端经过若干个中间节点传送到目的端(点到点),从而向传输层提供最基本的端到端的数据传输服务。具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。数据链路层和网络层的区别为:数据链路层的目的是解决同一网络内节点之间的通信,而网络层主要解决不同子网间的通信。
下面具体分析IP包头中各部分的作用。
-
版本号(Version):长度4比特。标识目前采用的IP协议的版本号。一般的值为0100(IPv4),0110(IPv6)
- IP包头长度(Header Length):长度4比特。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占4个bit位,单位为32bit(4个字节),即本区域值= IP头部长度(单位为bit)/(84),因此,一个IP包头的长度最长为“1111”,即154=60个字节。IP包头最小长度为20字节。
- 服务类型(Type of Service):长度8比特。8位 按位被如下定义 PPP D T R C 0
PPP:定义包的优先级 000 普通 (Routine) 001 优先的 (Priority) 010 立即的发送 (Immediate) 011 闪电式的 (Flash) 100 比闪电还闪电式的 (Flash Override) 101 CRI/TIC/ECP (不知道虾米意思) 110 网间控制 (Internetwork Control) 111 网络控制 (Network Control)
D 时延: 0:普通 1:尽量小 T 吞吐量: 0:普通 1:尽量大 R 可靠性: 0:普通 1:尽量大 M 传输成本: 0:普通 1:尽量小 0 最后一位被保留,恒定为0
- IP包总长(Total Length):长度16比特。 以字节为单位计算的IP包的长度 (包括头部和数据),所以IP包最大长度65535字节。
- 标识符(Identifier)(数据报ID):长度16比特。该字段和Flags和Fragment Offest字段联合使用,对大的上层数据包进行分段(fragment)操作。路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。
- 标记(Flags):长度3比特。该字段第一位不使用。第二位是DF(Don’t Fragment)位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF(More Fragments)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1。
- 片偏移(Fragment Offset):长度13比特。表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。
- 生存时间(TTL):长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于路由环路而导致IP包在网络中不停被转发。
- 协议(Protocol):长度8比特。标识了上层所使用的协议。 以下是比较常用的协议号:
1 ICMP 2 IGMP 6 TCP 17 UDP 88 IGRP 89 OSPF
- 头部校验(Header Checksum):长度16位。用来做IP头部的正确性检测,但不包含数据部分。 因为每个路由器要改 变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。
- 起源和目标地址(Source and Destination Addresses):这两个地段都是32比特。标识了这个IP包的起源和目标地址。要注意除非使用NAT,否则整个传输的过程中,这两个地址不会改变。
- 至此,IP包头基本的20字节已介绍完毕,此后部分属于可选项,不是必须的部分。
- 可选项(Options):这是一个可变长的字段。该字段属于可选项,主要用于测试,由起源设备根据需要改写。可选项目包含以下内容:
-
松散源路由(Loose source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,但是允许在相继的两个IP地址之间跳过多个路由器。
-
严格源路由(Strict source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中则表示发生错误。
-
路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。
-
时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。
-
填充(Padding):因为IP包头长度(Header Length)部分的单位为32bit,所以IP包头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍。
数据链路层
下来我们看下数据链路层。这一层的主要工作是控制我们的物理硬件。类似我们的算盘,他是一个计算工具,但是其本身并不能进行运算。想让他计算就必须有人去拨动这个算盘才行。这其中,算盘就属于我们的物理硬件,而拨动算盘的手就属于我们数据链路层的工作。我们知道,数据来到我们数据链路层,数据链路层需要在我们的数据上添加MAC地址,用来物理寻址。但注意,这其实只是我们以太网的做法。我们数据链路层也不止以太网一种。(当然最常用及常见的就是以太网)。
数据链路可以粗略地理解为数据通道。物理层要为终端设备间的数据通信提供传输介质及其连接。介质是长期的,连接是有生存期的。在连接生存期内,收发两端可以进行不等的一次或多次数据通信。每次通信都要经过建立通信联络和拆除通信联络两个过程。这种建立起来的数据收发关系就叫做数据链路。而在物理媒体上传输的数据难免受到各种不可靠因素的影响而产生差错,为了弥补物理层上的不足,为上层提供无差错的数据传输,就要能对数据进行检错和纠错。数据链路的建立,拆除,对数据的检错,纠错是数据链路层的基本任务。
链路层是为网络层提供数据传送服务的,这种服务要依靠本层具备的功能来实现。链路层应具备如下功能:
-
链路连接的建立、拆除和分离;
-
帧定界和帧同步。链路层的数据传输单元是帧,协议不同,帧的长短和界面也有差别,但无论如何必须对帧进行定界;
-
顺序控制,指对帧的收发顺序的控制;
差错检测和恢复。还有链路标识,流量控制等等。差错检测多用方阵码校验和循环码校验来检测信道上数据的误码,而帧丢失等用序号检测。各种错误的恢复则常靠反馈重发技术来完成。
独立的链路产品中最常见的当属网卡,网桥也是链路产品。数据链路层将本质上不可靠的传输媒体变成可靠的传输通路提供给网络层。在IEEE802.3情况下,数据链路层分成了两个子层,一个是逻辑链路控制,另一个是媒体访问控制。
数据链路层(Data Link Layer)是OSI模型的第二层,负责建立和管理节点间的链路。在计算机网络中由于各种干扰的存在,导致物理链路是不可靠的。因此这一层的主要功能是:在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法
添加MAC地址的时候也是需要添加两个,一个是源MAC,一个是目标MAC。源MAC肯定是自身发送消息的网卡对应的MAC地址。那目标MAC如何获取呢?
ARP协议
这时候就可能会用到我们的ARP协议了,也就是地址解析协议。
这个协议的主要作用就是通过一种地址获取另一种地址。
根据功能我们可以把ARP分为三类:
ARP协议的分类
-
正向ARP---已知目标P获取目标MAC
-
这里简单描述下正向ARP的工作过程。首先主机通过广播的形式发送ARP请求,通过IP地址请求MAC地址。因为是广播帧,所以,广播域内所有的设备都会收到这个请求。设备收到后首先会先将数据包中的源IP和源MAC的对应关系记录在自己本地的ARP缓存表中,然后再看请求的IP。如果请求的是自己的IP,则进行应答。否则,直接丢弃该数据包。之后再进行通讯时,优先查看本地的ARP缓存表,记录则按照记录添加MAC地址,否则,发送ARP请求获取。
-
-
反向ARP ---已知目标MAC获取目标IP
-
反向ARP是根据源设备MAC地址通过广播获取IP地址的过程的地址解析协议。
-
免费ARP.---利用正向ARP的原理请求自己的IP。其目的主要有两个,一个是自我介绍,一个是检测地址冲突。一般是在通过dhcp获取到IP地址后使用。
当然,添加完MAC地址之后,我们数据链路层还需要将我们的二进制数据转换成电信号交给下面的物理层去处
物理层
最底下的就是物理层了。其主要特点就是只能识别电信号。我们电脑的核心算力原件CPU,以及我们网络中的传输介质,都属于物理层的设备。
物理层并不是物理媒体本身,它只是开放系统中利用物理媒体实现物理连接的功能描述和执行连接的规程。物理层提供用于建立、保持和断开物理连接的机械的、电气的、功能的和过程的条件。简而言之,物理层提供有关同步和全双工比特流在物理媒体上的传输手段,其典型的协议有RS 232C、RS 449/422/423、V.24和X.21、X.21bis等。
物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础。物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。
开放系统互连参考模型物理层的媒体包括架空明线、平衡电缆、光纤、无线信道等。通信用的互连设备指DTE(Data Terminal Equipment)和DCE(Data Communications Equipment)间的互连设备。DTE即数据终端设备,又称物理设备,如计算机、终端等都包括在内。而DCE则是数据通信设备或电路连接设备,如调制解调器等。数据传输通常是经过DTE-DCE,再经过DCE-DTE的路径。互连设备指将DTE、DCE连接起来的装置,如各种插头、插座。LAN中的各种粗、细同轴电缆、T型接头、插头、接收器、发送器、中继器等都属物理层的媒体和连接器。
物理层的主要功能是:
-
为数据端设备提供传送数据的通路,数据通路可以是一个物理媒体,也可以是多个物理媒体连接而成。一次完整的数据传输,包括激活物理连接、传送数据和终止物理连接。所谓激活,就是不管有多少物理媒体参与,都要在通信的两个数据终端设备间连接起来,形成一条通路。
-
传输数据。物理层要形成适合数据传输需要的实体,为数据传送服务。一是要保证数据能在其上正确通过,二是要提供足够的带宽(带宽是指每秒钟内能通过的比特(Bit)数),以减少信道上的拥塞。传输数据的方式能满足点到点,一点到多点,串行或并行,半双工或全双工,同步或异步传输的需要。
-
完成物理层的一些管理工作。
在OSI参考模型中,物理层是参考模型的最低层,也是OSI模型的第一层。物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异,使其上面的数据链路层不必考虑网络的具体传输介质是什么。
结合实际总结举例说明
需求:我们在家里计算机访问百度
-
物理层:需要网线,网卡
-
数据链路层:设备是网卡和交换机,我们访问出去时需要经过局域网交换机,而经过局域网交换机需要通过物理地址寻址MAC
-
网络层:我们的电脑和百度服务器之间在不同的网络,所以不同网络之间的路径选择需要通过IP地址来决定
-
传输层:传输时,需要遵守一定的协议(TCP稳定,UDP速度快)和协议的端口号来传输
-
会话层:建立连接到断开连接整个完整的过程需要会话层去控制
-
表示层:负责将我们的数据①翻译为二进制数据加密–②压缩(为了传输速度)–③百度服务器进行解压缩–④解译解密
-
应用层:经表示层翻译后,在我们的计算机可以进行输入,交互的界面(终端)中表现出来所以不同网络之间的路径选择需要通过IP地址来决定
-
传输层:传输时,需要遵守一定的协议(TCP稳定,UDP速度快)和协议的端口号来传输
-
会话层:建立连接到断开连接整个完整的过程需要会话层去控制
TCP/IP模型
这是我们OSI七层参考模型。但其实,我们现在生活中所使用的并不是OSI参考模型,而是TCP/IP模型
OSI参考模型和TCP/IP模型的区别
先来看下这两个模型的区别。
-
首先最明显的一个区别就是两种模型分层的数量不同,OSI分为7层,而TCP/IP将上面三层合为了一层,下面两层合为了一层,最终形成了四层的通信模型。
-
当然,TCP/IP模型其实有两个版本,一个是四层的模型,还有一个是五层的模型。
-
四层模型---TCP/IP标准模型
-
五层模型---TCP/IP对等模型
-
还有一个区别在于第三层网络层的区别。
-
在OSI中,第三层的名称被称为是网络层。因为我们OSI是针对所有网络制定的通用标准,这个网络层也是针对所有的网络而言的一层
-
在TCP/IP中,因为这个模型是针对互联网体系而诞生的,所以,他的第三层被被称为互联网层。(部分地方有混淆,和网络层区分不那么严格)。其涵盖的范围只针对互联网,而不包括其他的三层网络。
-
至于其他层次的作用,和我们OSI中所讲的一致。
封装和解封装
我们一般把数据从上到下也就是从应用层到物理层的整个加工过程称之为封装;而反过来的处理过程称之为解封装。
封装简单理解就是各层把实现目的必要的信息添加到数据中的过程。而完成封装的是工作在各个层次的协议。
应用层 | 不同应用需要封装的内容不同,使用的协议不同。 |
---|---|
传输层 | 主要封装端口号来标定应用。真正工作的是TCP和UDP两个协议 |
网络层 | 主要封装lP地址来进行逻辑寻址。真正工作的是IP协议。 |
数据链路层 | 主要封装MAC地址进行物理寻址。基于以太网的帧结构封装。 |
物理层 | 数据已经成为电信号,不需要封装。 |
解封装是相反的一个逆过程,不再赘述。
TCP/IP的跨层封装
TCP/IP模型和OSI参考模型还有一点不同,就是我们TCP/IP支持跨层封装,而OSI不行。
我们知道,oSI参考模型的核心思想是分层,而分层的目的就是上:层协议在其下层协议提供的服务的基础上提供增值服务。所以,OSI在设计协议的时候,层次之间还是存在依赖性的。
而我们TCP/IP模型就不一样了,因为其本身就是先有的协议,后有的模型。TCP/IP协议族里的协议木身都是相互独立的,每层中的协议可以根据系统的需要进行组合匹配。
我们正常的封装过程应该是应用层处理完的数据来到传输层进行加工,加入端口号;之后来到网络层,加入IP地址;再来到数据链路层,加入MAC地址。OSI的话就需要这样一步一步的来,但是TCP/IP可以省略其中一些层次的步骤。
跨层封装的目的---提高封装和解封速度,加快传输效率。
TCP/IP的跨层封装一般应用在直连设备之间的通讯。一般有两种形式
-
跨四层封装---应用层的数据封装完直接封装网络层的数据。
-
应用在直连路由设备之间
-
比如我们熟悉的OSPF就是一个跨层封装。因为我们路由器本身是三层设备,邻居之间也不看四层,那你封装四层就是一个多余的动作。所以可以直接在OSPF封装的数据后面封装IP协议,以达到提高快速封装的目的。
-
那四层不封装了,四层本身的任务,标定应用该如何完成?这个功能也可以由三层替代完成。
-
我们三层IPV4的协议包头中有一个8位的协议字段,里面写的是一个协议号,代表的是其上层所使用的协议。如果正常封装,其 上层是TCP或者UDP协议。TCP协议对应的协议号是6,UDP协议对应的协议号是17。但是我们这个协议号的取值范围是O-255(8 位二进制),剩余的这些协议号都是用来标定跨层封装协议的。比如我们OSPF协议,对应的协议号是89。
-
跨三四层封装---在应用层封装后的数据直接封装二层。
-
应用在直连交换设备之间
-
比如我们后面要学的STP协议。理由也是,交换机本身是二层设备,三层,四层的内容封装了他也不看,为了快速封装,可以直接省略这两层的封装。
-
同样的问题,没了三层和四层,对应的工作怎么办?这些工作肯定是需要二层来一并完成。但是我们之前见过的以太网Ⅱ帧里面只有个类型字段,可以用来区分上层协议,勉强能完成四层工作,但是三层的分片工作并无法完成。
-
这时候我们就需要使用另外一种以太网的帧结构了,802.3帧。
-
回顾访问WEB的过程
回顾完通信模型相关的知识后,我们回到一开始的场景中来。
小明首先将电脑和网络连接时,他没有IP地址,什么事他都千不了。所以,第一步他需要先获取一个IP地址。
小明的电脑获取IP地址的方法有两种,可以直接手工在电脑上配置一个当前网段的IP地址,不过这种方法对于非网工专业的人来说,不是特别友好;不过我们还存在一种更友好的方式就是通过DHCP协议来自动获取一个IP地址。我们现在电脑其实也没有让大家操心过IP地址的配置情况吧,主要就是因为我们设备默认都是通过DHCP协议来获取IP地址的。
DHCP服务
那就简单回顾DHCP协议,中文名:动态主机配置协议。是一个典型的CIS架构的协议。所谓C/S架构,就是指的是通讯双方一方需要承担DHCP服务器的角色,另一方需要承担DHCP客户端的角色。我们电脑此时需要获取一个IP地址,那他承担的就是DHCP客户端的角色,而我们的网络中需要有一台设备去给我们的电脑分配IP地址,则未溅信承担的就是DHCP服务器的角色,一般我们会使用网关路由器来充当DHCP服务器的角色。
小明的电脑作为DHCP客户端,则先得发送一个DHCP请求报文--DHCP-Discover包。因为此时,DHCP客户端并不知道在本地网络内谁是pHCP服务器,所以,这个数据包必然需要以广播的形式来发送。(这个数据包的封装可以进行讲解)
交换机转发原理
交换机的转发原理:交换机收到电信号后,会将电信号转换成二进制,之后,截取数据帧。先看数据帧中的源MAC地址,之后将该地址和数据进入接口的对应关系记录在本地的MAC地址表中。之后,看数据帧中的目标MAC地址,基于目标MAC地址查询本地的MAC地址表,如果表中存在记录,则将按照记录进行转发;如果表中没有记录,则将进行泛洪---所谓泛洪就是交换机会将数据从除了进入的接口外的所有接口发送一遍。
这里因为交换机收到的是一个广播帧,所以,交换机将在记录完源MAC的对应关系之后,进行泛洪。
交换机防洪的三种情况
交换机在以下三种情况下,将会进行泛洪操作:
-
遇到广播帧---即目标MAC地址为广播地址(全F)的数据帧
-
遇到组播帧---即目标MAC地址为组播地址的数据帧
-
遇到未知的单播帧--即在本地MAC地址表中没有记录的,目标地址为单播地址的数据帧
路由器的处理过程
路由器接口收到数据包之后,也是先看二层数据帧的封装内容;因为是广播帧,所以,将解二层的封装(基于数据帧中的类型字段判断),之后将解封装得到的数据包推送给IP模块进行进一步的处理。
之后,IP模块根据数据包中的目标IP地址255.255.255.255来进行判断,判断该数据包为广播包,需要进行进步的解封装。
IP解封装完成后,将根据IP协议头部中的protocol字段(17)判断,解封装后的数据段应该交给UDP模块来进行处理。
UDP模块收到数据段之后,将基于数据段中的目标端口号67判断,该数据包是DHCP的数据报,需要找对应的DHCP服务器模块进处理,而本网关设备恰好开启了DHCP服务器的功能。则路由器将以DHCP服务器的身份向客户端回复数据包。
DHCP服务器收到了客户端发送的DHCP - Discover包,则将进行回复--DHCP-offer包。这个数据包中将携带一个可用的IP地址给DHCP客户端。当然,这个IP地址被客户端收到后,并不是直接让客户端进行使用,还需要客户端进行后续的确认。(因为一个广播域环境内可能存在过个DHCP服务器,之前客户端的请求是广播形式发送的,所以,所有的服务器都将会反馈一个OFFER,然而客户端,只能选择一个,所以,后续客户端还需要进行反选。)
这个数据包在发送的时候,因为之前已经收到了客户端发送的数据报,客户端的MAC地址信息已经获取,所以,这个数据包是具备单播条件的。但是,这个数据包也可以是广播的形式发送。这点主要取决于不同厂商设备的特性, 华为设备是按照单播包的方式来回复这个数据包
该数据包回去的时候,将经过交换机,其转发过程还是按照交换机的转发原理来进行转发。
DNS服务
小明的电脑具备上网条件之后,将继续访问百度服务器,他将打开计算机中浏览器,在浏览器的地址栏中输入www.baidu.conm的URL。
URL是资源定位符,他和域名是有区别的,但是包含域名。URL是由三部分组成的,首先是使用的协议,HTTP或者HTPS;其次是访问网站的域名信息,如www.baidu.com;最后是访问该web服务器文件的所在路径。
因为,小明输入的是一个域名信息(浏览器会自动将其按照默认的协议转换成URL),而访问服务器最终需要通过IP地址来进行访问,所以,这里将触发DNS的解析流程。
DNS服务其中文名为:域名解析协议,其目的就是通过域名获取对应的IP地址。(这个做法有点类似于我们打电话,最终都是要通过电话号码来进行拨号的,但是因为电话号码不好记[所以,我们可以设置一个电话本,我们给每个电话号码加一个方便记忆的备注,之后,存在电话本中。以后打电话的时候,就可以根据备注查电话本找到对应的电话号码。这里IP地址就类似电话号码,域名就类似备注。)我们需要专门的DNS服务器去承载域名和IP.地址的映射关系(就类似于电话本。)。所以,我们在做DNS解析的时候,需要先访问DNS服务器,去查找对应关系并获取结果。他是基于UDP/TCP的53号端口传输数据的。
因为之前我们已经通过DHCP协议,获取到了本地DNS服务器的IP地址---68.87.71.226;则电脑将封装一个DNS的请求报文,去找本地的DNS服务器获取www.baidu.com这个域名所对应的IP地址。
这里需要回顾以下我们DNS查询的两种方式:递归查询和迭代查询
DNS服务的查询方式
递归查询
如果DNS服务器支持递归查询,那么当他收到递归查询请求后,他将负责把最终的查询结果返回给请求方。即使执行递归查询的DNS服务器无法从本地数据库返回结果,他也必须查询其他DNS服务器,直到获取到结果返回给请求方。
迭代查询
如果DNS服务器收到的是迭代请求,如果无法从本地数据库返回查询结果,他将返回一个可能知道查询结果的DNS服务器的地址给请求者。由请求者自行查询该DNS服务器。一次类推,请求者最终获取查询结果。
递归查询,请求者就是老板,我只问你要结果,至于你有没有,从哪搞来的我不关心;而迭代查询,请求者就是干活的,找人帮忙,人家不知道就推给其他人,你得挨个找,最终解决问题。
其实在真实的DNS查询中,这两种方法往往是同时使用的。
我们电脑一般请求解析时候都是先找到本地域名服务器。而DNS客户端和本地域名服务器之间一般采用的是递归查找的方式。这一段通讯一般用的是UDP 53号端口。而本地域名服务器如果没有对应记录,再去找其他DNS服务器获取信息时,将采用迭代查询的方法,先去找DNS的根服务器进行逐级的查询,这一段一般使用TCP 53号端口。
ARP协议
ARP的分类
ARP协议--地址解析协议---其主要作用是通过一种地址获取另一种地址。当然,我们ARP协议根据实现的效果不同,也是存在不同的分类的,大体上可以分为以下三类:
-
正向ARP.---通过IP地址获取MAC地址
-
工作原理:ARP发送广播请求,所有收到广播包的设备首先先将源IP和源MAC的对应关系记录在ARP缓存表中(arp -a),然后查看请求的P,如果请求的IP不是自己的IP地址,则将数据包丢弃。如果请求的IP是自己本地Ip地址,则以单播的形式回复ARP应答。在之后的数据传输中,优先查看本地的ARP缓存表,若本地没有记录,再发送ARP请求。
-
反向ARP一--通过MAC地址获取IP地址
-
免费ARP---1,检测冲突,2,自我介绍
-
所以,这里再构成DNS请求包之前,需要先发送一个正向ARP的请求报文,请求根据网关的IP地址获取网关的MAC地址。之后,跟据正向ARP的工作原理,我们的设备将获取到网关路由器的MAC地址。
网络层 | ARP协议---在TCP/IP体系中,ARP协议被划归到三层网络层---源IP地址---68.85.2.101;请求的地址--- 68.85.2.1 |
---|---|
数据链链路 | 以太网协议-源MAC地址: 00:16:D3:23:68:8A(设备本机的MAC地址)﹔目标MAC地址--- FF-FF-FF-FF-FF-FF (以广播的形式发送ARP请求) |
通过ARP协议,我们获取到了网关的MAC.i地址,之后,我们的DNS请求报文可以完成封装了。
应用层 | DNS请求报文 |
---|---|
传输层 | UDP(递归查询时使用UDP协议)∶源端口一随机端口;目标端口一53 |
网络层 | IP-源IP地址一 68.65.2.101(没备获y到的tPl也址);目标IP地址:—68.87.71.22(本也DNS服务器的IP地址) |
数据链路层 | 以太网协议--源MAC地址-00:16:D3:23:66:8A(设备本机的MAC也址)﹔目标MAC地址一00:22:68:45:1F:1B(获取到的网关接口的MAC地址) |
路由器的转发原理
这个DNS请求报文还是通过交换机的转发,最终来到我们的网关路由器上。
路由器网关接口收到这个DNS请求报文后,也是先看二层数据帧的封装内容;因为目标MAC地址就是接口本身的MAC地址,所以,路由器将解开二层封装,根据类型字段,将解封装后的数据包交给IP模块来进行处理。因为三层的目标IP地址并不是本机的IP地址,所以,路由器将不再进行解封装操作,而是进行三层转发。
路由器的转发原理:路由器将基于数据包中的目标JP地址查询本地路由表。若表中有记录,则无条件按记录转发;若没有记录,则将直接丢弃该数据包。
路由表中路由条目的获取方法主要有三种:
-
直连路由---路由器默认生成可用接口直连网段的路由条目;
-
生成条件
-
接口双UP
-
接口配置IP地址
-
-
-
静态路由---由网络管理员手工配置的路由条目。
-
动态路由---所有路由器上运行相同的路由协议,之后,通过路由器之间的沟通,协商最终计算生成路由条目。
此处,我们的边界设备因该会配置一条缺省路由指向运营商ISP的路由器(图中是Comcast网络),所以,这个数据包将会匹配这条缺省到达68.80.0.0/13网段,从而,通过运营商网络中的路由器,最终转发到本地的DNS服务器上。
HTTP协议
电脑通过DNS协议获得到www.baidu.com对应的IP地址信息之后,将触发本地电脑到目标服务器的HTTP关系的建立。(其实目前我们大多数网站都是通过HITPS协议来进行网页的传输,但是,这里我们还是以HTTP协议的逻辑来讲,HITPS是在HTTP的基础上增加的安全传输,后续内容将在安全相关章节中说明)
HTTP协议---超文本传输协议--也是一个典型的C/S架构的协议,我们需要访问网站的设备就充当的是HTTP客户端的角色,而提供网页服务的web服务器就充当的是HTTP服务器的角色。HTTP协议传输层是基于TCP协议来进行工作的,使用的端口号是80端口。
-
什么是超文本(HyperText)?
-
包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。
-
-
什么是URL?(这个前面已经提到了,可以不用额外说明了)
-
URL即统一资源定位符(uniform Resource Locator),用来唯一地标识万维网中的某一个文档,URL由协议、主机和端口(默认为80)以及文件名三部分构成。如:
-
-
什么是超文本传输协议HTTP?
-
是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
-
因为HTTP协议是基于TCP协议来进行工作的,所以,需要先完成电脑和目标服务器之间的TCP会话连接。(三次握手)
当TCP会话建立后,客户端(电脑)和服务器将建立双向的会话通道.可以相互发送信息。
则客户端将先向服务器发送一个HTTP的请求报文,去请求网页信息,
应用层 | HTTP请求报文---请求方式:GET(用于获取一个网页信息) |
---|---|
传输层 | TCP;源端口--随机端口;目标端口---80 |
网络层 | IP---源IP地址--- 68.85.2.101(设备获取到的IP地址)﹔目标P地址--64.233.169.105(本图上WEB服务器的地址) |
数据链路层 | 以太网协议---源MAC地址--- Q0:16:03:23:68:BA(设备本机的MAC地址)﹔目标MAC地址---00:22:6B:45;1E:1B(获取到的网关接口的IMAC地址) |
请求报文中的方法
方法(Method)是对所请求对象所进行的操作,也就是一些命令。请求报文中的操作有:
如果baidu服务器正常收到该请求报文,也可以正常应答请求内容,则将回复一个HTTP应答报文。
应用层 | HTTP应答报文---应答状态码:200 oK---代表网页信息正常响应 |
---|---|
传输层 | TCP;源端口---80;目标端口---请求报文中的源端口号 |
网络层 | IP---源IP地址---64.233.169.105(本图上WEB服务器的地址)﹔目标IP地址---68.85.2.101(设备获取到的IP地址) |
数据链路层 | 以太网协议---源MAC地址---00:22:6B:45:1E:1B(获取到的网关接口的MAC地址)﹔目标MAC地址--- baidu的web服务器所在广播域网关的MAC也址 |
响应报文中的状态码
状态码(Status-Code)是响应报文状态行中包含的一个3位数字,指明特定的请求是否被满足,如果没有满足,原因是什么。状态码分为以下五类:
经过以上历程,最终,小明在自己的浏览器上访问到了baidu服务器的主页信息。