那些神秘的硬件软件协议栈,它们使用的竟然是这些基本技术

editor的头像

现代数字通信技术让我们的生活发生了彻底地改变,而通信协议无疑是这一改变的始作俑者。

硬件有自己的通信协议,比如pci总线、usb总线、i2c总线等等。

软件也有自己的协议栈,无线的3gpp、gprs,有线的tcp/ip协议栈、atm协议等等。

基于物理层的协议,很大程度是由芯片完成的,但是涉及到交换路由、数据传输、业务处理,则很大程度上是由软件负责的。

协议栈看上去复杂,但是它所使用的技术都是一些基本技术,熟悉这些常用的技术和方法有利于我们在后面的开发中能够高效的利用这些协议。那么,今天我们就要看看,实现协议栈需要怎样的一些基本技术。

(1)状态机

状态机是协议栈使用最多的一种方法。当协议处于不同的状态的时候,就会对不同的报文内容作出不同的处理方法。

(2)定时器

计时器也是协议栈经常使用的方法。通常协议本身在某段时间内需要收到对端发送的响应报文,如果没有收到报文我们就认为通信失败。因此,我们完全可以通过设定定时器的方法,在一段时间之后判断当前的报文有没有发送成功。

(3)重发机制

因为网络的链路状态是十分复杂的,所以不同的协议对报文的响应时间是不同的。只要协议本身允许,一段时间内的重发都是可以的。

(4)校验和

为了验证报文在传输的过程中0和1没有发生改变,在报文中添加校验和也是十分必要的。这种校验方法很多,奇偶校验、crc校验都是可以的。当然,至于具体使用哪种方法需要根据rfc标准来判断。

(5)报文排序

在tcp/ip协议层中,ip层作用就是分片和路由的功能。我们知道有的时候发送的报文是很长的,所以有必要对这些报文进行排序处理。在传输中,我们需要确认所有的报文都能正确地得到传输和处理。

(6)字节序

x86的cpu是高地址高数据,而powerpc是低地址高数据。而报文中的内容需要的是低地址高数据,所以在处理的时候需要十分小心。

(7)其他的基本技术

7.1 互斥

传输涉及到多线程的设计

7.2 链表

链表是模块设计中的基本结构

7.3 最小生成树算法

ospf中需要涉及到基本的图论算法

7.4 rfc标准

rfc是我们一切工作的准绳

7.5 开源软件

开源软件可以帮助我们快速熟悉相关的开发工作

7.6 调试日志

调试日志有助于我们对故障快速进行定位