TCP/IP:链路层
链路层主要目的:
1. 为IP模块发送和接收IP数据报。
2. 为ARP模块发送ARP请求和接收ARP应答。
3. 为RARP发送RARP请求和接收RARP应答。
链路层对IP数据报封装格式:
1. 以太网(RFC 894)封装格式。
2. IEEE 802(RFC 1042)封装格式。
3. SLIP串行线路IP
4. PPP点对点协议
以太网和IEEE802封装:
在上面的是IEEE的封装格式,下面的是以太网的封装格式,从图中可以看出这两种帧格式中前12个字节和最后的4个字节都是一样的。在前12个字节中,分别以目的地址和原地址组成;帧的最后4个字节是由CRC组成。
在以太网的帧格式中,跟在员地址字段后面的是2个字节大小的类型字段,这个字段指定了后续数据的类型。
在IEEE帧格式中,跟在原地址字段后面的是长度字段,同样占用2个字节,长度字段是指它后续数据的字节长度。与以太网帧格式不同,在IEEE帧格式中长度字段后面跟的并非是数据,而是大小为3字节大小的802.2 LLC和5个字节大小的802.2 SNZP。目的服务访问点(DSAP)和源服务访问点(SSAP)的值都为0xaa;Ctrl字段的值为3,之后的3个字节的org code都为0。跟在SNZP后面的是类型字段,与以太网中的类型字段一样,指定了后续数据的类型。
CRC字段为帧内后续字节差错的循环冗余码效验(效验和)。
SLIP 串行线路IP:
SLIP报文格式
SLIP是一种在串行线路上的对IP数据报进行封装的简单形式,适用于RS-232串行端口和高速调制解调器。
SLIP协议定义的帧格式:
1. IP数据报以一个END(0xc0)的特殊字符结束。同时,为了防止在数据报到达之前将线路噪声当成数据包内容,大多数实现会在数据报的开始出也传一个END字符。
2. 如果IP数据报的某个字符为END,需要用0xdb和0xdc来代替。0xdb在SLIP中被称作ESC字符,但它与ASCII中的ESC字符(0x1b)不同。
3. 如果IP报文中某个字符为SLIP中的ESC字符,需要用0xdb和0xdd来代替。上图中就含有一个END和ESC字符的IP报文。
SLIP的缺陷:
1. 两端都必须知道对方的IP地址,没有办法将IP地址通知给对方。
2. 数据帧中没有类型字段。在使用SLIP的串行线路上不能同时使用其他协议。
3. 没有效验和,出现错误后只能通过上层协议来发现。不过,新型的调制解调器可以检测并纠正错误的报文。
压缩的SLIP:
由于串行线路的速率通常较低,而通信通常是交互式的。可能会出现为了传输1个字节却需要增加超过40个字节的IP(20个字节)首部和TCP(20个字节)首部。为了弥补这些性能上的缺陷,提出了一个称为CSLIP(即压缩SLIP)的新协议。它能将40个字节压缩到3到5个字节,并能在SLIP两端维持多大16个TCP链接。
ppp:点对点协议:
ppp协议修改了SLIP协议的所有缺陷,包括:
- 在串行链路上封装IP数据报的方法。PPP既支持数据为8位和无奇偶检验的异步模式(如串行接口),还支持面向比特的同步连接。
- 建立、配置及测试数据链路的链路控制协议(LCP: Link Control Protocol)。它允许通信双方进行协商,已确定不同的选项。
- 针对不同网络层协议的网络控制协议体系。
PPP数据帧格式
字段说明:
- 标志字段:帧的开始和结束的两个标志字段的值都为0x7e。
- 地址字段:地址字节的值始终是0xff。
- 控制字段:控制字节的值为0x03。
- 协议字段:与以太网中的类型字段相似。当值为0x0021时,信息字段是一个IP数据报;当值为0xc021时,信息字段是一个链路控制数据;当值为0x8021时,信息字段为网络控制数据。
- CRC字段(或FCS,帧检验序列):CRC字段是一个循环冗余检验码。
由于标志字符的值是0 x 7 e,因此当该字符出现在信息字段中时, P P P需要对它进行转义。在同步链路中,该过程是通过一种称作比特填充(bit stuff i n g )的硬件技术来完成的[ Ta n e n b a u m1 9 8 9 ]。在异步链路中,特殊字符0 x 7 d用作转义字符。当它出现在P P P数据帧中时,那么紧接着的字符的第6个比特要取其补码,具体实现过程如下:
1) 当遇到字符0 x 7 e时,需连续传送两个字符: 0 x 7 d和0 x 5 e,以实现标志字符的转义。
2) 当遇到转义字符0 x 7 d时,需连续传送两个字符: 0 x 7 d和0 x 5 d,以实现转义字符的转义。
3 ) 默认情况下,如果字符的值小于0 x 2 0(比如,一个A S C I I控制字符),一般都要进行转义。例如,遇到字符0 x 0 1时需连续传送0 x 7 d和0 x 2 1两个字符(这时,第6个比特取补码后变为1,而前面两种情况均把它变为0)。
这样做的原因是防止它们出现在双方主机的串行接口驱动程序或调制解调器中,因为有时它们会把这些控制字符解释成特殊的含义。另一种可能是用链路控制协议来指定是否需要对这3 2个字符中的某一些值进行转义。默认情况下是对所有的3 2个字符都进行转义。
与S L I P类似,由于P P P经常用于低速的串行链路,因此减少每一帧的字节数可以降低应用程序的交互时延。利用链路控制协议,大多数的产品通过协商可以省略标志符和地址字段,并且把协议字段由2个字节减少到1个字节。如果我们把P P P的帧格式与前面的S L I P的帧格式(图2 - 2)进行比较会发现, P P P只增加了3个额外的字节: 1个字节留给协议字段,另2个给C R C字段使用。另外,使用I P网络控制协议,大多数的产品可以通过协商采用Van
Jacobson报文首部压缩方法(对应于C S L I P压缩),减小I P和T C P首部长度。
总的来说, P P P比S L I P具有下面这些优点:
(1) PPP支持在单根串行线路上运行多种协议,不只是I P协议;
(2) 每一帧都有循环冗余检验;
(3) 通信双方可以进行I P地址的动态协商(使用I P网络控制协议);
(4) 与C S L I P类似,对T C P和I P报文首部进行压缩;
(5) 链路控制协议可以对多个数据链路选项进行设置。为这些优点付出的代价是在每一帧的首部增加3个字节,当建立链路时要发送几帧协商数据,以及更为复杂的实现。
TCP/IP:链路层的更多相关文章
- TCP/IP——链路层
链路层主要有三个目的: (1)为IP模块发送和接收IP数据报; (2)为ARP模块发送 ARP请求和接收 ARP应答; (3)为RARP发送RARP请求和接收RARP应答. TCP / IP支持多种不 ...
- TCP/IP——链路层简记
在TCP/IP协议族中链路层的主要目的有三个: 1,为IP模块发送和接受IP数据报. 2,为ARP模块发送ARP请求和接受ARP应答. 3,为RARP模块发送RARP请求和接受RARP应答. 链路层包 ...
- <TCP/IP>链路层小结
图片和部分内容转载自Chang Zhao 这章大致介绍了以太网,以太网帧的格式,网桥和交换机,无线局域网(Wi-Fi),点到点协议,MTU(最大传输单元)的知识点,所谓链路,在此可以解释为 IP数 ...
- OSI 7层模型和 TCP/IP 5层模型
网络协议通常分不同层次进行开发,每一层分别负责不同的通行功能. 两种参考模型 OSI 和 TCP/IP, OSI 先有模型后有协议,TCP/IP 则相反. OSI 7层模型 - 应用层 - 表示层 - ...
- 网络编程之TCP/IP各层详解
网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...
- TCP/IP 5层协议簇/协议栈
TCP/IP 5层协议簇/协议栈 数据/PDU 应用层 PC.防火墙 数据段/段Fragment 传输层 防火墙 报文/包/IP包packet 网络层 路由器 帧Frame 数据链路层 交换机.网卡 ...
- TCP/IP各层对应的协议
应用层: 该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据协议.如: HTTP:超文本传输协议. TELNET:(网络电传),通过一个终端(terminal)登录到网络(运行在TCP ...
- OSI与TCP/IP各层的结构与功能,都有哪些协议
前言: 今天更新一下计算机网络的一些非常重要的知识,可能很多人都不知学计算机网络有什么用,我想说的是它真的比较重要,像咱们学校只要是学计算机这个专业都要学习这门课程.另外大家要是去一些像BAT,阿里, ...
- 前端工程师如何理解 TCP/IP 传输层协议?
网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别. TCP/IP网络模型 计算机与网络设备要相 ...
随机推荐
- ios开发——实用技术篇OC篇&获取设备唯一标识
获取设备唯一标识 WWDC 2013已经闭幕,IOS7 Beta随即发布,界面之难看无以言表...,简直就是山寨Android. 更让IOS程序猿悲催的是,设备唯一标识的MAC Address在IOS ...
- javascript类,对象,实例
在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型一.由一对大括号括起来var emptyObj = {}; var myObj = { ...
- Redis 脚本
Redis 脚本使用 Lua 解释器来执行脚本. Reids 2.6 版本通过内嵌支持 Lua 环境.执行脚本的常用命令为 EVAL. 语法 Eval 命令的基本语法如下: redis 127.0.0 ...
- PHP.7-HTML+CSS(一)-HTML语法、常用字符实体、颜色代码
HTML+CSS HTML是WEB页面的描述性语言,浏览器解释的语言 CSS则是为HTML制定样式的机制,为浏览器解释的语言.它不能独立使用,没有HTML就没有CSS,定义网页的外观和布局(字体.背景 ...
- proxy代理类
package cn.hncu.proxy.rent; import java.lang.reflect.InvocationHandler;import java.lang.reflect.Meth ...
- Python 替换字符串
string类型是不可变的,因此不能采用直接赋值的方式.比如一个字符串 helloworld,想把o替换成z,那么只有先替换,然后再迭代. strings="helloworld" ...
- 实现JavaScript的组成----BOM和DOM
我们知道,一个完整的JavaScript的实现,需要由三部分组成:ECMAScript(核心),BOM(浏览器对象模型),DOM(文档对象模型). 今天主要学习BOM和DOM. BOM: BOM提供了 ...
- Mac上mariadb的启动与关闭
1. 启动 launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist 2. 关闭 launchctl unload ~/Lib ...
- .net 创建属于自己的log类
实习到现在已经接近三个月了,由于是校企联合培养计划,所以没有工资,所幸公司对于我们这些实习生并没有什么要求,刚开始我还觉得要做点什么才能学得快,可是到了后来,发现公司安排给我们的任务并不紧要,也不算太 ...
- JMS - Message
一条 JMS 消息包含三个部分:消息头.消息属性和消息体. 消息头 消息头提供了和消息有关的元数据,它描述了消息有谁创建.何时创建.数据的有效长度等信息.消息头还包含了描述消息目的地(主题或队列)的路 ...