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网络模型 计算机与网络设备要相 ...
随机推荐
- QTP 中对象操作
1.创建对象(将浏览器设置为一个对象) set oIE=createobject("internetexplorer.application") 2.将浏览器设置为可见的 oIE. ...
- 小白日记39:kali渗透测试之Web渗透-SQL手工注入(一)-检测方法
SQL手工注入(一) SQL注入:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.[SQL注入原理] ##服务端程序将用户输入参数作为查询 ...
- Android(java)学习笔记95:Android原理揭秘系列之View、ViewGroup
作过Android 应用开发的朋友都知道,Android的UI界面都是由View和ViewGroup及其派生类组合而成的.其中,View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器, ...
- 利用传感器(sensor)实现微信摇一摇动画
所需要的权限: <uses-permission android:name="android.permission.VIBRATE"></uses-permiss ...
- 产品设计原则之移动APP【转】
随着移动互联网的发展,越来越多的Web产品开始布局移动端,因此最近经常碰到PM们在交流讨论移动APP产品的设计.我从事移动互联网已经有一年多了,通过不断的学习和实践也积累了一些心得,今天整理并分享一下 ...
- C中的回调函数
C语言中应用回调函数的地方非常多,如Nginx中: struct ngx_command_s { ngx_str_t name; ngx_uint_t type; char *(*set)(ngx_c ...
- [转]W3C 验证 there is no attribute target for this element
http://validator.w3.org/ 本文转自:http://hi.baidu.com/linkbestlove/item/d7fff865aefa5f0ba1cf0f04 我们要在新窗口 ...
- [改善Java代码]使用匿名类的构造函数
建议39: 使用匿名类的构造函数 阅读如下代码,看看是否可以编译: public class Client { public static void main(String[] args) { Lis ...
- 核心概念 —— 契约(Contracts)
1.简介 Laravel中的契约是指框架提供的一系列定义核心服务的接口. 例如 ,Illuminate\Contracts\Queue\Queue契约定义了队列任务需要实现的方法,Illuminate ...
- ORACLE之PACKAGE
刚学pl/sql编程,写了两个package.pkg_temp_fn和pkg_temp_fn2.内容涉及pl/sql基本语法,游标,存储过程(in,out),函数(有返回值). pkg_temp_fn ...