版权声明:本文为博主原创文章,转载请标注转载链接,谢谢。

 

目录(?)[+]

 

引言

        在TCP/IP协议族中,链路层主要有三个目的:
  • 为IP模块发送和接收IP数据报。
  • 为ARP模块发送ARP请求和接收ARP应答。
  • 为RARP发送RARP请求和接收RARP应答。
                         

TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件。(以太网、令牌环网、FDDI、RS-232串行线路)。本章将详细讨论以太网链路层协议、两个串行接口链路层协议(SLIP和PPP),以及大多数实现都包含的环回(loopback)驱动程序。

 

以太网封装和IEEE 802封装

        以太网(Ethernet)指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带局域网规范,是当今现有局域网采用的最通用的通信协议标准。以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以10Mb/S的速率运行在多种类型的电缆上。
        IEEE(电子电气工程师协会)802委员会公布了一个标准集。其中802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络。这三者的共同特性由802.2标准来定义,即802网络共用的逻辑链路控制(LLC)。然而,802.2和802.3定义了一个与以太网不同的帧格式。(注意将以太网帧与802帧区分开来)
        在TCP/IP世界中,以太网IP数据报的封装在RFC 894中定义。IEEE 802网络的IP数据报封装在RFC 1042中定义。在主机需求RFC中要求每一台Internet主机都与一个10Mb/s的以太电缆连接:
  • 必须能发送和接收采用RFC 894(以太网)封装格式的分组。
  • 应该能接收与RFC 894混合的RFC 1042(IEEE 802)封装格式的分组。
  • 也许能够发送采用RFC 1042格式封装的分组。如果主机能同时发送这两种类型的分组数据,那么发送的分组必须是可以设置的,同时默认情况下必须是RFC 894分组。
        其中最常用的封装格式是RFC 894(以太网封装)定义的格式。
        两种帧格式都采用48bit(6字节)的目的地址和源地址。这就是在本书中称为的硬件地址。ARP和RARP协议对32bit的IP地址和48bit的硬件地址进行映射(后续介绍)。接下来的2个字节在两种帧格式中互不相同。在802标准定义的帧格式中,长度字段是指它后续数据的字节长度,但不包含CRC检验码。以太网的类型字段定义了后续数据的类型。幸运的是,802定义的有效长度值与以太网的有效类型值无一相同。这样,就可以对两种帧格式进行区分。同时,802标准定义的帧定义中,类型字段由后续的子网接入协议(SNAP, Sub-network Access Protocol)给出。
        从上图可知,无论是以太网封装格式,还是IEEE 802 封装格式,在数据链路层中传递的数据类型主要有三种:IP数据报、ARP请求/应答、RARP请求/应答。
        在以太网帧格式中,类型字段之后即为数据。而在802帧格式中,跟随在其后的为3字节的802.2LLC和5个字节的SNAP。其中目的服务访问点( Destination Service Access Point)和源服务访问点(Source Service Access Point)即后面控制字段、orgcode的值都为固定值(如图所示)。CRC字段用于帧内后续字节差错的循环冗余检验(也被称为FCS)(后续介绍)。
        802.3标准定义的帧和以太网的帧都有最小长度要求。802.3规定数据部分长度至少为38字节,而对于以太网帧,则最少要求46字节长度的数据部分。为了保证这一点,可能需要在必要时插入填充字节。(后续介绍)
        

尾部封装

        描述了另一种用于以太网的封装格式,称为尾部封装。它通过调整IP数据报中字段的次序来提高性能。将(IP首部和TCP首部)它们移到尾部(在CRC之前),这样当把数据复制到内核时,就可以把数据帧中的数据部分映射到一个硬件页面,节约内存到内存的复制过程(因为TCP数据报的长度为512字节的整数倍,正好可以用内核中的页表来处理)。但现在尾部封装已经遭到反对。这里仅仅介绍尾部封装而不讨论它。

《TCP/IP详解卷一:协议》数据链路层(一)的更多相关文章

  1. 【TCP/IP详解 卷一:协议】第二章:链路层

    2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...

  2. 『TCP/IP详解——卷一:协议』读书笔记——10

    2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...

  3. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

  4. TCP/IP详解 卷一(第一章 概述)

    很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们相互进行通信. 1.分层 TCP/IP不是一个协议,而是一个协议族,通常它被认为是一个四层的协议系统,下面展 ...

  5. 【TCP/IP详解 卷一:协议】第十一章 UDP 用户数据报协议

    11.1 引言 UDP 是一个简单的 面向数据报 的运输层协议:进程的每个 输出操作 都正好产生一个 UDP数据报,并且组装成一份待发送的IP数据报. 这与 TCP 不一样,它是 面向流字符 的协议, ...

  6. 【TCP/IP详解 卷一:协议】TCP的小结

    前言:TCP学习的综述 在学习TCP/IP协议的大头:TCP协议 的过程中,遇到了很多机制和知识点,详解中更是用了足足8章的内容介绍它. TCP协议作为 应用层 和 网络层 中间的 传输层协议,既要为 ...

  7. 【TCP/IP详解 卷一:协议】第六章:DHCP 和自动配置

    简介 为了使用 TCP/IP 协议族,每台主机or路由器都需要一定的配置信息: IP地址 子网掩码 广播地址 路由或转发表 DNS 协议配置方法: 手动 通过使用网络服务来获得 使用一些算法来自动确定 ...

  8. 『TCP/IP详解——卷一:协议』读书笔记——11

    2013-08-23 20:00:18 第4章 ARP:地址解析协议 4.1 引言 ARP(Address Resolution Protocol,地址解析协议)是获取物理地址的一个TCP/IP协议. ...

  9. 【TCP/IP详解 卷一:协议】第四章 ARP:地址解析协议 以及其他部分的一些知识

    4.1 引言 数据链路 如以太网(Ethernet) 或者 令牌环网 都有自己的寻址机制(一般为 48 bit 的地址). 一个网络(数据链路层) 可以同时被多个不同的网络使用.比如,一组使用TCP/ ...

随机推荐

  1. org hibernate querytimeoutexception

    起因 在做Hibernate批量插入时,出现这个错误org.hibernate.QueryTimeoutException: 错误原因是表空间的容量不足,需要加大空间容量:那首先想到的是应该查询其容量 ...

  2. NUTCH2.3 hadoop2.7.1 hbase1.0.1.1 solr5.2.1部署(二)

     Precondition: hadoop 2.7.1 hbase 1.0.1.1 / hbase 0.98.13 192.168.1.106 ->master 192.168.1.105 ...

  3. 关于打开sdk下载不了的最优秀解决方式

    使用网站:  mirrors.neusoft.edu.cn  东北大学就可以

  4. 成长型思维模式Not yet

    当做一件事失败了,要告诉他 暂未成功,暂时没有成功,继续努力,下次就有可能成功. 不及格,暂未及格  是两种思维模式,成长性的思维方式得到的是一个是努力型的人格

  5. 1 zabbix3.2.4 安装

    一. 搭建zabbix服务 Zabbix 3.0对PHP的要求最低为5.4,而CentOS6默认为5.3.3,完全不满足要求,故需要利用第三方源,将PHP升级到5.4以上,注意,不支持PHP7.如下是 ...

  6. Altera Quartus 13.1 仿真工具路径错误问题解决 Can't launch the ModelSim-Altera software

    Altera Quartus 13.1 仿真工具路径错误问题解决 Quartus13.1 自带的ModelSim-Altera 10.1d 版本, 在做仿真时调用 ModelSim-Alteara,发 ...

  7. Python中高层次的数据结构,动态类型和动态绑定,使得它非常适合于快速应用开发,也适合于作为胶水语言连接已有的软件部件。

    https://github.com/jhao104/proxy_pool/blob/master/doc/introduce.md 3.代码模块 Python中高层次的数据结构,动态类型和动态绑定, ...

  8. 【题解】[CF718C Sasha and Array]

    [题解]CF718C Sasha and Array 对于我这种喜欢写结构体封装起来的选手这道题真是太对胃了\(hhh\) 一句话题解:直接开一颗线段树的矩阵然后暴力维护还要卡卡常数 我们来把\(2 ...

  9. mysql一:操作数据库

    创建数据库是指在数据库空间中划出一块空间用来存储相关的数据,表就是存储在对应的数据库里面.首先来看下查看数据库的命令:show databases. 这个是用来查询数据库空间下所有的数据库,其中inf ...

  10. 去js校验

    1.首先,找到项目所在的路径 2.关掉eclipse,找到项目文件 3.打开.project