我一直觉得IP数据包,到物理层发送这之间再也不有什么操做性了。由于在日常的交流中谈协议,谈到IP这一层基本就止住了,仿佛IP打包后就能够直接发送了是的。然而当我读了《TCP/IP详解卷一:协议》后,我才发现其中并无那么简单。也许是由于接近真实世界的缘由,不一样的网络链接方式最终封装的IP都不太同样。程序员
以太网和IEEE 802是最多见的两种协议,它们的数据报以下:缓存
目的地址和原地址指的就是物理地址(MAC地址),它们是经过ARP协议获取的(下文会介绍)。网络
咱们将目光放到封装的数据部分,能够看到封装的三种报文(IP、ARP、RARP)类型是一致的,可是后面的数据长度范围并不一致。IEEE802的最小值是36字节(PAD 表明填充字节的意思),而以太网的是46。学习
在观察除了数据之外的部分,会发现他们源地址、目的地址都在开头并占据相同长度,尾部都是4字节的CRC(检验码),不同的是IEEE802比以太网多占用了8个字节(长度+几个不明就里的固定字段)。spa
在我看来以太网应该是IEEE 802的升级版(由于减小了一些不须要的固定字节的占用),然而以太网出现的时间比IEEE 802提早,也就是说IEEE 802才是升级版。更神奇的是RFC标准规定,以太网必须支持而IEEE选择支持。然而我查找了半天资料没有发现两个同时存在的缘由,所以我能想到的IEEE 802存在的缘由是历史商业竞争的产物了。设计
ARP(Address Resolution Protocol)为协议地址(一般是IP,也就是说能够用在非IP协议上)到硬件地址之间提供一种映射。主要不是用于消息通讯,而是为了消息通讯而查出硬件地址。code
用于以太网的ARP请求或应答报文以下:cdn
硬件类型和协议类型决定最后4个字段(源硬件地址、源协议地址、目的硬件地址、目的协议地址)的长度和内容blog
解析过程:ci
主机在接收到请求或响应ARP报文时,会将地址缓存下来。完整的表项(可以正常响应的)通常为20分钟,不完整的表项(未被正常响应的)通常为3分钟。能够经过指令arp
进行查看。
SLIP(Serial Line IP)是一种对IP数据报进行封装的简单形式,适用于RS-232串行端口和高速调制解调器接入Internet。RS-232常见于液晶显示屏与电脑的连接。
RS-232数据线:
SLIP数据报:
从数据报能够看出SLIP协议是一种很简单的协议,除了头尾字段用于区分数据报,而后将数据报中会影响判断的(标志字节:0xc0,转义字节:0xdb)进行转义就完成了封装能够进行发送了。
优势:
简单、字节少。
我想这也是它会被用在显示器上(RS-232)和接入Internet等对时延要求高、传输量大的场合。
缺点:
我想也就是由于这些不稳定性,因此主要是在有线传输中见到它的身影。
CSLIP(Compressed SLIP)是SLIP的更进一步,它将SLIP传输的TCP数据包头进行压缩,减小传输量。但并不影响UDP包头。
PPP(Point to Point Protocol)协议修改了SLIP协议中的全部缺点。PPP就是被设计来用于取代SLIP的。其数据报以下:
能够看到CRC加入了协议字段和CRC字段(校验和)字段,所以能够解决只可以传输一种类型报文,以及没有校验和易受噪声干扰的问题。至于PPP的IP协商机制,有兴趣的能够本身查查资料。
PPP与SLIP同样有头尾标志字节,这就说明PPP也须要将数据报中的标志字节和转义字节进行转移。与SLIP不同的是,标志位(0x7e)、转义字节(0x7d)。
除了这两个字节外PPP还须要对小于0x20的字节进行转移,由于0x20的字节在ascii码中有控制含义,怕影响底层驱动程序。
所以PPP具备转移规则,规则是在0x7d接下去的第1个byte的第6个bit取补码(即将byte取补码后,将这个byte的第6位,用补码的第6位取代)。
公众号二分之一程序员,专一计算机基础的学习,欢迎关注 :)
复制代码