tcp/ip详解 卷1 -- 链路层
以太网
以太网指数字设备公司,英特尔公司,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 -- 链路层的更多相关文章
- 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第1章 概述-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第3章 IP:网际协议(2)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第4章 ARP:地址解析协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
随机推荐
- [HNOI2004]宠物收养场 Treap前驱后继
凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领 ...
- 【算法系列学习】Dijkstra算法变形 [kuangbin带你飞]专题四 最短路练习
https://vjudge.net/contest/66569#problem/B 类试题:noip2013 货物运输 POJ 1797 Heavy Transportation 方法一:Dijks ...
- Flume总结(1)
一.日志采集:从网络端口接收数据,下沉到logger 文件netcat-logger.conf: # Name the components on this agent #给那三个组件取个名字 a1. ...
- NSLog (Log信息的输出)
概述 NSLog是 cocoa的框架中提供的一个方法 NSLog的定义 NSLog定义在NSObjCRuntime.h中 NSLog与printf的差异 1)NSLog传递进去的格式化字符是NSStr ...
- 【更新WordPress 4.6漏洞利用PoC】PHPMailer曝远程代码执行高危漏洞(CVE-2016-10033)
[2017.5.4更新] 昨天曝出了两个比较热门的漏洞,一个是CVE-2016-10033,另一个则为CVE-2017-8295.从描述来看,前者是WordPress Core 4.6一个未经授权的R ...
- TreeSet源码分析
第1部分 TreeSet介绍 TreeSet 是一个有序的集合,它的作用是提供有序的Set集合.它继承于AbstractSet抽象类,实现了NavigableSet<E>, Cloneab ...
- [UWP]不怎么实用的Shape指南:自定义Shape
1. 前言 这篇文章介绍了继承并自定义Shape的方法,不过,恐怕,事实上,100个xaml的程序员99个都不会用到.写出来是因为反正都学了,当作写个笔记. 通过这篇文章,你可以学到如下知识点: 自定 ...
- js导出CSV
<html> <head> <meta http-equiv="content-type" content="text/html; char ...
- python 之变量
什么是变量? 变量就是存储一个不固定的值,可以随时更改其值. 1.变量不仅可以是数字,还可以是任意数据类型 2.变量名必须是大小写英文.数字和_的组合,且不能用数字开头 python变量如何存储 首先 ...
- 【JAVAWEB学习笔记】28_jquery加强:json数据结构、jquery的ajax操作和表单校验插件
Ajax-jqueryAjax 今天内容: 1.json数据结构(重点) 2.jquery的ajax操作(重点) 3.jquery的插件使用 一.json数据结构 1.什么是json JSON(Jav ...