以太网

以太网指数字设备公司,英特尔公司,Xeror公司在 1982年联合公布的一个标准, 是当前 TCP/IP 采用的主要局域网技术.

以太网采用 CSMA/CD 的媒体接入方法, 即 带冲突检测的载波侦听多路接入(Carrier Sense, Multiple Access with Collision Detection), 速率 10 MB/s , 地址 48 bit.

IEEE 802委员会公布了其网络标准,并定义了不同的帧格式:

802.2 : 3/4/5 的共同特性, 即 802网络共有的逻辑链路控制(LLC)
802.3 : 针对整个 CSMA/CD 网络
802.4 : 针对令牌总线网络
802.5 : 针对 令牌环网络

** 802.2 和 802.3 定义的帧格式与以太网不同.

RFC 894 : 以太网数据包的封装.

RFC 1042 : IEEE 802 网络的IP数据包封装

主机需求 RFC , 要求每台 Internet主机都与一个 10 Mb/s 的以太网网线相连:

1) 必须能发送和接受 RFC 894 封装格式的分组;
2) 应该能接受与 RFC 894 和 RFC 1042 封装格式的分组;
3) 也许能够发送采用 RFC 1042 格式封装的分组. 如果主机能同时发送两种类型的分组数据, 那么发送的分组必须是可设置的, 且默认条件下必须是 RFC 894 分组.

以太网封装格式

6 bit, 48 位 目的地址 : MAC 地址
6 bit, 48 位 源地址 : MAC 地址
2 bit, 类型 :
数据字段 :
CRC : 用于帧内后续字节差错的循环冗余校验.

** 最少字节 46 字节, 不足空间插入填充字节(PAD)

IEEE 802.2/802.3 封装格式

6 bit, 48 位 目的地址 : MAC 地址
6 bit, 48 位 源地址 : MAC 地址
2 bit, 长度 : 后续数据的字节长度, 不包含 CRC 校验码.
3 bit, 802.2 LLC, 逻辑链路控制 :
    1 bit, DSAP (Destination Service Access Point) : 0xaa
    1 bit, SSAP (Source Service Access Point) : 0xaa
    1 bit, ctrl : 3
5 bit, 802.2 SNAP, 子网接入协议(Sub-network Access Protocol) :
    3 bit, org_code : 全为 0
    2 bit, 类型 : 同以太网帧格式类型.
数据字段 :
CRC : 用于帧内后续字节差错的循环冗余校验.

** 最少字节 36 字节, 不足空间插入填充字节(PAD)

以太网封装 与 IEEE 802 封装区分 :

802 定义的有效长度值域以太网的有效类型值无一相同, 可以依次作为区分.

尾部封装 : 遭到反对.

通过调整 IP 数据报中字段的次序来提高性能。在以太网数据帧中,开始的那部分是变长的字段
(IP 首部和 TCP首部)。把它们移到尾部(在 CRC 之前),这样当把数据复制到内核时,就可以
把数据帧中的数据部分映射到一个硬件页面,节省内存到内存的复制过程。 TCP数据报的长
度是512字节的整数倍,正好可以用内核中的页表来处理。两台主机通过协商使用 ARP 扩展协
议对数据帧进行尾部封装。这些数据帧需定义不同的以太网帧类型值。

SLIP,Serial Line IP (串行接口链路层协议)

一种在串行线路上对IP数据报进行封装的简单格式, 描述于 RFC 1055 . 适用于 RS-232串行端口和高速调制解调器接口.

帧格式 : END & ESC

1. ip数据包以一个称作 END(0xc0) 的特殊字符结束, 同时,为了防止数据报到来之前的线路噪声被当做数据报内容, 大多数实现在数据包的开始处也传一个 END 字符.
2. 如果IP报文中某个字符为 END, 那么久要连续传输两个字符 oxdb 和 0xdc 来取代它. 0xdb 这个特殊字符被称作 SLIP 的 ESC 字符, 但是他的值域 ASCII 码的 ESC 字符(0x1b)不同.
3. 如果 IP 报文中某个字符为 SLIP 的 ESC 字符, 那么就要连续传输两个字节 0xdb 和 0xdd 来取代它.

缺陷 :

1. 每一端必须知道对方的 IP 地址, 没有办法吧本段的 IP 地址通知给另一端.
2. 数据帧中没有类型字段, 如果一条串行线路用于 SLIP, 那么他不能同时使用其他协议.
3. SLIP 没有在数据帧中加上校验和. 如果 SLIP 传输的报文发生错误, 只能通过上层协议来发现. 这样, 上层协议提供的某种形式的 CRC 就显得很重要.

SLIP 是一种广泛使用的协议.

CSLIP, 压缩 SLIP

背景

由于串行线路的速率通常较低(19200 b/s 或 更低), 而且通信经常是交互式的, 因此在 SLIP 线路上有许多小的 TCP 分组进行交换. 为了传输 1 个字节的数据, 需要 20 个字节的IP首部和 20 个字节的 TCP 首部, 总数超过 40 字节.

CSLIP : RFC 1144

CSLIP 一般能把上面的 40 个字节压缩到 3 或 5 个字节;
能在 CSLIP 的每一段维持多达 16 个TCP链接, 并且知道其中每个链接的首部中的某些字段一般不会发生变化. 对于发生变化的字段, 大多数只是一些小的数字和的改变

CSLIP 主要用于缩短交互响应时间.

现在大多数支持 SLIP 的产品都支持 CSLIP .

PPP, 点对点协议

PPP 修改了 SLIP 协议中的所有缺陷.

ppp 包含以下三部分 :

1) 在串行链路上封装IP数据报的方法.
    支持数据为8位和无奇偶校验的异步模式;
    支持面向比特的同步链接.

2) 建立,配置及测试数据链路的链路控制协议(LCP, Link Control Protocol).
    允许通信双方进行协商, 以确定不同的选项.

3) 针对不同网络层协议的 网络控制协议(NCP, Network Control Protocol).
    当前 RFC 规定的网络层有 IP,OSI网络层,DECnet 及 AppleTalk.

PPP 数据帧封装格式:

标志字节 : 值为 0x7e, 位于报文开头和结束.
地址字节 : 值为 0xff
控制字节 : 值为 0x03
协议字段 :
    0x0021 : IP 数据报文
    0xc021 : 链路控制数据
    0x8021 : 网络控制数据
CRC : 循环冗余校验码, 也称为 (FCS, 帧检验序列)

----------------------------------------------

标识位(0x7e)转义:
    1. 在同步链路中 :
        通过一种称作比特填充(bit stuffing)的硬件技术来完成.
    2. 在异步链路中 :
        特殊字符 0x7d 用作转义字符.
    3. 在 PPP 数据帧中 : 紧接着字符的第6个比特要取其不补码.
        ① 当遇到字符 0x7e 时, 需要连续传送两个字符 : 0x7d 和 0x5e, 以实现标志字符的转义.
        ② 当遇到转义字符 0x7d 时, 需连续传送两个字符: 0x7d 和 0x5d, 以实现转义字符的转义.
        ③ 默认情况下, 如果字符的值小于 0x20 , 一般都要记性转义. 例如, 遇到字符 0x01 时需要连续传送 0x7d 和 0x21 两个字符(此时, 第6个比特取补码后变为1, 而前面两种情况均把它变为 0).

PPP比SLIP具有如下优点:

1) PPP 支持在单根串行线路上运行多种协议;
2) 每一帧都有循环冗余校验
3) 通信双方可以进行IP地址的动态协商;
4) 与 CSLIP 类似, 对 TCP 和 IP 报文首部进行压缩;
5) 链路控制协议可以对多个数据链路选项进行设置;
6) 代价: 每一帧都不增加三个字节; 当建立链路时于要发送几帧协商数据, 以实现更为复杂的实现.

环回(loopback)驱动程序

环回接口(Loopback Interface), 允许运行在同一台主机上的客户程序和服务器程序通过 TCP/IP 进行通信. A 类网络号 127 就饿会为 环回接口预留的. 惯例上把 IP 地址 127.0.0.1 分配给 loopback 接口, 并命名为 localhost .

一个传给环回接口的 IP 数据包不能在任何网络上出现.

传输流程 :

当传输层检测到目的端地址是环回地址时, 数据仍然会完成在传输层和网络层的所有过程, 只是当 IP 数据报离开网络层的时候, 吧它返回给自己.

① 传给环回地址的任何数据都作为IP输入;
② 传给广播地址或多播地址的数据报, 赋值一份传给环回接口, 然后送到以太网.
③ 任何传给该主机IP地址的数据均送到环回接口.

MTU 和 路径 MTU

MTU : 最大传输单元.

以太网 : 1500 字节
802.3 : 1492 字节

如果IP层的一个数据报大于 链路层的 MTU, 则 IP 层就要进行分片(fragmentation), 每一片都小于 MTU.

** 点到点的链路层(SLIP,PPP)的MTU并非是网络媒体的物理特性, 它是一个逻辑限制, 目的是为交互使用提供做够快的响应时间.**

路径MTU :

如果两台主机之间的通信要通过多个网络, 每个网络的链路层就坑有由不同的 MTU, 重要是不是两台主机所在网络的 MTU 值, 而是两台通信主机路径中最小的 MTU, 它被称为 路径MTU.

两台主机之间的路径MTU并一定是一个常数, 它取决于当时所选择的路由, 而选路不一定是对称的(从A到B的路由可能与从B到A的路由不同), 因此路径MTU 在两个方向上不一定是一致的.

RFC 1191 描述了 路径MTU 的发现机制.

tcp/ip详解 卷1 -- 链路层的更多相关文章

  1. 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  2. 《TCP/IP详解卷1:协议》第1章 概述-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  3. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  4. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(2)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  5. 《TCP/IP详解卷1:协议》第4章 ARP:地址解析协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  6. 《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  7. 《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  8. 《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  9. 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

随机推荐

  1. MVC 5 + EF6 完整教程16 -- 控制器详解

    Controller作为持久层和展现层的桥梁, 封装了应用程序的逻辑,是MVC中的核心组件之一. 本篇文章我们就来谈谈 Controller, 主要讨论两个方面: Controller运行机制简介 C ...

  2. Eclipse 如何添加Window Builder插件?

    http://www.eclipse.org/windowbuilder/download.php 找到对应版本的window builder 如果不知道版本的话,可以在你的Eclipse-help- ...

  3. poj3320尺取法

    Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The final exam is co ...

  4. C# Winform中的窗体传值

    关于C#winform窗体之间的传值有以下几种做法 1 通过构造函数传值 2 属性传值 以上两种方法不早详细介绍. 3 通过事件传值,委托传值 首先看一下通过委托传值吧. 1,创建两个窗体,分别是Fo ...

  5. Hadoop 核心架构

    Hadoop 由许多元素构成.其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件.HDFS(对于本文)的上一层是Ma ...

  6. session知识总结

    0.什么是会话? - 简单理解:打开浏览器到关闭浏览器过程中的操作.请求. 1.Session是什么? - session是HttpSession的简称: - 用于保存会话状态: - 将会话状态保存在 ...

  7. 一个栗子上手CSS3动画

    最近杂七杂八的事情很多,很多知识都没来得及总结,是时候总结总结,开启新的篇章- 本篇文章不一一列举CSS3动画的属性,若需要了解API,可前往MDN 在开始栗子前,我们先补补基础知识. css3动画分 ...

  8. Java 通过先序后序序列生成二叉树

    题目 二叉树的前序以及后续序列,以空格间隔每个元素,重构二叉树,最后输出二叉树的三种遍历方式的序列以验证. 输入: 1 2 3 4 5 6 7 8 9 10 3 2 5 4 1 7 8 6 10 9 ...

  9. crontab的相关设置&linux定时备份数据库

    对于才了解crontab的人来说,应该按照以下的步骤来设置crontab 1.首先要检查是否装了crontab http://blog.sina.com.cn/s/blog_4881040d01011 ...

  10. 【AngularJS中的自定义服务service VS factory VS provider】---它们的区别,你知道么?

    在介绍AngularJS自定义服务之前,我们先来了解一下AngularJS~ 学过HTML的人都知道,HTML是一门很好的伪静态文本展示设计的声明式语言,但是,要构建WEB应用的话它就显得乏力了. 而 ...