简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)

详解TCP/IP协议之:TCP/IP实际结构、以太网协议、IP协议

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(1)

引言

最近一枚网络运维老狗被00后小鲜肉憋的高血压都犯了。

原因是公司某业务突发故障,老狗零延迟响应,验证网络正常,推断是业务的应用层面有问题。结果被00后业务运维小鲜肉在大群中急速怼了回来,说:怎么可能!!IP地址都PING不通,不是网络出问题了?!

领导神补刀后,老狗半天没喘上气。领导说各方都不要甩锅,甩锅者季度绩效得C。

老狗上有老小有小,不敢得罪大领导。只能憋的血压升高,吐血整理出了关于TCP/IP协议的知识总结,供大家学习,特别是希望00后小鲜肉能看到。

上篇主要带大家看看TCP/IP实际结构和实际结构中底层协议(以太网和IP协议),因为本老狗发现目前网上各种介绍TCP/IP协议的文章中,重点都会放在TCP协议上,却忽略了对下层协议的详细讲解。

借此机会好在本篇文章中填补空白,给同学们详细道来。

一.TCP/IP实际结构

这里说的TCP/IP实际结构,是通过分析数据包看到实际结构。有别于TCP/IP参考模型和OSI参考模型中的标准结构。

TCP/IP实际结构、TCP/IP参考模型和OSI参考模型三者的对比图如下,可以看到TCP/IP实际结构分了五层。

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(2)

TCPIP实际结构

通过抓取的数据包验证TCP/IP实际的五层结构。可以看到最外层物理层,之后依次是数据链路层、网络层、传输层和应用层。截图如下图所示:

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(3)

TCP/IP五层结构

对于TCP/IP的五层结构,除了物理层不详细讲解外(其实也没啥讲的,就是一句话:物理层的作用就是透明的传输比特流), 其他四层都会进行详细介绍。

数据包的封装形式

要详细说TCP/IP实际的五层结构,得先知道这五层结构中的每一层是怎么组合在一起的。这里有必要先提一下数据包的封装形式。

说的通俗点,数据包封装形式和洋葱类似,都是一层一层包起来的。咱们展开数据包进行分析时,就像是在剥洋葱,总有一层能让你流泪的(玩笑)。

下图直观的展示了数据包的封装形式:

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(4)

数据包的封装

下面通过分析数据包中各层级字节数情况从另外一个侧面来展示数据包的封装形式。

选取一帧数据包(第4帧),看到此帧为HTTP请求,说明此数据包中有完整的五层信息。此帧的大小是448字节(不包含CRC循环校验位),并且此帧不含有IP选项和TCP头部选项。预测此帧中TCP的数据部分(即HTTP头部即数据部分)的大小应该为448-14(以太网首部)-20(IP首部)-20(TCP首部)= 394字节。展开数据包后,看到TCP的数据部确实是394字节。具体如下图所示。

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(5)

数据表字节数

分用

秒懂了什么是数据包的封装形式后,还需要了解在拨开数据包某一层时如何确认下一层的协议类型,这就要明确一个概念了:分用。

TCP首部和UDP首部都有端口号字段,用于标识应用层的协议。其中1-1023为知名端口号和预留端口号。1024-65535为临时端口号,分配给应用临时使用。

这种在低层级的首部中用于标识高一层级的协议类型的方式即为分用,这样网络设备和程序在拆解数据包时就能根据特定的标识正确的将数据包传输正确的地方。

分用的示意图下图所示:

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(6)

分用示意图

有了上面的解释和示意图,我们再来具体分下分用的抓包分析。

以太网帧首部有一个2字节的帧类型域。帧类型域用于标识其网络层为何种协议(以太网的协议号)(如,IP:0x0800,ARP:0X0806,RARP:0X0835)。帧类型域的标识下图所示:

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(7)

帧类型域标识

IP首部中有一个1字节的协议域,也用于标识传输层为何种协议(如ICMP:1,TCP:6,UDP:17,GRE:50)。协议域的标识下图所示:

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(8)

协议域标识(ICMP)

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(9)

协议域标识(TCP)

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(10)

协议域标识(UDP)

二、以太网协议

以太网是最早是美国施乐公司和前DEC公司设计的一种通信方式,之后由IEEE802.3委员会将其规范化。但是两者之间对以太网帧的格式定义有所不同。为区别两种封装方式,一般都使用802.3封装和以太网封装来进行称呼。本老狗的网络环境多用以太网协议,所以这里只对以太网封装做详细介绍。

拨开第一层,可以看到以太网的首部,格式如下图所示:

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(11)

以太网首部

以太网各字段主要含义:

(1) 目的地址和源地址

以太网格式采用48 比特的目的地址和源地址作为通信地址,这就是我们说的硬件地址。

(2) 类型

标识以太网封装中的类型标识上一层(即网络层)使用的协议:0X0800为IP数据报;0X0806为ARP请求/应答;0X8035为RARP请求/应答。

(3) 数据部分

数据部分长度必须在46-1500字节之间。为了保证这一点,必须在不足的空间插入填充字节。

(4) 校验

CRC字段用于帧内后续字节差错的循环冗余码检验(检验和)(也被称为FCS或帧检验序列)。

MTU

刚才提到以太网数据部分长度必须在46-1500字节之间。估计有同学会问本老狗了,为什么长度有这个规定呢?

这是一个历史性问题了,在设计以太网的年代,带宽还不是实时双向的。就像过独木桥,同一时间,只能允许一个方向的人流通过。但如果一个方向的人一直在通过,对面方向岂不无法通行。这就需要定个规则,规定一个方向一次最多通行几人,然后再让对面方向的人通过。

所以在设计以太网时,人为规定了每个帧的最大长度1500字节 (即除去以太网帧首部的数据部分),作为每次数据传输的最大传输单元(即MTU)。

三.IP协议

IP是TCP/IP协议中最为核心的协议,所有的TCP/UDP/ICMP等数据都以IP数据包格式传输。IP提供的数据报传输服务是不可靠、无连接的。

不可靠的意思是它不能保证IP数据报能成功地到达目的地。IP仅提供最好的传输服务。如果发生某种错误时,IP有一个简单的错误处理算法,即丢弃该数据报,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层来提供(如TCP协议)。

无连接的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明, IP数据报可以不按发送顺序接收。如果某一源地址向相同的目的地址发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。

拨开第二层,可以看到IP的首部。IP首部排版格式如下图所示,每行代表32比特(即四个字节)。最高位在左边,记为0 比特;最低位在右边,记为31 比特。

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(12)

IP首部

IP首部各字段主要含义:

(1) 版本号(4位):目前版本号是4。

老狗后续会专门写一篇关于IPV6文章,再详细介绍IPV6内容。

(2) 首部长度( 4位):

首部长度指的是首部占32比特(4字节)的数目。如下图所示,首部长度是5,即首部长度是5*4字节=20字节。

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(13)

版本首部长度

(3) 服务类型(8位)

服务类型字段通常在QoS中用的到,这里暂做忽略。

(4) 总长度(16位):整个IP数据报的长度(包括IP首部),以字节为单位。

举个例子,请看下图。该截图中,总长度字段在十六进制中的标识为"05 9C",可转换成16位的二进制的"0000 0101 1001 1100",或者十进制的"1436"

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(14)

总长度

(5)标识字段(16位):

标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。主要用于分片重组,该值在数据报分片时被复制到每个片中。此外,如果标识ID相同,但是源地址/目标地址/协议/端口不同,也是不同的分片。

有的同学有疑惑,发现一个数据流中标识字段不是按顺序增加的。

老狗在这里做个答疑。这位同学的数据应该是个多会话的业务,各会话之间并行传输。如果只展开一个会话,看到的标识字段不是按顺序增加的。但是从总体看,从帧的顺序来看,标识字段是按顺序增加的(前提抓包时要抓全量的数据)。

下图可以看到一个TCP流中的同一个方向连续两帧(1825,1828)的标识字段并不是连续的。

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(15)

TCP流中一个方向连续两帧

下图是从整体分析,1825和1827是一个方向的连续两帧,展开看到标识字段是连续的。

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(16)

整个帧中一个方向连续两帧

(6)标志字段(3位)

标志字段用其中一个bit来表示"更多的片 MF (More fragement)"; 标志字段中有一个bit称作"不分片 DF(Don't fragment)"位;如果将这一比特置1,IP将不对数据报进行分片。相反会把数据报丢弃并发送一个ICMP差错报文给起始端。标志字段如下图所示:

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(17)

标志字段

(7)偏偏移(13位)

片偏移字段指的是该片偏移原始数据报开始处的位置。相对用户数据字段的起点,该片从何处开始,单位是字节。片偏移如下图所示。UDP的分片分析,老狗回来后续的UDP文章中展开分析。

简述tcpip五层模型各层对应的协议(一文秒懂TCPIP实际五层结构)(18)

片偏移

(8)生存时间(8位)

TTL标识能够经过多少条路由器,每经过一个路由器,TTL减1。

(9)协议字段(8位)

协议字段指出此数据报携带的数据是使用何种协议。

常用的IP协议号:ICMP-1,TCP-6,UDP-17,GRE-47,ESP-50,AH-51

(10)首部检验和(16位)

首部检验和字段是根据IP首部计算的检验和码,它不对首部后面的数据进行计算。ICMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。

(11)源IP地址和目的IP地址 (32位)

(12)选项部分

该部分长度可变,一般不在实际生产中使用。包括源路由、路径记录、时间戳等。

上篇完结

--喜欢的同学请点击关注哦--

下篇文章:

我为什么学IT

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页