TCP/IP协议学习--链路层
来源:互联网 发布:汇盈牛熊先知主图源码 编辑:程序博客网 时间:2024/06/04 18:51
本博文记录作者学习 TCP/IP协议的过程,主要的学习材料是《TCP/IP 详解 卷1:协议》,下文中称为『图书』。由于这本经典图书的古老,还会参考一些其它材料。
1. 链路层协议
链路层的协议有:
- 以太网协议
- 802委员会发布的协议
- 802.2 链路层共同特性
- 802.3 针对整个 CSMA/CD 网络
- 802.4 针对令牌总线网络
- 802.5 针对令牌环网络
- 串行接口链路层协议:SLIP、CSLIP、PPP
补充:图书中并没有提到802.1的协议,其实在项目开发的过程中就遇到了这个问题。起码链路层存在802.1q协议的东西,使得以太网的帧头不是图书中描述的一定是14字节。
链路层的协议应用的比较广的主要是以太网协议,并且支持802委员会的协议,所以本博文只讨论以太网协议。以太网是TCP/IP 协议采用的主要的局域网技术,采用的是CSMA/CD 的媒体接入方式,还记得上大学时老师用了好玩的 flash 来演示这个过程。
2. 以太网协议
以太网协议的标准主要有两个来源。在 TCP/IP 世界中,以太网 IP 数据报的封装是在 RFC894。IEEE 802网络的 IP 数据包的封装是 RFC1042。
图书中是这样描述这两种协议在主机中的使用情况的。每台 Internet 主机都与一个以太网电缆相连接:
- 必须能发送和接受采用 RFC894封装格式的分组
- 应该能接受与 RFC894混合的 RFC1042封装格式的分组
- 也许能够发送采用 RFC1042格式封装的分组。如果主机能够同时发送两种类型的分组数据,那么发送的分组必须是可以设置,而且默认条件下必须是 RFC894分组。
3. 以太网帧格式
以太网的帧格式主要是有三部分组成:帧头,数据,CRC 校验。需要关注的点有两个:
- 帧头格式
- 数据长度
3.1 帧头
首先看 RFC 894的帧格式
| 目的地址–6字节 | 源地址–6字节 | 类型–2字节 | 数据部分 | crc |
补充:其实在看维基百科上关于以太网帧结构介绍的时候,会发现有出入,由于图书并没有关注802.1q协议,所以忽略了一种帧结构。802.1q协议的帧头是多出4个字节的,这个可以在百度百科里面查询802.1q 去看一下帧结构。
再来看 RFC1042 的帧格式:
| 目的地址–6字节 | 源地址–6字节 | 长度–2字节 | AA | AA | 03 | 000000 | 类型–2字节 | 数据部分 | crc |
所以区分以太网帧格式类型的方法也是比较简单的,只要看第13、14个字节的值就好了,前12个字节都是地址。
- 0800: IP 数据报文
- 0806: ARP
- 8035:RARP
- 8100: 802.1q
- 其它: 802.2、802.3
3.2 长度
RFC 894的数据长度需要在46~1500之间
RFC 1042的数据长度需要在38~1492之间
链路层对数据帧的长度最大值的限制称为 MTU。可以使用 netstat -in 打印出来主机的
0 0
- TCP/IP协议学习--链路层
- TCP/IP协议学习
- TCP-IP协议学习
- TCP/IP协议学习
- 学习TCP/IP协议
- TCP/IP协议学习笔记----2.链路层
- tcp/ip协议学习笔记(2)链路层
- 【tcp-ip学习笔记】tcp-ip协议
- TCP/IP协议:链路层
- TCP/IP协议新手入门学习
- TCP/IP协议学习笔记
- tcp/ip协议学习笔记
- TCP/IP协议学习总结
- 如何学习TCP/IP协议
- TCP/IP协议相关学习
- TCP/IP协议的学习
- TCP/IP 协议状态学习
- TCP/IP 协议状态学习
- FirstBlood
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- Xcode 7+ 和 iOS9 兼容那点事
- RecyclerView的使用
- 【Android笔记】执行命令行语句
- TCP/IP协议学习--链路层
- ios开发者修养
- linux/UNIX上的inode、硬链接以及软连接
- 快速实现 ListView下拉,图片放大刷新操作
- OCP-V13-686
- LINK - Azure - Session/Cache State Management
- 将String转换成InputStream
- UVA 10006 Carmichael Numbers (暴力+快速幂取模)
- 职场准备(一)