如果你喜欢小编往期内容,关注一下小编公众号 - 无线技术栈,或者私信回复"802.11"获取Wi-Fi学习方法和资料,也可以和小编交流一下经验~
作为一名Wi-Fi研发工程师,断网断流问题的拆解可谓是家常便饭,那么如何练就一身手到擒来的操刀本领呢,跟着小编一点点解开它的面纱,我计划将从协议基础知识、协议规范、协议栈源码分析、debug手段、日志分析…一点点开搞~
序言
本文旨在介绍一下TCP/IP涉及的所有基础知识,为大家从宏观上俯瞰TCP/IP提供一个基石,文档属于《TCP/IP图解(第五版)》的精简版本。
专业术语
缩写
全称
WAN
Wide area network广域网
LAN
Local area network局域网
TCP
Transmission controll protocol传输控制协议
IP
Internet Protocol
ISP
Internet Service Provider
IX
Internet Exchange
NOC
Network Operation Center
一 基础知识
提到通信网络,不得不想到TCP/IP七层架构,如下图:
图片
1.1 网络出现的背景
网络设备的广泛使用,处在现在的科技时代,智能设备已经不再讲究单打独斗,而是倾向于“万物互联”的生态理念,身边的电脑、手表、笔记本、电视、汽车...都离不开网络;
网络模式的切换,计算机诞生之初,每一台机器都是一个独立的设备,之间不能互相通信,如下图计算机1-3之间没有任何关联,用户如果想切换计算机只能移动实现,想到新中国成立之初,我们在研发核弹、核潜艇...是需要经过大量的计算从而得到科学的结果,但是那个时候国内计算机屈指可数,科研人员想要计算数据时只能来回奔波;
独立模式:
图片
互联模式:
这种模式下不同的计算机之间可以进行信息共享;
图片
通信方式的转变,最初的计算机通信是基于有线方式,比如将相同业务的计算机通过有线连接在一起,从而实现信息共享,形成一个局域网,而在新型的网络通信中,不再有此局限,用户可以访问到任何计算机的信息,就像我们坐在家里就可以访问到国务院下发的最新资讯;
有了网络之后,万物互联将不再是口号,而是做到了真真正正的信息共享,全球”一家“,巴以冲突的最新战况我们动动手指就能看到;
计算机网络规模分为两种:
1.WAN(wide area network)广域网
广域网是由多个局域网组成,就像我们几个人可以组队和其他城市的队伍竞技;
2.LAN(local area network)局域网
顾名思义,局域网就是一个特定区域或者网域环境,可以由交换机、路由器、计算机组合,就像我们几个人在一个网吧玩红警;
1.2 协议必要性
协议为多设备之间提供了一种规范,要求所有的设备都必须按照固定的规范执行,这样高度一致性,不管是什么厂商、平台…都可以正常通信;
1.3 OSI七层架构及作用
应用层:主要有各应用主导开发,例如邮件协议、文件传输协议;
表示层:负责将应用信息转化为可以利用网络传输的格式,例如在双端之间传输声音、视频等信息;
会话层:通信管理协议,负责建立和断开通信连接;
传输层:负责端到端的数据传输,TCP/UDP是典型代表;
网络层:主要负责地址管理域路由选择,IP是典型代表;
数据链路层:双端直接传输的数据,负责将数据转换为比特,802.11是典型代表;
物理层:负责将数字信号转化为电信号/光信号并进行传输;
1.4 网络的构成要素
一个完整的网络至少需要包含以下几个要素:
网卡:是计算机联网的设备;
中继器:从物理层上延长网络的设备,可以对信号进行放大和传输;
网桥/2层交换机:从数据链路层上延长的设备;
路由器/3层交换机:通过网络层转发分组数据的设备;
4~7层交换机:处理传输层以上各层网络传输的设备;
网关:转换协议的设备;
1.5 传输数据和吞吐量
传输速率:(bps)
在数据传输过程中,端到端之间数据流动的物理速率就是传输速率,传输速率高不是指单位时间流动的数据速率有多快,而是指单位时间数据的传输量有多少,举个例子,低速率就好比日常生活中车道少的公路,汽车通路的时间就比较久,而高速率就好比车道多的公路,汽车通过就比较快,那传输速率就好比这一段时间通过的车辆;
传输速率就可以说是带宽,带宽越大,传输速率越大;
那对wifi而言,影响数据传输数量的因子有哪些呢,如下表格,列出来所有的因子,我们在拆解一个吞吐问题时,首先就需要check这些硬性条件是否满足(带宽、空间流、调制解调方式、GI等等):
图片
吞吐量:
端到端之间实际的传输速率被称为吞吐量,影响吞吐量的因素有这么几个:
(1)带宽;
(2)CPU处理能力;
(3)网络的拥堵程度;
(4)报文中数据字段的占比(不含报文头,只计算数据段本身);
…这几个因素也将作为后续排查网络断流问题的外部因素;
2 TCP/IP基础知识
TCP/IP更广义的定义并不是单单指TCP/IP两种协议(当然就是这么说也没毛病),但是他们往往是指一个协议家族:
图片
定义协议的组织被称为是RFC,如何从网络中获取协议文档参考链接如下:
RFC协议获取指导
2.1 新协议标准化流程
图片
2.2 TCP/IP通信流程
2.2.1 数据"身份证"
根据OSI七层架构来看,每一个数据包从应用发送给接收端,都需要经过每一层协议栈层层包装,如下图:
图片
每一层都会对所发送的数据进行封装处理,添加一个首部,这个首部通常包含该层必要的信息,比如发送的目标地址以及协议的相关信息,数据包 = 协议头 + 数据;(上一层的整个包都会被下一层视为其数据包)
图片
这里我们可以抓一份数据报文来看:
图片
2.2.2 发送数据包
我们举个例子,我们通过飞书给某位同事发送一个文件压缩包/语音/文字,看看各层都做了什么:
(1)应用程序处理
在文本框编辑好文字之后,从点击发送图标开始,应用程序开始建立TCP连接,当然,他首先会对要发送的内容进行编码;
(2)传输层
这里的传输层也可以理解为TCP协议,传输层负责建立、断开TCP连接以及发送数据;
TCP收到应用发来的数据后,会做以下事情:
为数据添加TCP包头,包头中将包含以下内容:
图片
将封装好的数据发送给IP;
(3)网络层
这里可以理解为是IP协议,IP负责以下内容:
将收到的TCP包整体当作数据包并添加IP包头,这里将会包含源/目标MAC地址,如果不知道MAC地址,将会通过ARP协议进行寻址,包头内容如下:
图片
将封装好的数据发送给驱动程序,也称为数据链路层,这里才开始真正的数据发送;
Mark:这里值得注意的是IP包头中的TTL字段,他表示这个字段在穿过多少个路由之后被抛弃,当IP没穿过一个路由器就会-1,当他变成0之后就会被自动抛弃;
(4)数据链路层
这里基本是驱动程序,像802.11、以太网、数据网协议都在这一层,拿802.11举例,驱动程序在拿到数据包之后,负责以下事情:
给网络层数据包加上802.11协议包头以及标志802.11的协议,截图如下:
图片
将封装好的数据包交给物理层传输给数据端;
数据包从应用出来后,经过每一层,都会添加一个包头,802.11包头、IP包头、TCP包头以及应用自己的包头,在链路层还会添加一个包尾;每个包头中至少包含两个信息:
(1)发送端和接收端的地址,数据链路层是MAC地址,网络层是IP地址,传输层是端口号;
(2)上一层协议的类型;
图片
Mark:传输层和数据链路层都有校验数据完整性的功能;
2.2.3 接收数据包
数据接收过程与发送过程相反,下边简单描述下各层协议的任务;
(1)数据链路层
从802.11数据包中找到MAC,判断是否是发给自己的,如果不是就直接丢弃;
查找包头中类型域,确认包类型交给上一层对应的协议处理;
(2)网络层
从IP包头里解析IP地址确认是否是发给自己的包,如果不是直接丢弃;
查找包头中类型域,确认包类型交给上一层对应的协议处理;
在有路由转发的情况下,接收端地址往往是路由设备的地址,此时需要根据路由控制表转发给对应的终端;
(3)传输层
计算校验和,确认数据是否被损坏;
检查接收数据序号、检查端口号,确定具体的应用;
传输给对应的应用,注意数据校验完之后会发送一个ACK确认,如果这个ack没有到达,就会重传;
技术很枯燥,一口吃不成大胖子,读到这里不妨先停下来消化一下,下文更精彩,稍后呈现~
如果读到这里,你觉得有所收获,就关注下小编的公众号,未来一起进步~