16进制数用空格分开 tcp_面试时,你是否被问到过TCP/IP协议?

点击蓝字

a5bb66be8ac951933d847d83afb958bc.gif

关注我们

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

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

TCP/IP协议层

a5bb66be8ac951933d847d83afb958bc.gif

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

f4ea605c69ef5162d2457888d307dfd2.png

除了少数例外,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包头

a5bb66be8ac951933d847d83afb958bc.gif

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

fed452cb546f015e663a00156c007356.png

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

da552a452d6959ac5e05b4524ce43400.png4be5aab077840045ccd75e35abecb557.png

●报头长度(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。

b9b4ad2bd9898a2cd4cba1b0cdd771dd.png

在最近几年,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字节

34efd6022badb8591a80212646cdb490.png83c9645281c69b7c43eafbbe5745aabe.png

第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字段来标识沿途路由器。星号表示超时数据包

595ec64807bed5317cda6d176e591305.png

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

b02e90644d5b2235e37b743130eaf7bd.png112a9cd14f31a51e9e5de659bfd1cfb8.png

在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报头中的可选项字段的各项参数。在这个例子中,用到了松散源路由选择选项和时间戳选项

077024f784f9e9b8b5aad585d09b621e.pnge593369d1be345b9e261b3c8065a8e87.png

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

7c51efabe74cad028cf8345080428731.png1bb0754330ef04ff68b6f629cbeeaf5b.png

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

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

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

d94855fa520a8c6d4c933c3ba5b02b94.png

点击

即可免费获得3天实战课程名额

带你从0到1设计、搭建企业网络

还不赶快动动你的小指头

↓↓↓

5298d8a975f55172acf4f571fe04dcb5.png

点击  即可免费获得实战课程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

直接使用汇编编写 .NET Standard 库

前言Common Language Runtime(CLR)是一个很强大的运行时,它接收 Common Intermediate Language(CIL) 的输入并最终产生机器代码并执行。CIL 在 CLR 上相当于 ASM 汇编代码的存在。CLR 之上的语言 C#、F#、VB.NET 等语言…

[蓝桥杯2016决赛]七星填数-next_permutation枚举

题目描述 如下图所示: 在七角星的14个节点上填入1~14 的数字,不重复,不遗漏。要求每条直线上的四个数字之和必须相等。 图中已经给出了3个数字。请计算其它位置要填充的数字,答案唯一。 填好后,请提交绿色节点的4个数…

系统蓝屏的几种姿势,确定不了解下么?

前言在 蓝屏(BSOD)转储设置,看本文就够了!这篇文章里比较详细的介绍了蓝屏转储设置。做好设置后,我们就可以在需要的时候使系统蓝屏了。本文介绍几种使系统蓝屏的办法,当然肯定还有其它办法,如果…

最长公共子串-dp

题目: 给定两个字符串,求出它们之间最长的相同子字符串的长度。 公共子串和公共子序列不同,公共子序列不要求连续,但公共子串必须是连续的。如: A “helloworld” B “loop” A和B的最长公共子序列是"loo",但最长公共子串是&quo…

智能对话引擎:两天快速打造疫情问答机器人

01微软AI技术开源知识库疫情机器人近一个月来,“新冠肺炎疫情”成了所有人的热点话题,抗击疫情的战役在全国紧张有序地进行着。随着全国各地的企业陆续复工,怎样防范、保护自己和家人成了当下每个人的焦点。为了配合奋战在一线的医护人员打赢…

数码管

题目背景 小明的单片机上面的LED显示屏坏掉了,于是他请你来为他修显示屏。 屏幕上可以显示0~9的数字,其中每个数字由7个小二极管组成,各个数字对应的表示方式如图所示: 题目描述 为了排除电路故障,现在你需要计算&am…

fh 幅频特性曲线怎么画fl_初学者怎么练习线条?教你如何画出流畅线条的技巧...

初学者怎么练习线条?怎样才能画出流畅线条?画出流畅线条有哪些技巧?想必这些问题都是绘画初学者们比较伤脑筋的问题,那么到底怎样才能画出流畅线条呢?今天灵猫课堂老师就在网络上收集整理了关于初学者怎么练习线条&…

.NET Core开发实战(第12课:配置变更监听)--学习笔记

12 | 配置变更监听:配置热更新能力的核心这一节讲解如何使用代码来监视配置变化并做出一些动作当我们需要追踪配置发生的变化,可以在变化发生时执行一些特定的操作配置主要提供了一个 GetReloadToken 方法,这就是跟踪配置的关键方法接着使用上…

ASP.NET Core Web API基于RESTFul APIs的集合结果过滤和分页

译者荐语:如何在RESTFul APIs中进行集合结果分页?还是用客户端来拼接链接地址么?原文来自互联网,由长沙DotNET技术社区【邹溪源】翻译。如译文侵犯您的版权,请联系小编,小编将在24小时内删除。在ASP.NET Co…

.net 微服务实践

l 前言本文记录了我的一次.net core 微服务架构实践经验,以及所用到的技术l 优点每个服务聚焦于一块业务,无论在开发阶段或是部署阶段都是独立的,更适合被各个小团队开发维护,团队对服务的整个生命周期负责,工作在独…

redis过期监听性能_基于Redis的延迟处理

延迟处理是一个非常常用的一个功能;例如, 下单成功后,在30分钟内没有支付,自动取消订单;延迟队列便是延迟处理中最常见的实现方式;先一起看下JDK中延迟队列是如何实现的.JUC的DelayQueue在JDK中, 提供了一套延迟队列的实现, 是JUC包中DelayQueue类.在使用时只需要让处理的元素对…

【译】来看看WebWindow,一个跨平台的.NET Core webview 库

本文翻译自 ASP.NET 项目组的 Steve Sanderson 的博客,发表于 2019 年 11 月 18 日。Steve Sanderson 是 Blazor 最早的创造者。它类似于 Electron,但没有捆绑 Node.js 和 Chromium,也没有大部分 API。我的上一篇文章研究了如何用 web 渲染的…

sql if 和insert_拼多多面试:Mybatis是如何实现SQL语句复用功能的?

在工作中&#xff0c;往往有这样的需求&#xff0c;对于同一个sql条件查询&#xff0c;首先需要统计记录条数&#xff0c;用以计算pageCount&#xff0c;然后再对结果进行分页查询显示&#xff0c;看下面一个例子。<sql id"studentProperties"><!--sql片段-…

代码演示C#各版本新功能

代码演示C#各版本新功能C#各版本新功能其实都能在官网搜到&#xff0c;但很少有人整理在一起&#xff0c;并通过非常简短的代码将每个新特性演示出来。代码演示C#各版本新功能C# 2.0版 - 2005泛型分部类型匿名方法可以为null的值类型迭代器协变和逆变C# 3.0版 - 2007自动实现的…

《C++ Primer》1.52节练习

练习1.23 #include <iostream> #include "Sales_item.h"using namespace std;int main() {Sales_item trans1, trans2;cout << "请输入若干销售记录:" << endl;if (cin >> trans1) {int num 1;while (cin >> trans2)if (t…

ASP.NET Core 反向代理部署知多少

引言最近在折腾统一认证中心&#xff0c;看到开源项目[IdentityServer4.Admin&#xff1a;https://github.com/skoruba/IdentityServer4.Admin]集成了IdentityServer4和管理面板&#xff0c;就直接拿过来用了。在尝试Nginx部署时遇到了诸如虚拟目录映射&#xff0c;请求头超长、…

函数传参string_JavaScript 高阶函数入门浅析

原文&#xff1a;https://www.freecodecamp.org/news/a-quick-intro-to-higher-order-functions-in-javascript-1a014f89c6b/译者&#xff1a;jingruzhang校对者&#xff1a;acusp高阶函数高阶函数可以接收函数作为参数&#xff0c;同时也可以返回一个新的函数。高阶函数之所以…

.NET Core开发实战(第13课:配置绑定:使用强类型对象承载配置数据)--学习笔记...

13 | 配置绑定&#xff1a;使用强类型对象承载配置数据要点&#xff1a;1、支持将配置值绑定到已有对象2、支持将配置值绑定到私有属性上继续使用上一节代码首先定义一个类作为接收配置的实例class Config {public string Key1 { get; set; }public bool Key5 { get; set; }pub…

工业互联网白皮书_发布|《工业互联网平台安全白皮书(2020)》发布

12月4日&#xff0c;2020年中国工业信息安全大会暨全国工控安全深度行(京津冀站)在北京国际会议中心举行。大会由国家工业信息安全发展研究中心、工业信息安全产业发展联盟主办&#xff0c;以“贯彻总体国家安全观&#xff0c;把牢工控安全基准线”为主题。会上&#xff0c;国家…