面试时,你是否被问到过TCP/IP协议?

看到这句话,有没有感到很熟悉呀?相信很多人在面试的时候都被要求,很多人会觉得我们在实际开发中一般用不到这些知识,所以对这些东西不屑一顾。

但是小编认为想要成为一个完美的网工,那么对这些基础知识必须要有一定的了解,这样你才能考虑得更加全面和完善,下面就让我们一起来了解一下,什么是 TCP/IP。

TCP/IP协议层

图1-1展示了TCP/IP协议簇与OSI参考模型的相互关系。在TCP/IP协议簇中,网络接口层对应于OSI的物理和数据链路层,但实际上在规范中并不存在这一层。如图1-1所示,作为对物理和数据链路层的表示,它已经成为事实上的一个层次。在本节中,我们将使用OSI的术语——物理和数据链路层来描述它。

除了少数例外,OSI协议簇本身已经成为Intemet历史早期的遗留产物。当前OSI协议对于网络技术的贡献看来主要是在对学习网络的学生讲述模块化的协议族时,可以引用它的参考模型进行说明等有限的用途。当然。IS-IS 路由选择协议依然广泛地应用在大型服务提供高和运营商网络中。

物理层包含了多种与物理介质相关的协议,这些物理介质用以支撑TCP/IP 通信。物理层的协议按照正式的分类可以分为4类,这4类涵盖了物理介质的所有方面:

  • 电子/光学协议——描述了信号的各种特性。例如,电压或光强度、位定时、编码和信号波形。

  • 机械协议——规定了连接器的尺寸或导线的金属成分。

  • 功能性协议——描述了做什么。例如,在EIA-232-D连接器第4管脚上的功能描述是“请求发送”。

  • 程序性协议——描述了如何做。例如,在EIA-232-D导线上,二进制I表示电压小于-3V。

数据链路层包含了控制物理层的协议:如何访问和共享介质、怎样标识介质上的设备,以及在介质上发送数据之前如何完成数据成帧。典型的数据链路协议有IEEE 802.3/以太网、帧中继、ATM以及SONET。

Internet层与OSI的网络层相对应,主要负责定义数据包格式和地址格式,为经过逻辑网络路径的数据进行路由选择。当然,网络层也是本书内容涉及最多的一层。

与OSI传输层相对应的是主机到主机层它指定了控制Intemnet层的协议,这就像数据链路层控制物理层一样。主机到主机层和数据链路层都定义了流控和差错控制机制。二者不同之处在于,数据链路层协议强调控制数据链路上的流量,即连接两台设备的物理介质上的流量;而传输层控制逻辑链路上的流量,即两台设备的端到端连接,这种逻辑连接可能跨越一连串数据链路。

应用层与OSI的会话层、表示层、应用层相对应。虽然一些路由选择协议使用这一层,例如边界网关协议(BGP)、路由选择信息协议(RIP) 等,但是应用层最常用的服务是向用户应用提供访问网络的接口。

对于图1-1中所示的协议簇和其他协议簇来说,各层之间多路复用是一个通用功能。许多应用可以使用主机到主机层的一个服务,同样许多主机到主机层的服务也可以使用Intenret层。多个协议簇(如IP、IPX、AppleTalk) 还可以通过数据链路协议共享一条物理链路。

BGP是一个应用层的协议,因为它使用TCP端口传送它的消息:面RIP协议也是应用层协议的原因是因为使用UDP接口传遇它的消息。其他的路由选择协议如OSPF,称为Intemet层的协议是因为它们直接在IP数据包中封装它们的消息。

IP包头

图1-2给出了IP包头(Packet Header)的格式,相应标准见RFC791。数据包中的大多.数字段对路由选择都很重要。

版本(Version) 一标识了 数据包的IP版本号。这个4位字段的值设置为二进制的0100表示IP版本4 (IPv4) ,设置为0110表示IP版本6 (IPv6)。本文主要涉及的是IPv4,下一篇小编主要讲述IPv6。在表1-1中列出了所有已分配的现行版本号及相关RFC.除4和6(早期提出的简单Internet协议一即SIP协议,也使用版本号6)之外,其他的所有版本号仅作为“历史产物”而存在,感兴趣的读者可以阅读相关的RFC。

●报头长度(header length)——字段长度为4 位,正如字段名所示,它表示32位字长的IP报头长度。设计报头长度字段是因为数据包的可选项字段(在本节后面部分将会讨论)的大小会发生变化。IP 报头最小长度为20个八位组,最大可以扩展到60个八位组一通过这个字段也可以描述32位字的最大长度。

●服务类型(Type of Service, ToS) ——字段长度为8 位,它用来指定特殊的数据包处理方式。服务类型字段实际上被划分为两个子字段:优先权和ToS。优先权用来设置数据包的优先级,这就像邮寄包裹一样,可以是平信、隔日送到或两日内送到。ToS允许按照吞吐量、时延、可靠性和费用方式选择传输服务。虽然ToS字段通常不用(所有位均被设置为0),但是在开放式最短路径优先(OSPF) 协议的早期规范中还是称为ToS路由选择的。优先权位偶尔在服务质量(QoS)应用中使用。图1-3的a部分简要地说明了8个ToS位,更详细的信息可以参见RFC1340和RFC1349。

在最近几年,ToS字段已经作为区分服务(Diffserv) 架构的一部分被重新定义了。区分服务架构为IP数据包所创建的处理比通过相对严格的ToS定义所允许的处理灵活得多。在DifServ下,我们能够在一台路由器上定义服务分类,将数据包归类到这些分类中去。路由器可以根据它们的分类使用不同的优先级对数据包进行排序和转发。每一个排序和转发的处理称为一个Per-Hop Behavior (PHB)。虽然DiffServ定义了这个架构或体系,但这个机制本身称为区分服务类别或简单地称为服务类别(CoS)。

图1-3中的(b)部分显示了ToS字段是如何重新定义的,开始的6个位现在构成了区分代码点(DifServ Code Point, DSCP)。利用这6个位,我们可以使用任意数值或根据在区分服务体系结构中预先定义的服务类别,最多可以定义64个不同的服务类别,并可整理到PHB中。请注意,在IP报头中的这个字段保留了8位;区分服务体系结构重新定义了路由器对这个字段中数值的解释。

●显式拥塞通知(Explicit Congestion Notification, ECN) ——在图 1-3中的显式拥塞通知是某些路由器用来支持显式拥塞通知的,当它支持该特性时,这些位可以用于拥塞信号(ECN=11)。

●总长度(Total Length)——数据包总 长度字段的长度为16位,以八位组为单位计,其中包括IP报头。接收者用 IP数据包总长度减去IP报头长度,就可以确定数据包数据有效载荷的大小。16位长的二进制数用十进制表示最大可以为65535,所以IP数据包的最大长度是65 535。

●标识符(ldentifier)——字段长度为I6位,通常与标记字段和分段偏移字段一起用于数据包的分段。如果数据包原始长度超过数据包所要经过的数据链路的最大传输单元(MTU),那么必须将数据包分段为更小的数据包。例如,一个大小为5000字节的数据包在穿过网络时,如果遇到一条MTTU为1 500字节的数据链路,即数据帧最多容纳大小为1 500字节的数据包。路由器需要在数据成帧之前将数据包分段成多个,数据包,其中每个数据包长度不得超过1 500字节;然后路由器在每片数据包的标识字段上打上相同的标记,以便接收设备可以识别出属于一个数据包的分段。

●标记字段(Flag) ——长度为3位, 其中第1位没有使用。第2位是不分段(DF)位。当DF位被设置为1时,表示路由器不能对数据包进行分段处理。如果数据包由于不能被分段而未能被转发,那么路由器将丢弃该数据包并向源点发送错误消息。这一功能可以在网络上用于测试MTU值。参见示例1-1所示,在I0S软件系统中,使用扩展Ping工具可以对DF位进行设置。

示例1-1为 了测试穿越网络的MTU值,IOS 软件中的扩展Ping工具允许设置DF位。在ping的输出信息中,到达目的地172.16.113.17的路径的最大MTU为1478字节

第3位表示还有更多分段(MF)位,当路由器对数据包进行分段时,除了最后一个分段的MF位设置为0外,其他所有分段的MF位均设置为I,以便接收者直到收到MF位为0的分段为止。

●分段偏移(Fragment Offset)——字段长度为13位,以8个八位组为单位,用于指明分段起始点相对于报头起始点的偏移量。由于分段到达时可能错序,所以分段偏移字段可以使接收者按照正确的顺序重组数据包。

请注意,如果一个分段在传输中丢失,那么必须在网络中同一点对整个数据包重新分段并重新发送。因此,容易发生故障的数据链路会造成时延不成比例。另外,如果由于网络拥塞而造成分段丢失,那么重传整组分段会进一步加重网络拥塞。

●生存时间(Time To Live, TTL)——字段长度为8 位,在最初创建数据包时TTL即被设置为某个特定值。当数据包逐个沿路由器被传输时,每台路由器都会降低TTL的数值。当TTL值减为0时,路由器将会丢弃该数据包并向源点发送错误信息。这种方法可以防止数据包在网络上无休止地被传输。

按照最初构想,TTL-值以s (秒)为单位。如果数据包在路由器上被延迟的时间超过1s,路由器将会相应地调整TTL值。然而,这种方法实施起来十分困难,从来没有被广泛地支持。现代的路由器不管实际时延是多少,统统将TTL值减1,所以TTL实际上是表示跳数。虽然TTL常见的值为15和32,但是建议的缺省值是64。

像I0S软件中的trace 命令这样的一些追踪工具使用的是TTL字段。如果路由器被告知需要追踪到达主机地址为10.11.12.13 的路径,路由器将发送3个数据包,其中TTL值被设置为1;第1台路由器将会把TTL值减少到0,而且在丢弃数据包的同时向源点发送错误信息。源点路由器通过阅读错误信息从而得知发送错误信息的路由器即为路径上的第1台路由器。再一次被路由器发送的3个数据包的TTL值被设置为2。

第1台路由器将TTL值减1,第2台路由器将TL值再减I后为0,此时源点路由器将会接收到第2台路由器发送来的错误信息。第3次发送的数据包TTL值被设置为3,依此类推,直到目的地被发现。最终,沿着网络路径所有的路由器都会被标识出来。示例1-2 中显示了IOS软件中路由追踪的输出结果。

为了使13位长的分段偏移字段可以表示的最大数据包长度为65 535字节,所以使用8个八位组作为本字段的单位。

示例1-2追踪工具使用 TTL字段来标识沿途路由器。星号表示超时数据包

●协议(Protocol) ——字段长度为8位,它给出了主机到主机层或传输层协议的“地址”或协议号,协议字段指定了数据包中信息的类型。当前已分配了100多个不同的协议号,表1-2给出了其中一些较常用的协议号。

在IPv6报头中等价的字段己经重新命名为HopLimit,以便更加确切地反映它的真正用途。

●报头校验和(Header Checksum) ——是针对IP 报头的纠错字段。校验和不计算被封装的数据,UDP、TCP和ICMP都有各自的校验和。报头校验和字段包含一个16 位二进制补码和,这是由数据包发送者计算得到的。接收者将连同原始校验和重新进行16位二进制补码和计算。如果数据包传输中没有发生错误,那么结果应该16位全部为1。回忆前面所述内容,由于每台路由器都会降低数据包的TTL值,所以每台路由器都必须重新计算校验和。RFCI141 讨论了一些简化计算的策略。

●源地址和目的地址(Source and Destination Address) ——字段长度为 32位,分别表示发送者数据包源点和目的地的IP地址。

●可选项(Options) ——是一个长度可变的字段, 并像其名字所表示的,它是可选的。可选项被添加在包头中,包括源点产生的信息和其他路由器加入的信息;可选项字

段主要用于测试。常用的可选项如下:

➢松散源路由选择(Loose Source Routing) ——它给出了一连串路由器接口的IP地址序列。数据包必须沿着IP地址序列传送,但是允许在相继的两个地址之间跳过多台路由器。

➢严格源路由选择(StrictSourceRouting)——它也给出了一系列路由器接口的IP地址序列。不同于松散源路由选择,数据包必要严格按照路由转发。如果下一跳不再列表中,那么将会发生错误。

➢记录路由(RecordRoute)——当数据包离开时为每台路由器提供空间记录数据包的出站接口地址,以便保存数据包经过的所有路由器的记录。记录路由选项提供了类似于路由追踪的功能,但是不同点在于这里记录了双向路径上的出站接口信息。

➢时间戳(Timestamp)——除了每台路由器还会记录一个时间戳之外,时间戳选项十分类似于记录路由选项,这样数据包不仅可以知道自己到过哪里,而且还可以记录到达的时间。

在Cisco路由器上使用扩展的Ping工具可以调用所有这些选项。示例1-1中使用了记录路由选项,示例1-3使用了松散源路由选择和时间戳选项,严格源路由选择选项在示例1-4中被使用。

示例1-3使用Cisco的扩展Ping工具来设置IP报头中的可选项字段的各项参数。在这个例子中,用到了松散源路由选择选项和时间戳选项

示例1-4这里使用扩展Ping在ping数据包中设置严格源路由选择选项

●填充 (Padding) ——该字段通过 在可选项字段后面添加0来补足32位,这样保证报头长度是32位的倍数。

示例1-5显示了协议分析器捕获到的IP报头的信息。请与图1-2中的信息作一下比较。

示例1-5在协议分 析器的窗口中,可以看到IP包头各字段及每个字段的值

(0)

相关推荐