网络传输中,每个节点会根据分组数据的地址信息,来判断该报文应该由哪个网卡发送出去。为此,各个地址会参考一个发出接口列表。在这一点上 MAC 寻 址与IP 寻址是一样的。只不过MAC 寻址中所参考的这张表叫做地址转发表,而 IP 寻址中所参考的叫做路由控制表。MAC 地址转发表中所记录的是实际的 MAC 地址本身,而路由表中记录的 IP 地址则是集中了之后的网络号。
搭建一套网络环境要涉及各种各样的电缆和网络设备。在此仅介绍连接计算 机与计算机的硬件设备。
网卡
主机的每个端口有一个网卡。每个网卡有一个MAC地址。网卡的MAC地址是出厂设置好的,不可变的。
网卡的IP地址是软件层面分配得到的,是可变的。
网桥支持存储转发,即先将端口输入的帧存储起来,再对收集的帧依次进行分析,处理,转发。故,可以连接不同速率链路。
网桥的转发依据目的MAC地址结合自身的地址转发表实现。
网桥自身的地址转发表采用自学习方式建立。
路由器负责为不同网络间建立连接,路由器从端口收到帧后,存储,处理,转发。
转发时依据目的IP地址,结合自身路由表来实现。
自身路由表通过路由协议来建立与维持。
包可以说是全能性述语。帧用于表示数据链路层中包的单位。而数据报是IP和UDP等网络层以上的分层中包的单位。段则表示TCP数据
流中的信息。最后,消息是指应用协议中数据的单位。
假设甲给乙发送电子邮件,内容为:“早上好”。而从TCP/IP 通信上看,是 从一台计算机 A 向另一台计算机B 发送电子邮件。我们就通过这个例子来讲解一 下TCP/IP 通信的过程。
应 用 程 序 处 理
启动应用程序新建邮件,将收件人邮箱填好,再由键盘输入邮件内容“早上 好”,鼠标点击“发送”按钮就可以开始TCP/IP 的通信了。
首先,应用程序中会进行编码处理。例如,日文电子邮件使用ISO-2022-JP 或UTF-8 进行编码。这些编码相当于 OSI 的表示层功能。
编码转化后,实际邮件不一定会马上被发送出去,因为有些邮件的软件有一 次同时发送多个邮件的功能,也可能会有用户点击“收信”按钮以后才一并接收 新邮件的功能。像这种何时建立通信连接何时发送数据的管理功能,从某种宽泛 的意义上看属于 OSI参考模型中会话层的功能。应用在发送邮件的那一刻建立 TCP连接,从而利用这个 TCP连接发送数据。 它的过程首先是将应用的数据发送给下一层的 TCP,再做实际的转发处理。
TCP 模块的处理
TCP 根据应用的指示”,负责建立连接、发送数据以及断开连接。TCP 提供 将应用层发来的数据顺利发送至对端的可靠传输。
为了实现TCP的这一功能,需要在应用层数据的前端附加一个TCP首部。 TCP 首部中包括源端口号和目标端口号(用以识别发送主机跟接收主机上的应 用)、序号(用以发送的包中哪部分是数据)以及校验和”(用以判断数据是否被 损坏)。随后将附加了TCP 首部的包再发送给 IP。
IP 模块的处理
IP将TCP传过来的TCP首部和 TCP 数据合起来当做自己的数据,并在 TCP 首部的前端在加上自己的IP首部。因此,IP 数据包中IP 首部后面紧跟着 TCP 首 部,然后才是应用的数据首部和数据本身。IP首部中包含接收端IP地址以及发送 端IP 地址。紧随IP 首部的还有用来判断其后面数据是TCP 还是UDP 的信息。IP 包生成后,参考路由控制表决定接受此 IP 包的路由或主机。随后,IP 包 将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正发送数据。如果尚不知道接收端的 MAC 地址,可以利用 ARP(Address Resolution Protocol) 查找。只要知道了对端的 MAC 地址,就可以将 MAC 地址和 IP地址交 给以太网的驱动程序,实现数据传输。
网络接口(以太网驱动)的处理
从IP 传过来的IP 包,对于以太网驱动来说不过就是数据。给这数据附加上 以太网首部并进行发送处理。以太网首部中包含接收端 MAC 地址、发送端 MAC 地址以及标志以太网类型的以太网数据的协议。根据上述信息产生的以太网数据 包将通过物理层传输给接收端。发送处理中的 FCS”由硬件计算,添加到包的最 后。设置FCS的目的是为了判断数据包是否由于噪声而被破坏。
包的接收流程是发送流程的逆序过程。
网络接口(以太网驱动)的处理
主机收到以太网包以后,首先从以太网的包首部找到 MAC 地址判断是否为发 给自己的包。如果不是发给自己的包则丢弃数据”。
而如果接收到了恰好是发给自己的包,就查找以太网包首部中的类型域从而 确定以太网协议所传送过来的数据类型。在这个例子中数据类型显然是 IP 包 , 因 此再将数据传给处理 IP 的子程序,如果这时不是 IP 而是其他诸如 ARP 的 协 议 , 就把数据传给 ARP 处理。总之,如果以太网包首部的类型域包含了一个无法识别 的协议类型,则丢弃数据。
IP 模块的处理
IP 模块收到IP 包首部及后面的数据部分以后,也做类似的处理。如果判断得 出包首部中的IP 地址与自己的IP 地址匹配,则可接收数据并从中查找上一层的 协议。如果上一层是 TCP 就 将IP 包首部之后的部分传给 TCP 处理;如果是 UDP 则将IP 包首部后面的部分传给 UDP处理。对于有路由器的情况下,接收端地址 往往不是自己的地址,此时,需要借助路由控制表,在调查应该送达的主机或路 由器以后再转发数据。
TCP 模块的处理
在 TCP 模块中,首先会计算 一 下校验和,判断数据是否被破坏。然后检查是 否在按照序号接收数据。最后检查端口号,确定具体的应用程序。数据接收完毕后,接收端则发送一个“确认回执”给发送端。如果这个回执 信息未能达到发送端,那么发送端会认为接收端没有接收到数据而一直反复发送。数据被完整地接收以后,会传给由端口号识别的应用程序。
应用程序的处理
接收端应用程序会直接接收发送端发送的数据。通过解析数据可以获知邮件 的收件人地址是乙的地址。如果主机B 上没有乙的邮件信箱,那么主机B 返回给 发送端一个“无此收件地址”的报错信息。但在这个例子中,主机 B 上恰好有乙的收件箱,所以主机 B 和收件人乙能够 收到电子邮件的正文。邮件会被保存到本机的硬盘上。如果保存也能正常进行, 那么接收端会返回一个“处理正常”的回执给发送端。反之, 一旦出现磁盘满、 邮件未能成功保存等问题,就会发送一个“处理异常”的回执给发送端。由此,用户乙就可以利用主机 B 上的邮件客户端,接收并阅读由主机 A 上的 用户甲所发送过来的电子邮件——“早上好”。
MAC 地址长48比特,结构如图3.5所示。在使用网卡 (NIC) 的情况下, MAC 地址一般会被烧人到 ROM 中。因此,任何一个网卡的MAC 地址都是唯一 的,在全世界都不会有重复。
从通信介质(通信介质)的使用方法上看,网络可分为共享介质型和非共 享介质型。
共享介质型网络指由多个设备共享一个通信介质的一种网络。最早的以太网 和 FDDI 就是介质共享型网络。在这种方式下,设备之间使用同一个载波信道进 行发送和接收。为此,基本上采用半双工通信方式,并有必要对介质进行访问控制。
共享介质型网络中有两种介质访问控制方式: 一种是争用方式,另一种是令 牌传递方式。
在一部分以太网当中,采用了改良CSMA 的另一种方式——CSMA/CD* 方 式。CSMA/CD要求每个站提前检查冲突, 一旦发生冲突,则尽早释放信道。其具 体工作原理如下:
。如果载波信道上没有数据流动,则任何站都可以发送数据。
。检查是否会发生冲突。 一旦发生冲突时,放弃发送数据”,同时立即释放 载波信道。
。放弃发送以后,随机延时一段时间,再重新争用介质,重新发送帧。
在这种方式下,网络中的每个站直连交换机,由交换机负责转发数据帧。此方式 下,发送端与接收端并不共享通信介质,因此很多情况下采用全双工通信方式 。通过 以太网交换机构建网络,从而使计算机与交换机端口之间形成一对一的连接,即 可实现全双工通信。在这种一对一连接全双工通信的方式下不会发生冲突,因此 不需要 CSMA/CD 的机制就可以实现更高效的通信。该方式还可以根据交换机的高级特性构建虚拟局域网 (VLAN,Virtual LAN)" 、 进行流量控制等。当然,这种方式也有一个致命的弱点,那就是一旦交 换机发生故障,与之相连的所有计算机之间都将无法通信。
以太网交换机就是持有多个端口”的网桥。它们根据数据链路层中每个帧的 目标 MAC 地址,决定从哪个网络接口发送数据。这时所参考的、用以记录发送接 口的表就叫做转发表 (Forwarding Table)。
这种转发表的内容不需要使用者在每个终端或交换机上手工设置,而是可以 自动生成。数据链路层的每个通过点在接到包时,会从中将源 MAC 地址以及曾经 接收该地址发送的数据包的接口作为对应关系记录到转发表中。以某个 MAC 地址 作为源地址的包由某一接口接收,实质上可以理解为该 MAC 地址就是该接口的目 标。因此也可以说,以该 MAC 地址作为目标地址的包,经由该接口送出即可。这 一过程也叫自学过程。
由于 MAC 地址没有层次性”,转发表中的入口个数与整个数据链路中所有网 络设备的数量有关。当设备数量增加时,转发表也会随之变大,检索转发表所用 的时间也就越来越长。当连接多个终端时,有必要将网络分成多个数据链路,采 用类似于网络层的 IP地址一样对地址进行分层管理。
交换机转发方式:
交换机转发方式有两种, 一种叫存储转发,另一种叫直通转发。
存储转发方式检查以太网数据帧末尾的FCS”位后再进行转发。因 此,可以避免发送由于冲突而被破坏的帧或噪声导致的错误帧。
直通转发方式中不需要将整个帧全部接收下来以后再进行转发。只 需要得知目标地址即可开始转发。因此,它具有延迟较短的优势。但同 时也不可避免地有发送错误帧的可能性。
通过网桥连接网络时, 一旦出现环路该如何处理?这与网络的拓扑结构和所 使用的网桥种类有直接关系。最坏的情况下,数据帧会在环路中被一而再再而三 地持续转发。而一旦这种数据帧越积越多将会导致网络瘫痪。
为此,有必要解决网络中的环路问题。具体有生成树与源路由两种方式。如 果使用具有这些功能的网桥,那么即使构建了一个带有环路的网络,也不会造成 那么严重的问题。只要搭建合适的环路,就能分散网络流量,在发生某一处路由 故障时选择绕行,可以提高容灾能力。
例如,以某一个网桥为构造树的根 (Root), 并对每个端口设置权重。这一权 重可以由网络管理员适当地设置,指定优先使用哪些端口以及发生问题时该使用 哪些端口。生成树法其实与计算机和路由器的功能没有关系,但是只要有生成树的功能 就足以消除环路。
IEEE802.1D中所定义的生成树方法有一个弊端,就是在发生故障切换网络时 需要几十秒的时间。为了解决这个用时过长的问题,在IEEE802.1W 中定义了一 个叫RSTP(Rapid Spanning Tree Protocol) 的方法。该方法能将发生问题时的恢复 时间缩短到几秒以内。
那么 VLAN 究竟是什么?如图3.15所示,该交换机按照其端口区分了多个网 段,从而区分了广播数据传播的范围、减少了网络负载并提高了网络的安全性。 然而异构的两个网段之间,就需要利用具有路由功能的交换机(如3层交换机), 或在各段中间通过路由器的连接才能实现通信。
对这种 VLAN 进行了扩展,又定义了 IEEE802.1Q 的 标 准 ( 也 叫 TAG VLAN),该标准允许包含跨越异构交换机的网段。TAG VLAN 中对每个网段都用 一个 VLAN ID 的标签进行唯一标识。在交换机中传输帧时,在以太网首部加入这 个VID 标签,根据这个值决定将数据帧发送给哪个网段。各个交换机之间流动的 数据帧的格式请参考图3.21 中的帧格式。
以太网帧前端有一个叫做前导码 (Preamble) 的部分,它由0、1数字交替组合而 成,表示一个以太网帧的开始,也是对端网卡能够确保与其同步的标志。如图3.19所 示。前导码末尾是一个叫做SFD(Start Frame Delimiter) 的域,它的值是“11”。在这 个域之后就是以太网帧的本体(图3.20)。前导码与SFD合起来占8个字节。
帧尾最后出现的是FCS”。用它可以检查帧是否有所损坏。在通信传输过程中 如果出现电子噪声的干扰,可能会影响发送数据导致乱码位的出现。因此,通过 检查这个 FCS字段的值可以将那些受到噪声干扰的错误帧丢弃。FCS 中保存着整个帧除以生成多项式的余数”。在接收端也用同样的方式计 算,如果得到 FCS 的值相同,就判定所接收的帧没有差错”。
在3.2.6节中将要介绍的VLAN 中,帧的格式又会有所变化(图3.21)。
在开始进行数据传输前,要先建立一个 PPP 级的连接”。当这个连接建立以 后就可以进行身份认证、压缩与加密。
在PPP 的主要功能中包括两个协议: 一个是不依赖上层的 LCP 协议 (Link Control Protocol), 另一个是依赖上层的 NCP 协 议 (Network Control Protocol)。如 果上层为IP, 此时的 NCP也叫做IPCP(IP Control Protocol)。
LCP 主要负责建立和断开连接、设置最大接收单元 (MRU,Maximum Receive Unit) 、设置验证协议 (PAP 或 CHAP) 以及设置是否进行通信质量的监控。而IPCP 则负责IP 地址设置以及是否进行 TCP/IP 首部压缩等设备。
通过PPP 连接时,通常需要进行用户名密码的验证,并且对通信两端进行双 方向的验证”。其验证协议有两种,分别为PAP(Password Authentication Protocol) 和 CHAP(Challenge Handshake Authentication Protocol)。
PAP是 PPP 连接建立时,通过两次握手进行用户名和密码验证。其中密码以 明文方式传输。因此一般用于安全要求并不很高的环境,否则会有窃听或盗用连 接的危险。CHAP则使用一次性密码 OTP(One Time Password),可以有效防止窃听。此 外,在建立连接后还可以进行定期的密码交换,用来检验对端是否中途被替换。
单纯的以太网没有验证功能,也没有建立和断开连接的处理,因此无法按时 计费。而如果采用PPPoE 管理以太网连接,就可以利用PPP 的验证等功能使各家 ISP 可以有效地管理终端用户的使用。
准确地说,主机的定义应该是指“配置有IP地址,但是不进 行路由控制”的设备”。既配有IP地址又具有路由控制能力的设备叫做 “路由器”,跟主机有所区别。而节点则是主机和路由器的统称。
IP大致分为三大作用模块,它们是 IP 寻址、路由(最终节点为止的转发) 以及IP 分包与组包。
以太网等数据链路中使用MAC地址传输数据帧。此时的一跳是指从 源MAC地址到目标MAC地址之间传输帧的区间。也就是说它是主机或
路由器网卡不经其他路由器而能直接到达的相邻主机或路由器网卡之间 的一个区间。在一跳的这个区间内,电缆可以通过网桥或交换集线器相 连,不会通过路由器或网关相连。
多跳路由是指路由器或主机在转发IP 数据包时只指定下一个路由器或主机, 而不是将到最终目标地址为止的所有通路全都指定出来。因为每一个区间(跳) 在转发IP 数据包时会分别指定下一跳的操作,直至包达到最终的目标地址。