2021-02-23 [技术栈]网络协议3UDP协议 [技术栈]网络协议3UDP协议 1. 前言其实前文了解了TCP之后,UDP也不难理解了,肯定是一种协议格式和一些交互机制。TCP所有机制可以说都是围绕着可靠二字展开的,难道TCP就没有缺点吗?连接三次握手,传输数据还有应答,断开都要四次挥手,听上去就觉得很麻烦。而且每次交互都是需要响应时间和传输时间的。UDP就应运而生了,它所应用的场景就是数据传输不需要那么可靠(如视频直播、网络电台等),或者是整个数据包就本身就很小的情况。2. UDP头部可以看到UDP报文头就超级简单了,仅仅8个字节,包含了最基本的四个字段:源端口、目的端口、长度、校验值。3. 机制我感觉UDP没啥机制,就是简单的发送,仅是将内容包装了一下(加上UDP报文头部),非要所机制应该就是有个校验,可以校验数据包是否正确传输。这一块待小伙伴来补充吧。 武小栈 2021-02-23 技术栈 507 阅读 0 评论 2021年02月23日 507 阅读 0 评论
2021-02-22 [技术栈]网络协议2TCP协议 [技术栈]网络协议2TCP协议 1.前言其实TCP协议所在的传输层是一个在网络系统里很基础的层级了,模组中常用的HTTP,MQTT,FTP都是在TCP的基础上建立起来的,如果TCP不能用,以上这样应用都要凉凉。2.TCP协议前面的《网络协议1协议栈》已经简单的介绍了TCP协议的工作方式,在这里再稍微深入的说一下TCP协议,为啥只讲稍微深入呢,因为探究深入了以小弟的水平还真说不明白是怎么回事。大家关于TCP的印象是啥?三次握手四次挥手?还是不丢包?这里就以一个完整数据传输流程简单的介绍一些TCP是怎样传输数据的,整体流程下图所示。2.1 TCP连接阶段第一步就是建立连接。建立TCP连接,这里的建立连接并不是真正意义上的建立连接,当设备接入互联网的时候,互联网的设备就已经连接好了,本质上来说互联网所有设备都是相连的,这里的连接而是一个准备数据传输的过程。都知道建立连接要三次握手,这里引入几个问题,有问题的小伙伴也可以在下面提问,大家来补充答案哦:1、既然设备接入网络客户端和服务器就已经连接了,为什么TCP通信还要建立连接? 答:更好的保证可靠性,经过三次握手也可以让通信双方验证各自的发送能力和接收能力是否正... 武小栈 2021-02-22 技术栈 659 阅读 0 评论 2021年02月22日 659 阅读 0 评论
2021-02-07 [技术栈]网络协议1协议栈 [技术栈]网络协议1协议栈 1.前言接下来我打算写几篇文章简单的介绍一下我们常用的一些通信协议,当然所有描述都是基于我自己现有了解,肯定会有所纰漏,甚至错误的地方,望各位大佬不吝指正。2.网络模型介绍以中移ML302模组为例,在模组部官网中查询到的产品规格中网络协议支持以上这几项,所以以测IPv4,IPv6,TCP,UDP,PPP,FTP,HTTP,NTP,MQTT这八种协议为例说明。既然要测网络协议,那就先找一个网络协议模型瞧一瞧,个人比较喜欢看五层协议,就找个五层协议说说。上面这个就是TCP/IP五层模型,不熟悉的也了解过,不了解的也听说过。IPv4,IPv6这俩位于第3层,网际层。TCP,UDP这俩位于第4层,传输层。PPP位于第2层,网络接口层FTP,HTTP,NTP,MQTT这四个都位于第5层,应用层。2.通信示例介绍2.1通信流程就以我们最耳熟能详的TCP为例来讲讲一次数据的发送和接收发生了什么,总得来说就如下图所示。从用户A操作发送信息开始,经过了协议栈层层“打包”,然后数据终于通过网线传到了用户B处,然后这个数据经过了用户B设备的协议栈层层“拆包”,最终用户B拿到了用户A发送的原内容。2.2... 武小栈 2021-02-07 技术栈 672 阅读 0 评论 2021年02月07日 672 阅读 0 评论
2019-09-18 [技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码 [技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码 1.CRC、FCS是什么CRC,全称Cyclic Redundancy Check,中文名称为循环冗余校验,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。FCS,全称Frame Check Sequence,中文名称为帧校验序列,俗称帧尾,即计算机网络数据链路层的协议数据单元(帧)的尾部字段,是一段4个字节的循环冗余校验码。注:CRC循环冗余校验和FCS帧校验序列是单独的概念,CRC是一种错误校验方法,FCS是帧尾校验码,FCS可以采用CRC校验方法,也可以采用其他校验方法。2.CRC算法原理我们可以把任意的一串二进制数据表示为一个与之对应的多项式。比如:二进制数据:1100101 多项式:$x^6 + x^5 + x^2+1$多项式: $x^6 + x^4+x^3 + x^2+1$二进制数据:1011101有了这样的对应关系,对二进制数据的CRC校验就可以利用多项式运算规则进行校验计算。CRC校验算法正是采用了模2除法,在数据处理里的具体表现为异或运... 武小栈 2019-09-18 技术栈 6,417 阅读 0 评论 2019年09月18日 6,417 阅读 0 评论
2019-09-11 [技术栈]C#利用Luhn算法(模10算法)对IMEI校验 [技术栈]C#利用Luhn算法(模10算法)对IMEI校验 1、Luhn算法(模10算法)通过查看ISO/IEC 7812-1:2017文件可以看到对于luhn算法的解释,如下图:算法主要分为三步:第一步:从右边第一位(最低位)开始隔位乘2;第二步:把第一步所得的每一个数字加入到原来的数中,比如9*2=18,为1+8;第三步:用以0结尾且大于第二步所获得的数的和的最小整数减去第二步所获得的和即可以获得校验位,如70-67=3,3即为校验位,如果第二步所有数字的和以0结尾,比如30、40、50等,那么校验为0;2、IMEI校验IMEI码由GSM(Global System for Mobile Communications,全球移动通信协会)统一分配,授权BABT(British approvals Board of Telecommunications,英国通信认证管理委员会)审受。在TS.06 IMEI Allocation and Approval Process中规定IMEI校验应该通过Luhn算法计算,如下图所示:3、C#代码public class LuhnCalcCheckDigit { /// <summar... 武小栈 2019-09-11 技术栈 6,147 阅读 1 评论 2019年09月11日 6,147 阅读 1 评论