Hero Circle Shape
Hero Moon Shape
Hero Right Shape
tp钱包官网下载|以太网ethernet的长度

tp钱包官网下载|以太网ethernet的长度

  • 作者: tp钱包官网下载
  • 2024-03-14 19:07:33

以太网的帧长,MTU, IP报文长度,TCP报文长度,TCP MSS之间的关系_tcp mtu-CSDN博客

>

以太网的帧长,MTU, IP报文长度,TCP报文长度,TCP MSS之间的关系_tcp mtu-CSDN博客

以太网的帧长,MTU, IP报文长度,TCP报文长度,TCP MSS之间的关系

林哥小站

已于 2023-06-21 11:00:13 修改

阅读量7.4k

收藏

43

点赞数

9

分类专栏:

测试人员眼中的TCP/IP

文章标签:

tcp/ip

网络

网络协议

于 2023-03-28 21:46:17 首次发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/meihualing/article/details/129824292

版权

测试人员眼中的TCP/IP

专栏收录该内容

18 篇文章

16 订阅

订阅专栏

本文不考虑巨型帧(jumbo frames)的情况下,我们来理几个概念。在日常讨论中,这几个长度经常会容易被混淆起来。64字节,1518字节,1500字节,1460字节,我们接下来会来介绍一下这几个常见,易混淆的长度值的来源。

1、以太帧帧长:

数据帧的长度,代表二层以太帧长。如下图所示,IEEE802.3协议规定,以太帧帧长最小为64字节,最大为1518字节。 这里还有另外一种算法,则要在上面图片显示的基础上加上7字节前导同步码 + 1字节帧开始定界符,变成7字节前导同步码 + 1字节帧开始定界符 + 6字节的目的MAC + 6字节的源MAC + 2字节的帧类型 + 1500 + 4字节的FCS,则总长度变成1518+7+1 = 1526字节; 而有人讨论这个时,不仅不考虑前导同步码和字节帧开始定界符,也不考虑FCS部分(因为这些部分在抓包软件里往看不到),那么就这成了1514字节。

2、MTU(Maximum Transmission Unit,最大传输单元):

MTU是指网络能够传输的最大数据包大小,以字节为单位。MTU是数据链路层的概念,在以太网中,是指以太帧承载的有效数据载荷(payload)部分的长度的最大值。不同链路介质类型的网络有不同的默认MTU值。如下图所示,我们通过以太帧帧长最小为64字节,最大为1518字节,可以知道以太帧有效数据部分最最小为64-6-6-2-4 = 46字节,最大为1518-6字节目标MAC地址-6字节源MAC地址-2字节数据帧类型-4字节校验 = 1500字节,这个最大值就称为MTU,所以通常是1500字节。

通过以下命令可以查看主机中所有接口的MTU的值

sudo netstat -i

3、IP报文长度:

一般来说,受限于MTU,我们认为IP报文是由20字节的IP头部+1480字节的IP有效数据载荷构成的。 所以IP有效数据载荷的长度通常为1480字节。

4、TCP报文长度:

受限于MTU(准确的说是受限于MSS,见下一章节)TCP报文长度由由20字节的TCP头部+1460字节的TCP有效数据载荷构成的。TCP有效数据载荷的长度是1460字节。

5、TCP MSS(Maximum Segment Size):

TCP MSS是指TCP协议所允许的最大报文长度,即TCP数据包每次能够传输的最大的TCP最大有效数据载荷部分的长度,不包含TCP头部。MSS是指TCP的有效数据载荷部分的最大长度。一般来说,如果我们只考虑主机当前以太网的接口卡的MTU:TCP MSS = MTU - IP头部20字节 - TCP头部20字节 = 1460字节。在实际的网络中TCP MSS不仅仅受限于主机当前网络接口卡的MTU,还受限于网络中以及端主机的MTU的大小,具体可参见 TCP的MSS的计算与详解 TCP之路径MTU(PMTU)发现过程详解

优惠劵

林哥小站

关注

关注

9

点赞

43

收藏

觉得还不错?

一键收藏

知道了

2

评论

以太网的帧长,MTU, IP报文长度,TCP报文长度,TCP MSS之间的关系

64字节,1518字节,1500字节,1460字节,以太帧帧长,MTU, MSS,PMTU,IP报文长度,TCP报文长度

复制链接

扫一扫

专栏目录

TCP/IP协议:最大传输单元MTU 和 最大分段大小MSS (TCP的分段和IP的分片)

开挂的熊猫

12-07

1万+

 

MTU = MSS + TCP Header + IP Header.

 

mtu是网络传输最大报文包。 mss是网络传输数据最大值。

 

MTU:maximum transmission unit,最大传输单元,由硬件规定,如以太网的MTU为1500字节。

MSS:maximum segment size,最大分节大小,为TCP数据包每次传输的最大数据分段大小,一般由发送端向对端...

TCPIP详解卷[1].part03

12-29

tcp ip 详解 入门 教程

该文件共分12个压缩包,必须下载到同一个文件夹后解压。

简介:

《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 本书适合作为计算机专业学生学习网络的教材和教师参考书。也适用于研究网络的技术人员。

目 录

译者序

前言

第1章 概述 1

1.1 引言 1

1.2 分层 1

1.3 TCP/IP的分层 4

1.4 互联网的地址 5

1.5 域名系统 6

1.6 封装 6

1.7 分用 8

1.8 客户-服务器模型 8

1.9 端口号 9

1.10 标准化过程 10

1.11 RFC 10

1.12 标准的简单服务 11

1.13 互联网 12

1.14 实现 12

1.15 应用编程接口 12

1.16 测试网络 13

1.17 小结 13

第2章 链路层 15

2.1 引言 15

2.2 以太网和IEEE 802封装 15

2.3 尾部封装 17

2.4 SLIP:串行线路IP 17

2.5 压缩的SLIP 18

2.6 PPP:点对点协议 18

2.7 环回接口 20

2.8 最大传输单元MTU 21

2.9 路径MTU 21

2.10 串行线路吞吐量计算 21

2.11 小结 22

第3章 IP:网际协议 24

3.1 引言 24

3.2 IP首部 24

3.3 IP路由选择 27

3.4 子网寻址 30

3.5 子网掩码 32

3.6 特殊情况的IP地址 33

3.7 一个子网的例子 33

3.8 ifconfig命令 35

3.9 netstat命令 36

3.10 IP的未来 36

3.11 小结 37

第4章 ARP:地址解析协议 38

4.1 引言 38

4.2 一个例子 38

4.3 ARP高速缓存 40

4.4 ARP的分组格式 40

4.5 ARP举例 41

4.5.1 一般的例子 41

4.5.2 对不存在主机的ARP请求 42

4.5.3 ARP高速缓存超时设置 43

4.6 ARP代理 43

4.7 免费ARP 45

4.8 arp命令 45

4.9 小结 46

第5章 RARP:逆地址解析协议 47

5.1 引言 47

5.2 RARP的分组格式 47

5.3 RARP举例 47

5.4 RARP服务器的设计 48

5.4.1 作为用户进程的RARP服务器 49

5.4.2 每个网络有多个RARP服务器 49

5.5 小结 49

第6章 ICMP:Internet控制报文协议 50

6.1 引言 50

6.2 ICMP报文的类型 50

6.3 ICMP地址掩码请求与应答 52

6.4 ICMP时间戳请求与应答 53

6.4.1 举例 54

6.4.2 另一种方法 55

6.5 ICMP端口不可达差错 56

6.6 ICMP报文的4.4BSD处理 59

6.7 小结 60

第7章 Ping程序 61

7.1 引言 61

7.2 Ping程序 61

7.2.1 LAN输出 62

7.2.2 WAN输出 63

7.2.3 线路SLIP链接 64

7.2.4 拨号SLIP链路 65

7.3 IP记录路由选项 65

7.3.1 通常的例子 66

7.3.2 异常的输出 68

7.4 IP时间戳选项 69

7.5 小结 70

第8章 Traceroute程序 71

8.1 引言 71

8.2 Traceroute 程序的操作 71

8.3 局域网输出 72

8.4 广域网输出 75

8.5 IP源站选路选项 76

8.5.1 宽松的源站选路的traceroute

程序示例 78

8.5.2 严格的源站选路的traceroute

程序示例 79

8.5.3 宽松的源站选路traceroute程序

的往返路由 80

8.6 小结 81

第9章 IP选路 83

9.1 引言 83

9.2 选路的原理 84

9.2.1 简单路由表 84

9.2.2 初始化路由表 86

9.2.3 较复杂的路由表 87

9.2.4 没有到达目的地的路由 87

9.3 ICMP主机与网络不可达差错 88

9.4 转发或不转发 89

9.5 ICMP重定向差错 89

9.5.1 一个例子 90

9.5.2 更多的细节 91

9.6 ICMP路由器发现报文 92

9.6.1 路由器操作 93

9.6.2 主机操作 93

9.6.3 实现 93

9.7 小结 94

第10章 动态选路协议 95

10.1 引言 95

10.2 动态选路 95

10.3 Unix选路守护程序 96

10.4 RIP:选路信息协议 96

10.4.1 报文格式 96

10.4.2 正常运行 97

10.4.3 度量 98

10.4.4 问题 98

10.4.5 举例 98

10.4.6 另一个例子 100

10.5 RIP版本2 102

10.6 OSPF:开放最短路径优先 102

10.7 BGP:边界网关协议 103

10.8 CIDR:无类型域间选路 104

10.9 小结 105

第11章 UDP:用户数据报协议 107

11.1 引言 107

11.2 UDP首部 107

11.3 UDP检验和 108

11.3.1 tcpdump输出 109

11.3.2 一些统计结果 109

11.4 一个简单的例子 110

11.5 IP分片 111

11.6 ICMP不可达差错(需要分片) 113

11.7 用Traceroute确定路径MTU 114

11.8 采用UDP的路径MTU发现 116

11.9 UDP和ARP之间的交互作用 118

11.10 最大UDP数据报长度 119

11.11 ICMP源站抑制差错 120

11.12 UDP服务器的设计 122

11.12.1 客户IP地址及端口号 122

11.12.2 目标IP地址 122

11.12.3 UDP输入队列 122

11.12.4 限制本地IP地址 124

11.12.5 限制远端IP地址 125

11.12.6 每个端口有多个接收者 125

11.13 小结 126

第12章 广播和多播 128

12.1 引言 128

12.2 广播 129

12.2.1 受限的广播 129

12.2.2 指向网络的广播 129

12.2.3 指向子网的广播 129

12.2.4 指向所有子网的广播 130

12.3 广播的例子 130

12.4 多播 132

12.4.1 多播组地址 133

12.4.2 多播组地址到以太网地址的转换 133

12.4.3 FDDI和令牌环网络中的多播 134

12.5 小结 134

第13章 IGMP:Internet组管理协议 136

13.1 引言 136

13.2 IGMP报文 136

13.3 IGMP协议 136

13.3.1 加入一个多播组 136

13.3.2 IGMP报告和查询 137

13.3.3 实现细节 137

13.3.4 生存时间字段 138

13.3.5 所有主机组 138

13.4 一个例子 138

13.5 小结 141

第14章 DNS:域名系统 142

14.1 引言 142

14.2 DNS基础 142

14.3 DNS的报文格式 144

14.3.1 DNS查询报文中的问题部分 146

14.3.2 DNS响应报文中的资源记录部分 147

14.4 一个简单的例子 147

14.5 指针查询 150

14.5.1 举例 151

14.5.2 主机名检查 151

14.6 资源记录 152

14.7 高速缓存 153

14.8 用UDP还是用TCP 156

14.9 另一个例子 156

14.10 小结 157

第15章 TFTP:简单文件传送协议 159

15.1 引言 159

15.2 协议 159

15.3 一个例子 160

15.4 安全性 161

15.5 小结 162

第16章 BOOTP: 引导程序协议 163

16.1 引言 163

16.2 BOOTP的分组格式 163

16.3 一个例子 164

16.4 BOOTP服务器的设计 165

16.5 BOOTP穿越路由器 167

16.6 特定厂商信息 167

16.7 小结 168

第17章 TCP:传输控制协议 170

17.1 引言 170

17.2 TCP的服务 170

17.3 TCP的首部 171

17.4 小结 173

第18章 TCP连接的建立与终止 174

18.1 引言 174

18.2 连接的建立与终止 174

18.2.1 tcpdump的输出 174

18.2.2 时间系列 175

18.2.3 建立连接协议 175

18.2.4 连接终止协议 177

18.2.5 正常的tcpdump输出 177

18.3 连接建立的超时 178

18.3.1 第一次超时时间 178

18.3.2 服务类型字段 179

18.4 最大报文段长度 179

18.5 TCP的半关闭 180

18.6 TCP的状态变迁图 182

18.6.1 2MSL等待状态 183

18.6.2 平静时间的概念 186

18.6.3 FIN_WAIT_2状态 186

18.7 复位报文段 186

18.7.1 到不存在的端口的连接请求 187

18.7.2 异常终止一个连接 187

18.7.3 检测半打开连接 188

18.8 同时打开 189

18.9 同时关闭 191

18.10 TCP选项 191

18.11 TCP服务器的设计 192

18.11.1 TCP服务器端口号 193

18.11.2 限定的本地IP地址 194

18.11.3 限定的远端IP地址 195

18.11.4 呼入连接请求队列 195

18.12 小结 197

第19章 TCP的交互数据流 200

19.1 引言 200

19.2 交互式输入 200

19.3 经受时延的确认 201

19.4 Nagle算法 203

19.4.1 关闭Nagle算法 204

19.4.2 一个例子 205

19.5 窗口大小通告 207

19.6 小结 208

第20章 TCP的成块数据流 209

20.1 引言 209

20.2 正常数据流 209

20.3 滑动窗口 212

20.4 窗口大小 214

20.5 PUSH标志 215

20.6 慢启动 216

20.7 成块数据的吞吐量 218

20.7.1 带宽时延乘积 220

20.7.2 拥塞 220

20.8 紧急方式 221

20.9 小结 224

第21章 TCP的超时与重传 226

21.1 引言 226

21.2 超时与重传的简单例子 226

21.3 往返时间测量 227

21.4 往返时间RTT的例子 229

21.4.1 往返时间RTT的测量 229

21.4.2 RTT估计器的计算 231

21.4.3 慢启动 233

21.5 拥塞举例 233

21.6 拥塞避免算法 235

21.7 快速重传与快速恢复算法 236

21.8 拥塞举例(续) 237

21.9 按每条路由进行度量 240

21.10 ICMP的差错 240

21.11 重新分组 243

21.12 小结 243

第22章 TCP的坚持定时器 245

22.1 引言 245

22.2 一个例子 245

22.3 糊涂窗口综合症 246

22.4 小结 250

第23章 TCP的保活定时器 251

23.1 引言 251

23.2 描述 252

23.3 保活举例 253

23.3.1 另一端崩溃 253

23.3.2 另一端崩溃并重新启动 254

23.3.3 另一端不可达 254

23.4 小结 255

第24章 TCP的未来和性能 256

24.1 引言 256

24.2 路径MTU发现 256

24.2.1 一个例子 257

24.2.2 大分组还是小分组 258

24.3 长肥管道 259

24.4 窗口扩大选项 262

24.5 时间戳选项 263

24.6 PAWS:防止回绕的序号 265

24.7 T/TCP:为事务用的TCP扩展 265

24.8 TCP的性能 267

24.9 小结 268

第25章 SNMP:简单网络管理协议 270

25.1 引言 270

25.2 协议 270

25.3 管理信息结构 272

25.4 对象标识符 274

25.5 管理信息库介绍 274

25.6 实例标识 276

25.6.1 简单变量 276

25.6.2 表格 276

25.6.3 字典式排序 277

25.7 一些简单的例子 277

25.7.1 简单变量 278

25.7.2 get-next操作 278

25.7.3 表格的访问 279

25.8 管理信息库(续) 279

25.8.1 system组 279

25.8.2 interface组 280

25.8.3 at组 281

25.8.4 ip组 282

25.8.5 icmp组 285

25.8.6 tcp组 285

25.9 其他一些例子 288

25.9.1 接口MTU 288

25.9.2 路由表 288

25.10 trap 290

25.11 ASN.1和BER 291

25.12 SNMPv2 292

25.13 小结 292

第26章 Telnet和Rlogin:远程登录 293

26.1 引言 293

26.2 Rlogin协议 294

26.2.1 应用进程的启动 295

26.2.2 流量控制 295

26.2.3 客户的中断键 296

26.2.4 窗口大小的改变 296

26.2.5 服务器到客户的命令 296

26.2.6 客户到服务器的命令 297

26.2.7 客户的转义符 298

26.3 Rlogin的例子 298

26.3.1 初始的客户-服务器协议 298

26.3.2 客户中断键 299

26.4 Telnet协议 302

26.4.1 NVT ASCII 302

26.4.2 Telnet命令 302

26.4.3 选项协商 303

26.4.4 子选项协商 304

26.4.5 半双工、一次一字符、一次

一行或行方式 304

26.4.6 同步信号 306

26.4.7 客户的转义符 306

26.5 Telnet举例 306

26.5.1 单字符方式 306

26.5.2 行方式 310

26.5.3 一次一行方式(准行方式) 312

26.5.4 行方式:客户中断键 313

26.6 小结 314

第27章 FTP:文件传送协议 316

27.1 引言 316

27.2 FTP协议 316

27.2.1 数据表示 316

27.2.2 FTP命令 318

27.2.3 FTP应答 319

27.2.4 连接管理 320

27.3 FTP的例子 321

27.3.1 连接管理:临时数据端口 321

27.3.2 连接管理:默认数据端口 323

27.3.3 文本文件传输:NVT ASCII

表示还是图像表示 325

27.3.4 异常中止一个文件的传输:

Telnet同步信号 326

27.3.5 匿名FTP 329

27.3.6 来自一个未知IP地址的匿名FTP 330

27.4 小结 331

第28章 SMTP:简单邮件传送协议 332

28.1 引言 332

28.2 SMTP协议 332

28.2.1 简单例子 332

28.2.2 SMTP命令 334

28.2.3 信封、首部和正文 335

28.2.4 中继代理 335

28.2.5 NVT ASCII 337

28.2.6 重试间隔 337

28.3 SMTP的例子 337

28.3.1 MX记录:主机非直接连到

Internet 337

28.3.2 MX记录:主机出故障 339

28.3.3 VRFY和EXPN命令 340

28.4 SMTP的未来 340

28.4.1 信封的变化:扩充的SMTP 341

28.4.2 首部变化:非ASCII字符 342

28.4.3 正文变化:通用Internet邮件

扩充 343

28.5 小结 346

第29章 网络文件系统 347

29.1 引言 347

29.2 Sun远程过程调用 347

29.3 XDR:外部数据表示 349

29.4 端口映射器 349

29.5 NFS协议 351

29.5.1 文件句柄 353

29.5.2 安装协议 353

29.5.3 NFS过程 354

29.5.4 UDP还是TCP 355

29.5.5 TCP上的NFS 355

29.6 NFS实例 356

29.6.1 简单的例子:读一个文件 356

29.6.2 简单的例子:创建一个目录 357

29.6.3 无状态 358

29.6.4 例子:服务器崩溃 358

29.6.5 等幂过程 360

29.7 第3版的NFS 360

29.8 小结 361

第30章 其他的TCP/IP应用程序 363

30.1 引言 363

30.2 Finger协议 363

30.3 Whois协议 364

30.4 Archie、WAIS、Gopher、Veronica

和WWW 366

30.4.1 Archie 366

30.4.2 WAIS 366

30.4.3 Gopher 366

30.4.4 Veronica 366

30.4.5 万维网WWW 367

30.5 X窗口系统 367

30.5.1 Xscope程序 368

30.5.2 LBX: 低带宽X 370

30.6 小结 370

附录A tcpdump程序 371

附录B 计算机时钟 376

附录C sock程序 378

附录D 部分习题的解答 381

附录E 配置选项 395

附录F 可以免费获得的源代码 406

参考文献 409

缩略语 420

目 录

译者序

前言

第1章 概述 1

1.1 引言 1

1.2 源代码表示 1

1.2.1 将拥塞窗口设置为1 1

1.2.2 印刷约定 2

1.3 历史 2

1.4 应用编程接口 3

1.5 程序示例 4

1.6 系统调用和库函数 6

1.7 网络实现概述 6

1.8 描述符 7

1.9 mbuf与输出处理 11

1.9.1 包含插口地址结构的mbuf 11

1.9.2 包含数据的mbuf 12

1.9.3 添加IP和UDP首部 13

1.9.4 IP输出 14

1.9.5 以太网输出 14

1.9.6 UDP输出小结 14

1.10 输入处理 15

1.10.1 以太网输入 15

1.10.2 IP输入 15

1.10.3 UDP输入 16

1.10.4 进程输入 17

1.11 网络实现概述(续) 17

1.12 中断级别与并发 18

1.13 源代码组织 20

1.14 测试网络 21

1.15 小结 22

第2章 mbuf:存储器缓存 24

2.1 引言 24

2.2 代码介绍 27

2.2.1 全局变量 27

2.2.2 统计 28

2.2.3 内核统计 28

2.3 mbuf的定义 29

2.4 mbuf结构 29

2.5 简单的mbuf宏和函数 31

2.5.1 m_get函数 32

2.5.2 MGET宏 32

2.5.3 m_retry函数 33

2.5.4 mbuf锁 34

2.6 m_devget和m_pullup函数 34

2.6.1 m_devget函数 34

2.6.2 mtod和dtom宏 36

2.6.3 m_pullup函数和连续的协议首部 36

2.6.4 m_pullup和IP的分片与重组 37

2.6.5 TCP重组避免调用m_pullup 39

2.6.6 m_pullup使用总结 40

2.7 mbuf宏和函数的小结 40

2.8 Net/3联网数据结构小结 42

2.9 m_copy和簇引用计数 43

2.10 其他选择 47

2.11 小结 47

第3章 接口层 49

3.1 引言 49

3.2 代码介绍 49

3.2.1 全局变量 49

3.2.2 SNMP变量 50

3.3 ifnet结构 51

3.4 ifaddr结构 57

3.5 sockaddr结构 58

3.6 ifnet与ifaddr的专用化 59

3.7 网络初始化概述 60

3.8 以太网初始化 61

3.9 SLIP初始化 64

3.10 环回初始化 65

3.11 if_attach函数 66

3.12 ifinit函数 72

3.13 小结 73

第4章 接口:以太网 74

4.1 引言 74

4.2 代码介绍 75

4.2.1 全局变量 75

4.2.2 统计量 75

4.2.3 SNMP变量 76

4.3 以太网接口 77

4.3.1 leintr函数 79

4.3.2 leread函数 79

4.3.3 ether_input函数 81

4.3.4 ether_output函数 84

4.3.5 lestart函数 87

4.4 ioctl系统调用 89

4.4.1 ifioctl函数 90

4.4.2 ifconf函数 91

4.4.3 举例 94

4.4.4 通用接口ioctl命令 95

4.4.5 if_down和if_up函数 96

4.4.6 以太网、SLIP和环回 97

4.5 小结 98

第5章 接口:SLIP和环回 100

5.1 引言 100

5.2 代码介绍 100

5.2.1 全局变量 100

5.2.2 统计量 101

5.3 SLIP接口 101

5.3.1 SLIP线路规程:SLIPDISC 101

5.3.2 SLIP初始化:slopen和slinit 103

5.3.3 SLIP输入处理:slinput 105

5.3.4 SLIP输出处理:sloutput 109

5.3.5 slstart函数 111

5.3.6 SLIP分组丢失 116

5.3.7 SLIP性能考虑 117

5.3.8 slclose函数 117

5.3.9 sltioctl函数 118

5.4 环回接口 119

5.5 小结 121

第6章 IP编址 123

6.1 引言 123

6.1.1 IP地址 123

6.1.2 IP地址的印刷规定 123

6.1.3 主机和路由器 124

6.2 代码介绍 125

6.3 接口和地址小结 125

6.4 sockaddr_in结构 126

6.5 in_ifaddr结构 127

6.6 地址指派 128

6.6.1 ifioctl函数 130

6.6.2 in_control函数 130

6.6.3 前提条件:SIOCSIFADDR、

SIOCSIFNETMASK和

SIOCSIFDSTADDR 132

6.6.4 地址指派:SIOCSIFADDR 133

6.6.5 in_ifinit函数 133

6.6.6 网络掩码指派:SIOCSIFNETMASK 136

6.6.7 目的地址指派:SIOCSIFDSTADDR 137

6.6.8 获取接口信息 137

6.6.9 每个接口多个IP地址 138

6.6.10 附加IP地址:SIOCAIFADDR 139

6.6.11 删除IP地址:SIOCDIFADDR 140

6.7 接口ioctl处理 141

6.7.1 leioctl函数 141

6.7.2 slioctl函数 142

6.7.3 loioctl函数 143

6.8 Internet实用函数 144

6.9 ifnet实用函数 144

6.10 小结 145

第7章 域和协议 146

7.1 引言 146

7.2 代码介绍 146

7.2.1 全局变量 147

7.2.2 统计量 147

7.3 domain结构 147

7.4 protosw结构 148

7.5 IP 的domain和protosw结构 150

7.6 pffindproto和pffindtype函数 155

7.7 pfctlinput函数 157

7.8 IP初始化 157

7.8.1 Internet传输分用 157

7.8.2 ip_init函数 158

7.9 sysctl系统调用 159

7.10 小结 161

第8章 IP:网际协议 162

8.1 引言 162

8.2 代码介绍 163

8.2.1 全局变量 163

8.2.2 统计量 163

8.2.3 SNMP变量 164

8.3 IP分组 165

8.4 输入处理:ipintr函数 167

8.4.1 ipintr概观 167

8.4.2 验证 168

8.4.3 转发或不转发 171

8.4.4 重装和分用 173

8.5 转发:ip_forward函数 174

8.6 输出处理:ip_output函数 180

8.6.1 首部初始化 181

8.6.2 路由选择 182

8.6.3 源地址选择和分片 184

8.7 Internet检验和:in_cksum函数 186

8.8 setsockopt和getsockopt系统调用 190

8.8.1 PRCO_SETOPT的处理 192

8.8.2 PRCO_GETOPT的处理 193

8.9 ip_sysctl函数 193

8.10 小结 194

第9章 IP选项处理 196

9.1 引言 196

9.2 代码介绍 196

9.2.1 全局变量 196

9.2.2 统计量 197

9.3 选项格式 197

9.4 ip_dooptions函数 198

9.5 记录路由选项 200

9.6 源站和记录路由选项 202

9.6.1 save_rte函数 205

9.6.2 ip_srcroute函数 206

9.7 时间戳选项 207

9.8 ip_insertoptions函数 210

9.9 ip_pcbopts函数 214

9.10 一些限制 217

9.11 小结 217

第10章 IP的分片与重装 218

10.1 引言 218

10.2 代码介绍 219

10.2.1 全局变量 220

10.2.2 统计量 220

10.3 分片 220

10.4 ip_optcopy函数 223

10.5 重装 224

10.6 ip_reass函数 227

10.7 ip_slowtimo函数 237

10.8 小结 238

第11章 ICMP:Internet控制报文协议 239

11.1 引言 239

11.2 代码介绍 242

11.2.1 全局变量 242

11.2.2 统计量 242

11.2.3 SNMP变量 243

11.3 icmp结构 244

11.4 ICMP 的protosw结构 245

11.5 输入处理:icmp_input函数 246

11.6 差错处理 249

11.7 请求处理 251

11.7.1 回显询问:ICMP_ECHO和

ICMP_ECHOREPLY 252

11.7.2 时间戳询问:ICMP_TSTAMP和

ICMP_TSTAMPREPLY 253

11.7.3 地址掩码询问:ICMP_MASKREQ和

ICMP_MASKREPLY 253

11.7.4 信息询问:ICMP_IREQ和ICMP_

IREQREPLY 255

11.7.5 路由器发现:ICMP_ROUTERADVERT

和ICMP_ROUTERSOLICIT 255

11.8 重定向处理 255

11.9 回答处理 257

11.10 输出处理 257

11.11 icmp_error函数 258

11.12 icmp_reflect函数 261

11.13 icmp_send函数 265

11.14 icmp_sysctl函数 266

11.15 小结 266

第12章 IP多播 268

12.1 引言 268

12.2 代码介绍 269

12.2.1 全局变量 270

12.2.2 统计量 270

12.3 以太网多播地址 270

12.4 ether_multi结构 271

12.5 以太网多播接收 273

12.6 in_multi结构 273

12.7 ip_moptions结构 275

12.8 多播的插口选项 276

12.9 多播的TTL值 277

12.9.1 MBONE 278

12.9.2 扩展环搜索 278

12.10 ip_setmoptions函数 278

12.10.1 选择一个明确的多播接口:IP_

MULTICAST_IF 280

12.10.2 选择明确的多播TTL: IP_

MULTICAST_TTL 281

12.10.3 选择多播环回:IP_MULTICAST_

LOOP 281

12.11 加入一个IP多播组 282

12.11.1 in_addmulti函数 285

12.11.2 slioctl和loioctl函数:SIOCADDMULTI和SIOCDELMULTI 287

12.11.3 leioctl函数:SIOCADDMULTI和

SIOCDELMULTI 288

12.11.4 ether_addmulti函数 288

12.12 离开一个IP多播组 291

12.12.1 in_delmulti函数 292

12.12.2 ether_delmulti函数 293

12.13 ip_getmoptions函数 295

12.14 多播输入处理:ipintr函数 296

12.15 多播输出处理:ip_output函数 298

12.16 性能的考虑 301

12.17 小结 301

第13章 IGMP:Internet组管理协议 303

13.1 引言 303

13.2 代码介绍 304

13.2.1 全局变量 304

13.2.2 统计量 304

13.2.3 SNMP变量 305

13.3 igmp结构 305

13.4 IGMP的protosw的结构 306

13.5 加入一个组:igmp_joingroup函数 306

13.6 igmp_fasttimo函数 308

13.7 输入处理:igmp_input函数 311

13.7.1 成员关系查询:IGMP_HOST_

MEMBERSHIP_QUERY 312

13.7.2 成员关系报告:IGMP_HOST_

MEMBERSHIP_REPORT 313

13.8 离开一个组:igmp_leavegroup函数 314

13.9 小结 315

第14章 IP多播选路 316

14.1 引言 316

14.2 代码介绍 316

14.2.1 全局变量 316

14.2.2 统计量 317

14.2.3 SNMP变量 317

14.3 多播输出处理(续) 317

14.4 mrouted守护程序 318

14.5 虚拟接口 321

14.5.1 虚拟接口表 322

14.5.2 add_vif函数 324

14.5.3 del_vif函数 326

14.6 IGMP(续) 327

14.6.1 add_lgrp函数 328

14.6.2 del_lgrp函数 329

14.6.3 grplst_member函数 330

14.7 多播选路 331

14.7.1 多播选路表 334

14.7.2 del_mrt函数 335

14.7.3 add_mrt函数 336

14.7.4 mrtfind函数 337

14.8 多播转发:ip_mforward函数 338

14.8.1 phyint_send函数 343

14.8.2 tunnel_send函数 344

14.9 清理:ip_mrouter_done函数 345

14.10 小结 346

第15章 插口层 348

15.1 引言 348

15.2 代码介绍 349

15.3 socket结构 349

15.4 系统调用 354

15.4.1 举例 355

15.4.2 系统调用小结 355

15.5 进程、描述符和插口 357

15.6 socket系统调用 358

15.6.1 socreate函数 359

15.6.2 超级用户特权 361

15.7 getsock和sockargs函数 361

15.8 bind系统调用 363

15.9 listen系统调用 364

15.10 tsleep和wakeup函数 365

15.11 accept系统调用 366

15.12 sonewconn和soisconnected

函数 369

15.13 connect系统调用 372

15.13.1 soconnect函数 374

15.13.2 切断无连接插口和外部地址的

关联 375

15.14 shutdown系统调用 375

15.15 close系统调用 377

15.15.1 soo_close函数 377

15.15.2 soclose函数 378

15.16 小结 380

第16章 插口I/O 381

16.1 引言 381

16.2 代码介绍 381

16.3 插口缓存 381

16.4 write、writev、sendto和sendmsg

系统调用 384

16.5 sendmsg系统调用 387

16.6 sendit函数 388

16.6.1 uiomove函数 389

16.6.2 举例 390

16.6.3 sendit代码 391

16.7 sosend函数 392

16.7.1 可靠的协议缓存 393

16.7.2 不可靠的协议缓存 393

16.7.3 sosend函数小结 401

16.7.4 性能问题 401

16.8 read、readv、recvfrom和recvmsg

系统调用 401

16.9 recvmsg系统调用 402

16.10 recvit函数 403

16.11 soreceive函数 405

16.11.1 带外数据 406

16.11.2 举例 406

16.11.3 其他的接收操作选项 407

16.11.4 接收缓存的组织:报文边界 407

16.11.5 接收缓存的组织:没有报文边界 408

16.11.6 控制信息和带外数据 409

16.12 soreceive代码 410

16.13 select系统调用 421

16.13.1 selscan函数 425

16.13.2 soo_select函数 425

16.13.3 selrecord函数 427

16.13.4 selwakeup函数 428

16.14 小结 429

第17章 插口选项 431

17.1 引言 431

17.2 代码介绍 431

17.3 setsockopt系统调用 432

17.4 getsockopt系统调用 437

17.5 fcntl和ioctl系统调用 440

17.5.1 fcntl代码 441

17.5.2 ioctl代码 443

17.6 getsockname系统调用 444

17.7 getpeername系统调用 445

17.8 小结 447

第18章 Radix树路由表 448

18.1 引言 448

18.2 路由表结构 448

18.3 选路插口 456

18.4 代码介绍 456

18.4.1 全局变量 458

18.4.2 统计量 458

18.4.3 SNMP变量 459

18.5 Radix结点数据结构 460

18.6 选路结构 463

18.7 初始化:route_init和rtable_init

函数 465

18.8 初始化:rn_init和rn_inithead

函数 468

18.9 重复键和掩码列表 471

18.10 rn_match函数 473

18.11 rn_search函数 480

18.12 小结 481

第19章 选路请求和选路消息 482

19.1 引言 482

19.2 rtalloc和rtalloc1函数 482

19.3 宏RTFREE和rtfree函数 484

19.4 rtrequest函数 486

19.5 rt_setgate函数 491

19.6 rtinit函数 493

19.7 rtredirect函数 495

19.8 选路消息的结构 498

19.9 rt_missmsg函数 501

19.10 rt_ifmsg函数 503

19.11 rt_newaddrmsg函数 504

19.12 rt_msg1函数 505

19.13 rt_msg2函数 507

19.14 sysctl_rtable函数 510

19.15 sysctl_dumpentry函数 514

19.16 sysctl_iflist函数 515

19.17 小结 517

第20章 选路插口 518

20.1 引言 518

20.2 routedomain和protosw结构 518

20.3 选路控制块 519

20.4 raw_init函数 520

20.5 route_output函数 520

20.6 rt_xaddrs函数 530

20.7 rt_setmetrics函数 531

20.8 raw_input函数 532

20.9 route_usrreq函数 534

20.10 raw_usrreq函数 535

20.11 raw_attach、raw_detach和raw_disconnect函数 539

20.12 小结 540

第21章 ARP:地址解析协议 542

21.1 介绍 542

21.2 ARP和路由表 542

21.3 代码介绍 544

21.3.1 全局变量 544

21.3.2 统计量 544

21.3.3 SNMP变量 546

21.4 ARP结构 546

21.5 arpwhohas函数 548

21.6 arprequest函数 548

21.7 arpintr函数 551

21.8 in_arpinput函数 552

21.9 ARP定时器函数 557

21.9.1 arptimer函数 557

21.9.2 arptfree函数 557

21.10 arpresolve函数 558

21.11 arplookup函数 562

21.12 代理ARP 563

21.13 arp_rtrequest函数 564

21.14 ARP和多播 569

21.15 小结 570

第22章 协议控制块 572

22.1 引言 572

22.2 代码介绍 573

22.2.1 全局变量 574

22.2.2 统计量 574

22.3 inpcb的结构 574

22.4 in_pcballoc和in_pcbdetach函数 575

22.5 绑定、连接和分用 577

22.6 in_pcblookup函数 581

22.7 in_pcbbind函数 584

22.8 in_pcbconnect函数 589

22.9 in_pcbdisconnect函数 594

22.10 in_setsockaddr和in_setpeeraddr

函数 595

22.11 in_pcbnotify、in_rtchange和in_losing函数 595

22.11.1 in_rtchange函数 598

22.11.2 重定向和原始插口 599

22.11.3 ICMP差错和UDP插口 600

22.11.4 in_losing函数 601

22.12 实现求精 602

22.13 小结 602

第23章 UDP:用户数据报协议 605

23.1 引言 605

23.2 代码介绍 605

23.2.1 全局变量 606

23.2.2 统计量 606

23.2.3 SNMP变量 607

23.3 UDP 的protosw结构 607

23.4 UDP的首部 608

23.5 udp_init函数 609

23.6 udp_output函数 609

23.6.1 在前面加上IP/UDP首部和mbuf簇 612

23.6.2 UDP检验和计算和伪首部 612

23.7 udp_input函数 616

23.7.1 对收到的UDP数据报的一般确认 616

23.7.2 分用单播数据报 619

23.7.3 分用多播和广播数据报 622

23.7.4 连接上的UDP插口和多接口主机 625

23.8 udp_saveopt函数 625

23.9 udp_ctlinput函数 627

23.10 udp_usrreq函数 628

23.11 udp_sysctl函数 633

23.12 实现求精 633

23.12.1 UDP PCB高速缓存 633

23.12.2 UDP检验和 634

23.13 小结 635

第24章 TCP:传输控制协议 636

24.1 引言 636

24.2 代码介绍 636

24.2.1 全局变量 636

24.2.2 统计量 637

24.2.3 SNMP变量 640

24.3 TCP 的protosw结构 641

24.4 TCP的首部 641

24.5 TCP的控制块 643

24.6 TCP的状态变迁图 645

24.7 TCP的序号 646

24.8 tcp_init函数 650

24.9 小结 652

第25章 TCP的定时器 654

25.1 引言 654

25.2 代码介绍 655

25.3 tcp_canceltimers函数 657

25.4 tcp_fasttimo函数 657

25.5 tcp_slowtimo函数 658

25.6 tcp_timers函数 659

25.6.1 FIN_WAIT_2和2MSL定时器 660

25.6.2 持续定时器 662

25.6.3 连接建立定时器和保活定时器 662

25.7 重传定时器的计算 665

25.8 tcp_newtcpcb算法 666

25.9 tcp_setpersist函数 668

25.10 tcp_xmit_timer函数 669

25.11 重传超时:tcp_timers函数 673

25.11.1 慢起动和避免拥塞 675

25.11.2 精确性 677

25.12 一个RTT的例子 677

25.13 小结 679

第26章 TCP输出 680

26.1 引言 680

26.2 tcp_output概述 680

26.3 决定是否应发送一个报文段 682

26.4 TCP选项 691

26.5 窗口大小选项 692

26.6 时间戳选项 692

26.6.1 哪个时间戳需要回显,RFC1323

算法 694

26.6.2 哪个时间戳需要回显,正确的

算法 695

26.6.3 时间戳与延迟ACK 695

26.7 发送一个报文段 696

26.8 tcp_template函数 707

26.9 tcp_respond函数 708

26.10 小结 710

第27章 TCP的函数 712

27.1 引言 712

27.2 tcp_drain函数 712

27.3 tcp_drop函数 712

27.4 tcp_close函数 713

27.4.1 路由特性 713

27.4.2 资源释放 716

27.5 tcp_mss函数 717

27.6 tcp_ctlinput函数 722

27.7 tcp_notify函数 723

27.8 tcp_quench函数 724

27.9 TCP_REASS宏和tcp_reass函数 724

27.9.1 TCP_REASS宏 725

27.9.2 tcp_reass函数 727

27.10 tcp_trace函数 732

27.11 小结 736

第28章 TCP的输入 737

28.1 引言 737

28.2 预处理 739

28.3 tcp_dooptions函数 745

28.4 首部预测 747

28.5 TCP输入:缓慢的执行路径 752

28.6 完成被动打开或主动打开 752

28.6.1 完成被动打开 753

28.6.2 完成主动打开 756

28.7 PAWS:防止序号回绕 760

28.8 裁剪报文段使数据在窗口内 762

28.9 自连接和同时打开 768

28.10 记录时间戳 770

28.11 RST处理 770

28.12 小结 772

第29章 TCP的输入(续) 773

29.1 引言 773

29.2 ACK处理概述 773

29.3 完成被动打开和同时打开 774

29.4 快速重传和快速恢复的算法 775

29.5 ACK处理 778

29.6 更新窗口信息 784

29.7 紧急方式处理 786

29.8 tcp_pulloutofband函数 788

29.9 处理已接收的数据 789

29.10 FIN处理 791

29.11 最后的处理 793

29.12 实现求精 795

29.13 首部压缩 795

29.13.1 引言 796

29.13.2 首部字段的压缩 799

29.13.3 特殊情况 801

29.13.4 实例 802

29.13.5 配置 803

29.14 小结 803

第30章 TCP的用户需求 805

30.1 引言 805

30.2 tcp_usrreq函数 805

30.3 tcp_attach函数 814

30.4 tcp_disconnect函数 815

30.5 tcp_usrclosed函数 816

30.6 tcp_ctloutput函数 817

30.7 小结 820

第31章 BPF:BSD 分组过滤程序 821

31.1 引言 821

31.2 代码介绍 821

31.2.1 全局变量 821

31.2.2 统计量 822

31.3 bpf_if结构 822

31.4 bpf_d结构 825

31.4.1 bpfopen函数 826

31.4.2 bpfioctl函数 827

31.4.3 bpf_setif函数 830

31.4.4 bpf_attachd函数 831

31.5 BPF的输入 832

31.5.1 bpf_tap函数 832

31.5.2 catchpacket函数 833

31.5.3 bpfread函数 835

31.6 BPF的输出 837

31.7 小结 838

第32章 原始IP 839

32.1 引言 839

32.2 代码介绍 839

32.2.1 全局变量 839

32.2.2 统计量 840

32.3 原始 IP的protosw结构 840

32.4 rip_init函数 842

32.5 rip_input函数 842

32.6 rip_output函数 844

32.7 rip_usrreq函数 846

32.8 rip_ctloutput函数 850

32.9 小结 852

结束语 853

附录A 部分习题的解答 854

附录B 源代码的获取 872

附录C RFC 1122 的有关内容 874

参考文献 895

目 录

译者序

前言

第一部分 TCP事务协议

第1章 T/TCP概述 1

1.1 概述 1

1.2 UDP上的客户-服务器 1

1.3 TCP上的客户-服务器 6

1.4 T/TCP上的客户-服务器 12

1.5 测试网络 15

1.6 时间测量程序 15

1.7 应用 17

1.8 历史 19

1.9 实现 20

1.10 小结 21

第2章 T/TCP协议 23

2.1 概述 23

2.2 T/TCP中的新TCP选项 23

2.3 T/TCP实现所需变量 25

2.4 状态变迁图 27

2.5 T/TCP的扩展状态 28

2.6 小结 30

第3章 T/TCP使用举例 31

3.1 概述 31

3.2 客户重新启动 31

3.3 常规的T/TCP事务 33

3.4 服务器收到过时的重复SYN 34

3.5 服务器重启动 35

3.6 请求或应答超出报文段最大长度MSS 36

3.7 向后兼容性 39

3.8 小结 41

第4章 T/TCP协议(续) 43

4.1 概述 43

4.2 客户的端口号和TIME_WAIT状态 43

4.3 设置TIME_WAIT状态的目的 45

4.4 TIME_WAIT状态的截断 48

4.5 利用TAO跳过三次握手 51

4.6 小结 55

第5章 T/TCP协议的实现:插口层 56

5.1 概述 56

5.2 常量 56

5.3 sosend函数 56

5.4 小结 58

第6章 T/TCP的实现:路由表 59

6.1 概述 59

6.2 代码介绍 59

6.3 radix_node_head结构 60

6.4 rtentry结构 61

6.5 rt_metrics结构 61

6.6 in_inithead函数 61

6.7 in_addroute函数 62

6.8 in_matroute函数 63

6.9 in_clsroute函数 63

6.10 in_rtqtimo函数 64

6.11 in_rtqkill函数 66

6.12 小结 69

第7章 T/TCP实现:协议控制块 70

7.1 概述 70

7.2 in_pcbladdr函数 71

7.3 in_pcbconnect函数 71

7.4 小结 72

第8章 T/TCP实现: TCP概要 73

8.1 概述 73

8.2 代码介绍 73

8.3 TCP的protosw结构 74

8.4 TCP控制块 74

8.5 tcp_init函数 75

8.6 tcp_slowtimo函数 75

8.7 小结 76

第9章 T/TCP实现:TCP输出 77

9.1 概述 77

9.2 tcp_output函数 77

9.2.1 新的自动变量 77

9.2.2 增加隐藏的状态标志 77

9.2.3 在SYN_SENT状态不要重传SYN 78

9.2.4 发送器的糊涂窗口避免机制 78

9.2.5 有RST或SYN标志时强制发送报文段 79

9.2.6 发送MSS选项 80

9.2.7 是否发送时间戳选项 80

9.2.8 发送T/TCP的CC选项 80

9.2.9 根据TCP选项调整数据长度 83

9.3 小结 83

第10章 T/TCP实现:TCP函数 84

10.1 概述 84

10.2 tcp_newtcpcb函数 84

10.3 tcp_rtlookup函数 85

10.4 tcp_gettaocache函数 86

10.5 重传超时间隔的计算 86

10.6 tcp_close函数 89

10.7 tcp_msssend函数 90

10.8 tcp_mssrcvd函数 91

10.9 tcp_dooptions函数 96

10.10 tcp_reass函数 98

10.11 小结 99

第11章 T/TCP实现:TCP输入 101

11.1 概述 101

11.2 预处理 103

11.3 首部预测 104

11.4 被动打开的启动 105

11.5 主动打开的启动 108

11.6 PAWS:防止序号重复 114

11.7 ACK处理 115

11.8 完成被动打开和同时打开 115

11.9 ACK处理(续) 116

11.10 FIN处理 118

11.11 小结 119

第12章 T/TCP实现:TCP用户请求 120

12.1 概述 120

12.2 PRU_CONNECT请求 120

12.3 tcp_connect函数 120

12.4 PRU_SEND和PRU_SEND_EOF请求 124

12.5 tcp_usrclosed函数 125

12.6 tcp_sysctl函数 126

12.7 T/TCP的前景 126

12.8 小结 127

第二部分 TCP的其他应用

第13章 HTTP:超文本传送协议 129

13.1 概述 129

13.2 HTTP和HTML概述 130

13.3 HTTP 132

13.3.1 报文类型:请求与响应 132

13.3.2 首部字段 133

13.3.3 响应代码 133

13.3.4 各种报文头举例 134

13.3.5 例子:客户程序缓存 135

13.3.6 例子:服务器重定向 136

13.4 一个例子 136

13.5 HTTP的统计资料 138

13.6 性能问题 139

13.7 小结 141

第14章 在HTTP服务器上找到的分组 142

14.1 概述 142

14.2 多个HTTP服务器 144

14.3 客户端SYN的到达间隔时间 145

14.4 RTT的测量 149

14.5 用listen设置入连接队列的容量 150

14.6 客户端的SYN选项 154

14.7 客户端的SYN重传 156

14.8 域名 157

14.9 超时的持续探测 157

14.10 T/TCP路由表大小的模拟 160

14.11 mbuf的交互 162

14.12 TCP的PCB高速缓存和首部预测 163

14.13 小结 165

第15章 NNTP:网络新闻传送协议 166

15.1 概述 166

15.2 NNTP 167

15.3 一个简单的新闻客户 170

15.4 一个复杂的新闻客户 171

15.5 NNTP的统计资料 172

15.6 小结 173

第三部分 Unix域协议

第16章 Unix域协议:概述 175

16.1 概述 175

16.2 用途 176

16.3 性能 177

16.4 编码举例 177

16.5 小结 179

第17章 Unix域协议:实现 180

17.1 概述 180

17.2 代码介绍 180

17.3 Unix domain和protosw结构 181

17.4 Unix域插口地址结构 182

17.5 Unix域协议控制块 183

17.6 uipc_usrreq函数 185

17.7 PRU_ATTACH请求和unp_attach函数 186

17.8 PRU_DETACH请求和unp_detach函数 187

17.9 PRU_BIND请求和unp_bind函数 189

17.10 PRU_CONNECT请求和unp_connect

函数 191

17.11 PRU_CONNECT2请求和unp_connect2

函数 195

17.12 socketpair系统调用 198

17.13 pipe系统调用 202

17.14 PRU_ACCEPT请求 203

17.15 PRU_DISCONNECT请求和

unp_disconnect函数 204

17.16 PRU_SHUTDOWN请求和unp_shutdown

函数 205

17.17 PRU_ABORT请求和unp_drop函数 206

17.18 其他各种请求 207

17.19 小结 209

第18章 Unix域协议:I/O和描述符的传递 210

18.1 概述 210

18.2 PRU_SEND和PRU_RCVD请求 210

18.3 描述符的传递 214

18.4 unp_internalize函数 218

18.5 unp_externalize函数 220

18.6 unp_discard函数 221

18.7 unp_dispose函数 222

18.8 unp_scan函数 222

18.9 unp_gc函数 223

18.10 unp_mark函数 230

18.11 性能(再讨论) 231

18.12 小结 231

附录A 测量网络时间 232

附录B 编写T/TCP应用程序 242

参考文献 246

缩略语 251

2 条评论

您还未登录,请先

登录

后发表或查看评论

TCP/IP协议十五:MTU 和 MSS 以太网数据帧

哈尼的博客

01-04

674

MTU 和 MSS1. MTU2. MSS参考

1. MTU

1 .MTU: Maxitum Transmission Unit 最大传输单元

以太网数据帧

以太网EthernetII最大的数据帧是 1518 Bytes

以太网帧报头为目的地址6+源地址6+类型2+CRC 4=18 bytes

那么剩下承载上层协议的地方也就是Data域最大就只能有1500 Bytes.

数据与填充:46~150...

教你轻松看懂以太网报文

最新发布

$好记性还是要多记录$

12-27

1006

以太网报文分析

TCPIP详解卷[1].part06

12-29

该文件共分12个压缩包,必须下载到同一个文件夹后解压。

简介:

《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 本书适合作为计算机专业学生学习网络的教材和教师参考书。也适用于研究网络的技术人员。

目 录

译者序

前言

第1章 概述 1

1.1 引言 1

1.2 分层 1

1.3 TCP/IP的分层 4

1.4 互联网的地址 5

1.5 域名系统 6

1.6 封装 6

1.7 分用 8

1.8 客户-服务器模型 8

1.9 端口号 9

1.10 标准化过程 10

1.11 RFC 10

1.12 标准的简单服务 11

1.13 互联网 12

1.14 实现 12

1.15 应用编程接口 12

1.16 测试网络 13

1.17 小结 13

第2章 链路层 15

2.1 引言 15

2.2 以太网和IEEE 802封装 15

2.3 尾部封装 17

2.4 SLIP:串行线路IP 17

2.5 压缩的SLIP 18

2.6 PPP:点对点协议 18

2.7 环回接口 20

2.8 最大传输单元MTU 21

2.9 路径MTU 21

2.10 串行线路吞吐量计算 21

2.11 小结 22

第3章 IP:网际协议 24

3.1 引言 24

3.2 IP首部 24

3.3 IP路由选择 27

3.4 子网寻址 30

3.5 子网掩码 32

3.6 特殊情况的IP地址 33

3.7 一个子网的例子 33

3.8 ifconfig命令 35

3.9 netstat命令 36

3.10 IP的未来 36

3.11 小结 37

第4章 ARP:地址解析协议 38

4.1 引言 38

4.2 一个例子 38

4.3 ARP高速缓存 40

4.4 ARP的分组格式 40

4.5 ARP举例 41

4.5.1 一般的例子 41

4.5.2 对不存在主机的ARP请求 42

4.5.3 ARP高速缓存超时设置 43

4.6 ARP代理 43

4.7 免费ARP 45

4.8 arp命令 45

4.9 小结 46

第5章 RARP:逆地址解析协议 47

5.1 引言 47

5.2 RARP的分组格式 47

5.3 RARP举例 47

5.4 RARP服务器的设计 48

5.4.1 作为用户进程的RARP服务器 49

5.4.2 每个网络有多个RARP服务器 49

5.5 小结 49

第6章 ICMP:Internet控制报文协议 50

6.1 引言 50

6.2 ICMP报文的类型 50

6.3 ICMP地址掩码请求与应答 52

6.4 ICMP时间戳请求与应答 53

6.4.1 举例 54

6.4.2 另一种方法 55

6.5 ICMP端口不可达差错 56

6.6 ICMP报文的4.4BSD处理 59

6.7 小结 60

第7章 Ping程序 61

7.1 引言 61

7.2 Ping程序 61

7.2.1 LAN输出 62

7.2.2 WAN输出 63

7.2.3 线路SLIP链接 64

7.2.4 拨号SLIP链路 65

7.3 IP记录路由选项 65

7.3.1 通常的例子 66

7.3.2 异常的输出 68

7.4 IP时间戳选项 69

7.5 小结 70

第8章 Traceroute程序 71

8.1 引言 71

8.2 Traceroute 程序的操作 71

8.3 局域网输出 72

8.4 广域网输出 75

8.5 IP源站选路选项 76

8.5.1 宽松的源站选路的traceroute

程序示例 78

8.5.2 严格的源站选路的traceroute

程序示例 79

8.5.3 宽松的源站选路traceroute程序

的往返路由 80

8.6 小结 81

第9章 IP选路 83

9.1 引言 83

9.2 选路的原理 84

9.2.1 简单路由表 84

9.2.2 初始化路由表 86

9.2.3 较复杂的路由表 87

9.2.4 没有到达目的地的路由 87

9.3 ICMP主机与网络不可达差错 88

9.4 转发或不转发 89

9.5 ICMP重定向差错 89

9.5.1 一个例子 90

9.5.2 更多的细节 91

9.6 ICMP路由器发现报文 92

9.6.1 路由器操作 93

9.6.2 主机操作 93

9.6.3 实现 93

9.7 小结 94

第10章 动态选路协议 95

10.1 引言 95

10.2 动态选路 95

10.3 Unix选路守护程序 96

1

TCP_IP详解卷1

12-29

该文件共分12个压缩包,必须下载到同一个文件夹后解压才可以用哦~~

简介:

《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 本书适合作为计算机专业学生学习网络的教材和教师参考书。也适用于研究网络的技术人员。

目 录

译者序

前言

第1章 概述 1

1.1 引言 1

1.2 分层 1

1.3 TCP/IP的分层 4

1.4 互联网的地址 5

1.5 域名系统 6

1.6 封装 6

1.7 分用 8

1.8 客户-服务器模型 8

1.9 端口号 9

1.10 标准化过程 10

1.11 RFC 10

1.12 标准的简单服务 11

1.13 互联网 12

1.14 实现 12

1.15 应用编程接口 12

1.16 测试网络 13

1.17 小结 13

第2章 链路层 15

2.1 引言 15

2.2 以太网和IEEE 802封装 15

2.3 尾部封装 17

2.4 SLIP:串行线路IP 17

2.5 压缩的SLIP 18

2.6 PPP:点对点协议 18

2.7 环回接口 20

2.8 最大传输单元MTU 21

2.9 路径MTU 21

2.10 串行线路吞吐量计算 21

2.11 小结 22

第3章 IP:网际协议 24

3.1 引言 24

3.2 IP首部 24

3.3 IP路由选择 27

3.4 子网寻址 30

3.5 子网掩码 32

3.6 特殊情况的IP地址 33

3.7 一个子网的例子 33

3.8 ifconfig命令 35

3.9 netstat命令 36

3.10 IP的未来 36

3.11 小结 37

第4章 ARP:地址解析协议 38

4.1 引言 38

4.2 一个例子 38

4.3 ARP高速缓存 40

4.4 ARP的分组格式 40

4.5 ARP举例 41

4.5.1 一般的例子 41

4.5.2 对不存在主机的ARP请求 42

4.5.3 ARP高速缓存超时设置 43

4.6 ARP代理 43

4.7 免费ARP 45

4.8 arp命令 45

4.9 小结 46

第5章 RARP:逆地址解析协议 47

5.1 引言 47

5.2 RARP的分组格式 47

5.3 RARP举例 47

5.4 RARP服务器的设计 48

5.4.1 作为用户进程的RARP服务器 49

5.4.2 每个网络有多个RARP服务器 49

5.5 小结 49

第6章 ICMP:Internet控制报文协议 50

6.1 引言 50

6.2 ICMP报文的类型 50

6.3 ICMP地址掩码请求与应答 52

6.4 ICMP时间戳请求与应答 53

6.4.1 举例 54

6.4.2 另一种方法 55

6.5 ICMP端口不可达差错 56

6.6 ICMP报文的4.4BSD处理 59

6.7 小结 60

第7章 Ping程序 61

7.1 引言 61

7.2 Ping程序 61

7.2.1 LAN输出 62

7.2.2 WAN输出 63

7.2.3 线路SLIP链接 64

7.2.4 拨号SLIP链路 65

7.3 IP记录路由选项 65

7.3.1 通常的例子 66

7.3.2 异常的输出 68

7.4 IP时间戳选项 69

7.5 小结 70

第8章 Traceroute程序 71

8.1 引言 71

8.2 Traceroute 程序的操作 71

8.3 局域网输出 72

8.4 广域网输出 75

8.5 IP源站选路选项 76

8.5.1 宽松的源站选路的traceroute

程序示例 78

8.5.2 严格的源站选路的traceroute

程序示例 79

8.5.3 宽松的源站选路traceroute程序

的往返路由 80

8.6 小结 81

第9章 IP选路 83

9.1 引言 83

9.2 选路的原理 84

9.2.1 简单路由表 84

9.2.2 初始化路由表 86

9.2.3 较复杂的路由表 87

9.2.4 没有到达目的地的路由 87

9.3 ICMP主机与网络不可达差错 88

9.4 转发或不转发 89

9.5 ICMP重定向差错 89

9.5.1 一个例子 90

9.5.2 更多的细节 91

9.6 ICMP路由器发现报文 92

9.6.1 路由器操作 93

9.6.2 主机操作 93

9.6.3 实现 93

9.7 小结 94

第10章 动态选路协议 95

10.1 引言 95

10.2 动态选路 95

10.3 Unix选路守护程序 96

10.4 RIP:选路信息协议 96

10.4.1 报文格式 96

10.4.2 正常运行 97

10.4.3 度量 98

10.4.4 问题 98

10.4.5 举例 98

10.4.6 另一个例子 100

10.5 RIP版本2 102

10.6 OSPF:开放最短路径优先 102

10.7 BGP:边界网关协议 103

10.8 CIDR:无类型域间选路 104

10.9 小结 105

第11章 UDP:用户数据报协议 107

11.1 引言 107

11.2 UDP首部 107

11.3 UDP检验和 108

11.3.1 tcpdump输出 109

11.3.2 一些统计结果 109

11.4 一个简单的例子 110

11.5 IP分片 111

11.6 ICMP不可达差错(需要分片) 113

11.7 用Traceroute确定路径MTU 114

11.8 采用UDP的路径MTU发现 116

11.9 UDP和ARP之间的交互作用 118

11.10 最大UDP数据报长度 119

11.11 ICMP源站抑制差错 120

11.12 UDP服务器的设计 122

11.12.1 客户IP地址及端口号 122

11.12.2 目标IP地址 122

11.12.3 UDP输入队列 122

11.12.4 限制本地IP地址 124

11.12.5 限制远端IP地址 125

11.12.6 每个端口有多个接收者 125

11.13 小结 126

第12章 广播和多播 128

12.1 引言 128

12.2 广播 129

12.2.1 受限的广播 129

12.2.2 指向网络的广播 129

12.2.3 指向子网的广播 129

12.2.4 指向所有子网的广播 130

12.3 广播的例子 130

12.4 多播 132

12.4.1 多播组地址 133

12.4.2 多播组地址到以太网地址的转换 133

12.4.3 FDDI和令牌环网络中的多播 134

12.5 小结 134

第13章 IGMP:Internet组管理协议 136

13.1 引言 136

13.2 IGMP报文 136

13.3 IGMP协议 136

13.3.1 加入一个多播组 136

13.3.2 IGMP报告和查询 137

13.3.3 实现细节 137

13.3.4 生存时间字段 138

13.3.5 所有主机组 138

13.4 一个例子 138

13.5 小结 141

第14章 DNS:域名系统 142

14.1 引言 142

14.2 DNS基础 142

14.3 DNS的报文格式 144

14.3.1 DNS查询报文中的问题部分 146

14.3.2 DNS响应报文中的资源记录部分 147

14.4 一个简单的例子 147

14.5 指针查询 150

14.5.1 举例 151

14.5.2 主机名检查 151

14.6 资源记录 152

14.7 高速缓存 153

14.8 用UDP还是用TCP 156

14.9 另一个例子 156

14.10 小结 157

第15章 TFTP:简单文件传送协议 159

15.1 引言 159

15.2 协议 159

15.3 一个例子 160

15.4 安全性 161

15.5 小结 162

第16章 BOOTP: 引导程序协议 163

16.1 引言 163

16.2 BOOTP的分组格式 163

16.3 一个例子 164

16.4 BOOTP服务器的设计 165

16.5 BOOTP穿越路由器 167

16.6 特定厂商信息 167

16.7 小结 168

第17章 TCP:传输控制协议 170

17.1 引言 170

17.2 TCP的服务 170

17.3 TCP的首部 171

17.4 小结 173

第18章 TCP连接的建立与终止 174

18.1 引言 174

18.2 连接的建立与终止 174

18.2.1 tcpdump的输出 174

18.2.2 时间系列 175

18.2.3 建立连接协议 175

18.2.4 连接终止协议 177

18.2.5 正常的tcpdump输出 177

18.3 连接建立的超时 178

18.3.1 第一次超时时间 178

18.3.2 服务类型字段 179

18.4 最大报文段长度 179

18.5 TCP的半关闭 180

18.6 TCP的状态变迁图 182

18.6.1 2MSL等待状态 183

18.6.2 平静时间的概念 186

18.6.3 FIN_WAIT_2状态 186

18.7 复位报文段 186

18.7.1 到不存在的端口的连接请求 187

18.7.2 异常终止一个连接 187

18.7.3 检测半打开连接 188

18.8 同时打开 189

18.9 同时关闭 191

18.10 TCP选项 191

18.11 TCP服务器的设计 192

18.11.1 TCP服务器端口号 193

18.11.2 限定的本地IP地址 194

18.11.3 限定的远端IP地址 195

18.11.4 呼入连接请求队列 195

18.12 小结 197

第19章 TCP的交互数据流 200

19.1 引言 200

19.2 交互式输入 200

19.3 经受时延的确认 201

19.4 Nagle算法 203

19.4.1 关闭Nagle算法 204

19.4.2 一个例子 205

19.5 窗口大小通告 207

19.6 小结 208

第20章 TCP的成块数据流 209

20.1 引言 209

20.2 正常数据流 209

20.3 滑动窗口 212

20.4 窗口大小 214

20.5 PUSH标志 215

20.6 慢启动 216

20.7 成块数据的吞吐量 218

20.7.1 带宽时延乘积 220

20.7.2 拥塞 220

20.8 紧急方式 221

20.9 小结 224

第21章 TCP的超时与重传 226

21.1 引言 226

21.2 超时与重传的简单例子 226

21.3 往返时间测量 227

21.4 往返时间RTT的例子 229

21.4.1 往返时间RTT的测量 229

21.4.2 RTT估计器的计算 231

21.4.3 慢启动 233

21.5 拥塞举例 233

21.6 拥塞避免算法 235

21.7 快速重传与快速恢复算法 236

21.8 拥塞举例(续) 237

21.9 按每条路由进行度量 240

21.10 ICMP的差错 240

21.11 重新分组 243

21.12 小结 243

第22章 TCP的坚持定时器 245

22.1 引言 245

22.2 一个例子 245

22.3 糊涂窗口综合症 246

22.4 小结 250

第23章 TCP的保活定时器 251

23.1 引言 251

23.2 描述 252

23.3 保活举例 253

23.3.1 另一端崩溃 253

23.3.2 另一端崩溃并重新启动 254

23.3.3 另一端不可达 254

23.4 小结 255

第24章 TCP的未来和性能 256

24.1 引言 256

24.2 路径MTU发现 256

24.2.1 一个例子 257

24.2.2 大分组还是小分组 258

24.3 长肥管道 259

24.4 窗口扩大选项 262

24.5 时间戳选项 263

24.6 PAWS:防止回绕的序号 265

24.7 T/TCP:为事务用的TCP扩展 265

24.8 TCP的性能 267

24.9 小结 268

第25章 SNMP:简单网络管理协议 270

25.1 引言 270

25.2 协议 270

25.3 管理信息结构 272

25.4 对象标识符 274

25.5 管理信息库介绍 274

25.6 实例标识 276

25.6.1 简单变量 276

25.6.2 表格 276

25.6.3 字典式排序 277

25.7 一些简单的例子 277

25.7.1 简单变量 278

25.7.2 get-next操作 278

25.7.3 表格的访问 279

25.8 管理信息库(续) 279

25.8.1 system组 279

25.8.2 interface组 280

25.8.3 at组 281

25.8.4 ip组 282

25.8.5 icmp组 285

25.8.6 tcp组 285

25.9 其他一些例子 288

25.9.1 接口MTU 288

25.9.2 路由表 288

25.10 trap 290

25.11 ASN.1和BER 291

25.12 SNMPv2 292

25.13 小结 292

第26章 Telnet和Rlogin:远程登录 293

26.1 引言 293

26.2 Rlogin协议 294

26.2.1 应用进程的启动 295

26.2.2 流量控制 295

26.2.3 客户的中断键 296

26.2.4 窗口大小的改变 296

26.2.5 服务器到客户的命令 296

26.2.6 客户到服务器的命令 297

26.2.7 客户的转义符 298

26.3 Rlogin的例子 298

26.3.1 初始的客户-服务器协议 298

26.3.2 客户中断键 299

26.4 Telnet协议 302

26.4.1 NVT ASCII 302

26.4.2 Telnet命令 302

26.4.3 选项协商 303

26.4.4 子选项协商 304

26.4.5 半双工、一次一字符、一次

一行或行方式 304

26.4.6 同步信号 306

26.4.7 客户的转义符 306

26.5 Telnet举例 306

26.5.1 单字符方式 306

26.5.2 行方式 310

26.5.3 一次一行方式(准行方式) 312

26.5.4 行方式:客户中断键 313

26.6 小结 314

第27章 FTP:文件传送协议 316

27.1 引言 316

27.2 FTP协议 316

27.2.1 数据表示 316

27.2.2 FTP命令 318

27.2.3 FTP应答 319

27.2.4 连接管理 320

27.3 FTP的例子 321

27.3.1 连接管理:临时数据端口 321

27.3.2 连接管理:默认数据端口 323

27.3.3 文本文件传输:NVT ASCII

表示还是图像表示 325

27.3.4 异常中止一个文件的传输:

Telnet同步信号 326

27.3.5 匿名FTP 329

27.3.6 来自一个未知IP地址的匿名FTP 330

27.4 小结 331

第28章 SMTP:简单邮件传送协议 332

28.1 引言 332

28.2 SMTP协议 332

28.2.1 简单例子 332

28.2.2 SMTP命令 334

28.2.3 信封、首部和正文 335

28.2.4 中继代理 335

28.2.5 NVT ASCII 337

28.2.6 重试间隔 337

28.3 SMTP的例子 337

28.3.1 MX记录:主机非直接连到

Internet 337

28.3.2 MX记录:主机出故障 339

28.3.3 VRFY和EXPN命令 340

28.4 SMTP的未来 340

28.4.1 信封的变化:扩充的SMTP 341

28.4.2 首部变化:非ASCII字符 342

28.4.3 正文变化:通用Internet邮件

扩充 343

28.5 小结 346

第29章 网络文件系统 347

29.1 引言 347

29.2 Sun远程过程调用 347

29.3 XDR:外部数据表示 349

29.4 端口映射器 349

29.5 NFS协议 351

29.5.1 文件句柄 353

29.5.2 安装协议 353

29.5.3 NFS过程 354

29.5.4 UDP还是TCP 355

29.5.5 TCP上的NFS 355

29.6 NFS实例 356

29.6.1 简单的例子:读一个文件 356

29.6.2 简单的例子:创建一个目录 357

29.6.3 无状态 358

29.6.4 例子:服务器崩溃 358

29.6.5 等幂过程 360

29.7 第3版的NFS 360

29.8 小结 361

第30章 其他的TCP/IP应用程序 363

30.1 引言 363

30.2 Finger协议 363

30.3 Whois协议 364

30.4 Archie、WAIS、Gopher、Veronica

和WWW 366

30.4.1 Archie 366

30.4.2 WAIS 366

30.4.3 Gopher 366

30.4.4 Veronica 366

30.4.5 万维网WWW 367

30.5 X窗口系统 367

30.5.1 Xscope程序 368

30.5.2 LBX: 低带宽X 370

30.6 小结 370

附录A tcpdump程序 371

附录B 计算机时钟 376

附录C sock程序 378

附录D 部分习题的解答 381

附录E 配置选项 395

附录F 可以免费获得的源代码 406

参考文献 409

缩略语 420

目 录

译者序

前言

第1章 概述 1

1.1 引言 1

1.2 源代码表示 1

1.2.1 将拥塞窗口设置为1 1

1.2.2 印刷约定 2

1.3 历史 2

1.4 应用编程接口 3

1.5 程序示例 4

1.6 系统调用和库函数 6

1.7 网络实现概述 6

1.8 描述符 7

1.9 mbuf与输出处理 11

1.9.1 包含插口地址结构的mbuf 11

1.9.2 包含数据的mbuf 12

1.9.3 添加IP和UDP首部 13

1.9.4 IP输出 14

1.9.5 以太网输出 14

1.9.6 UDP输出小结 14

1.10 输入处理 15

1.10.1 以太网输入 15

1.10.2 IP输入 15

1.10.3 UDP输入 16

1.10.4 进程输入 17

1.11 网络实现概述(续) 17

1.12 中断级别与并发 18

1.13 源代码组织 20

1.14 测试网络 21

1.15 小结 22

第2章 mbuf:存储器缓存 24

2.1 引言 24

2.2 代码介绍 27

2.2.1 全局变量 27

2.2.2 统计 28

2.2.3 内核统计 28

2.3 mbuf的定义 29

2.4 mbuf结构 29

2.5 简单的mbuf宏和函数 31

2.5.1 m_get函数 32

2.5.2 MGET宏 32

2.5.3 m_retry函数 33

2.5.4 mbuf锁 34

2.6 m_devget和m_pullup函数 34

2.6.1 m_devget函数 34

2.6.2 mtod和dtom宏 36

2.6.3 m_pullup函数和连续的协议首部 36

2.6.4 m_pullup和IP的分片与重组 37

2.6.5 TCP重组避免调用m_pullup 39

2.6.6 m_pullup使用总结 40

2.7 mbuf宏和函数的小结 40

2.8 Net/3联网数据结构小结 42

2.9 m_copy和簇引用计数 43

2.10 其他选择 47

2.11 小结 47

第3章 接口层 49

3.1 引言 49

3.2 代码介绍 49

3.2.1 全局变量 49

3.2.2 SNMP变量 50

3.3 ifnet结构 51

3.4 ifaddr结构 57

3.5 sockaddr结构 58

3.6 ifnet与ifaddr的专用化 59

3.7 网络初始化概述 60

3.8 以太网初始化 61

3.9 SLIP初始化 64

3.10 环回初始化 65

3.11 if_attach函数 66

3.12 ifinit函数 72

3.13 小结 73

第4章 接口:以太网 74

4.1 引言 74

4.2 代码介绍 75

4.2.1 全局变量 75

4.2.2 统计量 75

4.2.3 SNMP变量 76

4.3 以太网接口 77

4.3.1 leintr函数 79

4.3.2 leread函数 79

4.3.3 ether_input函数 81

4.3.4 ether_output函数 84

4.3.5 lestart函数 87

4.4 ioctl系统调用 89

4.4.1 ifioctl函数 90

4.4.2 ifconf函数 91

4.4.3 举例 94

4.4.4 通用接口ioctl命令 95

4.4.5 if_down和if_up函数 96

4.4.6 以太网、SLIP和环回 97

4.5 小结 98

第5章 接口:SLIP和环回 100

5.1 引言 100

5.2 代码介绍 100

5.2.1 全局变量 100

5.2.2 统计量 101

5.3 SLIP接口 101

5.3.1 SLIP线路规程:SLIPDISC 101

5.3.2 SLIP初始化:slopen和slinit 103

5.3.3 SLIP输入处理:slinput 105

5.3.4 SLIP输出处理:sloutput 109

5.3.5 slstart函数 111

5.3.6 SLIP分组丢失 116

5.3.7 SLIP性能考虑 117

5.3.8 slclose函数 117

5.3.9 sltioctl函数 118

5.4 环回接口 119

5.5 小结 121

第6章 IP编址 123

6.1 引言 123

6.1.1 IP地址 123

6.1.2 IP地址的印刷规定 123

6.1.3 主机和路由器 124

6.2 代码介绍 125

6.3 接口和地址小结 125

6.4 sockaddr_in结构 126

6.5 in_ifaddr结构 127

6.6 地址指派 128

6.6.1 ifioctl函数 130

6.6.2 in_control函数 130

6.6.3 前提条件:SIOCSIFADDR、

SIOCSIFNETMASK和

SIOCSIFDSTADDR 132

6.6.4 地址指派:SIOCSIFADDR 133

6.6.5 in_ifinit函数 133

6.6.6 网络掩码指派:SIOCSIFNETMASK 136

6.6.7 目的地址指派:SIOCSIFDSTADDR 137

6.6.8 获取接口信息 137

6.6.9 每个接口多个IP地址 138

6.6.10 附加IP地址:SIOCAIFADDR 139

6.6.11 删除IP地址:SIOCDIFADDR 140

6.7 接口ioctl处理 141

6.7.1 leioctl函数 141

6.7.2 slioctl函数 142

6.7.3 loioctl函数 143

6.8 Internet实用函数 144

6.9 ifnet实用函数 144

6.10 小结 145

第7章 域和协议 146

7.1 引言 146

7.2 代码介绍 146

7.2.1 全局变量 147

7.2.2 统计量 147

7.3 domain结构 147

7.4 protosw结构 148

7.5 IP 的domain和protosw结构 150

7.6 pffindproto和pffindtype函数 155

7.7 pfctlinput函数 157

7.8 IP初始化 157

7.8.1 Internet传输分用 157

7.8.2 ip_init函数 158

7.9 sysctl系统调用 159

7.10 小结 161

第8章 IP:网际协议 162

8.1 引言 162

8.2 代码介绍 163

8.2.1 全局变量 163

8.2.2 统计量 163

8.2.3 SNMP变量 164

8.3 IP分组 165

8.4 输入处理:ipintr函数 167

8.4.1 ipintr概观 167

8.4.2 验证 168

8.4.3 转发或不转发 171

8.4.4 重装和分用 173

8.5 转发:ip_forward函数 174

8.6 输出处理:ip_output函数 180

8.6.1 首部初始化 181

8.6.2 路由选择 182

8.6.3 源地址选择和分片 184

8.7 Internet检验和:in_cksum函数 186

8.8 setsockopt和getsockopt系统调用 190

8.8.1 PRCO_SETOPT的处理 192

8.8.2 PRCO_GETOPT的处理 193

8.9 ip_sysctl函数 193

8.10 小结 194

第9章 IP选项处理 196

9.1 引言 196

9.2 代码介绍 196

9.2.1 全局变量 196

9.2.2 统计量 197

9.3 选项格式 197

9.4 ip_dooptions函数 198

9.5 记录路由选项 200

9.6 源站和记录路由选项 202

9.6.1 save_rte函数 205

9.6.2 ip_srcroute函数 206

9.7 时间戳选项 207

9.8 ip_insertoptions函数 210

9.9 ip_pcbopts函数 214

9.10 一些限制 217

9.11 小结 217

第10章 IP的分片与重装 218

10.1 引言 218

10.2 代码介绍 219

10.2.1 全局变量 220

10.2.2 统计量 220

10.3 分片 220

10.4 ip_optcopy函数 223

10.5 重装 224

10.6 ip_reass函数 227

10.7 ip_slowtimo函数 237

10.8 小结 238

第11章 ICMP:Internet控制报文协议 239

11.1 引言 239

11.2 代码介绍 242

11.2.1 全局变量 242

11.2.2 统计量 242

11.2.3 SNMP变量 243

11.3 icmp结构 244

11.4 ICMP 的protosw结构 245

11.5 输入处理:icmp_input函数 246

11.6 差错处理 249

11.7 请求处理 251

11.7.1 回显询问:ICMP_ECHO和

ICMP_ECHOREPLY 252

11.7.2 时间戳询问:ICMP_TSTAMP和

ICMP_TSTAMPREPLY 253

11.7.3 地址掩码询问:ICMP_MASKREQ和

ICMP_MASKREPLY 253

11.7.4 信息询问:ICMP_IREQ和ICMP_

IREQREPLY 255

11.7.5 路由器发现:ICMP_ROUTERADVERT

和ICMP_ROUTERSOLICIT 255

11.8 重定向处理 255

11.9 回答处理 257

11.10 输出处理 257

11.11 icmp_error函数 258

11.12 icmp_reflect函数 261

11.13 icmp_send函数 265

11.14 icmp_sysctl函数 266

11.15 小结 266

第12章 IP多播 268

12.1 引言 268

12.2 代码介绍 269

12.2.1 全局变量 270

12.2.2 统计量 270

12.3 以太网多播地址 270

12.4 ether_multi结构 271

12.5 以太网多播接收 273

12.6 in_multi结构 273

12.7 ip_moptions结构 275

12.8 多播的插口选项 276

12.9 多播的TTL值 277

12.9.1 MBONE 278

12.9.2 扩展环搜索 278

12.10 ip_setmoptions函数 278

12.10.1 选择一个明确的多播接口:IP_

MULTICAST_IF 280

12.10.2 选择明确的多播TTL: IP_

MULTICAST_TTL 281

12.10.3 选择多播环回:IP_MULTICAST_

LOOP 281

12.11 加入一个IP多播组 282

12.11.1 in_addmulti函数 285

12.11.2 slioctl和loioctl函数:SIOCADDMULTI和SIOCDELMULTI 287

12.11.3 leioctl函数:SIOCADDMULTI和

SIOCDELMULTI 288

12.11.4 ether_addmulti函数 288

12.12 离开一个IP多播组 291

12.12.1 in_delmulti函数 292

12.12.2 ether_delmulti函数 293

12.13 ip_getmoptions函数 295

12.14 多播输入处理:ipintr函数 296

12.15 多播输出处理:ip_output函数 298

12.16 性能的考虑 301

12.17 小结 301

第13章 IGMP:Internet组管理协议 303

13.1 引言 303

13.2 代码介绍 304

13.2.1 全局变量 304

13.2.2 统计量 304

13.2.3 SNMP变量 305

13.3 igmp结构 305

13.4 IGMP的protosw的结构 306

13.5 加入一个组:igmp_joingroup函数 306

13.6 igmp_fasttimo函数 308

13.7 输入处理:igmp_input函数 311

13.7.1 成员关系查询:IGMP_HOST_

MEMBERSHIP_QUERY 312

13.7.2 成员关系报告:IGMP_HOST_

MEMBERSHIP_REPORT 313

13.8 离开一个组:igmp_leavegroup函数 314

13.9 小结 315

第14章 IP多播选路 316

14.1 引言 316

14.2 代码介绍 316

14.2.1 全局变量 316

14.2.2 统计量 317

14.2.3 SNMP变量 317

14.3 多播输出处理(续) 317

14.4 mrouted守护程序 318

14.5 虚拟接口 321

14.5.1 虚拟接口表 322

14.5.2 add_vif函数 324

14.5.3 del_vif函数 326

14.6 IGMP(续) 327

14.6.1 add_lgrp函数 328

14.6.2 del_lgrp函数 329

14.6.3 grplst_member函数 330

14.7 多播选路 331

14.7.1 多播选路表 334

14.7.2 del_mrt函数 335

14.7.3 add_mrt函数 336

14.7.4 mrtfind函数 337

14.8 多播转发:ip_mforward函数 338

14.8.1 phyint_send函数 343

14.8.2 tunnel_send函数 344

14.9 清理:ip_mrouter_done函数 345

14.10 小结 346

第15章 插口层 348

15.1 引言 348

15.2 代码介绍 349

15.3 socket结构 349

15.4 系统调用 354

15.4.1 举例 355

15.4.2 系统调用小结 355

15.5 进程、描述符和插口 357

15.6 socket系统调用 358

15.6.1 socreate函数 359

15.6.2 超级用户特权 361

15.7 getsock和sockargs函数 361

15.8 bind系统调用 363

15.9 listen系统调用 364

15.10 tsleep和wakeup函数 365

15.11 accept系统调用 366

15.12 sonewconn和soisconnected

函数 369

15.13 connect系统调用 372

15.13.1 soconnect函数 374

15.13.2 切断无连接插口和外部地址的

关联 375

15.14 shutdown系统调用 375

15.15 close系统调用 377

15.15.1 soo_close函数 377

15.15.2 soclose函数 378

15.16 小结 380

第16章 插口I/O 381

16.1 引言 381

16.2 代码介绍 381

16.3 插口缓存 381

16.4 write、writev、sendto和sendmsg

系统调用 384

16.5 sendmsg系统调用 387

16.6 sendit函数 388

16.6.1 uiomove函数 389

16.6.2 举例 390

16.6.3 sendit代码 391

16.7 sosend函数 392

16.7.1 可靠的协议缓存 393

16.7.2 不可靠的协议缓存 393

16.7.3 sosend函数小结 401

16.7.4 性能问题 401

16.8 read、readv、recvfrom和recvmsg

系统调用 401

16.9 recvmsg系统调用 402

16.10 recvit函数 403

16.11 soreceive函数 405

16.11.1 带外数据 406

16.11.2 举例 406

16.11.3 其他的接收操作选项 407

16.11.4 接收缓存的组织:报文边界 407

16.11.5 接收缓存的组织:没有报文边界 408

16.11.6 控制信息和带外数据 409

16.12 soreceive代码 410

16.13 select系统调用 421

16.13.1 selscan函数 425

16.13.2 soo_select函数 425

16.13.3 selrecord函数 427

16.13.4 selwakeup函数 428

16.14 小结 429

第17章 插口选项 431

17.1 引言 431

17.2 代码介绍 431

17.3 setsockopt系统调用 432

17.4 getsockopt系统调用 437

17.5 fcntl和ioctl系统调用 440

17.5.1 fcntl代码 441

17.5.2 ioctl代码 443

17.6 getsockname系统调用 444

17.7 getpeername系统调用 445

17.8 小结 447

第18章 Radix树路由表 448

18.1 引言 448

18.2 路由表结构 448

18.3 选路插口 456

18.4 代码介绍 456

18.4.1 全局变量 458

18.4.2 统计量 458

18.4.3 SNMP变量 459

18.5 Radix结点数据结构 460

18.6 选路结构 463

18.7 初始化:route_init和rtable_init

函数 465

18.8 初始化:rn_init和rn_inithead

函数 468

18.9 重复键和掩码列表 471

18.10 rn_match函数 473

18.11 rn_search函数 480

18.12 小结 481

第19章 选路请求和选路消息 482

19.1 引言 482

19.2 rtalloc和rtalloc1函数 482

19.3 宏RTFREE和rtfree函数 484

19.4 rtrequest函数 486

19.5 rt_setgate函数 491

19.6 rtinit函数 493

19.7 rtredirect函数 495

19.8 选路消息的结构 498

19.9 rt_missmsg函数 501

19.10 rt_ifmsg函数 503

19.11 rt_newaddrmsg函数 504

19.12 rt_msg1函数 505

19.13 rt_msg2函数 507

19.14 sysctl_rtable函数 510

19.15 sysctl_dumpentry函数 514

19.16 sysctl_iflist函数 515

19.17 小结 517

第20章 选路插口 518

20.1 引言 518

20.2 routedomain和protosw结构 518

20.3 选路控制块 519

20.4 raw_init函数 520

20.5 route_output函数 520

20.6 rt_xaddrs函数 530

20.7 rt_setmetrics函数 531

20.8 raw_input函数 532

20.9 route_usrreq函数 534

20.10 raw_usrreq函数 535

20.11 raw_attach、raw_detach和raw_disconnect函数 539

20.12 小结 540

第21章 ARP:地址解析协议 542

21.1 介绍 542

21.2 ARP和路由表 542

21.3 代码介绍 544

21.3.1 全局变量 544

21.3.2 统计量 544

21.3.3 SNMP变量 546

21.4 ARP结构 546

21.5 arpwhohas函数 548

21.6 arprequest函数 548

21.7 arpintr函数 551

21.8 in_arpinput函数 552

21.9 ARP定时器函数 557

21.9.1 arptimer函数 557

21.9.2 arptfree函数 557

21.10 arpresolve函数 558

21.11 arplookup函数 562

21.12 代理ARP 563

21.13 arp_rtrequest函数 564

21.14 ARP和多播 569

21.15 小结 570

第22章 协议控制块 572

22.1 引言 572

22.2 代码介绍 573

22.2.1 全局变量 574

22.2.2 统计量 574

22.3 inpcb的结构 574

22.4 in_pcballoc和in_pcbdetach函数 575

22.5 绑定、连接和分用 577

22.6 in_pcblookup函数 581

22.7 in_pcbbind函数 584

22.8 in_pcbconnect函数 589

22.9 in_pcbdisconnect函数 594

22.10 in_setsockaddr和in_setpeeraddr

函数 595

22.11 in_pcbnotify、in_rtchange和in_losing函数 595

22.11.1 in_rtchange函数 598

22.11.2 重定向和原始插口 599

22.11.3 ICMP差错和UDP插口 600

22.11.4 in_losing函数 601

22.12 实现求精 602

22.13 小结 602

第23章 UDP:用户数据报协议 605

23.1 引言 605

23.2 代码介绍 605

23.2.1 全局变量 606

23.2.2 统计量 606

23.2.3 SNMP变量 607

23.3 UDP 的protosw结构 607

23.4 UDP的首部 608

23.5 udp_init函数 609

23.6 udp_output函数 609

23.6.1 在前面加上IP/UDP首部和mbuf簇 612

23.6.2 UDP检验和计算和伪首部 612

23.7 udp_input函数 616

23.7.1 对收到的UDP数据报的一般确认 616

23.7.2 分用单播数据报 619

23.7.3 分用多播和广播数据报 622

23.7.4 连接上的UDP插口和多接口主机 625

23.8 udp_saveopt函数 625

23.9 udp_ctlinput函数 627

23.10 udp_usrreq函数 628

23.11 udp_sysctl函数 633

23.12 实现求精 633

23.12.1 UDP PCB高速缓存 633

23.12.2 UDP检验和 634

23.13 小结 635

第24章 TCP:传输控制协议 636

24.1 引言 636

24.2 代码介绍 636

24.2.1 全局变量 636

24.2.2 统计量 637

24.2.3 SNMP变量 640

24.3 TCP 的protosw结构 641

24.4 TCP的首部 641

24.5 TCP的控制块 643

24.6 TCP的状态变迁图 645

24.7 TCP的序号 646

24.8 tcp_init函数 650

24.9 小结 652

第25章 TCP的定时器 654

25.1 引言 654

25.2 代码介绍 655

25.3 tcp_canceltimers函数 657

25.4 tcp_fasttimo函数 657

25.5 tcp_slowtimo函数 658

25.6 tcp_timers函数 659

25.6.1 FIN_WAIT_2和2MSL定时器 660

25.6.2 持续定时器 662

25.6.3 连接建立定时器和保活定时器 662

25.7 重传定时器的计算 665

25.8 tcp_newtcpcb算法 666

25.9 tcp_setpersist函数 668

25.10 tcp_xmit_timer函数 669

25.11 重传超时:tcp_timers函数 673

25.11.1 慢起动和避免拥塞 675

25.11.2 精确性 677

25.12 一个RTT的例子 677

25.13 小结 679

第26章 TCP输出 680

26.1 引言 680

26.2 tcp_output概述 680

26.3 决定是否应发送一个报文段 682

26.4 TCP选项 691

26.5 窗口大小选项 692

26.6 时间戳选项 692

26.6.1 哪个时间戳需要回显,RFC1323

算法 694

26.6.2 哪个时间戳需要回显,正确的

算法 695

26.6.3 时间戳与延迟ACK 695

26.7 发送一个报文段 696

26.8 tcp_template函数 707

26.9 tcp_respond函数 708

26.10 小结 710

第27章 TCP的函数 712

27.1 引言 712

27.2 tcp_drain函数 712

27.3 tcp_drop函数 712

27.4 tcp_close函数 713

27.4.1 路由特性 713

27.4.2 资源释放 716

27.5 tcp_mss函数 717

27.6 tcp_ctlinput函数 722

27.7 tcp_notify函数 723

27.8 tcp_quench函数 724

27.9 TCP_REASS宏和tcp_reass函数 724

27.9.1 TCP_REASS宏 725

27.9.2 tcp_reass函数 727

27.10 tcp_trace函数 732

27.11 小结 736

第28章 TCP的输入 737

28.1 引言 737

28.2 预处理 739

28.3 tcp_dooptions函数 745

28.4 首部预测 747

28.5 TCP输入:缓慢的执行路径 752

28.6 完成被动打开或主动打开 752

28.6.1 完成被动打开 753

28.6.2 完成主动打开 756

28.7 PAWS:防止序号回绕 760

28.8 裁剪报文段使数据在窗口内 762

28.9 自连接和同时打开 768

28.10 记录时间戳 770

28.11 RST处理 770

28.12 小结 772

第29章 TCP的输入(续) 773

29.1 引言 773

29.2 ACK处理概述 773

29.3 完成被动打开和同时打开 774

29.4 快速重传和快速恢复的算法 775

29.5 ACK处理 778

29.6 更新窗口信息 784

29.7 紧急方式处理 786

29.8 tcp_pulloutofband函数 788

29.9 处理已接收的数据 789

29.10 FIN处理 791

29.11 最后的处理 793

29.12 实现求精 795

29.13 首部压缩 795

29.13.1 引言 796

29.13.2 首部字段的压缩 799

29.13.3 特殊情况 801

29.13.4 实例 802

29.13.5 配置 803

29.14 小结 803

第30章 TCP的用户需求 805

30.1 引言 805

30.2 tcp_usrreq函数 805

30.3 tcp_attach函数 814

30.4 tcp_disconnect函数 815

30.5 tcp_usrclosed函数 816

30.6 tcp_ctloutput函数 817

30.7 小结 820

第31章 BPF:BSD 分组过滤程序 821

31.1 引言 821

31.2 代码介绍 821

31.2.1 全局变量 821

31.2.2 统计量 822

31.3 bpf_if结构 822

31.4 bpf_d结构 825

31.4.1 bpfopen函数 826

31.4.2 bpfioctl函数 827

31.4.3 bpf_setif函数 830

31.4.4 bpf_attachd函数 831

31.5 BPF的输入 832

31.5.1 bpf_tap函数 832

31.5.2 catchpacket函数 833

31.5.3 bpfread函数 835

31.6 BPF的输出 837

31.7 小结 838

第32章 原始IP 839

32.1 引言 839

32.2 代码介绍 839

32.2.1 全局变量 839

32.2.2 统计量 840

32.3 原始 IP的protosw结构 840

32.4 rip_init函数 842

32.5 rip_input函数 842

32.6 rip_output函数 844

32.7 rip_usrreq函数 846

32.8 rip_ctloutput函数 850

32.9 小结 852

结束语 853

附录A 部分习题的解答 854

附录B 源代码的获取 872

附录C RFC 1122 的有关内容 874

参考文献 895

目 录

译者序

前言

第一部分 TCP事务协议

第1章 T/TCP概述 1

1.1 概述 1

1.2 UDP上的客户-服务器 1

1.3 TCP上的客户-服务器 6

1.4 T/TCP上的客户-服务器 12

1.5 测试网络 15

1.6 时间测量程序 15

1.7 应用 17

1.8 历史 19

1.9 实现 20

1.10 小结 21

第2章 T/TCP协议 23

2.1 概述 23

2.2 T/TCP中的新TCP选项 23

2.3 T/TCP实现所需变量 25

2.4 状态变迁图 27

2.5 T/TCP的扩展状态 28

2.6 小结 30

第3章 T/TCP使用举例 31

3.1 概述 31

3.2 客户重新启动 31

3.3 常规的T/TCP事务 33

3.4 服务器收到过时的重复SYN 34

3.5 服务器重启动 35

3.6 请求或应答超出报文段最大长度MSS 36

3.7 向后兼容性 39

3.8 小结 41

第4章 T/TCP协议(续) 43

4.1 概述 43

4.2 客户的端口号和TIME_WAIT状态 43

4.3 设置TIME_WAIT状态的目的 45

4.4 TIME_WAIT状态的截断 48

4.5 利用TAO跳过三次握手 51

4.6 小结 55

第5章 T/TCP协议的实现:插口层 56

5.1 概述 56

5.2 常量 56

5.3 sosend函数 56

5.4 小结 58

第6章 T/TCP的实现:路由表 59

6.1 概述 59

6.2 代码介绍 59

6.3 radix_node_head结构 60

6.4 rtentry结构 61

6.5 rt_metrics结构 61

6.6 in_inithead函数 61

6.7 in_addroute函数 62

6.8 in_matroute函数 63

6.9 in_clsroute函数 63

6.10 in_rtqtimo函数 64

6.11 in_rtqkill函数 66

6.12 小结 69

第7章 T/TCP实现:协议控制块 70

7.1 概述 70

7.2 in_pcbladdr函数 71

7.3 in_pcbconnect函数 71

7.4 小结 72

第8章 T/TCP实现: TCP概要 73

8.1 概述 73

8.2 代码介绍 73

8.3 TCP的protosw结构 74

8.4 TCP控制块 74

8.5 tcp_init函数 75

8.6 tcp_slowtimo函数 75

8.7 小结 76

第9章 T/TCP实现:TCP输出 77

9.1 概述 77

9.2 tcp_output函数 77

9.2.1 新的自动变量 77

9.2.2 增加隐藏的状态标志 77

9.2.3 在SYN_SENT状态不要重传SYN 78

9.2.4 发送器的糊涂窗口避免机制 78

9.2.5 有RST或SYN标志时强制发送报文段 79

9.2.6 发送MSS选项 80

9.2.7 是否发送时间戳选项 80

9.2.8 发送T/TCP的CC选项 80

9.2.9 根据TCP选项调整数据长度 83

9.3 小结 83

第10章 T/TCP实现:TCP函数 84

10.1 概述 84

10.2 tcp_newtcpcb函数 84

10.3 tcp_rtlookup函数 85

10.4 tcp_gettaocache函数 86

10.5 重传超时间隔的计算 86

10.6 tcp_close函数 89

10.7 tcp_msssend函数 90

10.8 tcp_mssrcvd函数 91

10.9 tcp_dooptions函数 96

10.10 tcp_reass函数 98

10.11 小结 99

第11章 T/TCP实现:TCP输入 101

11.1 概述 101

11.2 预处理 103

11.3 首部预测 104

11.4 被动打开的启动 105

11.5 主动打开的启动 108

11.6 PAWS:防止序号重复 114

11.7 ACK处理 115

11.8 完成被动打开和同时打开 115

11.9 ACK处理(续) 116

11.10 FIN处理 118

11.11 小结 119

第12章 T/TCP实现:TCP用户请求 120

12.1 概述 120

12.2 PRU_CONNECT请求 120

12.3 tcp_connect函数 120

12.4 PRU_SEND和PRU_SEND_EOF请求 124

12.5 tcp_usrclosed函数 125

12.6 tcp_sysctl函数 126

12.7 T/TCP的前景 126

12.8 小结 127

第二部分 TCP的其他应用

第13章 HTTP:超文本传送协议 129

13.1 概述 129

13.2 HTTP和HTML概述 130

13.3 HTTP 132

13.3.1 报文类型:请求与响应 132

13.3.2 首部字段 133

13.3.3 响应代码 133

13.3.4 各种报文头举例 134

13.3.5 例子:客户程序缓存 135

13.3.6 例子:服务器重定向 136

13.4 一个例子 136

13.5 HTTP的统计资料 138

13.6 性能问题 139

13.7 小结 141

第14章 在HTTP服务器上找到的分组 142

14.1 概述 142

14.2 多个HTTP服务器 144

14.3 客户端SYN的到达间隔时间 145

14.4 RTT的测量 149

14.5 用listen设置入连接队列的容量 150

14.6 客户端的SYN选项 154

14.7 客户端的SYN重传 156

14.8 域名 157

14.9 超时的持续探测 157

14.10 T/TCP路由表大小的模拟 160

14.11 mbuf的交互 162

14.12 TCP的PCB高速缓存和首部预测 163

14.13 小结 165

第15章 NNTP:网络新闻传送协议 166

15.1 概述 166

15.2 NNTP 167

15.3 一个简单的新闻客户 170

15.4 一个复杂的新闻客户 171

15.5 NNTP的统计资料 172

15.6 小结 173

第三部分 Unix域协议

第16章 Unix域协议:概述 175

16.1 概述 175

16.2 用途 176

16.3 性能 177

16.4 编码举例 177

16.5 小结 179

第17章 Unix域协议:实现 180

17.1 概述 180

17.2 代码介绍 180

17.3 Unix domain和protosw结构 181

17.4 Unix域插口地址结构 182

17.5 Unix域协议控制块 183

17.6 uipc_usrreq函数 185

17.7 PRU_ATTACH请求和unp_attach函数 186

17.8 PRU_DETACH请求和unp_detach函数 187

17.9 PRU_BIND请求和unp_bind函数 189

17.10 PRU_CONNECT请求和unp_connect

函数 191

17.11 PRU_CONNECT2请求和unp_connect2

函数 195

17.12 socketpair系统调用 198

17.13 pipe系统调用 202

17.14 PRU_ACCEPT请求 203

17.15 PRU_DISCONNECT请求和

unp_disconnect函数 204

17.16 PRU_SHUTDOWN请求和unp_shutdown

函数 205

17.17 PRU_ABORT请求和unp_drop函数 206

17.18 其他各种请求 207

17.19 小结 209

第18章 Unix域协议:I/O和描述符的传递 210

18.1 概述 210

18.2 PRU_SEND和PRU_RCVD请求 210

18.3 描述符的传递 214

18.4 unp_internalize函数 218

18.5 unp_externalize函数 220

18.6 unp_discard函数 221

18.7 unp_dispose函数 222

18.8 unp_scan函数 222

18.9 unp_gc函数 223

18.10 unp_mark函数 230

18.11 性能(再讨论) 231

18.12 小结 231

附录A 测量网络时间 232

附录B 编写T/TCP应用程序 242

参考文献 246

缩略语 251

【TCP/UDP】MSS和MTU、UDP报文、TCP报文、如何实现TCP的长连接、TCP的粘包问题如何解决等重点知识汇总

qq_68993495的博客

09-28

1029

这时,接收方的程序如果不知道发送方发送的消息的长度,也就是不知道消息的边界时,是无法读出一个有效的用户消息的,因为用户消息被拆分成多个 TCP 报文后,并不能像 UDP 那样,一个 UDP 报文就能代表一个完整的用户消息。数据分段:首先,数据报文被分割成多个16位的字(或者称为16位字,即两个字节),如果数据长度不是16位的整数倍,最后一个字节将被扩展为16位。求和:将这些16位字依次相加,形成一个32位的中间和,如果中间和的高16位不为0,将其加到低16位上,得到最终的16位和。

TCP 的 MTU & MSS

很长很长的专栏

07-05

4508

MTU:最大传输单元,大多数网络MTU是1500字节,有些网络启用了巨帧,能达到9000字节。MSS:最大分段大小(TCP数据包每次能够传输的最大报文段长度)

TCP不会简单地把数据一口气传给网络互联层,而是根据双方的MTU决定每次传多少,如果获得双方的MTU呢?三次握手时双方会把自己的MSS告诉对方,MSS+TCP头+IP头,就得到MTU了

151包里客户端声明mss是1460,意...

TCP 的那些事 | MTU

u014023993的专栏

12-16

2306

网络通信中,经常会遇到一个概念MTU,全称是Maximum Transmission Unit(最大传输单元)。那么什么是MTU,MTU的作用是什么,本文从最基本的概念出发,一步步讲起。

MTU是最大传输单元,针对的对象是以太网帧中的数据。MTU的确切意思就是以太网帧中数据的最大长度,注意,是以太帧中有效载荷的最大长度,不包括以太帧帧首尾部的长度。

以太网帧数据格式如下:

以太网帧数据格式...

关于报文长度的理解

weixin_33831196的博客

10-18

4400

为什么80%的码农都做不了架构师?>>>

...

TCP 超时时间设置过长或 MTU 设置不合理会导致网络速度变慢吗

weixin_35749440的博客

12-29

665

是的,TCP 超时时间设置过长或 MTU 设置不合理都可能导致网络速度变慢。

TCP 超时时间是指在发送数据之后,如果没有收到对端的应答,就会在超时时间后再次发送数据。如果超时时间设置过长,会导致发送数据的时间延长,从而使网络速度变慢。

MTU (Maximum Transmission Unit) 是指数据包中最大数据量,如果 MTU 设置过大,就会导致数据包中的数据量增加,从而增加了网络传输的...

PRACH_NRprach_nrMac帧长度_NR_PRACH_

10-03

NR逻辑信道与MAC层交互,关于MAC信道复用中令牌桶算法实现

TCPIP详解卷[1].part07

12-29

tcp ip 详解 入门 教程

该文件共分12个压缩包,必须下载到同一个文件夹后解压。

简介:

《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 本书适合作为计算机专业学生学习网络的教材和教师参考书。也适用于研究网络的技术人员。

目 录

译者序

前言

第1章 概述 1

1.1 引言 1

1.2 分层 1

1.3 TCP/IP的分层 4

1.4 互联网的地址 5

1.5 域名系统 6

1.6 封装 6

1.7 分用 8

1.8 客户-服务器模型 8

1.9 端口号 9

1.10 标准化过程 10

1.11 RFC 10

1.12 标准的简单服务 11

1.13 互联网 12

1.14 实现 12

1.15 应用编程接口 12

1.16 测试网络 13

1.17 小结 13

第2章 链路层 15

2.1 引言 15

2.2 以太网和IEEE 802封装 15

2.3 尾部封装 17

2.4 SLIP:串行线路IP 17

2.5 压缩的SLIP 18

2.6 PPP:点对点协议 18

2.7 环回接口 20

2.8 最大传输单元MTU 21

2.9 路径MTU 21

2.10 串行线路吞吐量计算 21

2.11 小结 22

第3章 IP:网际协议 24

3.1 引言 24

3.2 IP首部 24

3.3 IP路由选择 27

3.4 子网寻址 30

3.5 子网掩码 32

3.6 特殊情况的IP地址 33

3.7 一个子网的例子 33

3.8 ifconfig命令 35

3.9 netstat命令 36

3.10 IP的未来 36

3.11 小结 37

第4章 ARP:地址解析协议 38

4.1 引言 38

4.2 一个例子 38

4.3 ARP高速缓存 40

4.4 ARP的分组格式 40

4.5 ARP举例 41

4.5.1 一般的例子 41

4.5.2 对不存在主机的ARP请求 42

4.5.3 ARP高速缓存超时设置 43

4.6 ARP代理 43

4.7 免费ARP 45

4.8 arp命令 45

4.9 小结 46

第5章 RARP:逆地址解析协议 47

5.1 引言 47

5.2 RARP的分组格式 47

5.3 RARP举例 47

5.4 RARP服务器的设计 48

5.4.1 作为用户进程的RARP服务器 49

5.4.2 每个网络有多个RARP服务器 49

5.5 小结 49

第6章 ICMP:Internet控制报文协议 50

6.1 引言 50

6.2 ICMP报文的类型 50

6.3 ICMP地址掩码请求与应答 52

6.4 ICMP时间戳请求与应答 53

6.4.1 举例 54

6.4.2 另一种方法 55

6.5 ICMP端口不可达差错 56

6.6 ICMP报文的4.4BSD处理 59

6.7 小结 60

第7章 Ping程序 61

7.1 引言 61

7.2 Ping程序 61

7.2.1 LAN输出 62

7.2.2 WAN输出 63

7.2.3 线路SLIP链接 64

7.2.4 拨号SLIP链路 65

7.3 IP记录路由选项 65

7.3.1 通常的例子 66

7.3.2 异常的输出 68

7.4 IP时间戳选项 69

7.5 小结 70

第8章 Traceroute程序 71

8.1 引言 71

8.2 Traceroute 程序的操作 71

8.3 局域网输出 72

8.4 广域网输出 75

8.5 IP源站选路选项 76

8.5.1 宽松的源站选路的traceroute

程序示例 78

8.5.2 严格的源站选路的traceroute

程序示例 79

8.5.3 宽松的源站选路traceroute程序

的往返路由 80

8.6 小结 81

第9章 IP选路 83

9.1 引言 83

9.2 选路的原理 84

9.2.1 简单路由表 84

9.2.2 初始化路由表 86

9.2.3 较复杂的路由表 87

9.2.4 没有到达目的地的路由 87

9.3 ICMP主机与网络不可达差错 88

9.4 转发或不转发 89

9.5 ICMP重定向差错 89

9.5.1 一个例子 90

9.5.2 更多的细节 91

9.6 ICMP路由器发现报文 92

9.6.1 路由器操作 93

9.6.2 主机操作 93

9.6.3 实现 93

9.7 小结 94

第10章 动态选路协议 95

10.1 引言 95

10.2 动态选路 95

10.3 Unix选路守护程序 96

10.4 RIP:选路信息协议 96

10.4.1 报文格式 96

10.4.2 正常运行 97

10.4.3 度量 98

10.4.4 问题 98

10.4.5 举例 98

10.4.6 另一个例子 100

10.5 RIP版本2 102

10.6 OSPF:开放最短路径优先 102

10.7 BGP:边界网关协议 103

10.8 CIDR:无类型域间选路 104

10.9 小结 105

第11章 UDP:用户数据报协议 107

11.1 引言 107

11.2 UDP首部 107

11.3 UDP检验和 108

11.3.1 tcpdump输出 109

11.3.2 一些统计结果 109

11.4 一个简单的例子 110

11.5 IP分片 111

11.6 ICMP不可达差错(需要分片) 113

11.7 用Traceroute确定路径MTU 114

11.8 采用UDP的路径MTU发现 116

11.9 UDP和ARP之间的交互作用 118

11.10 最大UDP数据报长度 119

11.11 ICMP源站抑制差错 120

11.12 UDP服务器的设计 122

11.12.1 客户IP地址及端口号 122

11.12.2 目标IP地址 122

11.12.3 UDP输入队列 122

11.12.4 限制本地IP地址 124

11.12.5 限制远端IP地址 125

11.12.6 每个端口有多个接收者 125

11.13 小结 126

第12章 广播和多播 128

12.1 引言 128

12.2 广播 129

12.2.1 受限的广播 129

12.2.2 指向网络的广播 129

12.2.3 指向子网的广播 129

12.2.4 指向所有子网的广播 130

12.3 广播的例子 130

12.4 多播 132

12.4.1 多播组地址 133

12.4.2 多播组地址到以太网地址的转换 133

12.4.3 FDDI和令牌环网络中的多播 134

12.5 小结 134

第13章 IGMP:Internet组管理协议 136

13.1 引言 136

13.2 IGMP报文 136

13.3 IGMP协议 136

13.3.1 加入一个多播组 136

13.3.2 IGMP报告和查询 137

13.3.3 实现细节 137

13.3.4 生存时间字段 138

13.3.5 所有主机组 138

13.4 一个例子 138

13.5 小结 141

第14章 DNS:域名系统 142

14.1 引言 142

14.2 DNS基础 142

14.3 DNS的报文格式 144

14.3.1 DNS查询报文中的问题部分 146

14.3.2 DNS响应报文中的资源记录部分 147

14.4 一个简单的例子 147

14.5 指针查询 150

14.5.1 举例 151

14.5.2 主机名检查 151

14.6 资源记录 152

14.7 高速缓存 153

14.8 用UDP还是用TCP 156

14.9 另一个例子 156

14.10 小结 157

第15章 TFTP:简单文件传送协议 159

15.1 引言 159

15.2 协议 159

15.3 一个例子 160

15.4 安全性 161

15.5 小结 162

第16章 BOOTP: 引导程序协议 163

16.1 引言 163

16.2 BOOTP的分组格式 163

16.3 一个例子 164

16.4 BOOTP服务器的设计 165

16.5 BOOTP穿越路由器 167

16.6 特定厂商信息 167

16.7 小结 168

第17章 TCP:传输控制协议 170

17.1 引言 170

17.2 TCP的服务 170

17.3 TCP的首部 171

17.4 小结 173

第18章 TCP连接的建立与终止 174

18.1 引言 174

18.2 连接的建立与终止 174

18.2.1 tcpdump的输出 174

18.2.2 时间系列 175

18.2.3 建立连接协议 175

18.2.4 连接终止协议 177

18.2.5 正常的tcpdump输出 177

18.3 连接建立的超时 178

18.3.1 第一次超时时间 178

18.3.2 服务类型字段 179

18.4 最大报文段长度 179

18.5 TCP的半关闭 180

18.6 TCP的状态变迁图 182

18.6.1 2MSL等待状态 183

18.6.2 平静时间的概念 186

18.6.3 FIN_WAIT_2状态 186

18.7 复位报文段 186

18.7.1 到不存在的端口的连接请求 187

18.7.2 异常终止一个连接 187

18.7.3 检测半打开连接 188

18.8 同时打开 189

18.9 同时关闭 191

18.10 TCP选项 191

18.11 TCP服务器的设计 192

18.11.1 TCP服务器端口号 193

18.11.2 限定的本地IP地址 194

18.11.3 限定的远端IP地址 195

18.11.4 呼入连接请求队列 195

18.12 小结 197

第19章 TCP的交互数据流 200

19.1 引言 200

19.2 交互式输入 200

19.3 经受时延的确认 201

19.4 Nagle算法 203

19.4.1 关闭Nagle算法 204

19.4.2 一个例子 205

19.5 窗口大小通告 207

19.6 小结 208

第20章 TCP的成块数据流 209

20.1 引言 209

20.2 正常数据流 209

20.3 滑动窗口 212

20.4 窗口大小 214

20.5 PUSH标志 215

20.6 慢启动 216

20.7 成块数据的吞吐量 218

20.7.1 带宽时延乘积 220

20.7.2 拥塞 220

20.8 紧急方式 221

20.9 小结 224

第21章 TCP的超时与重传 226

21.1 引言 226

21.2 超时与重传的简单例子 226

21.3 往返时间测量 227

21.4 往返时间RTT的例子 229

21.4.1 往返时间RTT的测量 229

21.4.2 RTT估计器的计算 231

21.4.3 慢启动 233

21.5 拥塞举例 233

21.6 拥塞避免算法 235

21.7 快速重传与快速恢复算法 236

21.8 拥塞举例(续) 237

21.9 按每条路由进行度量 240

21.10 ICMP的差错 240

21.11 重新分组 243

21.12 小结 243

第22章 TCP的坚持定时器 245

22.1 引言 245

22.2 一个例子 245

22.3 糊涂窗口综合症 246

22.4 小结 250

第23章 TCP的保活定时器 251

23.1 引言 251

23.2 描述 252

23.3 保活举例 253

23.3.1 另一端崩溃 253

23.3.2 另一端崩溃并重新启动 254

23.3.3 另一端不可达 254

23.4 小结 255

第24章 TCP的未来和性能 256

24.1 引言 256

24.2 路径MTU发现 256

24.2.1 一个例子 257

24.2.2 大分组还是小分组 258

24.3 长肥管道 259

24.4 窗口扩大选项 262

24.5 时间戳选项 263

24.6 PAWS:防止回绕的序号 265

24.7 T/TCP:为事务用的TCP扩展 265

24.8 TCP的性能 267

24.9 小结 268

第25章 SNMP:简单网络管理协议 270

25.1 引言 270

25.2 协议 270

25.3 管理信息结构 272

25.4 对象标识符 274

25.5 管理信息库介绍 274

25.6 实例标识 276

25.6.1 简单变量 276

25.6.2 表格 276

25.6.3 字典式排序 277

25.7 一些简单的例子 277

25.7.1 简单变量 278

25.7.2 get-next操作 278

25.7.3 表格的访问 279

25.8 管理信息库(续) 279

25.8.1 system组 279

25.8.2 interface组 280

25.8.3 at组 281

25.8.4 ip组 282

25.8.5 icmp组 285

25.8.6 tcp组 285

25.9 其他一些例子 288

25.9.1 接口MTU 288

25.9.2 路由表 288

25.10 trap 290

25.11 ASN.1和BER 291

25.12 SNMPv2 292

25.13 小结 292

第26章 Telnet和Rlogin:远程登录 293

26.1 引言 293

26.2 Rlogin协议 294

26.2.1 应用进程的启动 295

26.2.2 流量控制 295

26.2.3 客户的中断键 296

26.2.4 窗口大小的改变 296

26.2.5 服务器到客户的命令 296

26.2.6 客户到服务器的命令 297

26.2.7 客户的转义符 298

26.3 Rlogin的例子 298

26.3.1 初始的客户-服务器协议 298

26.3.2 客户中断键 299

26.4 Telnet协议 302

26.4.1 NVT ASCII 302

26.4.2 Telnet命令 302

26.4.3 选项协商 303

26.4.4 子选项协商 304

26.4.5 半双工、一次一字符、一次

一行或行方式 304

26.4.6 同步信号 306

26.4.7 客户的转义符 306

26.5 Telnet举例 306

26.5.1 单字符方式 306

26.5.2 行方式 310

26.5.3 一次一行方式(准行方式) 312

26.5.4 行方式:客户中断键 313

26.6 小结 314

第27章 FTP:文件传送协议 316

27.1 引言 316

27.2 FTP协议 316

27.2.1 数据表示 316

27.2.2 FTP命令 318

27.2.3 FTP应答 319

27.2.4 连接管理 320

27.3 FTP的例子 321

27.3.1 连接管理:临时数据端口 321

27.3.2 连接管理:默认数据端口 323

27.3.3 文本文件传输:NVT ASCII

表示还是图像表示 325

27.3.4 异常中止一个文件的传输:

Telnet同步信号 326

27.3.5 匿名FTP 329

27.3.6 来自一个未知IP地址的匿名FTP 330

27.4 小结 331

第28章 SMTP:简单邮件传送协议 332

28.1 引言 332

28.2 SMTP协议 332

28.2.1 简单例子 332

28.2.2 SMTP命令 334

28.2.3 信封、首部和正文 335

28.2.4 中继代理 335

28.2.5 NVT ASCII 337

28.2.6 重试间隔 337

28.3 SMTP的例子 337

28.3.1 MX记录:主机非直接连到

Internet 337

28.3.2 MX记录:主机出故障 339

28.3.3 VRFY和EXPN命令 340

28.4 SMTP的未来 340

28.4.1 信封的变化:扩充的SMTP 341

28.4.2 首部变化:非ASCII字符 342

28.4.3 正文变化:通用Internet邮件

扩充 343

28.5 小结 346

第29章 网络文件系统 347

29.1 引言 347

29.2 Sun远程过程调用 347

29.3 XDR:外部数据表示 349

29.4 端口映射器 349

29.5 NFS协议 351

29.5.1 文件句柄 353

29.5.2 安装协议 353

29.5.3 NFS过程 354

29.5.4 UDP还是TCP 355

29.5.5 TCP上的NFS 355

29.6 NFS实例 356

29.6.1 简单的例子:读一个文件 356

29.6.2 简单的例子:创建一个目录 357

29.6.3 无状态 358

29.6.4 例子:服务器崩溃 358

29.6.5 等幂过程 360

29.7 第3版的NFS 360

29.8 小结 361

第30章 其他的TCP/IP应用程序 363

30.1 引言 363

30.2 Finger协议 363

30.3 Whois协议 364

30.4 Archie、WAIS、Gopher、Veronica

和WWW 366

30.4.1 Archie 366

30.4.2 WAIS 366

30.4.3 Gopher 366

30.4.4 Veronica 366

30.4.5 万维网WWW 367

30.5 X窗口系统 367

30.5.1 Xscope程序 368

30.5.2 LBX: 低带宽X 370

30.6 小结 370

附录A tcpdump程序 371

附录B 计算机时钟 376

附录C sock程序 378

附录D 部分习题的解答 381

附录E 配置选项 395

附录F 可以免费获得的源代码 406

参考文献 409

缩略语 420

目 录

译者序

前言

第1章 概述 1

1.1 引言 1

1.2 源代码表示 1

1.2.1 将拥塞窗口设置为1 1

1.2.2 印刷约定 2

1.3 历史 2

1.4 应用编程接口 3

1.5 程序示例 4

1.6 系统调用和库函数 6

1.7 网络实现概述 6

1.8 描述符 7

1.9 mbuf与输出处理 11

1.9.1 包含插口地址结构的mbuf 11

1.9.2 包含数据的mbuf 12

1.9.3 添加IP和UDP首部 13

1.9.4 IP输出 14

1.9.5 以太网输出 14

1.9.6 UDP输出小结 14

1.10 输入处理 15

1.10.1 以太网输入 15

1.10.2 IP输入 15

1.10.3 UDP输入 16

1.10.4 进程输入 17

1.11 网络实现概述(续) 17

1.12 中断级别与并发 18

1.13 源代码组织 20

1.14 测试网络 21

1.15 小结 22

第2章 mbuf:存储器缓存 24

2.1 引言 24

2.2 代码介绍 27

2.2.1 全局变量 27

2.2.2 统计 28

2.2.3 内核统计 28

2.3 mbuf的定义 29

2.4 mbuf结构 29

2.5 简单的mbuf宏和函数 31

2.5.1 m_get函数 32

2.5.2 MGET宏 32

2.5.3 m_retry函数 33

2.5.4 mbuf锁 34

2.6 m_devget和m_pullup函数 34

2.6.1 m_devget函数 34

2.6.2 mtod和dtom宏 36

2.6.3 m_pullup函数和连续的协议首部 36

2.6.4 m_pullup和IP的分片与重组 37

2.6.5 TCP重组避免调用m_pullup 39

2.6.6 m_pullup使用总结 40

2.7 mbuf宏和函数的小结 40

2.8 Net/3联网数据结构小结 42

2.9 m_copy和簇引用计数 43

2.10 其他选择 47

2.11 小结 47

第3章 接口层 49

3.1 引言 49

3.2 代码介绍 49

3.2.1 全局变量 49

3.2.2 SNMP变量 50

3.3 ifnet结构 51

3.4 ifaddr结构 57

3.5 sockaddr结构 58

3.6 ifnet与ifaddr的专用化 59

3.7 网络初始化概述 60

3.8 以太网初始化 61

3.9 SLIP初始化 64

3.10 环回初始化 65

3.11 if_attach函数 66

3.12 ifinit函数 72

3.13 小结 73

第4章 接口:以太网 74

4.1 引言 74

4.2 代码介绍 75

4.2.1 全局变量 75

4.2.2 统计量 75

4.2.3 SNMP变量 76

4.3 以太网接口 77

4.3.1 leintr函数 79

4.3.2 leread函数 79

4.3.3 ether_input函数 81

4.3.4 ether_output函数 84

4.3.5 lestart函数 87

4.4 ioctl系统调用 89

4.4.1 ifioctl函数 90

4.4.2 ifconf函数 91

4.4.3 举例 94

4.4.4 通用接口ioctl命令 95

4.4.5 if_down和if_up函数 96

4.4.6 以太网、SLIP和环回 97

4.5 小结 98

第5章 接口:SLIP和环回 100

5.1 引言 100

5.2 代码介绍 100

5.2.1 全局变量 100

5.2.2 统计量 101

5.3 SLIP接口 101

5.3.1 SLIP线路规程:SLIPDISC 101

5.3.2 SLIP初始化:slopen和slinit 103

5.3.3 SLIP输入处理:slinput 105

5.3.4 SLIP输出处理:sloutput 109

5.3.5 slstart函数 111

5.3.6 SLIP分组丢失 116

5.3.7 SLIP性能考虑 117

5.3.8 slclose函数 117

5.3.9 sltioctl函数 118

5.4 环回接口 119

5.5 小结 121

第6章 IP编址 123

6.1 引言 123

6.1.1 IP地址 123

6.1.2 IP地址的印刷规定 123

6.1.3 主机和路由器 124

6.2 代码介绍 125

6.3 接口和地址小结 125

6.4 sockaddr_in结构 126

6.5 in_ifaddr结构 127

6.6 地址指派 128

6.6.1 ifioctl函数 130

6.6.2 in_control函数 130

6.6.3 前提条件:SIOCSIFADDR、

SIOCSIFNETMASK和

SIOCSIFDSTADDR 132

6.6.4 地址指派:SIOCSIFADDR 133

6.6.5 in_ifinit函数 133

6.6.6 网络掩码指派:SIOCSIFNETMASK 136

6.6.7 目的地址指派:SIOCSIFDSTADDR 137

6.6.8 获取接口信息 137

6.6.9 每个接口多个IP地址 138

6.6.10 附加IP地址:SIOCAIFADDR 139

6.6.11 删除IP地址:SIOCDIFADDR 140

6.7 接口ioctl处理 141

6.7.1 leioctl函数 141

6.7.2 slioctl函数 142

6.7.3 loioctl函数 143

6.8 Internet实用函数 144

6.9 ifnet实用函数 144

6.10 小结 145

第7章 域和协议 146

7.1 引言 146

7.2 代码介绍 146

7.2.1 全局变量 147

7.2.2 统计量 147

7.3 domain结构 147

7.4 protosw结构 148

7.5 IP 的domain和protosw结构 150

7.6 pffindproto和pffindtype函数 155

7.7 pfctlinput函数 157

7.8 IP初始化 157

7.8.1 Internet传输分用 157

7.8.2 ip_init函数 158

7.9 sysctl系统调用 159

7.10 小结 161

第8章 IP:网际协议 162

8.1 引言 162

8.2 代码介绍 163

8.2.1 全局变量 163

8.2.2 统计量 163

8.2.3 SNMP变量 164

8.3 IP分组 165

8.4 输入处理:ipintr函数 167

8.4.1 ipintr概观 167

8.4.2 验证 168

8.4.3 转发或不转发 171

8.4.4 重装和分用 173

8.5 转发:ip_forward函数 174

8.6 输出处理:ip_output函数 180

8.6.1 首部初始化 181

8.6.2 路由选择 182

8.6.3 源地址选择和分片 184

8.7 Internet检验和:in_cksum函数 186

8.8 setsockopt和getsockopt系统调用 190

8.8.1 PRCO_SETOPT的处理 192

8.8.2 PRCO_GETOPT的处理 193

8.9 ip_sysctl函数 193

8.10 小结 194

第9章 IP选项处理 196

9.1 引言 196

9.2 代码介绍 196

9.2.1 全局变量 196

9.2.2 统计量 197

9.3 选项格式 197

9.4 ip_dooptions函数 198

9.5 记录路由选项 200

9.6 源站和记录路由选项 202

9.6.1 save_rte函数 205

9.6.2 ip_srcroute函数 206

9.7 时间戳选项 207

9.8 ip_insertoptions函数 210

9.9 ip_pcbopts函数 214

9.10 一些限制 217

9.11 小结 217

第10章 IP的分片与重装 218

10.1 引言 218

10.2 代码介绍 219

10.2.1 全局变量 220

10.2.2 统计量 220

10.3 分片 220

10.4 ip_optcopy函数 223

10.5 重装 224

10.6 ip_reass函数 227

10.7 ip_slowtimo函数 237

10.8 小结 238

第11章 ICMP:Internet控制报文协议 239

11.1 引言 239

11.2 代码介绍 242

11.2.1 全局变量 242

11.2.2 统计量 242

11.2.3 SNMP变量 243

11.3 icmp结构 244

11.4 ICMP 的protosw结构 245

11.5 输入处理:icmp_input函数 246

11.6 差错处理 249

11.7 请求处理 251

11.7.1 回显询问:ICMP_ECHO和

ICMP_ECHOREPLY 252

11.7.2 时间戳询问:ICMP_TSTAMP和

ICMP_TSTAMPREPLY 253

11.7.3 地址掩码询问:ICMP_MASKREQ和

ICMP_MASKREPLY 253

11.7.4 信息询问:ICMP_IREQ和ICMP_

IREQREPLY 255

11.7.5 路由器发现:ICMP_ROUTERADVERT

和ICMP_ROUTERSOLICIT 255

11.8 重定向处理 255

11.9 回答处理 257

11.10 输出处理 257

11.11 icmp_error函数 258

11.12 icmp_reflect函数 261

11.13 icmp_send函数 265

11.14 icmp_sysctl函数 266

11.15 小结 266

第12章 IP多播 268

12.1 引言 268

12.2 代码介绍 269

12.2.1 全局变量 270

12.2.2 统计量 270

12.3 以太网多播地址 270

12.4 ether_multi结构 271

12.5 以太网多播接收 273

12.6 in_multi结构 273

12.7 ip_moptions结构 275

12.8 多播的插口选项 276

12.9 多播的TTL值 277

12.9.1 MBONE 278

12.9.2 扩展环搜索 278

12.10 ip_setmoptions函数 278

12.10.1 选择一个明确的多播接口:IP_

MULTICAST_IF 280

12.10.2 选择明确的多播TTL: IP_

MULTICAST_TTL 281

12.10.3 选择多播环回:IP_MULTICAST_

LOOP 281

12.11 加入一个IP多播组 282

12.11.1 in_addmulti函数 285

12.11.2 slioctl和loioctl函数:SIOCADDMULTI和SIOCDELMULTI 287

12.11.3 leioctl函数:SIOCADDMULTI和

SIOCDELMULTI 288

12.11.4 ether_addmulti函数 288

12.12 离开一个IP多播组 291

12.12.1 in_delmulti函数 292

12.12.2 ether_delmulti函数 293

12.13 ip_getmoptions函数 295

12.14 多播输入处理:ipintr函数 296

12.15 多播输出处理:ip_output函数 298

12.16 性能的考虑 301

12.17 小结 301

第13章 IGMP:Internet组管理协议 303

13.1 引言 303

13.2 代码介绍 304

13.2.1 全局变量 304

13.2.2 统计量 304

13.2.3 SNMP变量 305

13.3 igmp结构 305

13.4 IGMP的protosw的结构 306

13.5 加入一个组:igmp_joingroup函数 306

13.6 igmp_fasttimo函数 308

13.7 输入处理:igmp_input函数 311

13.7.1 成员关系查询:IGMP_HOST_

MEMBERSHIP_QUERY 312

13.7.2 成员关系报告:IGMP_HOST_

MEMBERSHIP_REPORT 313

13.8 离开一个组:igmp_leavegroup函数 314

13.9 小结 315

第14章 IP多播选路 316

14.1 引言 316

14.2 代码介绍 316

14.2.1 全局变量 316

14.2.2 统计量 317

14.2.3 SNMP变量 317

14.3 多播输出处理(续) 317

14.4 mrouted守护程序 318

14.5 虚拟接口 321

14.5.1 虚拟接口表 322

14.5.2 add_vif函数 324

14.5.3 del_vif函数 326

14.6 IGMP(续) 327

14.6.1 add_lgrp函数 328

14.6.2 del_lgrp函数 329

14.6.3 grplst_member函数 330

14.7 多播选路 331

14.7.1 多播选路表 334

14.7.2 del_mrt函数 335

14.7.3 add_mrt函数 336

14.7.4 mrtfind函数 337

14.8 多播转发:ip_mforward函数 338

14.8.1 phyint_send函数 343

14.8.2 tunnel_send函数 344

14.9 清理:ip_mrouter_done函数 345

14.10 小结 346

第15章 插口层 348

15.1 引言 348

15.2 代码介绍 349

15.3 socket结构 349

15.4 系统调用 354

15.4.1 举例 355

15.4.2 系统调用小结 355

15.5 进程、描述符和插口 357

15.6 socket系统调用 358

15.6.1 socreate函数 359

15.6.2 超级用户特权 361

15.7 getsock和sockargs函数 361

15.8 bind系统调用 363

15.9 listen系统调用 364

15.10 tsleep和wakeup函数 365

15.11 accept系统调用 366

15.12 sonewconn和soisconnected

函数 369

15.13 connect系统调用 372

15.13.1 soconnect函数 374

15.13.2 切断无连接插口和外部地址的

关联 375

15.14 shutdown系统调用 375

15.15 close系统调用 377

15.15.1 soo_close函数 377

15.15.2 soclose函数 378

15.16 小结 380

第16章 插口I/O 381

16.1 引言 381

16.2 代码介绍 381

16.3 插口缓存 381

16.4 write、writev、sendto和sendmsg

系统调用 384

16.5 sendmsg系统调用 387

16.6 sendit函数 388

16.6.1 uiomove函数 389

16.6.2 举例 390

16.6.3 sendit代码 391

16.7 sosend函数 392

16.7.1 可靠的协议缓存 393

16.7.2 不可靠的协议缓存 393

16.7.3 sosend函数小结 401

16.7.4 性能问题 401

16.8 read、readv、recvfrom和recvmsg

系统调用 401

16.9 recvmsg系统调用 402

16.10 recvit函数 403

16.11 soreceive函数 405

16.11.1 带外数据 406

16.11.2 举例 406

16.11.3 其他的接收操作选项 407

16.11.4 接收缓存的组织:报文边界 407

16.11.5 接收缓存的组织:没有报文边界 408

16.11.6 控制信息和带外数据 409

16.12 soreceive代码 410

16.13 select系统调用 421

16.13.1 selscan函数 425

16.13.2 soo_select函数 425

16.13.3 selrecord函数 427

16.13.4 selwakeup函数 428

16.14 小结 429

第17章 插口选项 431

17.1 引言 431

17.2 代码介绍 431

17.3 setsockopt系统调用 432

17.4 getsockopt系统调用 437

17.5 fcntl和ioctl系统调用 440

17.5.1 fcntl代码 441

17.5.2 ioctl代码 443

17.6 getsockname系统调用 444

17.7 getpeername系统调用 445

17.8 小结 447

第18章 Radix树路由表 448

18.1 引言 448

18.2 路由表结构 448

18.3 选路插口 456

18.4 代码介绍 456

18.4.1 全局变量 458

18.4.2 统计量 458

18.4.3 SNMP变量 459

18.5 Radix结点数据结构 460

18.6 选路结构 463

18.7 初始化:route_init和rtable_init

函数 465

18.8 初始化:rn_init和rn_inithead

函数 468

18.9 重复键和掩码列表 471

18.10 rn_match函数 473

18.11 rn_search函数 480

18.12 小结 481

第19章 选路请求和选路消息 482

19.1 引言 482

19.2 rtalloc和rtalloc1函数 482

19.3 宏RTFREE和rtfree函数 484

19.4 rtrequest函数 486

19.5 rt_setgate函数 491

19.6 rtinit函数 493

19.7 rtredirect函数 495

19.8 选路消息的结构 498

19.9 rt_missmsg函数 501

19.10 rt_ifmsg函数 503

19.11 rt_newaddrmsg函数 504

19.12 rt_msg1函数 505

19.13 rt_msg2函数 507

19.14 sysctl_rtable函数 510

19.15 sysctl_dumpentry函数 514

19.16 sysctl_iflist函数 515

19.17 小结 517

第20章 选路插口 518

20.1 引言 518

20.2 routedomain和protosw结构 518

20.3 选路控制块 519

20.4 raw_init函数 520

20.5 route_output函数 520

20.6 rt_xaddrs函数 530

20.7 rt_setmetrics函数 531

20.8 raw_input函数 532

20.9 route_usrreq函数 534

20.10 raw_usrreq函数 535

20.11 raw_attach、raw_detach和raw_disconnect函数 539

20.12 小结 540

第21章 ARP:地址解析协议 542

21.1 介绍 542

21.2 ARP和路由表 542

21.3 代码介绍 544

21.3.1 全局变量 544

21.3.2 统计量 544

21.3.3 SNMP变量 546

21.4 ARP结构 546

21.5 arpwhohas函数 548

21.6 arprequest函数 548

21.7 arpintr函数 551

21.8 in_arpinput函数 552

21.9 ARP定时器函数 557

21.9.1 arptimer函数 557

21.9.2 arptfree函数 557

21.10 arpresolve函数 558

21.11 arplookup函数 562

21.12 代理ARP 563

21.13 arp_rtrequest函数 564

21.14 ARP和多播 569

21.15 小结 570

第22章 协议控制块 572

22.1 引言 572

22.2 代码介绍 573

22.2.1 全局变量 574

22.2.2 统计量 574

22.3 inpcb的结构 574

22.4 in_pcballoc和in_pcbdetach函数 575

22.5 绑定、连接和分用 577

22.6 in_pcblookup函数 581

22.7 in_pcbbind函数 584

22.8 in_pcbconnect函数 589

22.9 in_pcbdisconnect函数 594

22.10 in_setsockaddr和in_setpeeraddr

函数 595

22.11 in_pcbnotify、in_rtchange和in_losing函数 595

22.11.1 in_rtchange函数 598

22.11.2 重定向和原始插口 599

22.11.3 ICMP差错和UDP插口 600

22.11.4 in_losing函数 601

22.12 实现求精 602

22.13 小结 602

第23章 UDP:用户数据报协议 605

23.1 引言 605

23.2 代码介绍 605

23.2.1 全局变量 606

23.2.2 统计量 606

23.2.3 SNMP变量 607

23.3 UDP 的protosw结构 607

23.4 UDP的首部 608

23.5 udp_init函数 609

23.6 udp_output函数 609

23.6.1 在前面加上IP/UDP首部和mbuf簇 612

23.6.2 UDP检验和计算和伪首部 612

23.7 udp_input函数 616

23.7.1 对收到的UDP数据报的一般确认 616

23.7.2 分用单播数据报 619

23.7.3 分用多播和广播数据报 622

23.7.4 连接上的UDP插口和多接口主机 625

23.8 udp_saveopt函数 625

23.9 udp_ctlinput函数 627

23.10 udp_usrreq函数 628

23.11 udp_sysctl函数 633

23.12 实现求精 633

23.12.1 UDP PCB高速缓存 633

23.12.2 UDP检验和 634

23.13 小结 635

第24章 TCP:传输控制协议 636

24.1 引言 636

24.2 代码介绍 636

24.2.1 全局变量 636

24.2.2 统计量 637

24.2.3 SNMP变量 640

24.3 TCP 的protosw结构 641

24.4 TCP的首部 641

24.5 TCP的控制块 643

24.6 TCP的状态变迁图 645

24.7 TCP的序号 646

24.8 tcp_init函数 650

24.9 小结 652

第25章 TCP的定时器 654

25.1 引言 654

25.2 代码介绍 655

25.3 tcp_canceltimers函数 657

25.4 tcp_fasttimo函数 657

25.5 tcp_slowtimo函数 658

25.6 tcp_timers函数 659

25.6.1 FIN_WAIT_2和2MSL定时器 660

25.6.2 持续定时器 662

25.6.3 连接建立定时器和保活定时器 662

25.7 重传定时器的计算 665

25.8 tcp_newtcpcb算法 666

25.9 tcp_setpersist函数 668

25.10 tcp_xmit_timer函数 669

25.11 重传超时:tcp_timers函数 673

25.11.1 慢起动和避免拥塞 675

25.11.2 精确性 677

25.12 一个RTT的例子 677

25.13 小结 679

第26章 TCP输出 680

26.1 引言 680

26.2 tcp_output概述 680

26.3 决定是否应发送一个报文段 682

26.4 TCP选项 691

26.5 窗口大小选项 692

26.6 时间戳选项 692

26.6.1 哪个时间戳需要回显,RFC1323

算法 694

26.6.2 哪个时间戳需要回显,正确的

算法 695

26.6.3 时间戳与延迟ACK 695

26.7 发送一个报文段 696

26.8 tcp_template函数 707

26.9 tcp_respond函数 708

26.10 小结 710

第27章 TCP的函数 712

27.1 引言 712

27.2 tcp_drain函数 712

27.3 tcp_drop函数 712

27.4 tcp_close函数 713

27.4.1 路由特性 713

27.4.2 资源释放 716

27.5 tcp_mss函数 717

27.6 tcp_ctlinput函数 722

27.7 tcp_notify函数 723

27.8 tcp_quench函数 724

27.9 TCP_REASS宏和tcp_reass函数 724

27.9.1 TCP_REASS宏 725

27.9.2 tcp_reass函数 727

27.10 tcp_trace函数 732

27.11 小结 736

第28章 TCP的输入 737

28.1 引言 737

28.2 预处理 739

28.3 tcp_dooptions函数 745

28.4 首部预测 747

28.5 TCP输入:缓慢的执行路径 752

28.6 完成被动打开或主动打开 752

28.6.1 完成被动打开 753

28.6.2 完成主动打开 756

28.7 PAWS:防止序号回绕 760

28.8 裁剪报文段使数据在窗口内 762

28.9 自连接和同时打开 768

28.10 记录时间戳 770

28.11 RST处理 770

28.12 小结 772

第29章 TCP的输入(续) 773

29.1 引言 773

29.2 ACK处理概述 773

29.3 完成被动打开和同时打开 774

29.4 快速重传和快速恢复的算法 775

29.5 ACK处理 778

29.6 更新窗口信息 784

29.7 紧急方式处理 786

29.8 tcp_pulloutofband函数 788

29.9 处理已接收的数据 789

29.10 FIN处理 791

29.11 最后的处理 793

29.12 实现求精 795

29.13 首部压缩 795

29.13.1 引言 796

29.13.2 首部字段的压缩 799

29.13.3 特殊情况 801

29.13.4 实例 802

29.13.5 配置 803

29.14 小结 803

第30章 TCP的用户需求 805

30.1 引言 805

30.2 tcp_usrreq函数 805

30.3 tcp_attach函数 814

30.4 tcp_disconnect函数 815

30.5 tcp_usrclosed函数 816

30.6 tcp_ctloutput函数 817

30.7 小结 820

第31章 BPF:BSD 分组过滤程序 821

31.1 引言 821

31.2 代码介绍 821

31.2.1 全局变量 821

31.2.2 统计量 822

31.3 bpf_if结构 822

31.4 bpf_d结构 825

31.4.1 bpfopen函数 826

31.4.2 bpfioctl函数 827

31.4.3 bpf_setif函数 830

31.4.4 bpf_attachd函数 831

31.5 BPF的输入 832

31.5.1 bpf_tap函数 832

31.5.2 catchpacket函数 833

31.5.3 bpfread函数 835

31.6 BPF的输出 837

31.7 小结 838

第32章 原始IP 839

32.1 引言 839

32.2 代码介绍 839

32.2.1 全局变量 839

32.2.2 统计量 840

32.3 原始 IP的protosw结构 840

32.4 rip_init函数 842

32.5 rip_input函数 842

32.6 rip_output函数 844

32.7 rip_usrreq函数 846

32.8 rip_ctloutput函数 850

32.9 小结 852

结束语 853

附录A 部分习题的解答 854

附录B 源代码的获取 872

附录C RFC 1122 的有关内容 874

参考文献 895

目 录

译者序

前言

第一部分 TCP事务协议

第1章 T/TCP概述 1

1.1 概述 1

1.2 UDP上的客户-服务器 1

1.3 TCP上的客户-服务器 6

1.4 T/TCP上的客户-服务器 12

1.5 测试网络 15

1.6 时间测量程序 15

1.7 应用 17

1.8 历史 19

1.9 实现 20

1.10 小结 21

第2章 T/TCP协议 23

2.1 概述 23

2.2 T/TCP中的新TCP选项 23

2.3 T/TCP实现所需变量 25

2.4 状态变迁图 27

2.5 T/TCP的扩展状态 28

2.6 小结 30

第3章 T/TCP使用举例 31

3.1 概述 31

3.2 客户重新启动 31

3.3 常规的T/TCP事务 33

3.4 服务器收到过时的重复SYN 34

3.5 服务器重启动 35

3.6 请求或应答超出报文段最大长度MSS 36

3.7 向后兼容性 39

3.8 小结 41

第4章 T/TCP协议(续) 43

4.1 概述 43

4.2 客户的端口号和TIME_WAIT状态 43

4.3 设置TIME_WAIT状态的目的 45

4.4 TIME_WAIT状态的截断 48

4.5 利用TAO跳过三次握手 51

4.6 小结 55

第5章 T/TCP协议的实现:插口层 56

5.1 概述 56

5.2 常量 56

5.3 sosend函数 56

5.4 小结 58

第6章 T/TCP的实现:路由表 59

6.1 概述 59

6.2 代码介绍 59

6.3 radix_node_head结构 60

6.4 rtentry结构 61

6.5 rt_metrics结构 61

6.6 in_inithead函数 61

6.7 in_addroute函数 62

6.8 in_matroute函数 63

6.9 in_clsroute函数 63

6.10 in_rtqtimo函数 64

6.11 in_rtqkill函数 66

6.12 小结 69

第7章 T/TCP实现:协议控制块 70

7.1 概述 70

7.2 in_pcbladdr函数 71

7.3 in_pcbconnect函数 71

7.4 小结 72

第8章 T/TCP实现: TCP概要 73

8.1 概述 73

8.2 代码介绍 73

8.3 TCP的protosw结构 74

8.4 TCP控制块 74

8.5 tcp_init函数 75

8.6 tcp_slowtimo函数 75

8.7 小结 76

第9章 T/TCP实现:TCP输出 77

9.1 概述 77

9.2 tcp_output函数 77

9.2.1 新的自动变量 77

9.2.2 增加隐藏的状态标志 77

9.2.3 在SYN_SENT状态不要重传SYN 78

9.2.4 发送器的糊涂窗口避免机制 78

9.2.5 有RST或SYN标志时强制发送报文段 79

9.2.6 发送MSS选项 80

9.2.7 是否发送时间戳选项 80

9.2.8 发送T/TCP的CC选项 80

9.2.9 根据TCP选项调整数据长度 83

9.3 小结 83

第10章 T/TCP实现:TCP函数 84

10.1 概述 84

10.2 tcp_newtcpcb函数 84

10.3 tcp_rtlookup函数 85

10.4 tcp_gettaocache函数 86

10.5 重传超时间隔的计算 86

10.6 tcp_close函数 89

10.7 tcp_msssend函数 90

10.8 tcp_mssrcvd函数 91

10.9 tcp_dooptions函数 96

10.10 tcp_reass函数 98

10.11 小结 99

第11章 T/TCP实现:TCP输入 101

11.1 概述 101

11.2 预处理 103

11.3 首部预测 104

11.4 被动打开的启动 105

11.5 主动打开的启动 108

11.6 PAWS:防止序号重复 114

11.7 ACK处理 115

11.8 完成被动打开和同时打开 115

11.9 ACK处理(续) 116

11.10 FIN处理 118

11.11 小结 119

第12章 T/TCP实现:TCP用户请求 120

12.1 概述 120

12.2 PRU_CONNECT请求 120

12.3 tcp_connect函数 120

12.4 PRU_SEND和PRU_SEND_EOF请求 124

12.5 tcp_usrclosed函数 125

12.6 tcp_sysctl函数 126

12.7 T/TCP的前景 126

12.8 小结 127

第二部分 TCP的其他应用

第13章 HTTP:超文本传送协议 129

13.1 概述 129

13.2 HTTP和HTML概述 130

13.3 HTTP 132

13.3.1 报文类型:请求与响应 132

13.3.2 首部字段 133

13.3.3 响应代码 133

13.3.4 各种报文头举例 134

13.3.5 例子:客户程序缓存 135

13.3.6 例子:服务器重定向 136

13.4 一个例子 136

13.5 HTTP的统计资料 138

13.6 性能问题 139

13.7 小结 141

第14章 在HTTP服务器上找到的分组 142

14.1 概述 142

14.2 多个HTTP服务器 144

14.3 客户端SYN的到达间隔时间 145

14.4 RTT的测量 149

14.5 用listen设置入连接队列的容量 150

14.6 客户端的SYN选项 154

14.7 客户端的SYN重传 156

14.8 域名 157

14.9 超时的持续探测 157

14.10 T/TCP路由表大小的模拟 160

14.11 mbuf的交互 162

14.12 TCP的PCB高速缓存和首部预测 163

14.13 小结 165

第15章 NNTP:网络新闻传送协议 166

15.1 概述 166

15.2 NNTP 167

15.3 一个简单的新闻客户 170

15.4 一个复杂的新闻客户 171

15.5 NNTP的统计资料 172

15.6 小结 173

第三部分 Unix域协议

第16章 Unix域协议:概述 175

16.1 概述 175

16.2 用途 176

16.3 性能 177

16.4 编码举例 177

16.5 小结 179

第17章 Unix域协议:实现 180

17.1 概述 180

17.2 代码介绍 180

17.3 Unix domain和protosw结构 181

17.4 Unix域插口地址结构 182

17.5 Unix域协议控制块 183

17.6 uipc_usrreq函数 185

17.7 PRU_ATTACH请求和unp_attach函数 186

17.8 PRU_DETACH请求和unp_detach函数 187

17.9 PRU_BIND请求和unp_bind函数 189

17.10 PRU_CONNECT请求和unp_connect

函数 191

17.11 PRU_CONNECT2请求和unp_connect2

函数 195

17.12 socketpair系统调用 198

17.13 pipe系统调用 202

17.14 PRU_ACCEPT请求 203

17.15 PRU_DISCONNECT请求和

unp_disconnect函数 204

17.16 PRU_SHUTDOWN请求和unp_shutdown

函数 205

17.17 PRU_ABORT请求和unp_drop函数 206

17.18 其他各种请求 207

17.19 小结 209

第18章 Unix域协议:I/O和描述符的传递 210

18.1 概述 210

18.2 PRU_SEND和PRU_RCVD请求 210

18.3 描述符的传递 214

18.4 unp_internalize函数 218

18.5 unp_externalize函数 220

18.6 unp_discard函数 221

18.7 unp_dispose函数 222

18.8 unp_scan函数 222

18.9 unp_gc函数 223

18.10 unp_mark函数 230

18.11 性能(再讨论) 231

18.12 小结 231

附录A 测量网络时间 232

附录B 编写T/TCP应用程序 242

参考文献 246

缩略语 251

TCPIP详解卷[1].part10

12-29

tcp ip 详解 入门 教程

该文件共分12个压缩包,必须下载到同一个文件夹后解压。

简介:

《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 本书适合作为计算机专业学生学习网络的教材和教师参考书。也适用于研究网络的技术人员。

目 录

译者序

前言

第1章 概述 1

1.1 引言 1

1.2 分层 1

1.3 TCP/IP的分层 4

1.4 互联网的地址 5

1.5 域名系统 6

1.6 封装 6

1.7 分用 8

1.8 客户-服务器模型 8

1.9 端口号 9

1.10 标准化过程 10

1.11 RFC 10

1.12 标准的简单服务 11

1.13 互联网 12

1.14 实现 12

1.15 应用编程接口 12

1.16 测试网络 13

1.17 小结 13

第2章 链路层 15

2.1 引言 15

2.2 以太网和IEEE 802封装 15

2.3 尾部封装 17

2.4 SLIP:串行线路IP 17

2.5 压缩的SLIP 18

2.6 PPP:点对点协议 18

2.7 环回接口 20

2.8 最大传输单元MTU 21

2.9 路径MTU 21

2.10 串行线路吞吐量计算 21

2.11 小结 22

第3章 IP:网际协议 24

3.1 引言 24

3.2 IP首部 24

3.3 IP路由选择 27

3.4 子网寻址 30

3.5 子网掩码 32

3.6 特殊情况的IP地址 33

3.7 一个子网的例子 33

3.8 ifconfig命令 35

3.9 netstat命令 36

3.10 IP的未来 36

3.11 小结 37

第4章 ARP:地址解析协议 38

4.1 引言 38

4.2 一个例子 38

4.3 ARP高速缓存 40

4.4 ARP的分组格式 40

4.5 ARP举例 41

4.5.1 一般的例子 41

4.5.2 对不存在主机的ARP请求 42

4.5.3 ARP高速缓存超时设置 43

4.6 ARP代理 43

4.7 免费ARP 45

4.8 arp命令 45

4.9 小结 46

第5章 RARP:逆地址解析协议 47

5.1 引言 47

5.2 RARP的分组格式 47

5.3 RARP举例 47

5.4 RARP服务器的设计 48

5.4.1 作为用户进程的RARP服务器 49

5.4.2 每个网络有多个RARP服务器 49

5.5 小结 49

第6章 ICMP:Internet控制报文协议 50

6.1 引言 50

6.2 ICMP报文的类型 50

6.3 ICMP地址掩码请求与应答 52

6.4 ICMP时间戳请求与应答 53

6.4.1 举例 54

6.4.2 另一种方法 55

6.5 ICMP端口不可达差错 56

6.6 ICMP报文的4.4BSD处理 59

6.7 小结 60

第7章 Ping程序 61

7.1 引言 61

7.2 Ping程序 61

7.2.1 LAN输出 62

7.2.2 WAN输出 63

7.2.3 线路SLIP链接 64

7.2.4 拨号SLIP链路 65

7.3 IP记录路由选项 65

7.3.1 通常的例子 66

7.3.2 异常的输出 68

7.4 IP时间戳选项 69

7.5 小结 70

第8章 Traceroute程序 71

8.1 引言 71

8.2 Traceroute 程序的操作 71

8.3 局域网输出 72

8.4 广域网输出 75

8.5 IP源站选路选项 76

8.5.1 宽松的源站选路的traceroute

程序示例 78

8.5.2 严格的源站选路的traceroute

程序示例 79

8.5.3 宽松的源站选路traceroute程序

的往返路由 80

8.6 小结 81

第9章 IP选路 83

9.1 引言 83

9.2 选路的原理 84

9.2.1 简单路由表 84

9.2.2 初始化路由表 86

9.2.3 较复杂的路由表 87

9.2.4 没有到达目的地的路由 87

9.3 ICMP主机与网络不可达差错 88

9.4 转发或不转发 89

9.5 ICMP重定向差错 89

9.5.1 一个例子 90

9.5.2 更多的细节 91

9.6 ICMP路由器发现报文 92

9.6.1 路由器操作 93

9.6.2 主机操作 93

9.6.3 实现 93

9.7 小结 94

第10章 动态选路协议 95

10.1 引言 95

10.2 动态选路 95

10.3 Unix选路守护程序 96

10.4 RIP:选路信息协议 96

10.4.1 报文格式 96

10.4.2 正常运行 97

10.4.3 度量 98

10.4.4 问题 98

10.4.5 举例 98

10.4.6 另一个例子 100

10.5 RIP版本2 102

10.6 OSPF:开放最短路径优先 102

10.7 BGP:边界网关协议 103

10.8 CIDR:无类型域间选路 104

10.9 小结 105

第11章 UDP:用户数据报协议 107

11.1 引言 107

11.2 UDP首部 107

11.3 UDP检验和 108

11.3.1 tcpdump输出 109

11.3.2 一些统计结果 109

11.4 一个简单的例子 110

11.5 IP分片 111

11.6 ICMP不可达差错(需要分片) 113

11.7 用Traceroute确定路径MTU 114

11.8 采用UDP的路径MTU发现 116

11.9 UDP和ARP之间的交互作用 118

11.10 最大UDP数据报长度 119

11.11 ICMP源站抑制差错 120

11.12 UDP服务器的设计 122

11.12.1 客户IP地址及端口号 122

11.12.2 目标IP地址 122

11.12.3 UDP输入队列 122

11.12.4 限制本地IP地址 124

11.12.5 限制远端IP地址 125

11.12.6 每个端口有多个接收者 125

11.13 小结 126

第12章 广播和多播 128

12.1 引言 128

12.2 广播 129

12.2.1 受限的广播 129

12.2.2 指向网络的广播 129

12.2.3 指向子网的广播 129

12.2.4 指向所有子网的广播 130

12.3 广播的例子 130

12.4 多播 132

12.4.1 多播组地址 133

12.4.2 多播组地址到以太网地址的转换 133

12.4.3 FDDI和令牌环网络中的多播 134

12.5 小结 134

第13章 IGMP:Internet组管理协议 136

13.1 引言 136

13.2 IGMP报文 136

13.3 IGMP协议 136

13.3.1 加入一个多播组 136

13.3.2 IGMP报告和查询 137

13.3.3 实现细节 137

13.3.4 生存时间字段 138

13.3.5 所有主机组 138

13.4 一个例子 138

13.5 小结 141

第14章 DNS:域名系统 142

14.1 引言 142

14.2 DNS基础 142

14.3 DNS的报文格式 144

14.3.1 DNS查询报文中的问题部分 146

14.3.2 DNS响应报文中的资源记录部分 147

14.4 一个简单的例子 147

14.5 指针查询 150

14.5.1 举例 151

14.5.2 主机名检查 151

14.6 资源记录 152

14.7 高速缓存 153

14.8 用UDP还是用TCP 156

14.9 另一个例子 156

14.10 小结 157

第15章 TFTP:简单文件传送协议 159

15.1 引言 159

15.2 协议 159

15.3 一个例子 160

15.4 安全性 161

15.5 小结 162

第16章 BOOTP: 引导程序协议 163

16.1 引言 163

16.2 BOOTP的分组格式 163

16.3 一个例子 164

16.4 BOOTP服务器的设计 165

16.5 BOOTP穿越路由器 167

16.6 特定厂商信息 167

16.7 小结 168

第17章 TCP:传输控制协议 170

17.1 引言 170

17.2 TCP的服务 170

17.3 TCP的首部 171

17.4 小结 173

第18章 TCP连接的建立与终止 174

18.1 引言 174

18.2 连接的建立与终止 174

18.2.1 tcpdump的输出 174

18.2.2 时间系列 175

18.2.3 建立连接协议 175

18.2.4 连接终止协议 177

18.2.5 正常的tcpdump输出 177

18.3 连接建立的超时 178

18.3.1 第一次超时时间 178

18.3.2 服务类型字段 179

18.4 最大报文段长度 179

18.5 TCP的半关闭 180

18.6 TCP的状态变迁图 182

18.6.1 2MSL等待状态 183

18.6.2 平静时间的概念 186

18.6.3 FIN_WAIT_2状态 186

18.7 复位报文段 186

18.7.1 到不存在的端口的连接请求 187

18.7.2 异常终止一个连接 187

18.7.3 检测半打开连接 188

18.8 同时打开 189

18.9 同时关闭 191

18.10 TCP选项 191

18.11 TCP服务器的设计 192

18.11.1 TCP服务器端口号 193

18.11.2 限定的本地IP地址 194

18.11.3 限定的远端IP地址 195

18.11.4 呼入连接请求队列 195

18.12 小结 197

第19章 TCP的交互数据流 200

19.1 引言 200

19.2 交互式输入 200

19.3 经受时延的确认 201

19.4 Nagle算法 203

19.4.1 关闭Nagle算法 204

19.4.2 一个例子 205

19.5 窗口大小通告 207

19.6 小结 208

第20章 TCP的成块数据流 209

20.1 引言 209

20.2 正常数据流 209

20.3 滑动窗口 212

20.4 窗口大小 214

20.5 PUSH标志 215

20.6 慢启动 216

20.7 成块数据的吞吐量 218

20.7.1 带宽时延乘积 220

20.7.2 拥塞 220

20.8 紧急方式 221

20.9 小结 224

第21章 TCP的超时与重传 226

21.1 引言 226

21.2 超时与重传的简单例子 226

21.3 往返时间测量 227

21.4 往返时间RTT的例子 229

21.4.1 往返时间RTT的测量 229

21.4.2 RTT估计器的计算 231

21.4.3 慢启动 233

21.5 拥塞举例 233

21.6 拥塞避免算法 235

21.7 快速重传与快速恢复算法 236

21.8 拥塞举例(续) 237

21.9 按每条路由进行度量 240

21.10 ICMP的差错 240

21.11 重新分组 243

21.12 小结 243

第22章 TCP的坚持定时器 245

22.1 引言 245

22.2 一个例子 245

22.3 糊涂窗口综合症 246

22.4 小结 250

第23章 TCP的保活定时器 251

23.1 引言 251

23.2 描述 252

23.3 保活举例 253

23.3.1 另一端崩溃 253

23.3.2 另一端崩溃并重新启动 254

23.3.3 另一端不可达 254

23.4 小结 255

第24章 TCP的未来和性能 256

24.1 引言 256

24.2 路径MTU发现 256

24.2.1 一个例子 257

24.2.2 大分组还是小分组 258

24.3 长肥管道 259

24.4 窗口扩大选项 262

24.5 时间戳选项 263

24.6 PAWS:防止回绕的序号 265

24.7 T/TCP:为事务用的TCP扩展 265

24.8 TCP的性能 267

24.9 小结 268

第25章 SNMP:简单网络管理协议 270

25.1 引言 270

25.2 协议 270

25.3 管理信息结构 272

25.4 对象标识符 274

25.5 管理信息库介绍 274

25.6 实例标识 276

25.6.1 简单变量 276

25.6.2 表格 276

25.6.3 字典式排序 277

25.7 一些简单的例子 277

25.7.1 简单变量 278

25.7.2 get-next操作 278

25.7.3 表格的访问 279

25.8 管理信息库(续) 279

25.8.1 system组 279

25.8.2 interface组 280

25.8.3 at组 281

25.8.4 ip组 282

25.8.5 icmp组 285

25.8.6 tcp组 285

25.9 其他一些例子 288

25.9.1 接口MTU 288

25.9.2 路由表 288

25.10 trap 290

25.11 ASN.1和BER 291

25.12 SNMPv2 292

25.13 小结 292

第26章 Telnet和Rlogin:远程登录 293

26.1 引言 293

26.2 Rlogin协议 294

26.2.1 应用进程的启动 295

26.2.2 流量控制 295

26.2.3 客户的中断键 296

26.2.4 窗口大小的改变 296

26.2.5 服务器到客户的命令 296

26.2.6 客户到服务器的命令 297

26.2.7 客户的转义符 298

26.3 Rlogin的例子 298

26.3.1 初始的客户-服务器协议 298

26.3.2 客户中断键 299

26.4 Telnet协议 302

26.4.1 NVT ASCII 302

26.4.2 Telnet命令 302

26.4.3 选项协商 303

26.4.4 子选项协商 304

26.4.5 半双工、一次一字符、一次

一行或行方式 304

26.4.6 同步信号 306

26.4.7 客户的转义符 306

26.5 Telnet举例 306

26.5.1 单字符方式 306

26.5.2 行方式 310

26.5.3 一次一行方式(准行方式) 312

26.5.4 行方式:客户中断键 313

26.6 小结 314

第27章 FTP:文件传送协议 316

27.1 引言 316

27.2 FTP协议 316

27.2.1 数据表示 316

27.2.2 FTP命令 318

27.2.3 FTP应答 319

27.2.4 连接管理 320

27.3 FTP的例子 321

27.3.1 连接管理:临时数据端口 321

27.3.2 连接管理:默认数据端口 323

27.3.3 文本文件传输:NVT ASCII

表示还是图像表示 325

27.3.4 异常中止一个文件的传输:

Telnet同步信号 326

27.3.5 匿名FTP 329

27.3.6 来自一个未知IP地址的匿名FTP 330

27.4 小结 331

第28章 SMTP:简单邮件传送协议 332

28.1 引言 332

28.2 SMTP协议 332

28.2.1 简单例子 332

28.2.2 SMTP命令 334

28.2.3 信封、首部和正文 335

28.2.4 中继代理 335

28.2.5 NVT ASCII 337

28.2.6 重试间隔 337

28.3 SMTP的例子 337

28.3.1 MX记录:主机非直接连到

Internet 337

28.3.2 MX记录:主机出故障 339

28.3.3 VRFY和EXPN命令 340

28.4 SMTP的未来 340

28.4.1 信封的变化:扩充的SMTP 341

28.4.2 首部变化:非ASCII字符 342

28.4.3 正文变化:通用Internet邮件

扩充 343

28.5 小结 346

第29章 网络文件系统 347

29.1 引言 347

29.2 Sun远程过程调用 347

29.3 XDR:外部数据表示 349

29.4 端口映射器 349

29.5 NFS协议 351

29.5.1 文件句柄 353

29.5.2 安装协议 353

29.5.3 NFS过程 354

29.5.4 UDP还是TCP 355

29.5.5 TCP上的NFS 355

29.6 NFS实例 356

29.6.1 简单的例子:读一个文件 356

29.6.2 简单的例子:创建一个目录 357

29.6.3 无状态 358

29.6.4 例子:服务器崩溃 358

29.6.5 等幂过程 360

29.7 第3版的NFS 360

29.8 小结 361

第30章 其他的TCP/IP应用程序 363

30.1 引言 363

30.2 Finger协议 363

30.3 Whois协议 364

30.4 Archie、WAIS、Gopher、Veronica

和WWW 366

30.4.1 Archie 366

30.4.2 WAIS 366

30.4.3 Gopher 366

30.4.4 Veronica 366

30.4.5 万维网WWW 367

30.5 X窗口系统 367

30.5.1 Xscope程序 368

30.5.2 LBX: 低带宽X 370

30.6 小结 370

附录A tcpdump程序 371

附录B 计算机时钟 376

附录C sock程序 378

附录D 部分习题的解答 381

附录E 配置选项 395

附录F 可以免费获得的源代码 406

参考文献 409

缩略语 420

目 录

译者序

前言

第1章 概述 1

1.1 引言 1

1.2 源代码表示 1

1.2.1 将拥塞窗口设置为1 1

1.2.2 印刷约定 2

1.3 历史 2

1.4 应用编程接口 3

1.5 程序示例 4

1.6 系统调用和库函数 6

1.7 网络实现概述 6

1.8 描述符 7

1.9 mbuf与输出处理 11

1.9.1 包含插口地址结构的mbuf 11

1.9.2 包含数据的mbuf 12

1.9.3 添加IP和UDP首部 13

1.9.4 IP输出 14

1.9.5 以太网输出 14

1.9.6 UDP输出小结 14

1.10 输入处理 15

1.10.1 以太网输入 15

1.10.2 IP输入 15

1.10.3 UDP输入 16

1.10.4 进程输入 17

1.11 网络实现概述(续) 17

1.12 中断级别与并发 18

1.13 源代码组织 20

1.14 测试网络 21

1.15 小结 22

第2章 mbuf:存储器缓存 24

2.1 引言 24

2.2 代码介绍 27

2.2.1 全局变量 27

2.2.2 统计 28

2.2.3 内核统计 28

2.3 mbuf的定义 29

2.4 mbuf结构 29

2.5 简单的mbuf宏和函数 31

2.5.1 m_get函数 32

2.5.2 MGET宏 32

2.5.3 m_retry函数 33

2.5.4 mbuf锁 34

2.6 m_devget和m_pullup函数 34

2.6.1 m_devget函数 34

2.6.2 mtod和dtom宏 36

2.6.3 m_pullup函数和连续的协议首部 36

2.6.4 m_pullup和IP的分片与重组 37

2.6.5 TCP重组避免调用m_pullup 39

2.6.6 m_pullup使用总结 40

2.7 mbuf宏和函数的小结 40

2.8 Net/3联网数据结构小结 42

2.9 m_copy和簇引用计数 43

2.10 其他选择 47

2.11 小结 47

第3章 接口层 49

3.1 引言 49

3.2 代码介绍 49

3.2.1 全局变量 49

3.2.2 SNMP变量 50

3.3 ifnet结构 51

3.4 ifaddr结构 57

3.5 sockaddr结构 58

3.6 ifnet与ifaddr的专用化 59

3.7 网络初始化概述 60

3.8 以太网初始化 61

3.9 SLIP初始化 64

3.10 环回初始化 65

3.11 if_attach函数 66

3.12 ifinit函数 72

3.13 小结 73

第4章 接口:以太网 74

4.1 引言 74

4.2 代码介绍 75

4.2.1 全局变量 75

4.2.2 统计量 75

4.2.3 SNMP变量 76

4.3 以太网接口 77

4.3.1 leintr函数 79

4.3.2 leread函数 79

4.3.3 ether_input函数 81

4.3.4 ether_output函数 84

4.3.5 lestart函数 87

4.4 ioctl系统调用 89

4.4.1 ifioctl函数 90

4.4.2 ifconf函数 91

4.4.3 举例 94

4.4.4 通用接口ioctl命令 95

4.4.5 if_down和if_up函数 96

4.4.6 以太网、SLIP和环回 97

4.5 小结 98

第5章 接口:SLIP和环回 100

5.1 引言 100

5.2 代码介绍 100

5.2.1 全局变量 100

5.2.2 统计量 101

5.3 SLIP接口 101

5.3.1 SLIP线路规程:SLIPDISC 101

5.3.2 SLIP初始化:slopen和slinit 103

5.3.3 SLIP输入处理:slinput 105

5.3.4 SLIP输出处理:sloutput 109

5.3.5 slstart函数 111

5.3.6 SLIP分组丢失 116

5.3.7 SLIP性能考虑 117

5.3.8 slclose函数 117

5.3.9 sltioctl函数 118

5.4 环回接口 119

5.5 小结 121

第6章 IP编址 123

6.1 引言 123

6.1.1 IP地址 123

6.1.2 IP地址的印刷规定 123

6.1.3 主机和路由器 124

6.2 代码介绍 125

6.3 接口和地址小结 125

6.4 sockaddr_in结构 126

6.5 in_ifaddr结构 127

6.6 地址指派 128

6.6.1 ifioctl函数 130

6.6.2 in_control函数 130

6.6.3 前提条件:SIOCSIFADDR、

SIOCSIFNETMASK和

SIOCSIFDSTADDR 132

6.6.4 地址指派:SIOCSIFADDR 133

6.6.5 in_ifinit函数 133

6.6.6 网络掩码指派:SIOCSIFNETMASK 136

6.6.7 目的地址指派:SIOCSIFDSTADDR 137

6.6.8 获取接口信息 137

6.6.9 每个接口多个IP地址 138

6.6.10 附加IP地址:SIOCAIFADDR 139

6.6.11 删除IP地址:SIOCDIFADDR 140

6.7 接口ioctl处理 141

6.7.1 leioctl函数 141

6.7.2 slioctl函数 142

6.7.3 loioctl函数 143

6.8 Internet实用函数 144

6.9 ifnet实用函数 144

6.10 小结 145

第7章 域和协议 146

7.1 引言 146

7.2 代码介绍 146

7.2.1 全局变量 147

7.2.2 统计量 147

7.3 domain结构 147

7.4 protosw结构 148

7.5 IP 的domain和protosw结构 150

7.6 pffindproto和pffindtype函数 155

7.7 pfctlinput函数 157

7.8 IP初始化 157

7.8.1 Internet传输分用 157

7.8.2 ip_init函数 158

7.9 sysctl系统调用 159

7.10 小结 161

第8章 IP:网际协议 162

8.1 引言 162

8.2 代码介绍 163

8.2.1 全局变量 163

8.2.2 统计量 163

8.2.3 SNMP变量 164

8.3 IP分组 165

8.4 输入处理:ipintr函数 167

8.4.1 ipintr概观 167

8.4.2 验证 168

8.4.3 转发或不转发 171

8.4.4 重装和分用 173

8.5 转发:ip_forward函数 174

8.6 输出处理:ip_output函数 180

8.6.1 首部初始化 181

8.6.2 路由选择 182

8.6.3 源地址选择和分片 184

8.7 Internet检验和:in_cksum函数 186

8.8 setsockopt和getsockopt系统调用 190

8.8.1 PRCO_SETOPT的处理 192

8.8.2 PRCO_GETOPT的处理 193

8.9 ip_sysctl函数 193

8.10 小结 194

第9章 IP选项处理 196

9.1 引言 196

9.2 代码介绍 196

9.2.1 全局变量 196

9.2.2 统计量 197

9.3 选项格式 197

9.4 ip_dooptions函数 198

9.5 记录路由选项 200

9.6 源站和记录路由选项 202

9.6.1 save_rte函数 205

9.6.2 ip_srcroute函数 206

9.7 时间戳选项 207

9.8 ip_insertoptions函数 210

9.9 ip_pcbopts函数 214

9.10 一些限制 217

9.11 小结 217

第10章 IP的分片与重装 218

10.1 引言 218

10.2 代码介绍 219

10.2.1 全局变量 220

10.2.2 统计量 220

10.3 分片 220

10.4 ip_optcopy函数 223

10.5 重装 224

10.6 ip_reass函数 227

10.7 ip_slowtimo函数 237

10.8 小结 238

第11章 ICMP:Internet控制报文协议 239

11.1 引言 239

11.2 代码介绍 242

11.2.1 全局变量 242

11.2.2 统计量 242

11.2.3 SNMP变量 243

11.3 icmp结构 244

11.4 ICMP 的protosw结构 245

11.5 输入处理:icmp_input函数 246

11.6 差错处理 249

11.7 请求处理 251

11.7.1 回显询问:ICMP_ECHO和

ICMP_ECHOREPLY 252

11.7.2 时间戳询问:ICMP_TSTAMP和

ICMP_TSTAMPREPLY 253

11.7.3 地址掩码询问:ICMP_MASKREQ和

ICMP_MASKREPLY 253

11.7.4 信息询问:ICMP_IREQ和ICMP_

IREQREPLY 255

11.7.5 路由器发现:ICMP_ROUTERADVERT

和ICMP_ROUTERSOLICIT 255

11.8 重定向处理 255

11.9 回答处理 257

11.10 输出处理 257

11.11 icmp_error函数 258

11.12 icmp_reflect函数 261

11.13 icmp_send函数 265

11.14 icmp_sysctl函数 266

11.15 小结 266

第12章 IP多播 268

12.1 引言 268

12.2 代码介绍 269

12.2.1 全局变量 270

12.2.2 统计量 270

12.3 以太网多播地址 270

12.4 ether_multi结构 271

12.5 以太网多播接收 273

12.6 in_multi结构 273

12.7 ip_moptions结构 275

12.8 多播的插口选项 276

12.9 多播的TTL值 277

12.9.1 MBONE 278

12.9.2 扩展环搜索 278

12.10 ip_setmoptions函数 278

12.10.1 选择一个明确的多播接口:IP_

MULTICAST_IF 280

12.10.2 选择明确的多播TTL: IP_

MULTICAST_TTL 281

12.10.3 选择多播环回:IP_MULTICAST_

LOOP 281

12.11 加入一个IP多播组 282

12.11.1 in_addmulti函数 285

12.11.2 slioctl和loioctl函数:SIOCADDMULTI和SIOCDELMULTI 287

12.11.3 leioctl函数:SIOCADDMULTI和

SIOCDELMULTI 288

12.11.4 ether_addmulti函数 288

12.12 离开一个IP多播组 291

12.12.1 in_delmulti函数 292

12.12.2 ether_delmulti函数 293

12.13 ip_getmoptions函数 295

12.14 多播输入处理:ipintr函数 296

12.15 多播输出处理:ip_output函数 298

12.16 性能的考虑 301

12.17 小结 301

第13章 IGMP:Internet组管理协议 303

13.1 引言 303

13.2 代码介绍 304

13.2.1 全局变量 304

13.2.2 统计量 304

13.2.3 SNMP变量 305

13.3 igmp结构 305

13.4 IGMP的protosw的结构 306

13.5 加入一个组:igmp_joingroup函数 306

13.6 igmp_fasttimo函数 308

13.7 输入处理:igmp_input函数 311

13.7.1 成员关系查询:IGMP_HOST_

MEMBERSHIP_QUERY 312

13.7.2 成员关系报告:IGMP_HOST_

MEMBERSHIP_REPORT 313

13.8 离开一个组:igmp_leavegroup函数 314

13.9 小结 315

第14章 IP多播选路 316

14.1 引言 316

14.2 代码介绍 316

14.2.1 全局变量 316

14.2.2 统计量 317

14.2.3 SNMP变量 317

14.3 多播输出处理(续) 317

14.4 mrouted守护程序 318

14.5 虚拟接口 321

14.5.1 虚拟接口表 322

14.5.2 add_vif函数 324

14.5.3 del_vif函数 326

14.6 IGMP(续) 327

14.6.1 add_lgrp函数 328

14.6.2 del_lgrp函数 329

14.6.3 grplst_member函数 330

14.7 多播选路 331

14.7.1 多播选路表 334

14.7.2 del_mrt函数 335

14.7.3 add_mrt函数 336

14.7.4 mrtfind函数 337

14.8 多播转发:ip_mforward函数 338

14.8.1 phyint_send函数 343

14.8.2 tunnel_send函数 344

14.9 清理:ip_mrouter_done函数 345

14.10 小结 346

第15章 插口层 348

15.1 引言 348

15.2 代码介绍 349

15.3 socket结构 349

15.4 系统调用 354

15.4.1 举例 355

15.4.2 系统调用小结 355

15.5 进程、描述符和插口 357

15.6 socket系统调用 358

15.6.1 socreate函数 359

15.6.2 超级用户特权 361

15.7 getsock和sockargs函数 361

15.8 bind系统调用 363

15.9 listen系统调用 364

15.10 tsleep和wakeup函数 365

15.11 accept系统调用 366

15.12 sonewconn和soisconnected

函数 369

15.13 connect系统调用 372

15.13.1 soconnect函数 374

15.13.2 切断无连接插口和外部地址的

关联 375

15.14 shutdown系统调用 375

15.15 close系统调用 377

15.15.1 soo_close函数 377

15.15.2 soclose函数 378

15.16 小结 380

第16章 插口I/O 381

16.1 引言 381

16.2 代码介绍 381

16.3 插口缓存 381

16.4 write、writev、sendto和sendmsg

系统调用 384

16.5 sendmsg系统调用 387

16.6 sendit函数 388

16.6.1 uiomove函数 389

16.6.2 举例 390

16.6.3 sendit代码 391

16.7 sosend函数 392

16.7.1 可靠的协议缓存 393

16.7.2 不可靠的协议缓存 393

16.7.3 sosend函数小结 401

16.7.4 性能问题 401

16.8 read、readv、recvfrom和recvmsg

系统调用 401

16.9 recvmsg系统调用 402

16.10 recvit函数 403

16.11 soreceive函数 405

16.11.1 带外数据 406

16.11.2 举例 406

16.11.3 其他的接收操作选项 407

16.11.4 接收缓存的组织:报文边界 407

16.11.5 接收缓存的组织:没有报文边界 408

16.11.6 控制信息和带外数据 409

16.12 soreceive代码 410

16.13 select系统调用 421

16.13.1 selscan函数 425

16.13.2 soo_select函数 425

16.13.3 selrecord函数 427

16.13.4 selwakeup函数 428

16.14 小结 429

第17章 插口选项 431

17.1 引言 431

17.2 代码介绍 431

17.3 setsockopt系统调用 432

17.4 getsockopt系统调用 437

17.5 fcntl和ioctl系统调用 440

17.5.1 fcntl代码 441

17.5.2 ioctl代码 443

17.6 getsockname系统调用 444

17.7 getpeername系统调用 445

17.8 小结 447

第18章 Radix树路由表 448

18.1 引言 448

18.2 路由表结构 448

18.3 选路插口 456

18.4 代码介绍 456

18.4.1 全局变量 458

18.4.2 统计量 458

18.4.3 SNMP变量 459

18.5 Radix结点数据结构 460

18.6 选路结构 463

18.7 初始化:route_init和rtable_init

函数 465

18.8 初始化:rn_init和rn_inithead

函数 468

18.9 重复键和掩码列表 471

18.10 rn_match函数 473

18.11 rn_search函数 480

18.12 小结 481

第19章 选路请求和选路消息 482

19.1 引言 482

19.2 rtalloc和rtalloc1函数 482

19.3 宏RTFREE和rtfree函数 484

19.4 rtrequest函数 486

19.5 rt_setgate函数 491

19.6 rtinit函数 493

19.7 rtredirect函数 495

19.8 选路消息的结构 498

19.9 rt_missmsg函数 501

19.10 rt_ifmsg函数 503

19.11 rt_newaddrmsg函数 504

19.12 rt_msg1函数 505

19.13 rt_msg2函数 507

19.14 sysctl_rtable函数 510

19.15 sysctl_dumpentry函数 514

19.16 sysctl_iflist函数 515

19.17 小结 517

第20章 选路插口 518

20.1 引言 518

20.2 routedomain和protosw结构 518

20.3 选路控制块 519

20.4 raw_init函数 520

20.5 route_output函数 520

20.6 rt_xaddrs函数 530

20.7 rt_setmetrics函数 531

20.8 raw_input函数 532

20.9 route_usrreq函数 534

20.10 raw_usrreq函数 535

20.11 raw_attach、raw_detach和raw_disconnect函数 539

20.12 小结 540

第21章 ARP:地址解析协议 542

21.1 介绍 542

21.2 ARP和路由表 542

21.3 代码介绍 544

21.3.1 全局变量 544

21.3.2 统计量 544

21.3.3 SNMP变量 546

21.4 ARP结构 546

21.5 arpwhohas函数 548

21.6 arprequest函数 548

21.7 arpintr函数 551

21.8 in_arpinput函数 552

21.9 ARP定时器函数 557

21.9.1 arptimer函数 557

21.9.2 arptfree函数 557

21.10 arpresolve函数 558

21.11 arplookup函数 562

21.12 代理ARP 563

21.13 arp_rtrequest函数 564

21.14 ARP和多播 569

21.15 小结 570

第22章 协议控制块 572

22.1 引言 572

22.2 代码介绍 573

22.2.1 全局变量 574

22.2.2 统计量 574

22.3 inpcb的结构 574

22.4 in_pcballoc和in_pcbdetach函数 575

22.5 绑定、连接和分用 577

22.6 in_pcblookup函数 581

22.7 in_pcbbind函数 584

22.8 in_pcbconnect函数 589

22.9 in_pcbdisconnect函数 594

22.10 in_setsockaddr和in_setpeeraddr

函数 595

22.11 in_pcbnotify、in_rtchange和in_losing函数 595

22.11.1 in_rtchange函数 598

22.11.2 重定向和原始插口 599

22.11.3 ICMP差错和UDP插口 600

22.11.4 in_losing函数 601

22.12 实现求精 602

22.13 小结 602

第23章 UDP:用户数据报协议 605

23.1 引言 605

23.2 代码介绍 605

23.2.1 全局变量 606

23.2.2 统计量 606

23.2.3 SNMP变量 607

23.3 UDP 的protosw结构 607

23.4 UDP的首部 608

23.5 udp_init函数 609

23.6 udp_output函数 609

23.6.1 在前面加上IP/UDP首部和mbuf簇 612

23.6.2 UDP检验和计算和伪首部 612

23.7 udp_input函数 616

23.7.1 对收到的UDP数据报的一般确认 616

23.7.2 分用单播数据报 619

23.7.3 分用多播和广播数据报 622

23.7.4 连接上的UDP插口和多接口主机 625

23.8 udp_saveopt函数 625

23.9 udp_ctlinput函数 627

23.10 udp_usrreq函数 628

23.11 udp_sysctl函数 633

23.12 实现求精 633

23.12.1 UDP PCB高速缓存 633

23.12.2 UDP检验和 634

23.13 小结 635

第24章 TCP:传输控制协议 636

24.1 引言 636

24.2 代码介绍 636

24.2.1 全局变量 636

24.2.2 统计量 637

24.2.3 SNMP变量 640

24.3 TCP 的protosw结构 641

24.4 TCP的首部 641

24.5 TCP的控制块 643

24.6 TCP的状态变迁图 645

24.7 TCP的序号 646

24.8 tcp_init函数 650

24.9 小结 652

第25章 TCP的定时器 654

25.1 引言 654

25.2 代码介绍 655

25.3 tcp_canceltimers函数 657

25.4 tcp_fasttimo函数 657

25.5 tcp_slowtimo函数 658

25.6 tcp_timers函数 659

25.6.1 FIN_WAIT_2和2MSL定时器 660

25.6.2 持续定时器 662

25.6.3 连接建立定时器和保活定时器 662

25.7 重传定时器的计算 665

25.8 tcp_newtcpcb算法 666

25.9 tcp_setpersist函数 668

25.10 tcp_xmit_timer函数 669

25.11 重传超时:tcp_timers函数 673

25.11.1 慢起动和避免拥塞 675

25.11.2 精确性 677

25.12 一个RTT的例子 677

25.13 小结 679

第26章 TCP输出 680

26.1 引言 680

26.2 tcp_output概述 680

26.3 决定是否应发送一个报文段 682

26.4 TCP选项 691

26.5 窗口大小选项 692

26.6 时间戳选项 692

26.6.1 哪个时间戳需要回显,RFC1323

算法 694

26.6.2 哪个时间戳需要回显,正确的

算法 695

26.6.3 时间戳与延迟ACK 695

26.7 发送一个报文段 696

26.8 tcp_template函数 707

26.9 tcp_respond函数 708

26.10 小结 710

第27章 TCP的函数 712

27.1 引言 712

27.2 tcp_drain函数 712

27.3 tcp_drop函数 712

27.4 tcp_close函数 713

27.4.1 路由特性 713

27.4.2 资源释放 716

27.5 tcp_mss函数 717

27.6 tcp_ctlinput函数 722

27.7 tcp_notify函数 723

27.8 tcp_quench函数 724

27.9 TCP_REASS宏和tcp_reass函数 724

27.9.1 TCP_REASS宏 725

27.9.2 tcp_reass函数 727

27.10 tcp_trace函数 732

27.11 小结 736

第28章 TCP的输入 737

28.1 引言 737

28.2 预处理 739

28.3 tcp_dooptions函数 745

28.4 首部预测 747

28.5 TCP输入:缓慢的执行路径 752

28.6 完成被动打开或主动打开 752

28.6.1 完成被动打开 753

28.6.2 完成主动打开 756

28.7 PAWS:防止序号回绕 760

28.8 裁剪报文段使数据在窗口内 762

28.9 自连接和同时打开 768

28.10 记录时间戳 770

28.11 RST处理 770

28.12 小结 772

第29章 TCP的输入(续) 773

29.1 引言 773

29.2 ACK处理概述 773

29.3 完成被动打开和同时打开 774

29.4 快速重传和快速恢复的算法 775

29.5 ACK处理 778

29.6 更新窗口信息 784

29.7 紧急方式处理 786

29.8 tcp_pulloutofband函数 788

29.9 处理已接收的数据 789

29.10 FIN处理 791

29.11 最后的处理 793

29.12 实现求精 795

29.13 首部压缩 795

29.13.1 引言 796

29.13.2 首部字段的压缩 799

29.13.3 特殊情况 801

29.13.4 实例 802

29.13.5 配置 803

29.14 小结 803

第30章 TCP的用户需求 805

30.1 引言 805

30.2 tcp_usrreq函数 805

30.3 tcp_attach函数 814

30.4 tcp_disconnect函数 815

30.5 tcp_usrclosed函数 816

30.6 tcp_ctloutput函数 817

30.7 小结 820

第31章 BPF:BSD 分组过滤程序 821

31.1 引言 821

31.2 代码介绍 821

31.2.1 全局变量 821

31.2.2 统计量 822

31.3 bpf_if结构 822

31.4 bpf_d结构 825

31.4.1 bpfopen函数 826

31.4.2 bpfioctl函数 827

31.4.3 bpf_setif函数 830

31.4.4 bpf_attachd函数 831

31.5 BPF的输入 832

31.5.1 bpf_tap函数 832

31.5.2 catchpacket函数 833

31.5.3 bpfread函数 835

31.6 BPF的输出 837

31.7 小结 838

第32章 原始IP 839

32.1 引言 839

32.2 代码介绍 839

32.2.1 全局变量 839

32.2.2 统计量 840

32.3 原始 IP的protosw结构 840

32.4 rip_init函数 842

32.5 rip_input函数 842

32.6 rip_output函数 844

32.7 rip_usrreq函数 846

32.8 rip_ctloutput函数 850

32.9 小结 852

结束语 853

附录A 部分习题的解答 854

附录B 源代码的获取 872

附录C RFC 1122 的有关内容 874

参考文献 895

目 录

译者序

前言

第一部分 TCP事务协议

第1章 T/TCP概述 1

1.1 概述 1

1.2 UDP上的客户-服务器 1

1.3 TCP上的客户-服务器 6

1.4 T/TCP上的客户-服务器 12

1.5 测试网络 15

1.6 时间测量程序 15

1.7 应用 17

1.8 历史 19

1.9 实现 20

1.10 小结 21

第2章 T/TCP协议 23

2.1 概述 23

2.2 T/TCP中的新TCP选项 23

2.3 T/TCP实现所需变量 25

2.4 状态变迁图 27

2.5 T/TCP的扩展状态 28

2.6 小结 30

第3章 T/TCP使用举例 31

3.1 概述 31

3.2 客户重新启动 31

3.3 常规的T/TCP事务 33

3.4 服务器收到过时的重复SYN 34

3.5 服务器重启动 35

3.6 请求或应答超出报文段最大长度MSS 36

3.7 向后兼容性 39

3.8 小结 41

第4章 T/TCP协议(续) 43

4.1 概述 43

4.2 客户的端口号和TIME_WAIT状态 43

4.3 设置TIME_WAIT状态的目的 45

4.4 TIME_WAIT状态的截断 48

4.5 利用TAO跳过三次握手 51

4.6 小结 55

第5章 T/TCP协议的实现:插口层 56

5.1 概述 56

5.2 常量 56

5.3 sosend函数 56

5.4 小结 58

第6章 T/TCP的实现:路由表 59

6.1 概述 59

6.2 代码介绍 59

6.3 radix_node_head结构 60

6.4 rtentry结构 61

6.5 rt_metrics结构 61

6.6 in_inithead函数 61

6.7 in_addroute函数 62

6.8 in_matroute函数 63

6.9 in_clsroute函数 63

6.10 in_rtqtimo函数 64

6.11 in_rtqkill函数 66

6.12 小结 69

第7章 T/TCP实现:协议控制块 70

7.1 概述 70

7.2 in_pcbladdr函数 71

7.3 in_pcbconnect函数 71

7.4 小结 72

第8章 T/TCP实现: TCP概要 73

8.1 概述 73

8.2 代码介绍 73

8.3 TCP的protosw结构 74

8.4 TCP控制块 74

8.5 tcp_init函数 75

8.6 tcp_slowtimo函数 75

8.7 小结 76

第9章 T/TCP实现:TCP输出 77

9.1 概述 77

9.2 tcp_output函数 77

9.2.1 新的自动变量 77

9.2.2 增加隐藏的状态标志 77

9.2.3 在SYN_SENT状态不要重传SYN 78

9.2.4 发送器的糊涂窗口避免机制 78

9.2.5 有RST或SYN标志时强制发送报文段 79

9.2.6 发送MSS选项 80

9.2.7 是否发送时间戳选项 80

9.2.8 发送T/TCP的CC选项 80

9.2.9 根据TCP选项调整数据长度 83

9.3 小结 83

第10章 T/TCP实现:TCP函数 84

10.1 概述 84

10.2 tcp_newtcpcb函数 84

10.3 tcp_rtlookup函数 85

10.4 tcp_gettaocache函数 86

10.5 重传超时间隔的计算 86

10.6 tcp_close函数 89

10.7 tcp_msssend函数 90

10.8 tcp_mssrcvd函数 91

10.9 tcp_dooptions函数 96

10.10 tcp_reass函数 98

10.11 小结 99

第11章 T/TCP实现:TCP输入 101

11.1 概述 101

11.2 预处理 103

11.3 首部预测 104

11.4 被动打开的启动 105

11.5 主动打开的启动 108

11.6 PAWS:防止序号重复 114

11.7 ACK处理 115

11.8 完成被动打开和同时打开 115

11.9 ACK处理(续) 116

11.10 FIN处理 118

11.11 小结 119

第12章 T/TCP实现:TCP用户请求 120

12.1 概述 120

12.2 PRU_CONNECT请求 120

12.3 tcp_connect函数 120

12.4 PRU_SEND和PRU_SEND_EOF请求 124

12.5 tcp_usrclosed函数 125

12.6 tcp_sysctl函数 126

12.7 T/TCP的前景 126

12.8 小结 127

第二部分 TCP的其他应用

第13章 HTTP:超文本传送协议 129

13.1 概述 129

13.2 HTTP和HTML概述 130

13.3 HTTP 132

13.3.1 报文类型:请求与响应 132

13.3.2 首部字段 133

13.3.3 响应代码 133

13.3.4 各种报文头举例 134

13.3.5 例子:客户程序缓存 135

13.3.6 例子:服务器重定向 136

13.4 一个例子 136

13.5 HTTP的统计资料 138

13.6 性能问题 139

13.7 小结 141

第14章 在HTTP服务器上找到的分组 142

14.1 概述 142

14.2 多个HTTP服务器 144

14.3 客户端SYN的到达间隔时间 145

14.4 RTT的测量 149

14.5 用listen设置入连接队列的容量 150

14.6 客户端的SYN选项 154

14.7 客户端的SYN重传 156

14.8 域名 157

14.9 超时的持续探测 157

14.10 T/TCP路由表大小的模拟 160

14.11 mbuf的交互 162

14.12 TCP的PCB高速缓存和首部预测 163

14.13 小结 165

第15章 NNTP:网络新闻传送协议 166

15.1 概述 166

15.2 NNTP 167

15.3 一个简单的新闻客户 170

15.4 一个复杂的新闻客户 171

15.5 NNTP的统计资料 172

15.6 小结 173

第三部分 Unix域协议

第16章 Unix域协议:概述 175

16.1 概述 175

16.2 用途 176

16.3 性能 177

16.4 编码举例 177

16.5 小结 179

第17章 Unix域协议:实现 180

17.1 概述 180

17.2 代码介绍 180

17.3 Unix domain和protosw结构 181

17.4 Unix域插口地址结构 182

17.5 Unix域协议控制块 183

17.6 uipc_usrreq函数 185

17.7 PRU_ATTACH请求和unp_attach函数 186

17.8 PRU_DETACH请求和unp_detach函数 187

17.9 PRU_BIND请求和unp_bind函数 189

17.10 PRU_CONNECT请求和unp_connect

函数 191

17.11 PRU_CONNECT2请求和unp_connect2

函数 195

17.12 socketpair系统调用 198

17.13 pipe系统调用 202

17.14 PRU_ACCEPT请求 203

17.15 PRU_DISCONNECT请求和

unp_disconnect函数 204

17.16 PRU_SHUTDOWN请求和unp_shutdown

函数 205

17.17 PRU_ABORT请求和unp_drop函数 206

17.18 其他各种请求 207

17.19 小结 209

第18章 Unix域协议:I/O和描述符的传递 210

18.1 概述 210

18.2 PRU_SEND和PRU_RCVD请求 210

18.3 描述符的传递 214

18.4 unp_internalize函数 218

18.5 unp_externalize函数 220

18.6 unp_discard函数 221

18.7 unp_dispose函数 222

18.8 unp_scan函数 222

18.9 unp_gc函数 223

18.10 unp_mark函数 230

18.11 性能(再讨论) 231

18.12 小结 231

附录A 测量网络时间 232

附录B 编写T/TCP应用程序 242

参考文献 246

缩略语 251

TCP-IP详细协议

02-26

目 录

译者序

前言

第1章 概述 1

1.1 引言 1

1.2 分层 1

1.3 TCP/IP的分层 4

1.4 互联网的地址 5

1.5 域名系统 6

1.6 封装 6

1.7 分用 8

1.8 客户-服务器模型 8

1.9 端口号 9

1.10 标准化过程 10

1.11 RFC 10

1.12 标准的简单服务 11

1.13 互联网 12

1.14 实现 12

1.15 应用编程接口 12

1.16 测试网络 13

1.17 小结 13

第2章 链路层 15

2.1 引言 15

2.2 以太网和IEEE 802封装 15

2.3 尾部封装 17

2.4 SLIP:串行线路IP 17

2.5 压缩的SLIP 18

2.6 PPP:点对点协议 18

2.7 环回接口 20

2.8 最大传输单元MTU 21

2.9 路径MTU 21

2.10 串行线路吞吐量计算 21

2.11 小结 22

第3章 IP:网际协议 24

3.1 引言 24

3.2 IP首部 24

3.3 IP路由选择 27

3.4 子网寻址 30

3.5 子网掩码 32

3.6 特殊情况的IP地址 33

3.7 一个子网的例子 33

3.8 ifconfig命令 35

3.9 netstat命令 36

3.10 IP的未来 36

3.11 小结 37

第4章 ARP:地址解析协议 38

4.1 引言 38

4.2 一个例子 38

4.3 ARP高速缓存 40

4.4 ARP的分组格式 40

4.5 ARP举例 41

4.5.1 一般的例子 41

4.5.2 对不存在主机的ARP请求 42

4.5.3 ARP高速缓存超时设置 43

4.6 ARP代理 43

4.7 免费ARP 45

4.8 arp命令 45

4.9 小结 46

第5章 RARP:逆地址解析协议 47

5.1 引言 47

5.2 RARP的分组格式 47

5.3 RARP举例 47

5.4 RARP服务器的设计 48

5.4.1 作为用户进程的RARP服务器 49

5.4.2 每个网络有多个RARP服务器 49

5.5 小结 49

第6章 ICMP:Internet控制报文协议 50

6.1 引言 50

6.2 ICMP报文的类型 50

6.3 ICMP地址掩码请求与应答 52

6.4 ICMP时间戳请求与应答 53

6.4.1 举例 54

6.4.2 另一种方法 55

6.5 ICMP端口不可达差错 56

6.6 ICMP报文的4.4BSD处理 59

6.7 小结 60

第7章 Ping程序 61

7.1 引言 61

7.2 Ping程序 61

7.2.1 LAN输出 62

7.2.2 WAN输出 63

7.2.3 线路SLIP链接 64

7.2.4 拨号SLIP链路 65

7.3 IP记录路由选项 65

7.3.1 通常的例子 66

7.3.2 异常的输出 68

7.4 IP时间戳选项 69

7.5 小结 70

第8章 Traceroute程序 71

8.1 引言 71

8.2 Traceroute 程序的操作 71

8.3 局域网输出 72

8.4 广域网输出 75

8.5 IP源站选路选项 76

8.5.1 宽松的源站选路的traceroute

程序示例 78

8.5.2 严格的源站选路的traceroute

程序示例 79

8.5.3 宽松的源站选路traceroute程序

的往返路由 80

8.6 小结 81

第9章 IP选路 83

9.1 引言 83

9.2 选路的原理 84

9.2.1 简单路由表 84

9.2.2 初始化路由表 86

9.2.3 较复杂的路由表 87

9.2.4 没有到达目的地的路由 87

9.3 ICMP主机与网络不可达差错 88

9.4 转发或不转发 89

9.5 ICMP重定向差错 89

9.5.1 一个例子 90

9.5.2 更多的细节 91

9.6 ICMP路由器发现报文 92

9.6.1 路由器操作 93

9.6.2 主机操作 93

9.6.3 实现 93

9.7 小结 94

第10章 动态选路协议 95

10.1 引言 95

10.2

TCP/IP详解part_2

12-29

作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 本书适合作为计算机专业学生学习网络的教材和教师参考书。也...

Linux上添加路由,删除路由,修改路由配置(route add, route del, 路由表项基本知识)

热门推荐

meihualing的专栏

01-25

2万+

Linux上添加删除修改路由配置(路由表项基本知识)

TCP的MSS的计算与详解

meihualing的专栏

02-07

1万+

TCP,MSS,TCP分片,PMTU,路径MTU,MSS协商

TCP的三个窗口:发送窗口swnd、接收窗口rwnd、拥塞窗口cwnd

meihualing的专栏

02-05

1万+

TCP的三个窗口:发送窗口swnd、接收窗口rwnd、拥塞窗口cwnd, 慢启动门限,拥塞避免算法,快重传算法和快恢复算法

为什么要规定MSS(TCP 最大报文段长度)

05-11

TCP 的最大报文段长度(MSS)是指在 TCP 连接中传输数据时每个 TCP 报文段中的数据部分的最大长度。MSS 的大小是由网络中的最小 MTU(最大传输单元)所决定的,因为 TCP 报文段必须在 IP 层进行分片,而分片会增加网络传输的负担和延迟。因此,TCP 会在建立连接时协商双方的 MSS,以保证数据能够高效地传输。

规定 MSS 的主要原因有以下几点:

1. 网络中的路由器和交换机都有 MTU 的限制,如果 TCP 报文段的长度超过了 MTU,就需要进行分片,会增加网络传输的负担和延迟。

2. TCP 报文段中除了数据部分外还有 TCP 头部和 IP 头部,这些头部的长度是固定的,因此 TCP 报文段中数据部分的最大长度也是有限的。

3. 在建立 TCP 连接时,双方会协商 MSS 的大小,以保证数据能够高效地传输,避免分片和重传带来的额外开销和延迟。

因此,规定 MSS 可以帮助 TCP 在网络中高效地传输数据,减少分片和重传带来的延迟和开销。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

林哥小站

CSDN认证博客专家

CSDN认证企业博客

码龄17年

暂无认证

117

原创

6万+

周排名

3万+

总排名

46万+

访问

等级

2121

积分

168

粉丝

345

获赞

128

评论

1512

收藏

私信

关注

热门文章

iperf3参数(iperf3命令)详解

58588

树莓派(Raspberry Pi)如何修改成中文

25795

树莓派(Raspberry pi) 使用Pi Imager安装烧录操作系统

24922

iperf3使用说明

24186

Linux上添加路由,删除路由,修改路由配置(route add, route del, 路由表项基本知识)

22152

分类专栏

LeetCode

1篇

PTP-1588v2

2篇

iPerf3专业用户

15篇

Linux路由、防火墙与流量控制QOS的设计与实现

23篇

测试人员眼中的TCP/IP

18篇

iPerf3源代码阅读分析

12篇

Linux专业使用者

25篇

Python入门与应用

3篇

树莓派(Raspberry Pi)

26篇

其它杂项

11篇

最新评论

iperf3参数(iperf3命令)详解

EEmpty rock:

iperf -S参数无法生效吧 我本地抓包-S 改tos 改不掉的

TCP的拥塞控制算法:慢启动算法、拥塞避免算法,快速重传与超时重传算法,快速恢复算法

人不走空:

不错啊,我会继续支持你的

XDP入门--eBPF程序如何转发报文到其它网卡

清舞sunny:

hello,有个疑问, xdp redirect是重定向到目标网卡的接收端还是发送端呢?

XDP入门--eBPF程序如何转发报文到其它网卡

wangbaihe2015:

把网卡适配的xdp 能直接用iperf 测试吗?需要修改socket 层的东西吗?

树莓派(Raspberry pi) 使用Pi Imager安装烧录操作系统

idleshell:

有没有 Windows on Raspberry 下载器的 zip?

其他都下载好了

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

linux系统下读取当前硬盘的温度

Linux下自动挂载U盘或者USB移动硬盘

LeetCode 热题 100 - 第1题:两数之和

2023年94篇

2021年11篇

2020年12篇

目录

目录

分类专栏

LeetCode

1篇

PTP-1588v2

2篇

iPerf3专业用户

15篇

Linux路由、防火墙与流量控制QOS的设计与实现

23篇

测试人员眼中的TCP/IP

18篇

iPerf3源代码阅读分析

12篇

Linux专业使用者

25篇

Python入门与应用

3篇

树莓派(Raspberry Pi)

26篇

其它杂项

11篇

目录

评论 2

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

以太网帧(Ethernet)、IP包、TCP、UDP的长度范围 - sinferwu - 博客园

以太网帧(Ethernet)、IP包、TCP、UDP的长度范围 - sinferwu - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

sinfer

博客园

首页

新随笔

联系

订阅

管理

以太网帧(Ethernet)、IP包、TCP、UDP的长度范围

http://kibazen.cn/2015/ethernet-ip-tcp-udp-packet-length/

一、它们之间的关系

TCP/IP协议是分层的。以太网帧的数据帧在链路层,IP包在网络层,TCP/UDP在传输层,TCP/UDP中的数据在应用层。

应用层

TCP/UDP中的数据

传输层

TCP/UDP

网络层

IP包

数据链路层

以太网帧

物理层

 

上一层的数据连同该层的控制信息打包交给下一层,直到最底层。所以他们之间的关系:以太网帧{IP包{TCP/UDP{数据}}}。

二、以太网帧(数据链路层)

目前以太网帧有5种,交换机之间BPDU(桥协议数据单元)数据包使用的是IEEE802.3/LLC帧,其格式如下:

字段

长度(字节)

目的

前导码(Preamble)

7

0x55,一串1、0间隔,用于信号同步

帧开始符(SFD)

1

1字节0xD5(10101011),表示一帧开始

目的MAC地址

6

指明帧的接受者

源MAC地址

6

指明帧的发送者

长度(Length)/类型(Type)

2

0~1500保留为长度域值,1536~65535保留为类型域值(0x0600~0xFFFF)

数据和填充(Data and Pad)

46~1500

高层的数据,通常为3层协议数据单元。对于TCP/IP是IP数据包(注:如果帧长小于64字节,则要求“填充”,以使这个帧的长度达到64字节)

帧校验序列(FCS)

4

使用CRC计算从目的MAC到数据域这部分内容而得到的校验和

 

 

据RFC894的说明,以太网封装IP数据包的最大长度是1500字节(所以,数据链路层的最大传输单元(Maximum Transmission Unit,MTU)是1500字节),也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步吗+1字节帧开始定界符+6字节的目的MAC+6字节的源MAC+2字节的帧类型+1500+4字节的FCS。

按照上述,最大帧应该是1526字节,但是实际上我们抓包得到的最大帧是1514字节,为什么不是1526字节呢?原因是当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和错,就丢弃此帧。如果校验和正确,就判断帧的目的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,就将帧交“设备驱动程序”做进一步处理。这时我们的抓包软件才能抓到数据,因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据,其最大值是6+6+2+1500=1514。

以太网规定,以太网帧数据域部分最小为46字节,也就是以太网帧最小是6+6+2+46+4=64。除去4个字节的FCS,因此,抓包时就是60字节。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充以满足数据帧长不小于64字节。由于填充数据是由MAC子层负责,也就是设备驱动程序。不同的抓包程序和设备驱动程序所处的优先层次可能不同,抓包程序的优先级可能比设备驱动程序更高,也就是说,我们的抓包程序可能在设备驱动程序还没有填充不到64字节帧的时候,已经捕获了数据。因此不同的抓包工具抓到的数据帧的大小可能不同。(比如,wireshark抓到的可能没有填充数据段,而sniffer抓到的就有填充数据段)

而为什么以太网帧最后最小的值是64字节呢?考虑如下的情况,主机发送的帧很小,而两台冲突主机相距很远。在主机A发送的帧传输到B的前一刻,B开始发送帧。这样,当A的帧到达B时,B检测到冲突,于是发送冲突信号。假如在B的冲突信号传输到A之前,A的帧已经发送完毕,那么A将检测不到冲突而误认为已发送成功。由于信号传播是有时延的,因此检测冲突也需要一定的时间。这也是为什么必须有个最小帧长的限制。

按照标准,10Mbps以太网采用中继器时,连接的最大长度是2500米,最多经过4个中继器,因此规定对10Mbps以太网一帧的最小发送时间为51.2微秒。这段时间所能传输的数据为512位,因此也称该时间为512位时。这个时间定义为以太网时隙,或冲突时槽。512位=64字节,这就是以太网帧最小64字节的原因。

512位时是主机捕获信道的时间。如果某主机发送一个帧的64字节仍无冲突,以后也就不会再发生冲突了,称此主机捕获了信道。

由于信道是所有主机共享的,如果数据帧太长就会出现有的主机长时间不能发送数据,而且有的发送数据可能超出接收端的缓冲区大小,造成缓冲溢出。为避免单一主机占用信道时间过长,规定了以太网帧的最大帧长为1500。

100Mbps以太网的时隙仍为512位时,以太网规定一帧的最小发送时间必须为5.12μs。

1000Mbps以太网的时隙增至512字节,即4096位时,4.096μs。

三、IP包(网络层)

IP头大小最小为20字节。所以,网络层的MTU=数据链路层的MTU1500-20=1480字节。

 

 

在IP头中,用2个字节来描述报文的长度,2个字节所能表达的最大数字就是65535。所以,IP数据包的最大长度就是64K字节(65535)。

由于IP协议提供为上层协议分割和重组报文的功能,因此传输层协议的数据包长度原则上来说没有限制。实际上限制还是有的,因为IP包的标识字段终究不可能无限长,按照IPv4,好像上限应该是4G(64K*64K)。

四、TCP(传输层)

依靠IP协议提供的报文分割和重组机制,TCP包头中就没有“包长度”字段,而完全依靠IP层去处理分帧。这就是为什么TCP常常被称作一种“流协议”的原因,开发者在使用TCP服务的时候,不必去关心数据包的大小,只需讲SOCKET看作一条数据流的入口,往里面放数据就是了,TCP协议本身会进行拥塞/流量控制。

 

五、UDP(传输层)

UDP则与TCP不同,UDP包头内有总长度字段,同样为两个字节,因此UDP数据包的总长度被限制为65535,这样恰好可以放进一个IP包内,使得 UDP/IP协议栈的实现非常简单和高效。

 

所以UDP包的最大值是:IP数据包的最大长度65535-IP头的大小20-UDP头的大小=65507字节。最小值是0。

这个值也就是你在调用getsockopt()时指定SO_MAX_MSG_SIZE所得到返回值,任何使用SOCK_DGRAM属性的socket,一次send的 数据都不能超过这个值,否则必然得到一个错误。

———————————————————————————在应用程序中我们用到的Data的长度最大是多少,直接取决于底层的限制。我们从下到上分析一下:1.在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+18),其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500(不包括帧头和帧尾),即MTU(Maximum Transmission Unit)为1500;2.在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480;3.在传输层:

UDP包的首部要占用8字节,所以UDP的MTU为1480-8=1472;所以,在应用层,你的Data最大长度为1472。 (当我们的UDP包中的数据多于MTU(1472)时,发送方的IP层需要分片fragmentation进行传输,而在接收方IP层则需要进行数据报重组,由于UDP是不可靠的传输协议,如果分片丢失导致重组失败,将导致UDP数据包被丢弃)。从上面的分析来看,在普通的局域网环境下,UDP的数据最大为1472字节最好(避免分片重组)。但在网络编程中,Internet中的路由器可能有设置成不同的值(小于默认值),Internet上的标准MTU值为576,所以Internet的UDP编程时数据长度最好在576-20-8=548字节以内。

TCP包的首部要占用20字节,所以TCP的MTU为1480-20=1460;

4.如果用户使用了PPPoE协议,还应减去PPPoE的首部占用需要的8字节。即TCP的MTU应该是1452;UDP的MTU应该是1464;

1

const unsigned long kMinEthernetFrameSize = 64;

2

const unsigned long kMaxEthernetFrameSize = 1518;

3

const unsigned long kEthernetFrameHeadSize = 6 + 6 + 2;

4

const unsigned long kEthernetFrameTailSize = 4;

5

const unsigned long kEthernetMTU = kMaxEthernetFrameSize - kEthernetFrameHeadSize - kEthernetFrameTailSize;

6

const unsigned long kPPPoEHeadSize = 8;

7

const unsigned long kIPHeadSize = 20;

8

const unsigned long kTCPHeadSize = 20;

9

const unsigned long kUDPHeadSize = 8;

10

const unsigned long kTCPMSS = kEthernetMTU - kPPPoEHeadSize - kIPHeadSize - kTCPHeadSize;

11

const unsigned long kUDPMSS = kEthernetMTU - kPPPoEHeadSize - kIPHeadSize - kUDPHeadSize;

———————————————————————————

 

参考:

http://blog.csdn.net/naturebe/article/details/6712153

http://blog.csdn.net/ixidof/article/details/7669422

https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html

posted @

2017-09-30 15:51 

sinferwu 

阅读(7328) 

评论(0) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

公告

Copyright © 2024 sinferwu

Powered by .NET 8.0 on Kubernetes

以太网帧结构详解 - 知乎

以太网帧结构详解 - 知乎首发于网络协议详解切换模式写文章登录/注册以太网帧结构详解nwatch计算机的世界真是太精彩了!!!前言20世纪60年代以来,计算机网络得到了飞速发展。各大厂商和标准组织为了在数据通信网络领域占据主导地位,纷纷推出了各自的网络架构体系和标准,如IBM公司的SNA协议,Novell公司的IPX/SPX协议,以及广泛流行的OSI参考模型和TCP/IP协议。同时,各大厂商根据这些协议生产出了不同的硬件和软件。标准组织和厂商的共同努力促进了网络技术的快速发展和网络设备种类的迅速增长。网络通信中,“协议”和“标准”这两个词汇常常可以混用。同时,协议或标准本身又常常具有层次的特点。一般地,关注于逻辑数据关系的协议通常被称为上层协议,而关注于物理数据流的协议通常被称为低层协议。IEEE 802就是一套用来管理物理数据流在局域网中传输的标准,包括在局域网中传输物理数据的802.3以太网标准。还有一些用来管理物理数据流在使用串行介质的广域网中传输的标准,如帧中继FR(Frame Relay),高级数据链路控制HDLC(High-Level Data Link Control),异步传输模式ATM(Asynchronous Transfer Mode)。分层模型- OSI不同的协议栈用于定义和管理不同网络的数据转发规则。国际标准化组织ISO于1984年提出了OSI RM(Open System Interconnection Reference Model,开放系统互连参考模型)。OSI 参考模型很快成为了计算机网络通信的基础模型。OSI参考模型具有以下优点:简化了相关的网络操作;提供了不同厂商之间的兼容性;促进了标准化工作;结构上进行了分层;易于学习和操作。OSI参考模型各个层次的基本功能如下:1.物理层: 在设备之间传输比特流,规定了电平、速度和电缆针脚。2.数据链路层:将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。3.网络层:提供逻辑地址,供路由器确定路径。4.传输层:提供面向连接或非面向连接的数据传递以及进行重传前的差错检测。5.会话层:负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。6.表示层:提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。7.应用层:OSI参考模型中最靠近用户的一层,为应用程序提供网络服务。分层模型– TCP/IPTCP/IP模型同样采用了分层结构,层与层相对独立但是相互之间也具备非常密切的协作关系。TCP/IP模型将网络分为四层。TCP/IP模型不关注底层物理介质,主要关注终端之间的逻辑数据流转发。TCP/IP模型的核心是网络层和传输层:网络层解决网络之间的逻辑转发问题,传输层保证源端到目的端之间的可靠传输。最上层的应用层通过各种协议向终端用户提供业务应用。数据封装应用数据需要经过TCP/IP每一层处理之后才能通过网络传输到目的端,每一层上都使用该层的协议数据单元PDU(Protocol Data Unit)彼此交换信息。不同层的PDU中包含有不同的信息,因此PDU在不同层被赋予了不同的名称。如上层数据在传输层添加TCP报头后得到的PDU被称为Segment(数据段 )数据段被传递给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包)数据包被传递到数据链路层,封装数据链路层报头得到的PDU被称为Frame(数据帧)最后,帧被转换为比特(物理层)通过网络介质传输。这种协议栈逐层向下传递数据,并添加报头和报尾的过程称为封装。终端之间的通信数据链路层控制数据帧在物理链路上传输。数据包在以太网物理介质上传播之前必须封装头部和尾部信息。封装后的数据包称为称为数据帧,数据帧中封装的信息决定了数据如何传输。以太网上传输的数据帧有两种格式,选择哪种格式由TCP/IP协议簇中的网络层决定。帧格式以太网上使用两种标准帧格式。第一种是上世纪80年代初提出的DIX v2格式,即Ethernet II帧格式。Ethernet II后来被IEEE 802标准接纳,并写进了IEEE 802.3x-1997的3.2.6节。第二种是1983年提出的IEEE 802.3格式。这两种格式的主要区别在于,Ethernet II格式中包含一个Type字段,标识以太帧处理完成之后将被发送到哪个上层协议进行处理。IEEE 802.3格式中,同样的位置是长度字段。不同的Type字段值可以用来区别这两种帧的类型当Type字段值小于等于1500(或者十六进制的0x05DC)时,帧使用的是IEEE 802.3格式。当Type字段值大于等于1536 (或者十六进制的0x0600)时,帧使用的是Ethernet II格式。以太网中大多数的数据帧使用的是Ethernet II格式。以太帧中还包括源和目的MAC地址,分别代表发送者的MAC和接收者的MAC,此外还有帧校验序列字段,用于检验传输过程中帧的完整性。Ethernet_II 帧格式Ethernet_II 帧类型值大于等于1536 (0x0600)以太网数据帧的长度在64-1518字节之间Ethernet_II的帧中各字段说明如下:DMAC(Destination MAC)是目的MAC地址。DMAC字段长度为6个字节,标识帧的接收者。SMAC(Source MAC)是源MAC地址。SMAC字段长度为6个字节,标识帧的发送者。类型字段(Type)用于标识数据字段中包含的高层协议,该字段长度为2个字节。类型字段取值为0x0800的帧代表IP协议帧;类型字段取值为0806的帧代表ARP协议帧。数据字段(Data)是网络层数据,最小长度必须为46字节以保证帧长至少为64字节,数据字段的最大长度为1500字节。循环冗余校验字段(FCS)提供了一种错误检测机制。该字段长度为4个字节。IEEE802.3 帧格式IEEE 802.3 帧长度字段值小于等于1500 (0x05DC)IEEE 802.3帧格式类似于Ethernet_II帧,只是Ethernet_II帧的Type域被802.3帧的Length域取代,并且占用了Data字段的8个字节作为LLC和SNAP字段。Length字段定义了Data字段包含的字节数。逻辑链路控制LLC(Logical Link Control)由目的服务访问点DSAP(Destination Service Access Point)、源服务访问点SSAP(Source Service Access Point)和Control字段组成。SNAP(Sub-network Access Protocol)由机构代码(Org Code)和类型(Type)字段组成。Org code三个字节都为0。Type字段的含义与Ethernet_II帧中的Type字段相同。IEEE802.3帧根据DSAP和SSAP字段的取值又可分为以下几类:当DSAP和SSAP都取特定值0xff时,802.3帧就变成了Netware-ETHERNET帧,用来承载NetWare类型的数据。当DSAP和SSAP都取特定值0xaa时,802.3帧就变成了ETHERNET_SNAP帧。ETHERNET_SNAP帧可以用于传输多种协议。DSAP和SSAP其他的取值均为纯IEEE802.3帧。数据帧传输数据链路层基于MAC地址进行帧的传输以太网在二层链路上通过MAC地址来唯一标识网络设备,并且实现局域网上网络设备之间的通信。MAC地址也叫物理地址,大多数网卡厂商把MAC地址烧入了网卡的ROM中。发送端使用接收端的MAC地址作为目的地址。以太帧封装完成后会通过物理层转换成比特流在物理介质上传输。以太网的MAC地址MAC地址由两部分组成,分别是供应商代码和序列号。其中前24位代表该供应商代码,由IEEE管理和分配。剩下的24位序列号由厂商自己分配。如同每一个人都有一个名字一样,每一台网络设备都用物理地址来标识自己,这个地址就是MAC地址。网络设备的MAC地址是全球唯一的。MAC地址长度为48比特,通常用十六进制表示。MAC地址包含两部分:前24比特是组织唯一标识符(OUI,Organizationally Unique Identifier),由IEEE统一分配给设备制造商。例如,华为的网络产品的MAC地址前24比特是0x00e0fc。后24位序列号是厂商分配给每个产品的唯一数值,由各个厂商自行分配(这里所说的产品可以是网卡或者其他需要MAC地址的设备)。数据帧的发送和接收单播局域网上的帧可以通过三种方式发送。第一种是单播,指从单一的源端发送到单一的目的端。每个主机接口由一个MAC地址唯一标识,MAC地址的OUI中,第一字节第8个比特表示地址类型。对于主机MAC地址,这个比特固定为0,表示目的MAC地址为此MAC地址的帧都是发送到某个唯一的目的端。在冲突域中,所有主机都能收到源主机发送的单播帧,但是其他主机发现目的地址与本地MAC地址不一致后会丢弃收到的帧,只有真正的目的主机才会接收并处理收到的帧。广播第二种发送方式是广播,表示帧从单一的源发送到共享以太网上的所有主机。广播帧的目的MAC地址为十六进制的FF:FF:FF:FF:FF:FF,所有收到该广播帧的主机都要接收并处理这个帧。广播方式会产生大量流量,导致带宽利用率降低,进而影响整个网络的性能。当需要网络中的所有主机都能接收到相同的信息并进行处理的情况下,通常会使用广播方式。组播第三种发送方式为组播,组播比广播更加高效。组播转发可以理解为选择性的广播,主机侦听特定组播地址,接收并处理目的MAC地址为该组播MAC地址的帧。组播MAC地址和单播MAC地址是通过第一字节中的第8个比特区分的。组播MAC地址的第8个比特为1,而单播MAC地址的第8个比特为0。当需要网络上的一组主机(而不是全部主机)接收相同信息,并且其他主机不受影响的情况下,通常会使用组播方式。发送与接收当主机接收到的数据帧所包含的目的MAC地址是自己时,会把以太网封装剥掉后送往上层协议。帧从主机的物理接口发送出来后,通过传输介质传输到目的端。共享网络中,这个帧可能到达多个主机。主机检查帧头中的目的MAC地址,如果目的MAC地址不是本机MAC地址,也不是本机侦听的组播或广播MAC地址,则主机会丢弃收到的帧。如果目的MAC地址是本机MAC地址,则接收该帧,检查帧校验序列(FCS)字段,并与本机计算的值对比来确定帧在传输过程中是否保持了完整性。如果帧的FCS值与本机计算的值不同,主机会认为帧已被破坏,并会丢弃该帧。如果该帧通过了FCS校验,则主机会根据帧头部中的Type字段来确定将帧发送给上层哪个协议处理。实际数据包分析:ARP类型数据包其他类型数据包:原文链接;以太网帧结构详解_曌赟的博客-CSDN博客发布于 2020-10-12 11:16计算机网络网络通信数据通信​赞同 53​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录网络协议详解网络协

Ethernet(以太网)基本工作原理 - 知乎

Ethernet(以太网)基本工作原理 - 知乎切换模式写文章登录/注册Ethernet(以太网)基本工作原理乐竹每天提醒自己,不要忘记梦想!以太网采用的介质控制方法是:CSMA/CD(带有冲突检测的载波侦听多路访问)Ethernet 数据发送流程CMSA/CD的发送流程可以简单概况为4步:先听后发、边听边发、冲突停止、延迟重发。(1)载波侦听过程每个主机在发送数据帧之前,首先要侦听总线的【忙/闲】状态。Ethernet网卡的收发器一直在接收总线上的信号,如果总线上有其他主机发送的信号,那么曼彻斯特解码器的解码时钟一直有输出;如果总线上没有信号发送,那么曼彻斯特(Manchester)解码器的时钟输出为0。Manchester解码器是网卡上的一个组件,解码时钟会根据线路上的信号以曼彻斯特编码解码。曼彻斯特编码因此,Manchester解码器的时钟信号可以反映出总线的【忙/闲】状态。(2)冲突检测方法载波侦听并不能完全消除冲突。———————————————————————————————————————电磁波在同轴电缆中传播速度约为 2×108m/s,如果局域网中两个【相隔最远】主机A和B相距 1000m,那主机A向主机B发送一帧数据要经过。t=\frac{1000}{2\times10^{8}}=5\times10^{-6} s=5\mu s 主机A发送数据后,要经过t后,主机B才接收到这个数据帧。在这5μs的时间内,主机B不知道主机A已经发送数据,它就有可能也向主机A发送数据。出现这种情况,主机A和主机B的这次发送就发生【冲突】。———————————————————————————————————————比较极端的冲突是:主机A向主机B发送数据,当数据信号快要到达主机B时,主机B也发送了数据。等到冲突信号传送回主机A时,已经经过了两倍的传播延迟2t(t=D/V,D为总线传输介质的最大长度,V是电磁波在介质中的传播速度)。冲突的数据帧可以传遍整个缆段,缆段上的主机都可以检测到冲突。缆段被称为【冲突域】,如果超过2t的时间没有检测出冲突,则该主机已取得【总线访问权】,因此将 2t定义为【冲突窗口】。冲突窗口是连接在一个缆段上所有主机能检测到冲突发生的最短时间。由于Ethernet物理层协议规定了总线最大长度,电磁波在介质中的传播速度是确定的,因此冲突窗口的大小也是确定的。最小帧长度与总线长度、发送速率之间的关系———————————————————————————————————————为了保证主机在发送一帧的过程可以检测到冲突,就要求发送一个最短帧的时间要超过冲突窗口的时间。因为帧发送并不是一瞬间全部发送完成,发送延迟 t = 帧长度/发送速率,发送速率一般不会改变,因此要在发送的过程中能检测到冲突需要规定一个最小帧长度最短帧长度为 L_{min} ,主机发送速率为S,发送短帧所需的时间为 L_{min} / S ,冲突窗口的值为2D/V \frac{L_{min}}{S}\geq \frac{2D}{V} 所以可以根据总线长度、发送速率和电磁波传播速度估计最小帧长度。———————————————————————————————————————冲突是指总线上同时出现两个或两个以上的发送信号,它们叠加后的信号波形不等于任何一个主机输出的信号波形。冲突检测有两种方法:比较法 和 编码违例判决法。比较法:主机在发送帧的同时,将其发送信号波形与总线上接收到的信号波形进行比较(信号在总线上是双向传播的,比如主机A、B、C,B发送信号A与C都能接收到)。如果两个信号波形不一致,说明冲突发生。 编码违例判决法:检查从总线上接收的信号波形是否符合曼彻斯特编码规律,不符合则说明发生冲突。64B是Ethernet的最小帧长度:如果一个主机发送一个最小帧,或者一个帧的前64个字节没有检测到冲突,说明该主机已经取得总线发送权,冲突窗口期又称为争用期。发现冲突、停止发送如果主机在发送过程中检测到冲突,主机要进入停止发送,随机延迟后重发的流程。随机延迟重发的第一步是:发送冲突加强干扰序列,保证有足够的冲突持续时间,使局域网中的所有主机都能检测出冲突存在,并立即丢弃冲突帧,减少由于冲突浪费的时间,提高信道利用率。冲突加强干扰序列信号长度为32bit随机延迟重发Ethernet规定一个帧的最大重发次数为16。后退延迟算法是:截止二进制指数后退延迟———————————————————————————————————————算法可表示为: \tau =2 \cdot R \cdot a τ:重新发送所需的后退延迟时间。a:冲突窗口的值。R:随机数,以主机地址为初始值生成随机数R。k:k=min(n,10),如果重发次数n小于10,则k=n,n≥10,则k=10.———————————————————————————————————————后退延迟时间τ到达后,节点将查询判断总线忙、闲状态,重新发送,如果再次遇到冲突,则重发次数+1,如果重发次数超过16时,表示发送失败,放弃发送该帧。CSMA/CD方法被定义为一种随机争用型介质控制访问方法。Ethernet帧结构Ethernet V2.0标准 和 IEEE 802.3标准的Ethernet帧结构的区别。———————————————————————————————————————Ethernet V2.0是在DEC、Intel(英特尔)、Xeror公司合作研究的,所以也称Ethernet V2.0帧结构为DIX帧结构(公司首字母)IEEE802.3标准对Ethernet帧结构也做出了规定,通常称之为 802.3帧———————————————————————————————————————(1)前导码 1. DIX帧的前8B是前导码,每个字节都是10101010。接收电路通过提取曼彻斯特编码的自含时钟,实现收发双方的比特同步。 说人话就是:编码时故意搞个特别的码在前面,通过长度告知解码器后面有货送来,注意接收。 通过前导码就可判断信号是有用信号还是干扰信号,否则忽略不解码。 2. 802.3帧的前导码,每个字节都是10101010。但是有一个10101011的帧前定界符。前56位(7B×8)前导码是为了保证在接收【目的地址】时,已经进入【稳定接收状态(识别出这个是有用信号)】在62位1010…1010比特序列后出现两个11,两个11后就是Ethernet帧的目的地址字段。 3. 前导码只是为了实现收发双方的比特同步与帧同步,在接收后不需要保留,也不计入帧头长度。(2)类型字段和长度字段 1. DIX帧的类型字段表示网络层使用的协议类型。——————————————————————————————————————— 例如:类型字段=0x0800表示网络层使用IPv4协议、类型字段=0x86DD表示网络层使用IPv6协议。——————————————————————————————————————— 2. Ethernet帧最小长度为64B,除去帧头(目的地址+源地址+源地址),数据字段最短为46B。数据字段最长为1500B,因此数据字段长度在46~1500B之间。 3. DIX帧没有长度字段,所以接收端等待物理线路上没有电平的跳变(帧发送结束),除去4B的校验字段,就能取出数据字段。(3)目的地址和源地址字段 1. 目的地址和源地址表示帧的接收节点和发送节点的硬件地址。 2. 硬件地址也叫物理地址、MAC地址、Ethernet地址。 3. 源地址必须是6B的MAC地址。 4. 目的地址可以是单播地址(发送给单一主机)、多播地址(发送给一部分主机)、广播地址(发送给所有主机)。(4)帧校验字段 1. 帧校验字段FCS( Frame Check Sequence)采用32位的CRC校验。 2. CRC校验范围:目的地址、源地址、长度、LLC(Logical Link Control:逻辑链路控制)数据等字段。Ethernet接收流程分析主机主要不发送数据帧就处于接收状态。帧目的地址检查: 1. 目的地址是单一主机的物理地址,并且是本主机地址—>接收。 2. 目的地址是组地址,并且本主机属于该组—>接收。 3. 目的地址是广播地址—>接收。 4. 如果以上3种目的地址都与本主机地址不匹配,丢弃该接收帧。帧接收: 1. CRC校验正确。 2. 帧长度正确。 3. 如果1、2都正确,将帧中的数据发送到网络层,否则报告”接收失败“进入帧结束状态。帧校验: 1. CRC校验正确,但是帧长度不对,则报告“帧长度错”。 2. 如果校验出错,判断接收帧是不是8bit的整数倍(字段长度的单位是字节,1B=8bit,接收帧长度正常的话肯定是8bit的整数倍)☆ 如果不是8bit的整数倍,则报告“帧比特出错”。☆ 如果没有发现比特丢失或者比特位对位错,则报告“帧校验错”。 3. 进入结束状态。帧间最小间隔 1. 为保证网卡能正确、连续的处理接收帧,要规定一个帧间最小间隔 (网卡处理接收帧要时间、虽然很短) 2. 规定Ethernet帧的最小间隔为9.6μsEthernet网卡网卡由三部分组成:网卡与传输介质的接口(RJ45)、Ethernet数据链路控制器、网卡与主机的接口(主板的I/O扩展槽)。Ethernet数据链路控制器的功能:实现发送数据编码、接收数据解码、CRC产生与校验、曼彻斯特编码与解码、CSMA/CD介质访问控制。网卡的物理地址写入网卡的只读存储器中,不会与世界上任何一台其他的计算机重复。编辑于 2022-08-10 18:41Ethernet以太网(Ethernet)工作原理​赞同 19​​4 条评论​分享​喜欢​收藏​申请

以太网中,为什么要区分802.3帧和EthernetII帧? - 知乎

以太网中,为什么要区分802.3帧和EthernetII帧? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册以太网(Ethernet)802.11SDH以太网中,为什么要区分802.3帧和EthernetII帧?802.3感觉完全可以用Ethernet II帧结构来替代,那为什么需要?我的想法是历史遗留问题? 还有哪些协议是承载在802.3帧之上的?(STP、…显示全部 ​关注者14被浏览33,486关注问题​写回答​邀请回答​好问题​添加评论​分享​6 个回答默认排序微思网络​已认证账号​ 关注以太网的帧结构分两种:第一种是Ethernet_II的帧第二种是IEEE802.3的帧帧样式之间的差异很小。两种标准之间最大的差异是 802.3 中增加了帧首定界符 (SFD),并且“类型”字段变为“长度”字段。前导码和帧首定界符字段:前导码(7 个字节)和帧首定界符 (SFD)(也称为帧首)(1 个字节)字段用于发送设备与接收设备之间的信号同步。帧的这前八个字节用于引起接收节点的注意。前几个字节的实质作用是告诉接收方准备接收新帧。目的MAC地址字段:该 6 字节字段是预期接收方的标识符。此地址被第 2 层用来协助设备确定帧是否发送到目的地。帧中的地址将会与设备中的 MAC 地址进行比对。如果匹配,设备就接受该帧。源MAC地址字段:该 6 字节字段标识发出帧的网卡或接口。长度字段:在 1997 年以前的所有 IEEE 802.3 标准中,“长度”字段定义帧的数据字段的准确长度。此字段后来被用作 FCS 的一部分,用来确认是否正确收到报文。否则,该字段将用于描述存在哪个上层协议。如果两个二进制八位数值等于或大于 0x0600 十六进制值或 1536 十进制值,则数据字段的内容将根据指定的 EtherType 协议进行解码。而如果值等于或小于 0x05DC 十六进制值或 1500 十进制值,则使用“长度”字段指定使用 IEEE 802.3 帧格式。这就是以太网 II 帧和 802.3 帧的区别。数据字段:该字段(46 - 1500 个字节)包含来自较高层的封装数据(一般是第 3 层 PDU 或更常见的 IPv4 数据包)。所有帧至少必须有 64 个字节。如果封装的是小数据包,则帧使用填充位增大到最小值。帧校验序列字段:“帧校验序列 (FCS)”字段(4 个字节)用于检测帧中的错误。它使用的是循环冗余校验 (CRC)。发送设备在帧的 FCS 字段中包含 CRC 的结果。接收设备接收帧并生成 CRC 以查找错误。如果计算匹配,就不会发生错误。计算不匹配则表明数据已经改变;因此帧会被丢弃。数据改变可能是由于代表比特的电信号中断所致。网络里面通常存在两种流量:业务流量和协议信令流量EthernetII通常用于封装业务流量:(以下报文是ICMP报文)IEEE 802.3通常用于封装协议信令流量:(以下报文是生成树BPDU报文)发布于 2023-03-13 15:08​赞同 5​​1 条评论​分享​收藏​喜欢收起​塞鸿北度​汽车电子嵌入式软件工程师​ 关注我感觉这个确实属于历史遗留问题,在1980年的时候,DEC,Intel 和 Xerox 定义了 Ethernet II, 在1983年的时候,IEEE定义了 802.3 的 Ethernet. 之后再定义的协议,有的是基于 Ethernet II,有的是基于 802.3. 使用 802.3 时,需要配置 802.3 帧中的 DSAP/SSAP,来确定 802.3 帧的 data field 里是什么类型的数据。同样的,使用 Ethernet II 时需要配置 Ethernet II 中的 EtherType,来确定 Ethernet II 帧的 data field 里是什么类型的数据。802.3 规定了一些可供用户选择的用来设置 DSAP/SSAP 的值,同样的,Ethernet II 也规定了一些可供用户选择的用来设置 EtherType 的值。但两个协议所规定的这些值,或者说是可以配置的 data field 的数据类型并不相同,所以这两个协议并不能互相替换,只能根据具体情况,选择使用。IEEE定义的 STP、RSTP 以及MSTP 是基于 802.3 帧的。发布于 2021-12-31 19:03​赞同 6​​添加评论​分享​收藏​喜欢

以太网详解(二) - 知乎

以太网详解(二) - 知乎首发于网络工程师切换模式写文章登录/注册以太网详解(二)swiers思唯网络学苑5、最小帧长由于CSMA/CD算法的限制,以太网帧必须不能小于某个最小长度。以太网中,最小帧长为64字节,这是由最大传输距离和冲突检测机制共同决定的。 规定最小帧长是为了避免这种情况发生:A站点已经将一个数据包的最后一个Bit发送完毕,但这个报文的第一个Bit还没有传送到距离很远的B站点。B站点认为线路空闲继续发送数据,导致冲突。图1 Ethernet_II的帧结构高层协议必须保证Data域至少包含46字节,这样加上以太网帧头的14字节和帧尾的4字节校验码正好满足64字节的最小帧长,如上图1所示。如果实际数据不足46个字节,则高层协议必须填充一些数据单元。6、以太网的双工模式以太网的物理层存在半双工和全双工两种模式。6.1、半双工:半双工的工作模式:任意时刻只能接收数据或者发送数据。采用CSMA/CD机制。有最大传输距离的限制。HUB工作在半双工模式。6.2全双工:在有L2交换机取代了HUB组建以太网后,以太网由共享式转变为交换式。而且用全双工代替了半双工,传输数据帧的效率大大提高,最大吞吐量达到双倍速率。全双工从根本上解决了以太网的冲突问题,以太网从此告别CSMA/CD。全双工,同一时刻可以接收和发送数据。最大吞吐量达双倍速率。消除了半双工的物理距离限制。当前制造的网卡、二层设备、三层设备都支持全双工模式,HUB除外。实现全双工的硬件保证:支持全双工的网卡芯片;收发线路完全分离的物理介质;点到点的连接。7、以太网的自协商7.1、以太网自动协商的目的最早的以太网都是10M半双工的,所以需要CSMA/CD等一系列机制保证系统的稳定性。随着技术的发展,出现了全双工,接着又出现了100M,以太网的性能大大改善。但是随之而来的问题是:如何保证原有以太网络和新以太网的兼容?于是,提出了自动协商技术来解决这种矛盾。自动协商的主要功能就是使物理链路两端的设备通过交互信息自动选择同样的工作参数。自动协商的内容主要包括双工模式、运行速率以及流控等参数。一旦协商通过,链路两端的设备就锁定在同样的双工模式和运行速率。以太网速率双工自协商在如下标准中定义:百兆以太网标准:IEEE 802.3u,IEEE 802.3u规范将自协商作为可选功能。千兆以太网标准:IEEE 802.3z,IEEE 802.3z规范将自协商作为强制功能,所有设备必须遵循并且必须默认启用自协商。7.2、以太网自动协商原理自动协商是网络设备间建立连接的一种方式。它允许一个网络设备将自己所支持的工作模式信息传达给网络上的对端,并接受对端可能传递过来的信息。设备双方根据彼此工作模式信息的交集,按照双方都支持的最优工作模式建立连接。对于使用双绞线连接的以太网,如果没有数据传输时,链路并不是一直空闲,而是每隔16ms发送一个高脉冲,用来维护链路层的连接,这种脉冲成为NLP(Normal Link Pulse)码流。 在NLP码流中再插入一些频率更高的脉冲,可用来传递更多的信息,这串脉冲成为FLP(Fast Link Pulse)码流,如下图1所示。自协商功能的基本机制就是将协商信息封装进FLP码流中,以达到自协商的目的。图1 脉冲插入示意图对于使用光模块和光纤连接的以太网,与使用双绞线连接的以太网类似,也是靠发送码流来进行自协商的,这种码流称为C码流,也就是配置(Configuration)码流。与电口不同的是,光口一般不协商速率,并且一般工作在双工模式,所以自协商一般只用来协商流控。如果协商通过,网卡就把链路置为激活状态,可以开始传输数据了。如果不能通过,则该链路不能使用。如果有一端不支持自动协商,则支持自动协商的一端选择一种默认的方式工作,一般情况下是10M半双工模式。自协商完全由物理层芯片设计实现,IEEE 802.3规范要求在下列任一情况下启动自协商:链路中断后恢复;设备重新上电;任何一端设备复位;有重新自协商(Renegotiation)请求。除此之外,连接双方并不会一直发送自协商码流。自协商并不使用专用数据包或带来任何高层协议开销。接口的自动协商规则:当接口对接时,双方能否正常通信和两端接口设置的工作模式是否匹配相关。当两端接口都工作在相同类型的非自协商模式时,双方可以正常通信。当两端接口都工作在自协商模式时,双方通过协商可以正常通信,最终的协商结果取决于能力低的一端,通过自协商功能还可以协商流量控制功能。当两端接口一端的工作模式为自协商,对端为非自协商时,接口最终协商的工作模式和对端设置的工作模式相关。8冲突域和广播域8.1、冲突域在传统的以粗同轴电缆为传输介质的以太网中,同一介质上的多个节点共享链路的带宽,争用链路的使用权,这样就会发生冲突,CSMA/CD机制中当冲突发生时,网络就要进行回退,这段回退的时间内链路上不传送任何数据。而且这种情况是不可避免的。同一介质上的节点越多,冲突发生的概率越大。这种连接在同一导线上的所有节点的集合就是一个冲突域。冲突域内所有节点竞争同一带宽,一个节点发出的报文(无论是单播、组播、广播)其余节点都可以收到。8.2、广播域因为网络中使用了广播,会占用带宽,降低设备的处理效率,必须对广播加以限制。比如ARP使用广播报文从IP地址来解析MAC地址。全1MAC地址FFFF-FFFF-FFFF为广播地址,所有节点都会处理目的地址为广播地址的数据帧。这种一个节点发送一个广播报文其余节点都能够收到的节点的集合,就是一个广播域。传统的网桥可以根据MAC表对单播报文进行转发,对于广播报文向所有的接口都转发,所以网桥的所有接口连接的节点属于一个广播域,但是每个接口属于一个单独冲突域。9、MAC子层MAC(Media Access Control)子层负责完成下列任务:9.1、提供物理链路的访问MAC子层是物理层相关的,也就是说,不同的物理层有不同的MAC子层来进行访问。在以太网中,主要存在两种MAC子层:半双工MAC:物理层运行模式是半双工时提供访问。全双工MAC:物理层运行模式是全双工时提供访问。这两种MAC都集成在网卡中,网卡初始化的时候一般进行自动协商,根据自动协商的结果决定运行模式,然后根据运行模式选择相应的访问MAC。9.2、链路级的站点标识在数据链路层识别网络上的各个站点。也就是说,在该层次保留了一个站点地址,即MAC地址,来标识网络上的唯一一个站点。为了进行站点标识,在MAC子层用MAC地址来唯一标识一个站点。MAC地址由IEEE管理,以块为单位进行分配。一个组织(一般是制造商)从IEEE获得唯一的地址块,称为一个组织的OUI(Organizationally Unique Identifier)。获得OUI的组织可用该地址块为16777216个设备分配地址。MAC地址有48Bit,但通常被表示为12位的点分十六进制数。例如,48Bit的MAC地址000000001110000011111100001110011000000000110100,表示为12位点分十六进制就是00e0.fc39.8034。每个MAC地址的前6位(点分十六进制)代表OUI,后6位由厂商自己分配。例如,地址00e0.fc39.8034,前面的00e0.fc是IEEE分配给华为公司的OUI,后面的39.8034是由华为公司自己分配的地址编号。MAC地址中的第2bit指示该地址是全局唯一还是局部唯一。以太网一直使用全局唯一地址。MAC地址可分为下面几种类别:1、物理MAC地址这种类型的MAC地址唯一的标识了以太网上的一个终端,这样的地址是固化在硬件(如网卡)里面的。2、广播MAC地址这是一个通用的MAC地址,用来表示网络上的所有终端设备。广播MAC地址48Bit全是1,即ffff.ffff.ffff。3、组播MAC地址这是一个逻辑的MAC地址,用于代表网络上的一组终端。组播MAC地址第8Bit是1,例如000000011011101100111010101110101011111010101000。9.3、链路级的数据传输从LLC子层接收数据,附加上MAC地址和控制信息后把数据发送到物理链路上;在这个过程中提供校验等功能。数据的收发过程如下:当上层要发送数据的时候,把数据提交给MAC子层。MAC子层把上层提交来的数据放入缓存区。然后加上目的MAC地址和自己的MAC地址(源MAC地址),计算出数据帧的长度,形成以太网帧。以太网帧根据目的MAC地址被发送到对端设备。对端设备用帧的目的MAC地址,跟MAC地址表中的条目进行比较。只要有一项匹配,则接收该以太网帧。若无任何匹配的项目,则丢弃该以太网帧。以上描述的是单播的情况。如果上层应用程序加入一个组播组,数据链路层根据应用程序加入的组播组形成一个组播MAC地址,并把该组播MAC地址加入MAC地址表。这样当有针对该组的数据帧的时候,MAC子层就接收该数据帧并向上层发送。10、LLC子层在前文的介绍中提到了MAC子层形成的帧结构,包括IEEE802.3的帧和ETHERNET_II帧。在ETHERNET_II帧中,由Type字段区分上层协议,这时候就没有必要实现LLC子层,仅包含一个MAC子层。IEEE802.3帧中的LLC子层除了定义传统的链路层服务之外,还增加了一些其他有用的特性。这些特性都由DSAP、SSAP和Control字段提供。例如以下三种类型的点到点传输服务:1、无连接的数据包传输服务目前的以太网实现就是这种服务。2、面向连接的可靠的数据传输服务预先建立连接再传输数据,数据在传输过程中可靠性得到保证。3、无连接的带确认的数据传输服务。该类型的数据传输服务不需要建立连接,但它在数据的传输中增加了确认机制,使可靠性大大增加。下面通过一个例子来说明SSAP和DSAP的应用。假设终端系统A和终端系统B要使用面向连接的可靠的数据传输服务,这时候会发生如下过程:A给B发送一个数据帧,请求建立一个面向连接的可靠连接。B接收到以后,判断自己的资源是否够用(即是否建立了太多的连接),如果够用,则返回一个确认信息,该确认信息中包含了识别该连接的SAP值。A接收到回应后,知道B已经在本地建立了跟自己的连接。A也创建一个SAP值,来表示该连接,并发一个确认给B,连接建立。A的LLC子层把自己要传送的数据进行封装,其中DSAP字节填写的是B返回的SAP,SSAP字节填写的是自己创建的SAP,然后发给MAC子层。A的MAC子层加上MAC地址和LENGTH字段之后,发送到数据链路上。B的MAC子层接收到该数据帧之后,提交给LLC子层,LLC子层根据DSAP字段判断出该数据帧属于的连接。B根据该连接的类型进行相应的校验和确认,通过这些校验和确认后,才向上层发送。数据传输完毕之后,A给B发送一个数据帧来通知B拆除连接,通信结束。11、以太网帧结构11.1、Ethernet_II的帧结构图1 Ethernet_II的帧结构Ethernet_II的帧中各字段说明如下表1所示。 11.2、IEEE802.3的帧结构图2 IEEE802.3的帧结构如下图2所示,IEEE802.3帧格式类似于Ethernet_II帧,只是Ethernet_II帧的Type域被802.3帧的Length域取代,并且占用了Data字段的8个字节作为LLC和SNAP字段。其他字段请参见Ethernet_II的帧的字段说明。IEEE802.3帧根据DSAP和SSAP字段的取值又可分为以下几类:当DSAP和SSAP都取特定值0xff时,802.3帧就变成了Netware-ETHERNET帧,用来承载NetWare类型的数据。当DSAP和SSAP都取特定值0xaa时,802.3帧就变成了ETHERNET_SNAP帧。ETHERNET_SNAP帧可以用于传输多种协议。因此,SNAP可以被看作一种扩展,它允许厂商创建自己的以太网传输协议。ETHERNET_SNAP标准由IEEE802.1委员会制定,以保证IEEE802.3局域网和以太网之间的互操作性。DSAP和SSAP其他的取值均为纯IEEE802.3帧。发布于 2020-12-28 09:59以太网(Ethernet)计算机网络交换机​赞同 14​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录网络

以太网(Ethernet) - 知乎

以太网(Ethernet) - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册以太网(Ethernet)以太网的标准拓扑结构为总线型拓扑,但目前的快速以太网(100BASE-T、1000BASE-T标准)为了减少冲突,将能提高的网络速度和使用效率最大化,使用交换机(Switch hub)来进行网络连…查看全部内容关注话题​管理​分享​百科讨论精华视频等待回答详细内容以太网(英语:Ethernet)是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问控制的内容。以太网是目前应用最普遍的局域网技术,取代了其他局域网标准如令牌环、FDDI和ARCNET。以太网的标准拓扑结构为总线型拓扑,但目前的快速以太网(100BASE-T、1000BASE-T标准)为了减少冲突,将能提高的网络速度和使用效率最大化,使用交换机(Switch hub)来进行网络连接和组织。如此一来,以太网的拓扑结构就成了星型;但在逻辑上,以太网仍然使用总线型拓扑和CSMA/CD(Carrier Sense Multiple Access/Collision Detection,即载波多重访问/碰撞侦测)的总线技术。概述:1990年代的以太网网卡或叫NIC(Network Interface Card,以太网适配器)。这张卡可以支持基于同轴电缆的10BASE2 (BNC连接器,左)和基于双绞线的10BASE-T(RJ-45,右)。以太网实现了网络上无线电系统多个节点发送信息的想法,每个节点必须获取电缆或者信道才能传送信息,有时也叫作以太(Ether)。这个名字来源于19世纪的物理学家假设的电磁辐射媒体——光以太。 每一个节点有全球唯一的48位地址也就是制造商分配给网卡的MAC地址,以保证以太网上所有节点能互相鉴别。由于以太网十分普遍,许多制造商把以太网卡直接集成进计算机主板。以太网通讯具有自相关性的特点,这对于电信通讯工程十分重要。CSMA/CD共享介质以太网:带冲突检测的载波侦听多路访问(CSMA/CD)技术规定了多台电脑共享一个通道的方法。这项技术最早出现在1960年代由夏威夷大学开发的ALOHAnet,它使用无线电波为载体。这个方法要比令牌环网或者主控制网简单。当某台电脑要发送信息时,在以下行动与状态之间进行转换:开始 - 如果线路空闲,则启动传输,否则跳转到第4步。发送 - 如果检测到冲突,继续发送数据直到达到最小回报时间(min echo receive interval)以确保所有其他转发器和终端检测到冲突,而后跳转到第4步。成功传输 - 向更高层的网络协议报告发送成功,退出传输模式。线路繁忙 - 持续等待直到线路空闲。线路空闲 - 在尚未达到最大尝试次数之前,每隔一段随机时间转到第1步重新尝试。超过最大尝试传输次数 - 向更高层的网络协议报告发送失败,退出传输模式。就像在没有主持人的座谈会中,所有的参加者都通过一个共同的介质(空气)来相互交谈。每个参加者在讲话前,都礼貌地等待别人把话讲完。如果两个客人同时开始讲话,那么他们都停下来,分别随机等待一段时间再开始讲话。这时,如果两个参加者等待的时间不同,冲突就不会出现。如果传输失败超过一次,将延迟指数增长时间后再次尝试。延迟的时间通过截断二进制指数后移(英语:Exponential_backoff)(truncated binary exponential backoff)算法来实现。最初的以太网是采用同轴电缆来连接各个设备的。电脑通过一个叫做附加单元接口(Attachment Unit Interface,AUI)的收发器连接到电缆上。一条简单网路线对于一个小型网络来说很可靠,而对于大型网络来说,某处线路的故障或某个连接器的故障,都会造成以太网某个或多个网段的不稳定。因为所有的通信信号都在共享线路上传输,即使信息只是想发给其中的一个终端(destination),却会使用广播的形式,发送给线路上的所有电脑。在正常情况下,网络接口卡会滤掉不是发送给自己的信息,接收到目标地址是自己的信息时才会向CPU发出中断请求,除非网卡处于混杂模式(Promiscuous mode)。这种“一个说,大家听”的特质是共享介质以太网在安全上的弱点,因为以太网上的一个节点可以选择是否监听线路上传输的所有信息。共享电缆也意味着共享带宽,所以在某些情况下以太网的速度可能会非常慢,比如电源故障之后,当所有的网络终端都重新启动时。以太网中继器和集线器:在以太网技术的发展中,以太网集线器(Ethernet Hub)的出现使得网络更加可靠,接线更加方便。因为信号的衰减和延时,根据不同的介质以太网段有距离限制。例如,10BASE5同轴电缆最长距离500米 (1,640英尺)。最大距离可以通过以太网中继器实现,中继器可以把电缆中的信号放大再传送到下一段。中继器最多连接5个网段,但是只能有4个设备(即一个网段最多可以接4个中继器)。这可以减轻因为电缆断裂造成的问题:当一段同轴电缆断开,所有这个段上的设备就无法通讯,中继器可以保证其他网段正常工作。类似于其他的高速总线,以太网网段必须在两头以电阻器作为终端。对于同轴电缆,电缆两头的终端必须接上被称作“终端器”的50欧姆的电阻和散热器,如果不这么做,就会发生类似电缆断掉的情况:总线上的AC信号当到达终端时将被反射,而不能消散。被反射的信号将被认为是冲突,从而使通信无法继续。中继器可以将连在其上的两个网段进行电气隔离,增强和同步信号。大多数中继器都有被称作“自动隔离”的功能,可以把有太多冲突或是冲突持续时间太长的网段隔离开来,这样其他的网段不会受到损坏部分的影响。中继器在检测到冲突消失后可以恢复网段的连接。随着应用的拓展,人们逐渐发现星型的网络拓扑结构最为有效,于是设备厂商们开始研制有多个端口的中继器。多端口中继器就是众所周知的集线器(Hub)。集线器可以连接到其他的集线器或者同轴网络。第一个集线器被认为是“多端口收发器”或者叫做“fanouts”。最著名的例子是DEC的DELNI,它可以使许多台具有AUI连接器的主机共享一个收发器。集线器也导致了不使用同轴电缆的小型独立以太网网段的出现。像DEC和SynOptics这样的网络设备制造商曾经出售过用于连接许多10BASE-2细同轴线网段的集线器。非屏蔽双绞线(unshielded twisted-pair cables , UTP)最先应用在星型局域网中,之后也在10BASE-T中应用,最后取代了同轴电缆成为以太网的标准。这项改进之后,RJ45电话接口代替了AUI成为电脑和集线器的标准线路,非屏蔽3类双绞线/5类双绞线成为标准载体。集线器的应用使某条电缆或某个设备的故障不会影响到整个网络,提高了以太网的可靠性。双绞线以太网把每一个网段点对点地连起来,这样终端就可以做成一个标准的硬件,解决了以太网的终端问题。采用集线器组网的以太网尽管在物理上是星型结构,但在逻辑上仍然是总线型的,半双工的通信方式采用CSMA/CD的冲突检测方法,集线器对于减少数据包冲突的作用很小。每一个数据包都被发送到集线器的每一个端口,所以带宽和安全问题仍没有解决。集线器的总传输量受到单个连接速度的限制(10或100 Mbit/s),这还是考虑在前同步码、传输间隔、标头、档尾和封装上都是最小花费的情况。当网络负载过重时,冲突也常常会降低传输量。最坏的情况是,当许多用长电缆组成的主机传送很多非常短的帧(frame)时,可能因冲突过多导致网络的负载在仅50%左右程度就满载。为了在冲突严重降低传输量之前尽量提高网络的负载,通常会先做一些设定以避免类似情况发生。桥接和交换:尽管中继器在某些方面分隔了以太网网段,使得电缆断线的故障不会影响到整个网络,但它向所有的以太网设备转发所有的数据。这严重限制了同一个以太网网络上可以相互通信的机器数量。为了减轻这个问题,桥接方法被采用,在工作在物理层的中继器之基础上,桥接工作在数据链路层。通过网桥时,只有格式完整的数据包才能从一个网段进入另一个网段;冲突和数据包错误则都被隔离。通过记录分析网络上设备的MAC地址,网桥可以判断它们都在什么位置,这样它就不会向非目标设备所在的网段传递数据包。像生成树协议这样的控制机制可以协调多个交换机共同工作。早期的网桥要检测每一个数据包,因此当同时处理多个端口的时候,数据转发比Hub(中继器)来得慢。1989年网络公司Kalpana发明了EtherSwitch,第一台以太网交换机。以太网交换机把桥接功能用硬件实现,这样就能保证转发数据速率达到线速。大多数现代以太网用以太网交换机代替Hub。尽管布线方式和Hub以太网相同,但交换式以太网比共享介质以太网有很多明显的优势,例如更大的带宽和更好的异常结果隔离设备。交换网络典型的使用星型拓扑,虽然设备在半双工模式下运作时仍是共享介质的多节点网,但10BASE-T和以后的标准皆为全双工以太网,不再是共享介质系统。交换机启动后,一开始也和Hub一样,转发所有数据到所有端口。接下来,当它记录了每个端口的地址以后,他就只把非广播数据发送给特定的目的端口。因此线速以太网交换可以在任何端口对之间实现,所有端口对之间的通讯互不干扰。因为数据包一般只是发送到他的目的端口,所以交换式以太网上的流量要略微小于共享介质式以太网。然而,交换式以太网仍然是不安全的网络技术,因为它很容易因为ARP欺骗或者MAC满溢而瘫痪,同时网络管理员也可以利用监控功能抓取网络数据包。当只有简单设备(除Hub之外的设备)连接交换机端口时,整个网络可能处于全双工模式。如果一个网段只有2个设备,那么冲突探测也不需要了,两个设备可以随时收发数据。这时总带宽是链路的2倍,虽然双方的带宽相同,但没有发生冲突就意味着几乎能利用到100%的带宽。交换机端口和所连接的设备必须使用相同的双工设置。多数100BASE-TX和1000BASE-T设备支持自动协商特性,即这些设备通过信号来协调要使用的速率和双工设置。然而,如果自动协商功能被关闭或者设备不支持,则双工设置必须通过自动检测进行设置或在交换机端口和设备上都进行手工设置以避免双工错配——这是以太网问题的一种常见原因(设备被设置为半双工会报告迟发冲突,而设备被设为全双工则会报告runt)。许多较低层级的交换机没有手工进行速率和双工设置的能力,因此端口总是会尝试进行自动协商。当启用了自动协商但不成功时(例如其他设备不支持),自动协商会将端口设置为半双工。速率是可以自动感测的,因此将一个10BASE-T设备连接到一个启用了自动协商的10/100交换端口上时将可以成功地创建一个半双工的10BASE-T连接。但是将一个配置为全双工100Mb工作的设备连接到一个配置为自动协商的交换端口时(反之亦然)则会导致双工错配。即使电缆两端都设置成自动速率和双工模式协商,错误猜测还是经常发生而退到10Mbps模式。因此,如果性能差于预期,应该查看一下是否有计算机设置成10Mbps模式了,如果已知另一端配置为100Mbit,则可以手动强制设置成正确模式。.当两个节点试图用超过电缆最高支持数据速率(例如在3类线上使用100Mbps或者3类/5类线使用1000Mbps)通信时就会发生问题。不像ADSL或者传统的拨号Modem通过详细的方法检测链路的最高支持数据速率,以太网节点只是简单的选择两端支持的最高速率而不管中间线路,因此如果速率过高就会导致链路失效。解决方案为强制通讯端降低到电缆支持的速率。以太网类型:除了以上提到的不同帧类型以外,各类以太网的差别仅在速率和配线。因此,同样的网络协议栈软件可以在大多数以太网上执行。以下的章节简要综述了不同的正式以太网类型。除了这些正式的标准以外,许多厂商因为一些特殊的原因,例如为了支持更长距离的光纤传输,而制定了一些专用的标准。很多以太网卡和交换设备都支持多速率,设备之间通过自动协商设置最佳的连接速度和双工方式。如果协商失败,多速率设备就会探测另一方使用的速率但是默认为半双工方式。10/100以太网端口支持10BASE-T和100BASE-TX。10/100/1000支持10BASE-T、100BASE-TX和1000BASE-T。部分以太网类型局域网(英语:Local Area Network,简称LAN)是连接住宅、学校、实验室、大学校园或办公大楼等有限区域内计算机的计算机网络 。相比之下,广域网(WAN)不仅覆盖较大的地理距离,而且还通常涉及固接专线和对于互联网的链接。 相比来说互联网则更为广阔,是连接全球商业和个人电脑的系统。在历经使用了链式局域网(英语:ARCNET)、令牌环与AppleTalk技术后,以太网和Wi-Fi(无线网络连接)是现今局域网最常用的两项技术。机理:局域网(Local Area Network, LAN),又称内网。指覆盖局部区域(如办公室或楼层)的计算机网络。按照网络覆盖的区域(距离)不同,其他的网络类型还包括个人网、城域网、广域网等。早期的局域网网络技术都是各不同厂家所专有,互不兼容。后来,电机电子工程师学会推动了局域网技术的标准化,由此产生了IEEE 802系列标准。这使得在建设局域网时可以选用不同厂家的设备,并能保证其兼容性。这一系列标准覆盖了双绞线、同轴电缆、光纤和无线等多种传输介质和组网方式,并包括网络测试和管理的内容。随着新技术的不断出现,这一系列标准仍在不断的更新变化之中。以太网(IEEE 802.3标准)是最常用的局域网组网方式。以太网使用双绞线作为传输介质。在没有中继的情况下,最远可以覆盖200米的范围。最普及的以太网类型数据传输速率为100Mb/s,更新的标准则支持1000Mb/s和10Gb/s的速率。其他主要的局域网类型有令牌环和FDDI(光纤分布数字接口,IEEE 802.8)。令牌环网络采用同轴电缆作为传输介质,具有更好的抗干扰性;但是网络结构不能很容易的改变。FDDI采用光纤传输,网络带宽大,适于用作连接多个局域网的骨干网。近两年来,随着802.11标准的制定,无线局域网的应用大为普及。这一标准采用2.4GHz 和5.8GHz 的频段,数据传输速度最高可以达到300Mbps和866Mbps。局域网标准定义了传输介质、编码和介质访问等底层(一二层)功能。要使数据通过复杂的网络结构传输到达目的地,还需要具有寻址、路由和流量控制等功能的网络协议的支持。TCP/IP(传输控制协议/互联网络协议)是最普遍使用的局域网网络协议。它也是互联网所使用的网络协议。其他常用的局域网协议包括,IPX、AppleTalk等。在无线 LAN 中,用户可以在覆盖区域内不受限制地移动。无线网络因其易于安装而在住宅和小型企业中流行起来。大多数无线局域网都使用 Wi-Fi,因为它内置于智能手机、平板电脑和笔记本电脑中。客人通常可以通过热点服务上网。网络拨接互联网(英语:Internet)是指20世纪末期兴起电脑网络与电脑网络之间所串连成的庞大网络系统。这些网络以一些标准的网络协议相连。它是由从地方到全球范围内几百万个私人、学术界、企业和政府的网络所构成,通过电子、无线和光纤网络技术等等一系列广泛的技术联系在一起。互联网承载范围广泛的信息资源和服务,比方说相互关系的超文本文件,还有万维网(WWW)的应用、电子邮件、通话,以及文件共享服务。互联网的起源可以追溯到1960年代美国联邦政府委托进行的一项研究,目的是创建容错与电脑网络的通信。互联网的前身ARPANET最初在1980年代作为区域学术和军事网络连接的骨干。1980年代,NSFNET(英语:NSFNET)成为新的骨干而得到资助,以及其他商业化扩展得到了私人资助,这导致了全世界网络技术的快速发展,以及许多不同网络的合并结成更大的网络。到1990年代初,商业网络和企业之间的连接标志着向现代互联网的过渡。尽管互联网在1980年代只被学术界广泛使用,但商业化的服务和技术,令其极快的融入了现代每个人的生活。互联网并不等同万维网,互联网是指凡是能彼此通信的设备组成的网络就叫互联网,指利用TCP/IP通讯协定所创建的各种网络,是国际上最大的互联网,也称“国际互联网”。万维网是一个由许多互相链接的超文本组成的系统,通过互联网访问。在此定义下,万维网是互联网的一项服务。不过多数民众并不区分两者,常常混用。连接技术:任何需要使用互联网的计算机必须通过某种方式与互联网进行连接。互联网接入技术的发展非常迅速,带宽由最初的14.4Kbps发展到目前的100Mbps甚至1Gbps带宽,接入方式也由过去单一的电话拨号方式,发展成现在多样的有线和无线接入方式,接入终端也开始朝向移动设备发展。并且更新更快的接入方式仍在继续地被研究和开发。架构:最顶层的是一些应用层协议,这些协议定义了一些用于通用应用的数据报结构,包括FTP及HTTP等。中间层是UDP协议和TCP协议,它们用于控制数据流的传输。UDP是一种不可靠的数据流传输协议,仅为网络层和应用层之间提供简单的接口。而TCP协议则具有高的可靠性,通过为数据报加入额外信息,并提供重发机制,它能够保证数据不丢包、没有冗余包以及保证数据包的顺序。对于一些需要高可靠性的应用,可以选择TCP协议;而相反,对于性能优先考虑的应用如流媒体等,则可以选择UDP协议。最底层的是互联网协议,是用于报文交换网络的一种面向数据的协议,这一协议定义了数据包在网际传送时的格式。目前使用最多的是IPv4版本,这一版本中用32位定义IP地址,尽管地址总数达到43亿,但是仍然不能满足现今全球网络飞速发展的需求,因此IPv6版本应运而生。在IPv6版本中,IP地址共有128位,“几乎可以为地球上每一粒沙子分配一个IPv6地址”。IPv6目前并没有普及,许多互联网服务提供商并不支持IPv6协议的连接。但是,可以预见,将来在IPv6的帮助下,任何家用电器都有可能连入互联网。互联网承载着众多应用程序和服务,包括万维网、社交媒体、电子邮件、移动应用程序、多人电子游戏、互联网通话、文件分享和流媒体服务等。提供这些服务的大多数服务器托管于数据中心,并且通过高性能的内容分发网络访问。万维网(英语:World Wide Web)亦作WWW、Web、全球广域网,是一个透过互联网访问的,由许多互相链接的超文本组成的信息系统。英国科学家蒂姆·伯纳斯-李于1989年发明了万维网。1990年他在瑞士CERN的工作期间编写了第一个网页浏览器。网页浏览器于1991年1月向其他研究机构发行,并于同年8月向公众开放。罗伯特·卡里奥设计的Web图标万维网是信息时代发展的核心,也是数十亿人在互联网上进行交互的主要工具。网页主要是文本文件格式化和超文本置标语言(HTML)。除了格式化文字之外,网页还可能包含图片、视频、声音和软件组件,这些组件会在用户的网页浏览器中呈现为多媒体内容的连贯页面。万维网并不等同互联网,万维网只是互联网所能提供的服务其中之一,是靠着互联网运行的一项服务。参考文献: Wendell Odom. CCENT/CCNA ICND1 100-105 Official Cert Guide. Cisco Press. 2016: 43页. ISBN 978-1-58720-580-4.Internet协议观念与实现ISBN 9577177069Internet协议观念与实现ISBN 9577177069IEEE 802.3-2008 Section 3 Table 38-2 p.109IEEE 802.3-2008 Section 3 Table 38-6 p.111网络化生存,乔岗,中国城市出版社,1997年,ISBN 978-7-5074-0930-7Richard J. Smith, Mark Gibbs, Paul McFedries 著,毛伟、张文涛 译,Internet漫游指南,人民邮电出版社,1998年. ISBN 978-7-115-06663-3世界是平的,汤马斯·佛里曼 著,2005年出版. ISBN 978-986-80180-9-9内容采用CC BY-SA 3.0授权。浏览量2690 万讨论量9728  帮助中心知乎隐私保护指引申请开通机构号联系我们 举报中心涉未成年举报网络谣言举报涉企侵权举报更多 关于知乎下载知乎知乎招聘知乎指南知乎协议更多京 ICP 证 110745 号 · 京 ICP 备 13052560 号 - 1 · 京公网安备 11010802020088 号 · 京网文[2022]2674-081 号 · 药品医疗器械网络信息服务备案(京)网药械信息备字(2022)第00334号 · 广播电视节目制作经营许可证:(京)字第06591号 · 服务热线:400-919-0001 · Investor Relations · © 2024 知乎 北京智者天下科技有限公司版权所有 · 违法和不良信息举报:010-82716601 · 举报邮箱:jubao@zhihu.

以太网 - 维基百科,自由的百科全书

以太网 - 维基百科,自由的百科全书

跳转到内容

主菜单

主菜单

移至侧栏

隐藏

导航

首页分类索引特色内容新闻动态最近更改随机条目资助维基百科

帮助

帮助维基社群方针与指引互助客栈知识问答字词转换IRC即时聊天联络我们关于维基百科

搜索

搜索

创建账号

登录

个人工具

创建账号 登录

未登录编辑者的页面 了解详情

贡献讨论

目录

移至侧栏

隐藏

序言

1历史

2概述

3CSMA/CD共享介质以太网

4以太网中继器和集线器

5桥接和交换

6类型

开关类型子章节

6.1早期的以太网

6.210Mbps乙太網

6.3100Mbps以太网(快速以太网)

6.41Gbps以太网

6.510Gbps以太网

6.6100Gbps以太网

7参考文献

8参見

9外部链接

开关目录

以太网

76种语言

AfrikaansالعربيةAsturianuAzərbaycancaБеларускаяБългарскиবাংলাBrezhonegBosanskiCatalàکوردیČeštinaDanskDeutschΕλληνικάEnglishEsperantoEspañolEestiEuskaraفارسیSuomiVõroFrançaisGaeilgeGalegoગુજરાતીGaelgעבריתहिन्दीHrvatskiMagyarBahasa IndonesiaÍslenskaItaliano日本語Қазақшаಕನ್ನಡ한국어KurdîLatinaLëtzebuergeschLombardLietuviųLatviešuМакедонскиമലയാളംमराठीBahasa MelayuNederlandsNorsk nynorskNorsk bokmålਪੰਜਾਬੀPolskiپښتوPortuguêsRomânăРусскийSrpskohrvatski / српскохрватскиSimple EnglishSlovenčinaSlovenščinaShqipСрпски / srpskiSvenskaதமிழ்తెలుగుไทยTagalogTürkçeУкраїнськаاردوTiếng Việt吴语ייִדיש粵語

编辑链接

条目讨论

不转换

不转换简体繁體大陆简体香港繁體澳門繁體大马简体新加坡简体臺灣正體

阅读编辑查看历史

工具

工具

移至侧栏

隐藏

操作

阅读编辑查看历史

常规

链入页面相关更改上传文件特殊页面固定链接页面信息引用本页获取短URL下载二维码维基数据项目

打印/导出

下载为PDF打印页面

在其他项目中

维基共享资源

维基百科,自由的百科全书

電腦網路的類型

依覆盖范围排序列表

纳米网络

近場通訊(NFC)

藍牙

體域網

個人區域網絡(PAN)

 无线个人网

局域网(LAN)

 有线局域网

  以太网

  令牌环

  光纤分布式数据接口

 无线局域网(WLAN)

  Wi-Fi

  ZigBee

  Thread

  MMDS

  SMDS

 虚拟局域网(VLAN)

家庭网络(英语:Home network)(HAN)

存储区域网络(SAN)

园区网络(CAN)

骨幹網

城域网(MAN)

广域网(WAN)

 异步传输模式

 帧中继

 同步数字体系(SDH)

企业专用网络

虛擬私人網路(VPN)

雲端(英语:Internet area network)

互联网

星际互联网(IPN)

查论编

「Ethernet」的各地常用名稱笔记本电脑上已插上网路线的以太网接口中国大陸以太网 臺灣乙太網路

以太网(英語:Ethernet)是一种计算机局域网技术。IEEE組織的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问控制的内容。以太网是目前应用最普遍的局域网技术,取代了其他局域网标准如令牌环、FDDI和ARCNET。

以太网的标准拓扑结构为总线型拓扑,但目前的快速以太网(100BASE-T、1000BASE-T标准)为了减少冲突,將能提高的网络速度和使用效率最大化,使用交换机(Switch hub)来进行网络连接和组织。如此一來,以太网的拓扑结构就成了星型;但在逻辑上,以太网仍然使用总线型拓扑和CSMA/CD(Carrier Sense Multiple Access/Collision Detection,即載波多重存取/碰撞偵測)的总线技术。

历史[编辑]

以太网技术起源於施樂帕洛阿尔托研究中心的先锋技术项目。人们通常认为以太网发明于1973年,当年鲍勃.梅特卡夫(Bob Metcalfe)给他PARC的老板写了一篇有关以太网潜力的备忘录。但是梅特卡夫本人认为以太网是之后几年才出现的。在1976年,梅特卡夫和他的助手David Boggs发表了一篇名为《以太网:區域计算机网络的分布式封包交换技术》的文章。

網際網路协议套組

應用層

BGP

DHCP

DNS

FTP

HTTP

HTTPS

IMAP

LDAP

MGCP(英语:Media Gateway Control Protocol)

MQTT

NNTP

NTP

POP

ONC/RPC

RTP

RTSP

SIP

SMTP

SNMP

Telnet

TLS/SSL

SSH

XMPP

更多...

傳輸層

TCP

UDP

DCCP

SCTP

RSVP

更多...

網路層

IP

IPv4

IPv6

ICMP

ICMPv6

ECN

IGMP

OSPF

IPsec

RIP

更多...

連結層

ARP

NDP

Tunnels

L2TP

PPP

MAC

Ethernet

DSL

ISDN

FDDI

更多...

查论编

1979年,梅特卡夫为了开发个人电脑和局域网离开了施乐(Xerox),成立了3Com公司。3Com对DEC、英特尔和施乐进行游说,希望与他们一起将以太网标准化、规范化。这个通用的以太网标准于1980年9月30日提出。当时业界有两个流行的非公用网络标准令牌环网和ARCNET,在以太网浪潮的冲击下他们很快萎缩并被取代。而在此过程中,3Com也成了一个国际化的大公司。

梅特卡夫曾经开玩笑说,Jerry Saltzer为3Com的成功作出了贡献。Saltzer在一篇[哪個/哪些?]与他人合著的很有影响力的论文中指出,在理论上令牌环网要比以太网优越。受到此结论的影响,很多电脑厂商或犹豫不决或决定不把以太网接口做为机器的标准配置,这样3Com才有机会从销售以太网网卡大赚。这种情况也导致了另一种说法“以太网不适合在理论中研究,只适合在实际中应用”。也许只是句玩笑话,但这说明了这样一个技术观点:通常情况下,网络中实际的数据流特性与人们在局域网普及之前的估计不同,而正是因为以太网简单的结构才使局域网得以普及。梅特卡夫和Saltzer曾经在麻省理工学院MAC项目(Project MAC)的同一层楼工作,当时他正在做自己的哈佛大学毕业论文,在此期间奠定了以太网技术的理论基础。[來源請求]

概述[编辑]

1990年代的以太网网卡或叫NIC(Network Interface Card,以太网适配器)。这张卡可以支持基于同轴电缆的10BASE2 (BNC连接器,左)和基于双绞线的10BASE-T(RJ-45,右)。

以太网實作了网络上无线电系统多个节点发送信息的想法,每个节点必须取得电缆或者信道才能传送信息,有时也叫作以太(Ether)。这个名字来源于19世纪的物理学家假设的电磁辐射媒体——光以太。 每一个节点有全球唯一的48位地址也就是制造商分配给网卡的MAC地址,以保证以太网上所有節點能互相鉴别。由于以太网十分普遍,许多制造商把以太网卡直接集成进计算机主板。

以太网通讯具有自相关性的特点,这对于电信通讯工程十分重要。

CSMA/CD共享介质以太网[编辑]

带冲突检测的载波侦听多路访问(CSMA/CD)技术规定了多台电脑共享一个通道的方法。这项技术最早出现在1960年代由夏威夷大学开发的ALOHAnet,它使用无线电波为载体。这个方法要比令牌环网或者主控制网简单。当某台电脑要发送信息时,在以下行動與狀態之間進行轉換:

开始 - 如果线路空闲,则启动传输,否则跳转到第4步。

发送 - 如果检测到冲突,继续发送数据直到达到最小回報时间(min echo receive interval)以確保所有其他转发器和终端检测到冲突,而後跳轉到第4步。

成功传输 - 向更高层的网络协议报告发送成功,退出传输模式。

線路繁忙 - 持續等待直到线路空闲。

线路空闲 - 在尚未達到最大尝试次數之前,每隔一段随机时间转到第1步重新嘗試。

超过最大尝试传输次数 - 向更高层的网络协议报告发送失败,退出传输模式。

就像在没有主持人的座谈会中,所有的参加者都透過一个共同的媒介(空气)来相互交谈。每个参加者在讲话前,都礼貌地等待别人把话讲完。如果两个客人同时开始讲话,那么他们都停下来,分别随机等待一段时间再开始讲话。这时,如果两个参加者等待的时间不同,冲突就不会出现。如果传输失败超过一次,将延遲指数增长时间後再次嘗試。延遲的时间通过截斷二進位指數後移(英语:Exponential_backoff)(truncated binary exponential backoff)演算法来实现。

最初的以太网是采用同轴电缆来連接各个设备的。电脑透過一个叫做附加单元接口(Attachment Unit Interface,AUI)的收发器连接到电缆上。一條简单网路线对于一个小型网络来说很可靠,而对于大型网络来说,某处线路的故障或某个连接器的故障,都会造成以太网某个或多个网段的不稳定。

因为所有的通信信号都在共用线路上传输,即使信息只是想发给其中的一个终端(destination),卻會使用廣播的形式,發送給線路上的所有電腦。在正常情况下,网络接口卡会滤掉不是发送给自己的信息,接收到目标地址是自己的信息时才会向CPU发出中断请求,除非网卡处于混杂模式(Promiscuous mode)。这种“一个说,大家听”的特质是共享介质以太网在安全上的弱点,因为以太网上的一个节点可以选择是否监听线路上传输的所有信息。共享电缆也意味着共享带宽,所以在某些情况下以太网的速度可能会非常慢,比如电源故障之后,当所有的网络终端都重新启动时。

以太网中继器和集线器[编辑]

在以太网技术的发展中,以太网集线器(Ethernet Hub)的出现使得网络更加可靠,接线更加方便。

因为信号的衰减和延时,根据不同的介质以太网段有距离限制。例如,10BASE5同轴电缆最长距离500米 (1,640英尺)。最大距离可以透過以太网中继器实现,中继器可以把电缆中的信号放大再传送到下一段。中继器最多连接5个网段,但是只能有4个设备(即一个网段最多可以接4个中继器)。这可以减轻因为电缆断裂造成的问题:当一段同轴电缆断开,所有这个段上的设备就无法通讯,中继器可以保证其他网段正常工作。

类似于其他的高速总线,以太网网段必须在两头以电阻器作为终端。对于同轴电缆,电缆两头的终端必须接上被称作“终端器”的50欧姆的电阻和散热器,如果不这么做,就会发生类似电缆断掉的情况:总线上的AC信号当到达终端时将被反射,而不能消散。被反射的信号将被认为是冲突,从而使通信无法继续。中继器可以将连在其上的两个网段进行电气隔离,增强和同步信号。大多数中继器都有被称作“自动隔离”的功能,可以把有太多冲突或是冲突持续时间太长的网段隔离开来,这样其他的网段不会受到损坏部分的影响。中继器在检测到冲突消失后可以恢复网段的连接。

随着应用的拓展,人们逐渐发现星型的网络拓扑结构最为有效,于是设备厂商们开始研制有多个端口的中继器。多端口中继器就是众所周知的集线器(Hub)。集线器可以连接到其他的集线器或者同轴网络。

第一个集线器被认为是“多端口收发器”或者叫做“fanouts”。最著名的例子是DEC的DELNI,它可以使许多台具有AUI连接器的主机共用一个收发器。集线器也导致了不使用同轴电缆的小型独立以太网网段的出现。

像DEC和SynOptics这样的网络设备制造商曾经出售过用于连接许多10BASE-2细同轴线网段的集线器。

非屏蔽双绞线(unshielded twisted-pair cables , UTP)最先应用在星型局域网中,之后也在10BASE-T中应用,最後取代了同轴电缆成为以太网的标准。这项改进之后,RJ45电话接口代替了AUI成为电脑和集线器的标准線路,非屏蔽3类双绞线/5类双绞线成为标准载体。集线器的应用使某条电缆或某个设备的故障不会影响到整个网络,提高了以太网的可靠性。双绞线以太网把每一个网段点对点地连起来,这样终端就可以做成一个标准的硬件,解决了以太网的终端问题。

采用集线器组网的以太网尽管在物理上是星型结构,但在逻辑上仍然是总线型的,半双工的通信方式采用CSMA/CD的冲突检测方法,集线器对于减少封包冲突的作用很小。每一个数据包都被发送到集线器的每一个端口,所以带宽和安全问题仍没有解决。集线器的总傳輸量受到单个连接速度的限制(10或100 Mbit/s),这还是考虑在前同步码、傳輸間隔、檔頭、檔尾和封裝上都是最小花費的情况。当网络负载过重时,冲突也常常会降低傳輸量。最坏的情况是,当许多用长电缆组成的主机传送很多非常短的帧(frame)时,可能因衝突過多導致网络的负载在仅50%左右程度就滿載。为了在冲突严重降低傳輸量之前尽量提高网络的负载,通常会先做一些设定以避免類似情況發生。

桥接和交换[编辑]

尽管中继器在某些方面分隔了以太网网段,使得电缆断线的故障不会影响到整个网络,但它向所有的以太网设备转发所有的数据。这严重限制了同一个以太网网络上可以相互通信的机器数量。为了减轻这个问题,桥接方法被采用,在工作在物理层的中继器之基础上,桥接工作在数据链路层。透過橋接器时,只有格式完整的数据包才能从一个网段进入另一个网段;冲突和数据包错误则都被隔离。透過记录分析网络上设备的MAC地址,网桥可以判断它们都在什么位置,这样它就不会向非目标设备所在的网段传递数据包。像生成树协议这样的控制机制可以协调多个交换机共同工作。

早期的网桥要检测每一个数据包,因此當同时处理多个端口的时候,数据转发比Hub(中继器)來得慢。1989年网络公司Kalpana发明了EtherSwitch,第一台以太网交换机。以太网交换机把桥接功能用硬件实现,这样就能保证转发数据速率达到线速。

大多数现代以太网用以太网交换机代替Hub。尽管布线方式和Hub以太网相同,但交换式以太网比共享介质以太网有很多明显的优势,例如更大的带宽和更好的异常结果隔离设备。交换网络典型的使用星型拓扑,雖然设备在半双工模式下運作時仍是共享介质的多節点网,但10BASE-T和以后的标准皆為全双工以太网,不再是共享介质系统。

交换机啟動后,一開始也和Hub一樣,转发所有数据到所有端口。接下来,当它記錄了每个端口的地址以后,他就只把非广播数据发送给特定的目的端口。因此线速以太网交换可以在任何端口对之间实现,所有端口对之间的通讯互不干扰。

因为数据包一般只是发送到他的目的端口,所以交换式以太网上的流量要略微小于共享介质式以太网。然而,交换式以太网仍然是不安全的网络技术,因为它很容易因为ARP欺骗或者MAC满溢而瘫痪,同时网络管理员也可以利用监控功能抓取网络数据包。

当只有简单设备(除Hub之外的设备)連接交换机端口時,整个网络可能處於全双工模式。如果一个网段只有2个设备,那么冲突探测也不需要了,两个设备可以随时收发数据。這時总带宽是鏈路的2倍,雖然雙方的頻寬相同,但没有发生冲突就意味着几乎能利用到100%的带宽。

交换机端口和所连接的设备必须使用相同的双工设置。多数100BASE-TX和1000BASE-T设备支持自动协商特性,即这些设备透過信号来协调要使用的速率和双工设置。然而,如果自动协商功能被關閉或者设备不支持,则双工设置必须透過自动检测进行设置或在交换机端口和设备上都进行手工设置以避免双工错配——这是以太网问题的一种常见原因(设备被设置为半双工会报告迟发冲突,而设备被设为全双工则会报告runt)。许多較低層級的交换机没有手工进行速率和双工设置的能力,因此端口总是会尝试进行自动协商。当启用了自动协商但不成功时(例如其他设备不支持),自动协商会将端口设置为半双工。速率是可以自动感测的,因此将一个10BASE-T设备连接到一个启用了自动协商的10/100交换端口上时将可以成功地建立一个半双工的10BASE-T连接。但是将一个配置为全双工100Mb工作的设备连接到一个配置为自动协商的交换端口时(反之亦然)则会导致双工错配。

即使电缆两端都设置成自动速率和双工模式协商,错误猜测还是经常发生而退到10Mbps模式。因此,如果性能差于预期,应该查看一下是否有计算机设置成10Mbps模式了,如果已知另一端配置为100Mbit,则可以手动强制设置成正确模式。

当两个节点试图用超过电缆最高支持数据速率(例如在3类线上使用100Mbps或者3类/5类线使用1000Mbps)通信时就会发生问题。不像ADSL或者传统的拨号Modem透過详细的方法检测鏈路的最高支持数据速率,以太网节点只是简单的选择两端支持的最高速率而不管中间线路,因此如果速率过高就会导致鏈路失效。解决方案為强制通讯端降低到电缆支持的速率。

类型[编辑]

除了以上提到的不同帧类型以外,各类以太网的差别仅在速率和配线。因此,同样的网络协议栈软件可以在大多数以太网上执行。

以下的章节简要综述了不同的正式以太网类型。除了这些正式的标准以外,许多厂商因为一些特殊的原因,例如为了支持更长距离的光纤传输,而制定了一些专用的标准。

很多以太网卡和交换设备都支持多速率,设备之间透過自动协商设置最佳的连接速度和双工方式。如果协商失败,多速率设备就会探测另一方使用的速率但是默认为半双工方式。10/100以太网端口支持10BASE-T和100BASE-TX。10/100/1000支持10BASE-T、100BASE-TX和1000BASE-T。

部分以太网类型[1]

速度

常用名称

非正式的IEEE标准名称

正式的IEEE标准名称

线缆类型

最大传输距离

10Mbps

以太网

10BASE-T

802.3

双绞线

100m

100Mbps

快速以太网

100BASE-T

802.3u

双绞线

100m

1Gbps

吉比特以太网

1000BASE-LX

802.3z

光纤

5000m

1Gbps

吉比特以太网

1000BASE-T

802.3ab

双绞线

100m

10Gbps

10吉比特以太网

10GBASE-T

802.3an

双绞线

100m

早期的以太网[编辑]

参见:兆比特以太网

施乐以太网(Xerox Ethernet,又稱「全錄乙太網」)──是乙太網的雛型。最初的2.94Mbit/s以太网僅在全錄公司裡內部使用。而在1982年,Xerox與DEC及Intel組成DIX聯盟,並共同發表了Ethernet Version 2(EV2)的規格,並將它投入商場市場,且被普遍使用。而EV2的網絡就是目前受IEEE承認的10BASE5。[2]

10BROAD36 ──已经过时。一个早期的支持长距离以太网的标准。它在同轴电缆上使用,以一种类似线缆调制解调器系统的宽带调制技术。

1BASE5 ──也稱為星型局域网,速率是1Mbit/s。在商业上很失败,但同時也是双绞线的第一次使用。

10Mbps乙太網[编辑]

10BASE-T電纜

参见:十兆以太网

10BASE5(又稱粗纜(Thick Ethernet)或黃色電纜)──最早實現10 Mbit/s以太網。早期IEEE標準,使用單根RG-11同軸電纜,最大距離為500米,並最多可以連接100台電腦的收發器,而纜線兩端必須接上50歐姆的終端電阻。接收端透過所謂的「插入式分接頭」插入電纜的內芯和屏蔽層。在電纜終結處使用N型連接器。儘管由於早期的大量布設,到現在還有一些系統在使用,這一標準實際上被10BASE2取代。

10BASE2(又稱細纜(Thin Ethernet)或模擬網路)── 10BASE5後的產品,使用RG-58同軸電纜,最長轉輸距離約200米(實際為185米),僅能連接30台計算機,計算機使用T型適配器連接到帶有BNC連接器的網卡,而線路兩頭需要50歐姆的終結器。雖然在能力、規格上不及10BASE5,但是因為其線材較細、佈線方便、成本也便宜,所以得到更廣泛的使用,淘汰了10BASE5。由於雙絞線的普及,它也被各式的雙絞線網絡取代。

StarLAN ──第一個雙絞線上實現的以太網路標準10 Mbit/s。後發展成10BASE-T。

10BASE-T ──使用3類雙絞線、4類雙絞線、5類雙絞線的4根線(兩對雙絞線)100米。以太網集線器或以太網交換機位於中間連接所有節點。

FOIRL ──光纖中繼器鏈路。光纖以太網路原始版本。

10BASE-F ── 10Mbps以太網光纖標準通稱,2公里。只有10BASE-FL應用比較廣泛。

10BASE-FL ── FOIRL標準一種升級。

10BASE-FB ──用於連接多個Hub或者交換機的骨幹網技術,已廢棄。

10BASE-FP ──無中繼被動星型網,沒有實際應用的案例。

100Mbps以太网(快速以太网)[编辑]

参见:百兆以太网

快速以太网(Fast Ethernet)為IEEE在1995年發表的網路標準,能提供達100Mbps的傳輸速度。[2]

100BASE-T -- 下面三个100 Mbit/s双绞线标准通称,最远100米。

100BASE-TX -- 类似于星型结构的10BASE-T。使用2对电缆,但是需要5类电缆以达到100Mbit/s。

100BASE-T4 -- 使用3类电缆,使用所有4对线,半双工。由于5类线普及,已废弃。

100BASE-T2 -- 无产品。使用3类电缆。支持全双工使用2对线,功能等效100BASE-TX,但支持旧电缆。

100BASE-FX -- 使用多模光纤,最远支持400米,半双工连接 (保证冲突检测),2km全双工。

100VG AnyLAN -- 只有惠普支持,VG最早出现在市场上。需要4对三类电缆。也有人怀疑VG不是以太网。

苹果的千兆以太网络接口

1Gbps以太网[编辑]

参见:吉比特以太网

1000BASE-SX的光信號與電氣信號轉換器

1000BASE-T -- 1 Gbit/s介质超五类双绞线或6类双绞线。

1000BASE-SX -- 1 Gbit/s多模光纤(取決於頻率以及光纖半徑,使用多模光纖時最長距離在220M至550M之間)。[3]

1000BASE-LX -- 1 Gbit/s多模光纤(小於550M)、單模光纖(小於5000M)。[4]

1000BASE-LX10 -- 1 Gbit/s单模光纤(小于10KM)。长距离方案

1000BASE-LHX --1 Gbit/s单模光纤(10KM至40KM)。长距离方案

1000BASE-ZX --1 Gbit/s单模光纤(40KM至70KM)。长距离方案

1000BASE-CX -- 铜缆上达到1Gbps的短距离(小于25 m)方案。早于1000BASE-T,已废弃。

10Gbps以太网[编辑]

参见:10吉比特乙太網路

新的万兆以太网标准包含7种不同类型,分別适用于局域网、城域网和广域网。目前使用附加标准IEEE 802.3ae,将来会合并进IEEE 802.3标准。

10GBASE-CX4 -- 短距离铜缆方案用于InfiniBand 4x连接器和CX4电缆,最大长度15米。

10GBASE-SR -- 用于短距离多模光纤,根据电缆类型能达到26-82米,使用新型2GHz多模光纤可以达到300米。

10GBASE-LX4 -- 使用波分复用支持多模光纤240-300米,单模光纤超过10公里。

10GBASE-LR和10GBASE-ER -- 透過单模光纤分别支持10公里和40公里

10GBASE-SW、10GBASE-LW、10GBASE-EW。用于广域网PHY、OC-192 / STM-64 同步光纤网/SDH设备。物理层分别对应10GBASE-SR、10GBASE-LR和10GBASE-ER,因此使用相同光纤支持距离也一致。(无广域网PHY标准)

10GBASE-T -- 使用屏蔽或非屏蔽双绞线,使用CAT-6A类线至少支持100米传输。CAT-6类线也在较短的距离上支持10GBASE-T。

100Gbps以太网[编辑]

参见:100吉比特以太网

新的40G/100G以太网标准在2010年中制定完成,包含若干种不同的节制类型。目前使用附加标准IEEE 802.3ba。

40GBASE-KR4 -- 背板方案,最少距离1米。

40GBASE-CR4 / 100GBASE-CR10 -- 短距离铜缆方案,最大长度大约7米。

40GBASE-SR4 / 100GBASE-SR10 -- 用于短距离多模光纤,长度至少在100米以上。

40GBASE-LR4 / 100GBASE-LR10 -- 使用单模光纤,距离超过10公里。

100GBASE-ER4 -- 使用单模光纤,距离超过40公里。

参考文献[编辑]

^ Wendell Odom. CCENT/CCNA ICND1 100-105 Official Cert Guide. Cisco Press. 2016: 43页. ISBN 978-1-58720-580-4. 

^ 2.0 2.1 Internet協定觀念與實作ISBN 9577177069

^ IEEE 802.3-2008 Section 3 Table 38-2 p.109

^ IEEE 802.3-2008 Section 3 Table 38-6 p.111

参見[编辑]

5类双绞线

RJ45

Power over Ethernet

MII and PHY

网络唤醒

1G以太网

10G以太网

100G以太网

1000G以太网

虚拟局域网

生成树协议

通讯

Internet

以太网帧格式

外部链接[编辑]

IEEE 802.3 2002年标准(页面存档备份,存于互联网档案馆)

万兆以太网(页面存档备份,存于互联网档案馆)

以太网帧格式(页面存档备份,存于互联网档案馆)

万兆IP以太网白皮书

千兆以太网(1000BaseT)(页面存档备份,存于互联网档案馆)

查论编局域网技术之以太网家族速度

10Mbit/s

双绞线以太网

100Mbit/s

1Gbit/s

2.5和5Gbit/s

10Gbit/s

25和50Gbit/s(英语:25 Gigabit Ethernet)

40和100Gbit/s

200Gbit/s和400Gbit/s

常规

IEEE 802.3

乙太網路實體層(英语:Ethernet physical layer)

自动协商(英语:Autonegotiation)

以太网供电

以太类型

以太网联盟(英语:Ethernet Alliance)

流控制

巨型帧

历史

CSMA/CD

StarLAN(英语:StarLAN)

10BROAD36(英语:10BROAD36)

10BASE-FB(英语:10BASE-FB)

10BASE-FL(英语:10BASE-FL)

10BASE5(英语:10BASE5)

10BASE2(英语:10BASE2)

100BaseVG(英语:100BaseVG)

LattisNet(英语:LattisNet)

长距离(英语:Long Reach Ethernet)

应用程序

音频(英语:Audio over Ethernet)

运营商(英语:Carrier Ethernet)

数据中心(英语:Data center bridging)

高能效以太网

第一英里(英语:Ethernet in the first mile)

10G-EPON(英语:10G-EPON)

工業以太網

以太网供电

同步(英语:Synchronous Ethernet)

收发器

MAU(英语:Medium Attachment Unit)

GBIC

SFP

XENPAK

X2

XFP

SFP+

QSFP(英语:QSFP)

CFP(英语:C Form-factor Pluggable)

接口

AUI(英语:Attachment Unit Interface)

MDI

MII

GMII

XGMII

XAUI

分类

维基共享

查论编網際網路存取有线网络

线缆(英语:Cable Internet access)

拨号

DOCSIS

DSL

以太网

FTTx

G.hn(英语:G.hn)

HD-PLC

HomePlug

HomePNA(英语:HomePNA)

IEEE 1901(英语:IEEE 1901)

ISDN

MoCA(英语:Multimedia over Coax Alliance)

PON

电力线

宽带

无线个人局域网

藍牙

Li-Fi

无线USB

无线局域网

Wi-Fi

无线广域网

DECT

EV-DO

GPRS

HSPA

HSPA+

iBurst(英语:iBurst)

LTE

MMDS

Muni Wi-Fi

WiMAX

WiBro

卫星上网

查论编IEEE標準当前标准

488

754

Revision(英语:IEEE 754 revision)

829

830

1003

1014-1987(英语:VMEbus)

1016

1076

1149.1

1164(英语:IEEE 1164)

1219

1233

1275(英语:Open Firmware)

1278(英语:Distributed Interactive Simulation)

1284(英语:IEEE 1284)

1355(英语:IEEE 1355)

1364

1394

1451(英语:IEEE 1451)

1471(英语:IEEE 1471)

1491

1516(英语:High-level architecture (simulation))

1541-2002

1547(英语:IEEE 1547)

1584(英语:IEEE 1584)

1588(英语:Precision Time Protocol)

1596(英语:Scalable Coherent Interface)

1603(英语:IEEE 1603)

1613(英语:IEEE 1613)

1667(英语:IEEE 1667)

1675(英语:IEEE 1675-2008)

1685(英语:IP-XACT)

1800

1801(英语:Unified Power Format)

1900(英语:DySPAN)

1901(英语:IEEE 1901)

1902(英语:RuBee)

11073(英语:ISO/IEEE 11073)

12207(英语:IEEE 12207)

2030(英语:IEEE 2030)

14764

16085

16326

42010(英语:ISO/IEC 42010)

802系列802.1

p

Q

Qat(英语:Stream Reservation Protocol)

Qay(英语:Provider Backbone Bridge Traffic Engineering)

X

ad

AE(英语:IEEE 802.1AE)

ag(英语:IEEE 802.1ag)

ah(英语:IEEE 802.1ah-2008)

ak(英语:Multiple Registration Protocol)

aq

ax

802.11

Legacy

a

b

d(英语:IEEE 802.11d-2001)

e(英语:IEEE 802.11e-2005)

f(英语:Inter-Access Point Protocol)

g

h(英语:IEEE 802.11h-2003)

i(英语:IEEE 802.11i-2004)

j(英语:IEEE 802.11j-2004)

k(英语:IEEE 802.11k-2008)

n (Wi-Fi 4)

p

r

s

u(英语:IEEE 802.11u)

v(英语:IEEE 802.11v)

w(英语:IEEE 802.11w-2009)

y(英语:IEEE 802.11y-2008)

ac (Wi-Fi 5)

ad (WiGig)

af

ah

ai

aj

aq

ax (Wi-Fi 6)

ay (WiGig 2)

be (Wi-Fi 7)

.2

.3

.4

.5

.6(英语:IEEE 802.6)

.7(英语:IEEE 802.7)

.8

.9(英语:IEEE 802.9)

.10(英语:IEEE 802.10)

.12(英语:IEEE 802.12)

.15

.15.4(英语:IEEE 802.15.4)

.15.4a(英语:IEEE 802.15.4a)

.16

.18(英语:IEEE 802.18)

.20(英语:IEEE 802.20)

.21(英语:IEEE 802.21)

.22建议标准

P1363(英语:IEEE P1363)

P1619

P1823(英语:Universal Power Adapter for Mobile Devices)

过时标准

754-1985(英语:IEEE 754-1985)

854-1987(英语:IEEE 854-1987)

另见

IEEE標準協會

Category:IEEE标准

查论编电子计算机基本部件输入设备

鍵盤

數字鍵盤

影像掃描器

显示卡

圖形處理器

麦克风

定点设备

数码绘图板

游戏控制器

光筆(英语:Light pen)

鼠标

光學

指点杆

触摸板

觸控式螢幕

轨迹球

盲文显示机

声卡

聲音處理器(英语:Sound chip)

摄像头

虛擬(英语:Softcam)

输出设备

顯示器

螢幕

盲文显示机

打印机

繪圖儀(英语:Plotter)

揚聲器(英语:Computer speakers)

声卡

显示卡

移动存储

磁碟組(英语:Disk pack)

软盘

光碟

CD

DVD

BD

闪存

記憶卡

闪存盘

机箱

中央处理器

微处理器

主板

記憶體

隨機存取

BIOS

數據存貯器

硬盘

固态硬盘

混合固态硬盘

電源供應器

開關模式電源

金屬氧化物半導體場效電晶體

功率

電壓調節模組

网卡

傳真數據機(英语:Fax modem)

擴充卡

接口(英语:Computer port (hardware))

以太网

FireWire

並列

序列

PS/2

USB

Thunderbolt

DisplayPort/HDMI/DVI/VGA

SATA

TRS

规范控制

AAT: 300266018

GND: 4127501-9

J9U: 987007555681905171

LCCN: sh85045087

取自“https://zh.wikipedia.org/w/index.php?title=以太网&oldid=81300354”

分类:​乙太網路计算机总线隐藏分类:​含有英語的條目自2014年12月有非常模棱两可或者十分空泛语句的条目自2024年2月有未列明来源语句的条目包含AAT标识符的维基百科条目包含GND标识符的维基百科条目包含J9U标识符的维基百科条目包含LCCN标识符的维基百科条目

本页面最后修订于2024年2月19日 (星期一) 10:07。

本站的全部文字在知识共享 署名-相同方式共享 4.0协议之条款下提供,附加条款亦可能应用。(请参阅使用条款)

Wikipedia®和维基百科标志是维基媒体基金会的注册商标;维基™是维基媒体基金会的商标。

维基媒体基金会是按美国国內稅收法501(c)(3)登记的非营利慈善机构。

隐私政策

关于维基百科

免责声明

行为准则

开发者

统计

Cookie声明

手机版视图

开关有限宽度模式

以太网_百度百科

百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心以太网播报讨论上传视频计算机局域网技术收藏查看我的收藏0有用+10本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。以太网是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是应用最普遍的局域网技术,取代了其他局域网技术如令牌环、FDDI和ARCNET。中文名以太网外文名ethernet定    义局域网的一种发    源xerox(施乐)创建时间1980目录1以太网简介2以太网起源3类型介绍4经典以太网5交换式以太网6相关技术7以太网交换机8存在的问题9车载以太网10工业以太网以太网简介播报编辑以太网是现实世界中最普遍的一种计算机网络。以太网有两类:第一类是经典以太网,第二类是交换式以太网,使用了一种称为交换机的设备连接不同的计算机。经典以太网是以太网的原始形式,运行速度从3~10 Mbps不等;而交换式以太网正是广泛应用的以太网,可运行在100、1000和10000Mbps那样的高速率,分别以快速以太网、千兆以太网和万兆以太网的形式呈现。 [1]以太网的标准拓扑结构为总线型拓扑,但快速以太网(100BASE-T、1000BASE-T标准)为了减少冲突,将能提高的网络速度和使用效率最大化,使用交换机来进行网络连接和组织。如此一来,以太网的拓扑结构就成了星型;但在逻辑上,以太网仍然使用总线型拓扑和CSMA/CD(Carrier Sense Multiple Access/Collision Detection,即载波多重访问/碰撞侦测)的总线技术。以太网实现了网络上无线电系统多个节点发送信息的想法,每个节点必须获取电缆或者信道的才能传送信息,有时也叫作以太(Ether)。(这个名字来源于19世纪的物理学家假设的电磁辐射媒体-光以太。后来的研究证明光以太不存在。) 每一个节点有全球唯一的48位地址也就是制造商分配给网卡的MAC地址,以保证以太网上所有节点能互相鉴别。由于以太网十分普遍,许多制造商把以太网卡直接集成进计算机主板。以太网起源播报编辑以太网的故事始于ALOHA时期,确切的时间是在一个名叫Robert Metcalfe的学生获得麻省理工学院的学士学位后,搬到河对岸的哈佛大学攻读博士学位之后。在他学习期间,他接触到了Abramson的工作,他对此很感兴趣。从哈佛毕业之后,他决定前往施乐帕洛阿尔托研究中心正式工作之前留在夏威夷度假,以便帮助Abramson工作。当他到帕洛阿尔托研究中心,他看到那里的研究人员已经设计并建造出后来称为个人计算机的机器,但这些机器都是孤零零的;他便运用帮助Abramson工作获得的知识与同事David Boggs 设计并实现了第一个局域网。该局域网采用一个长的粗同轴电缆,以3Mbps速率运行。 [1]他们把这个系统命名为以太网,人们曾经认为通过它可以传播电磁辐射。 [1]类型介绍播报编辑早期的以太网兆比特以太网施乐以太网(Xerox Ethernet,又称“施乐以太网”)──是以太网的雏型。最初的2.94Mbit/s以太网仅在施乐公司里内部使用。而在1982年,Xerox与DEC及Intel组成DIX联盟,并共同发表了Ethernet Version 2(EV2)的规格,并将它投入商场市场,且被普遍使用。而EV2的网络就是受IEEE承认的10BASE5。10BROAD36──已经过时。一个早期的支持长距离以太网的标准。它在同轴电缆上使用,以一种类似线缆调制解调器系统的宽带调制技术。1BASE5──也称为星型局域网,速率是1Mbit/s。在商业上很失败,但同时也是双绞线的第一次使用。10Mbps以太网10BASE5(又称粗缆(Thick Ethernet)或黄色电缆)──最早实现10 Mbit/s以太网。早期IEEE标准,使用单根RG-11同轴电缆,最大距离为500米,并最多可以连接100台计算机的收发器,而缆线两端必须接上50欧姆的终端电阻。接收端透过所谓的“插入式分接头”插入电缆的内芯和屏蔽层。在电缆终结处使用N型连接器。尽管由于早期的大量布设,到现在还有一些系统在使用,这一标准实际上被10BASE2取代。10BASE2(又称细缆(Thin Ethernet)或模拟网上)── 10BASE5后的产品,使用RG-58同轴电缆,最长转输距离约200米(实际为185米),仅能连接30台计算器,计算器使用T型适配器连接到带有BNC连接器的网卡,而线路两头需要50欧姆的终结器。虽然在能力、规格上不及10BASE5,但是因为其线材较细、布线方便、成本也便宜,所以得到更广泛的使用,淘汰了10BASE5。由于双绞线的普及,它也被各式的双绞线网络取代。StarLAN──第一个双绞线上实现的以太网上标准10 Mbit/s。后发展成10BASE-T。10BASE-T──使用3类双绞线、4类双绞线、5类双绞线的4根线(两对双绞线)100米。以太网集线器或以太网交换机位于中间连接所有节点。FOIRL ──光纤中继器链路。光纤以太网上原始版本。10BASE-F ── 10Mbps以太网光纤标准通称,2公里。只有10BASE-FL应用比较广泛。10BASE-FL ── FOIRL标准一种升级。10BASE-FB ──用于连接多个Hub或者交换机的骨干网技术,已废弃。10BASE-FP ──无中继被动星型网,没有实际应用的案例。100Mbps以太网(快速以太网)参见:百兆以太网快速以太网(Fast Ethernet)为IEEE在1995年发表的网上标准,能提供达100Mbps的传输速度。100BASE-T-- 下面三个100 Mbit/s双绞线标准通称,最远100米。100BASE-TX-- 类似于星型结构的10BASE-T。使用2对电缆,但是需要5类电缆以达到100Mbit/s。100BASE-T4 -- 使用3类电缆,使用所有4对线,半双工。由于5类线普及,已废弃。100BASE-T2 -- 无产品。使用3类电缆。支持全双工使用2对线,功能等效100BASE-TX,但支持旧电缆。100BASE-FX-- 使用多模光纤,最远支持400米,半双工连接 (保证冲突检测),2km全双工。100VG AnyLAN -- 只有惠普支持,VG最早出现在市场上。需要4对三类电缆。也有人怀疑VG不是以太网。 [2]1Gbps以太网1000BASE-T-- 1 Gbit/s介质超五类双绞线或6类双绞线。1000BASE-SX-- 1 Gbit/s多模光纤(取决于频率以及光纤半径,使用多模光纤时最长距离在220M至550M之间)。1000BASE-LX-- 1 Gbit/s多模光纤(小于550M)、单模光纤(小于5000M)。1000BASE-LX10-- 1 Gbit/s单模光纤(小于10KM)。长距离方案1000BASE-LHX--1 Gbit/s单模光纤(10KM至40KM)。长距离方案1000BASE-ZX--1 Gbit/s单模光纤(40KM至70KM)。长距离方案1000BASE-CX-- 铜缆上达到1Gbps的短距离(小于25 m)方案。早于1000BASE-T,已废弃。10Gbps以太网参见:10吉比特以太网新的万兆以太网标准包含7种不同类型,分别适用于局域网、城域网和广域网。使用附加标准IEEE 802.3ae,将来会合并进IEEE 802.3标准。10GBASE-CX4 -- 短距离铜缆方案用于InfiniBand4x连接器和CX4电缆,最大长度15米。10GBASE-SR -- 用于短距离多模光纤,根据电缆类型能达到26-82米,使用新型2GHz多模光纤可以达到300米。10GBASE-LX4 -- 使用波分复用支持多模光纤240-300米,单模光纤超过10公里。10GBASE-LR和10GBASE-ER -- 透过单模光纤分别支持10公里和40公里10GBASE-SW、10GBASE-LW、10GBASE-EW。用于广域网PHY、OC-192 / STM-64同步光纤网/SDH设备。物理层分别对应10GBASE-SR、10GBASE-LR和10GBASE-ER,因此使用相同光纤支持距离也一致。(无广域网PHY标准)10GBASE-T-- 使用屏蔽或非屏蔽双绞线,使用CAT-6A类线至少支持100米传输。CAT-6类线也在较短的距离上支持10GBASE-T。100Gbps以太网参见:100G以太网新的40G/100G以太网标准在2010年中制定完成,包含若干种不同的节制类型。使用附加标准IEEE 802.3ba。40GBASE-KR4 -- 背板方案,最少距离1米。40GBASE-CR4 / 100GBASE-CR10 -- 短距离铜缆方案,最大长度大约7米。40GBASE-SR4 / 100GBASE-SR10 -- 用于短距离多模光纤,长度至少在100米以上。40GBASE-LR4 / 100GBASE-LR10 -- 使用单模光纤,距离超过10公里。100GBASE-ER4 -- 使用单模光纤,距离超过40公里。 [2]经典以太网播报编辑经典以太网用一个长电缆蜿蜒围绕着建筑物,这根电缆连接着所有的计算机。经典以太网的体系结构如下图《以太网》所示:以太网物理层以太网的每个版本都有电缆的最大长度限制(即无须放大的长度),这个范围内的信号可以正常传播,超过这个范围信号将无法传播。为了允许建设更大的网络,可以用中继器把多条电缆连接起来。中继器是一个物理层设备,它能接收、放大并在两个方向上重发信号。 [1]在这些电缆上,信息的发送使用曼彻斯特编码。 [1]MAC子层经典以太网使用1-坚持CSMA/CD算法,即当站有帧要发送时要侦听介质,一旦介质变为空闲便立即发送。在它们发送的同时监测信道上是否有冲突。如果有冲突,则立即终止传输,并发出一个短冲突加强信号,再等待一段随机时间后重发。 [1]交换式以太网播报编辑以太网的发展很快,从单根长电缆的典型以太网结构开始演变。单根电缆存在的问题,比如找出断裂或者松动位置等连接相关的问题,驱使人们开发出一种不同类型的布线模式。在这种模式中,每个站都有一条专用电线连接到一个中央集线器。集线器只是在电气上简单地连接所有连接线,就像把它们焊接在一起。集线器不能增加容量,因为它们逻辑上等同于单根电缆的经典以太网。随着越来越多的站加入,每个站获得的固定容量共享份额下降。最终,LAN将饱和。 [1]还有另一条出路可以处理不断增长的负载:即交换式以太网。交换式以太网的核心是一个交换机,它包含一块连接所有端口的高速背板。从外面看交换机很像集线器,它们都是一个盒子,通常拥有4-48个端口,每个端口都有一个标准的RJ-45连接器用来连接双绞电缆。交换机只把帧输出到该帧想去的端口。通过简单的插入或者拔出电缆就能完成添加或者删除一台机器,而且由于片状电缆或者端口通常只影响到一台机器,因此大多数错误都很容易被发现。这种配置模式仍然存在一个共享组件出现故障的问题,即交换机本身的故障:如果所有站都失去了网络连接,则IT人员知道该怎么解决这个问题:更换整个交换机。 [1]交换式以太网体系结构如下:以太网结构相关技术播报编辑共享介质带冲突检测的载波侦听多路访问(CSMA/CD)技术规定了多台计算机共享一个通道的方法。这项技术最早出现在1960年代由夏威夷大学开发的ALOHAnet,它使用无线电波为载体。这个方法要比令牌环网或者主控制网简单。当某台计算机要发送信息时,在以下行动与状态之间进行转换:1.开始- 如果线路空闲,则启动传输,否则跳转到第4步。2.发送- 如果检测到冲突,继续发送数据直到达到最小回报时间(min echo receive interval)以确保所有其他转发器和终端检测到冲突,而后跳转到第4步。3.成功传输- 向更高层的网络协议报告发送成功,退出传输模式。4.线路繁忙- 持续等待直到线路空闲。5.线路空闲- 在尚未达到最大尝试次数之前,每隔一段随机时间转到第1步重新尝试。6.超过最大尝试传输次数- 向更高层的网络协议报告发送失败,退出传输模式。因为所有的通信信号都在共享线路上传输,即使信息只是想发给其中的一个终端(destination),却会使用广播的形式,发送给线路上的所有计算机。在正常情况下,网络接口卡会滤掉不是发送给自己的信息,接收到目标地址是自己的信息时才会向CPU发出中断请求,除非网卡处于混杂模式(Promiscuous mode)。这种“一个说,大家听”的特质是共享介质以太网在安全上的弱点,因为以太网上的一个节点可以选择是否监听线路上传输的所有信息。共享电缆也意味着共享带宽,所以在某些情况下以太网的速度可能会非常慢,比如电源故障之后,当所有的网络终端都重新启动时。中继器因为信号的衰减和延时,根据不同的介质以太网段有距离限制。例如,10BASE5同轴电缆最长距离500米 (1,640英尺)。最大距离可以通过以太网中继器实现,中继器可以把电缆中的信号放大再传送到下一段。中继器最多连接5个网段,但是只能有4个设备(即一个网段最多可以接4个中继器)。这可以减轻因为电缆断裂造成的问题:当一段同轴电缆断开,所有这个段上的设备就无法通讯,中继器可以保证其他网段正常工作。类似于其他的高速总线,以太网网段必须在两头以电阻器作为终端。对于同轴电缆,电缆两头的终端必须接上被称作“终端器”的50欧姆的电阻和散热器,如果不这么做,就会发生类似电缆断掉的情况:总线上的AC信号当到达终端时将被反射,而不能消散。被反射的信号将被认为是冲突,从而使通信无法继续。中继器可以将连在其上的两个网段进行电气隔离,增强和同步信号。大多数中继器都有被称作“自动隔离”的功能,可以把有太多冲突或是冲突持续时间太长的网段隔离开来,这样其他的网段不会受到损坏部分的影响。中继器在检测到冲突消失后可以恢复网段的连接。集线器采用集线器组网的以太网尽管在物理上是星型结构,但在逻辑上仍然是总线型的,半双工的通信方式采用CSMA/CD的冲突检测方法,集线器对于减少数据包冲突的作用很小。每一个数据包都被发送到集线器的每一个端口,所以带宽和安全问题仍没有解决。集线器的总传输量受到单个连接速度的限制(10或100 Mbit/s),这还是考虑在前同步码、传输间隔、标头、档尾和封装上都是最小花费的情况。当网络负载过重时,冲突也常常会降低传输量。最坏的情况是,当许多用长电缆组成的主机传送很多非常短的帧(frame)时,可能因冲突过多导致网络的负载在仅50%左右程度就满载。为了在冲突严重降低传输量之前尽量提高网络的负载,通常会先做一些设定以避免类似情况发生。以太网交换机播报编辑测试项目性能指标使用专用的以太网测试仪器进行测试,这些性能指标的测试结果还可以评估LAN系统是否满足验收要求。从GBT21671-2008“基于以太网的LAN系统验收评估规范”可以了解到局域网还可以通过测量诸如网络吞吐量,传输延迟和丢包率等性能指标来判断性能。以太网测试仪是一 款适合现场使用的坚固耐用的测试平台。它具有完整的以太网测试功能,双光口和双电口,以太网服务接口模块,HST-3000支持多种数据流测试。包括10/100/1000M以太网链路的流量生成和故障排除,它可以测试高达1Gbit/s的电气和光纤端口链路。由于验收检查中的各种条件的限制,可以支持点对点或路由网络的测试以用于交换机的例行测试。 [3]存在的问题现代测试仪器的整体特性是高可靠性,高性能和高适用性。因此,国内测试产品与国外产品之间的差距反映在这方面。虽然国内某些测试设备在一定的性能指标上接近国际先进水平,但具有达到国际标准的综合设备性能指标的产品普遍较少。此外,国内测试仪器大多是常见的规格,不能满足某些特殊环境下的测试工作。低度自动化测试也是一个常见问题。 [3]交换机测试技术如今,交换机以应用需求为向导对交换机的性能提出了新的要求。在网络综合服务、安全性、智能化等方面有了新的发展。协议测试是一种基本交换机测试技术,网络协议是为了提高测试的效率和沟通的有效性提出的为了保障通信的规则。在网络通信日益膨胀的年代,网络协议也必不可少,网络协议的基本要求是功能正确、互通性好和性能优越。协议测试最初的原型为软件测试,主要的分类有黑盒测试、白盒测试和灰盒测试。 [3]存在的问题播报编辑吞吐量是以太网测试的一项重要指标。很多工程师认为以太网交换吞吐量应该为其线速率,即100%流量下不能出现丢包,并且认为以太网帧间隔IFG小于96bits是非法的。但在以太网交换吞吐量及丢包率测试中,经常在线速条件下长时间误码测试会出现少量的丢包,究其原因为以太网跨时钟域架构所导致的。 [4]工业以太网技术的迅速发展和应用的同时,伴随出现了大量的网络问题。根据西门子公司提供的统计数据,网络通信故障率占70%以上,网络设备故障率不足30%。网络故障导致系统停机后,故障诊断和定位所需的时间占系统停机总时间的80%以上,而维护措施所占时间不足20%。因此网络流量实时监控和分析是工业以太网发展 和应用中面临的重大问题,实时监控和分析工业以太网网络流量,及时发现和定位网络问题对提高整个系统的稳定运行起到了至关重要的作用。 [5]车载以太网播报编辑传统以太网协议由于采用的是载波监听多路访问及冲突检测技术。因此,在数据包延时、排序和可靠性上达不到车载网络实时性要求,所以,常见的车载局域网仍是基于CAN的实时现场总线协议。但随着汽车电子技术的爆发式发展,ECU数量不断增长,影音娱乐信号也纳入车内通信,这使得高实时、低带宽的传统车载总线开始不适应汽车电 子发展趋势。 [6]国际电子电气工程师协会(IEEE)经过长期研究在2016年批准了第一个车载以太网标准 “100BASE-T1”,其基于博通公司的BroadR.Reach 解决方案,在物理层用单对非屏蔽双绞线电缆,采用更加优化的扰码算法来减弱信号相关性增加实时性,可在车内提供100Mbps高实时带宽。 [6]高速以太网在汽车干扰环境下的通信质量是 需要重点考查的问题。特别对于100BASE.T1网络采用的是非屏蔽的电缆,更容易受到电流浪涌、电磁干扰的影响,导致其性能不稳定甚至功能失效。有基于以太网物理层的一致性测试方法,用于测试信号发射设备的回波损耗、定时抖动和最大输出跌落等性能;RFC2544标准提供了以太网时延、吞吐量和丢包率等主要性能指标的测试方法; 但这些常见方法都是基于传统以太网,不支持 100BASE-TI车载以太网,并且没有考虑到车载环境的干扰特征。 [6]工业以太网播报编辑工业以太网技术源自于以太网技术,但是其本身和普通的 以太网技术又存在着很大的差异和区别。工业以太网技术本身进行了适应性方面的调整,同时结合工业生产安全性和稳定性方面的需求,增加了相应的控制应用功能,提出了符合特定工业应用场所需求的相应的解决方案。工业以太网技术在实际应用中,能够满足工业生产高效性、稳定性、实时性、经济性、智能性、扩展性等多方面的需求,可以真正延伸到实际企业生产过程中现场设备的控制层面,并结合其技术应用的特点,给予实际企业工业生产过程的全方位控制和管理,是一种非常重要的技术手段。 [7]工业以太网技术应用的优势分析如下:第一,工业以太网技术具有广泛的应用范围。以太网技术本身作为重要的基础性计算机网络技术,其本身能够兼容多种不同的编程语言。例如,常见的JAVA、C++等编程语言都支持以太网方面的应用开发。 [7]第二,工业以太网技术具有良好的应用经济性。相对于以往传统工业生产当中现场总线网卡的基础设施方面的投入,以太网的网卡成本方面具有十分显著的优势。在当前以太网技术不断发展的今天,整体以太网技术的设计、应用方面已经十分成熟。在具体技术开发方面,有着很多现有的资源和设计案例进行应用,这也进一步降低了系统的开发和推广成本,同时也让后续培训工作的开展变得更加有效率。可以说,经济性强、成本低廉、应用效率高、过渡短、方案成熟,这是工业以太网技术的一个显著优势特征。 [7]第三,工业以太网技术具有较高的通信速率。相对现场总线来说,工业以太网的通信速率较高,1Gb/s的技术应用也变得十分成熟。在当前不断增长的工业控制网络性能吞吐需求的前提下,这种速率上的优势十分明显,其能够更好地满足当前的带宽标准,是新时期现代工业生产网络工程的重要发展方向。相对上也控制网络来说,工业控制网络内部不同节点的实时数据了相对较少,但是其对于传输的实时性方面要求很高。以太网技术本身的网络负载方面有着显著的优势,这也让整个通信过程的实时性需求得到了更好的满足。良好的通信速率标准,可以进一步降低网络负荷,减少网络传输延时,从而最大限度规避忘了碰撞的概率,保障工业生产的安全性与可靠性。 [7]第四,工业以太网技术具有良好的共享能力。随着当前网络技术的不断发展和成熟化,整个互联网体系变得更加成熟,任何一个接入到网络当中的计算机,都可以实现对工业控制现场相关数据的浏览和调用,这对于远程管控应用来说具有良好的优势,同时这也超越了以往现场总线管理模式的便利性,是实现现代化工业生产管理的重要基础性依据。 [7]第五,工业以太网技术具有良好的发展空间。通过工业以太网技术的应用,整个工业网络控制系统本身会具备一个更加广阔的发展空间和前景。在后续技术改造和升级的过程中,以太网技术能够为其提供一个良好的基础平台,这种扩展性方面的优势相比于现场总线技术来说是十分明显的。与此同时,在当前人工智能等相关技术发展的环境下,网络通信质量和效率本身的标准更高,很多新通信协议的应用,这也需要工业以太网技术给予相应的支持。 [7]新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

<13>基础知识——以太网(Ethernet )_以太网基础-CSDN博客

>

<13>基础知识——以太网(Ethernet )_以太网基础-CSDN博客

<13>基础知识——以太网(Ethernet )

最新推荐文章于 2023-07-14 14:40:43 发布

Dark_Ice_

最新推荐文章于 2023-07-14 14:40:43 发布

阅读量3.4w

收藏

1.2k

点赞数

152

分类专栏:

网络与路由交换

文章标签:

以太网

交换机

网络

网络通信

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_40274679/article/details/105995323

版权

网络与路由交换

专栏收录该内容

59 篇文章

111 订阅

订阅专栏

目录

以太网概述

以太网——标准和实施

以太网—— 第1层和第2层

逻辑链路控制——连接到上层

MAC——获取到介质的数据

以太网的物理实现

以太网——通过LAN的通信

以太网历史

以太网冲突管理

发展到 1Gbps 及以上速度

以太网帧

帧——封装数据包

以太网MAC 地址

十六进制计数和编址

另一个编址层

以太网单播、组播和广播

以太网MAC

以太网中的MAC

CSMA/CD – 过程

以太网定时

帧间隙和回退

以太网物理层

以太网物理层概述

10 和 和 100 Mbps 以太网

1000 Mbps 以太网

以太网—— 未来选择

集线器和交换机

传统以太网—— 使用集线器

以太网 ——使用交换机

交换机—— 选择性转发

地址解析协议 (ARP)

ARP 过程 – 将IP映射到MAC地址

ARP 过程—— 目的主机在本地网络外

ARP 过程 – 删除地址映射

ARP 广播 – 问题

以太网概述

以太网——标准和实施

1980 年,Digital Equipment Corporation、Intel 和 Xerox (DIX) 协会发布了第一个以太网标准。 1985 年,本地和城域网的电气电子工程师协会 (IEEE) 标准委员会发布了 LAN 标准。 以太网在 OSI 模型的下两层,也就是 数据链路层和 物理层上运行。

以太网—— 第1层和第2层

以太网在第 1 层上涉及信号、在介质中传输的比特流、将信号放到介质上的物理组件以及各种拓扑,它在设备之间的通信中扮演主要角色。

数据链路子层极大地促进了技术兼容性和计算机通信。

(1)MAC 子层负责将要用于传送信息的物理组件,并且准备通过介质传输的数据。 (2)逻辑链路控制 (LLC) 子层保持通信过程所用物理设备的相对独立性。

逻辑链路控制——连接到上层

对于以太网,IEEE 802.2 标准规范 LLC 子层的功能,而 802.3 标准规范 MAC 子层和物理层的功能。

LLC 子层获取网络协议数据(通常是IPv4 数据包)并加入控制信息,帮助将数据包传送到目的节点。

第 2 层通过 LLC 与上层通信。

逻辑链路控制(LLC)

1.建立与上层的连接

2.将网络层数据包封装成帧

3.标识网络层协议

4.保持物理设备的相对独立性

MAC——获取到介质的数据

介质访问控制 (MAC) 是数据链路层以太网子层的下半层,由硬件(NIC)实现 以太网 MAC 子层主要有两项职责 (1)数据封装 (2)介质访问控制

数据封装:帧定界、编址、错误检测

介质访问控制:对于将帧放入介质中和从介质中取下帧实施控制、介质恢复

以太网的物理实现

以太网的成功离不开以下因素: (1)维护的简便性 (2)整合新技术的功能 (3)可靠性 (4)安装和升级成本 在当今的网络中,以太网使用UTP 铜缆和光缆通过集线器和交换机等中间设备连接网络设备。

以太网——通过LAN的通信

以太网历史

以太网技术基础最早起步于 1970 年,是在一个叫做 Alohanet 的计划中提出来的。 以太网第一个版本融入了一种称为 载波侦听多路访问/ 冲突检测 (CSMA/CD) 的介质访问方法。 CSMA/CD 负责管理多台设备通过一个共享物理介质通信时产生的问题。

以太网的早期版本使用同轴电缆在总线拓扑中连接计算机。 粗缆 (10BASE5) 细缆 (10BASE2) 最初的同轴粗缆和同轴细缆等物理介质被早期的 UTP 类电缆所取代。 物理拓扑也改为使用集线器的星型拓扑。

以太网冲突管理

(1)传统的以太网---半双工 基于共享的介质,每次只有一个站点能够成功发送。 随着更多的设备加入以太网,帧的冲突量大幅增加。

(2)当前的以太网---全双工 交换机可以隔离每个端口,只将帧发送到正确的目的地(如果目的地已知),而不是发送每个帧到每台设备,数据的流动因而得到了有效的控制。

发展到 1Gbps 及以上速度

一些设计和安装都很优秀的现代网络,其设备和电缆可能只需要略加升级,便能以更高的速度运行。这种功能具有降低网络总拥有成本的优点。

在以太网中使用光缆后,电缆连接距离大幅延长,使 LAN 与 WAN 之间的差异没那么明显了。 以太网最初局限于单一建筑物中的 LAN 电缆系统,后来扩展到建筑物之间,而现在可以覆盖一个城市,称之为城域网 (MAN)。

以太网帧

帧——封装数据包

以太网帧结构向第 3 层 PDU 添加帧头和帧尾来封装所发送的报文。 以太网帧有两种样式:IEEE 802.3(原始)和修订后的 IEEE 802.3(Ethernet)。

“前导码”(7 个字节)和“帧首定界符 (SFD)”(1 个字节)字段用于同步发送设备与接收设备。

“目的 MAC 地址”字段(6 个字节)是预定接收方的标识符。

“源 MAC 地址”字段(6 个字节)标识帧的源网卡或接口。

“长度/类型”字段(2 个字节)定义帧的数据字段的准确长度。

“数据”和“填充位”字段(46 - 1500 个字节)包含来自较高层次的封装数据(一般是第 3 层 PDU 或更常见的 IPv4 数据包)。

“帧校验序列 (FCS)”字段(4 个字节)用于检测帧中的错误。它使用循环冗余校验(CRC)。发送设备在帧的 FCS 字段中包含 CRC 的结果。

以太网MAC 地址

为协助确定以太网中的源地址和目的地址,创建了称为介质访问控制 (MAC) 地址的唯一标识符。 MAC 编址作为第 2 层 PDU 的一部分添加上去。 以太网 MAC 地址是一种表示为 12 个十六进制数字的 48 位二进制值。

IEEE 要求厂商遵守两条简单的规定: 分配给网卡或其它以太网设备的所有 MAC 地址都必须使用厂商分配的 OUI 作为前 3个字节。 OUI 相同的所有 MAC 地址的最后 3 个字节必须是唯一的值(厂商代码或序列号)。 MAC 地址通常称为烧录地址 (BIA),因为它被烧录到网卡的 ROM(只读存储器)中。

十六进制计数和编址

十六进制 ("Hex") 是以 16 为基数的计数系统使用数字 0 到 9 和字母 A 到 F。 十六进制通常以 0x 前导的文本值(如 0x73)或 16 为下标的值表示。

十六进制用于表示以太网 MAC 地址和 IP V6 地址。. 你已经在 Wireshark 的 Packets Byte(数据包字节)窗格见过十六进制,在那里十六进制用于表示帧和数据包中的二进制值。

另一个编址层

OSI 数据链路层(第 2 层)物理编址,是作为以太网 MAC 地址实现的,用于通过本地介质传输帧。 IPv4 地址等网络层(第 3 层)地址普遍存在的源和目的端都理解的逻辑编址。.

以太网单播、组播和广播

在以太网中,第 2 层单播、组播和广播通信会使用不同的 MAC 地址。 单播 MAC 地址是帧从一台发送设备发送到一台目的设备时使用的唯一地址。

发送广播时,数据包以主机部分全部为一 (1) 的地址作为目的 IP 地址。这种地址计数法表示本地网络(广播域)中的所有主机都将接收和处理该数据包。 许多网络协议,如动态主机配臵协议 (DHCP) 和地址解析协议 (ARP) 等,都使用广播。

组播地址允许源设备向一组设备发送数据包。 属于某一组播组的设备都被分配了该组播组 IP 地址。组播地址的范围为 224.0.0.0到 239.255.255.255。

以太网MAC

以太网中的MAC

以太网使用载波侦听多路访问/冲突检测 (CSMA/CD) 来检测和处理冲突,并管理通信的恢复。 设备可以确定能够发送的时间。当设备检测到没有其它计算机在传送帧或载波信号时,就会发送其要发送的内容。

CSMA/CD – 过程

载波侦听---在 CSMA/CD 访问方法中,要发送报文的所有网络设 备在发送之前必须侦听。多路访问---如果设备之间的距离导致一台设备的信号延时,则另一台设备可能没有检测到信号,从而也开始发送。 冲突检测---当设备处于侦听模式时,可以检测共享介质中发生的冲突。 堵塞信号和随机回退---发送设备检测到冲突之后,将发出堵塞信号。这种堵塞信号用于通知其它设备发生了冲突,以便它们调用回退算法。回退算法将使所有设备在随机时间内停止发送,以让冲突消除。

载波侦听多路访问/冲突检测 (CSMA/CD)

1.在传输之前侦听——监控介质中是否有流量

2.在传输之前侦听——检测到载波信号

3.等待指定的时间——信号通过。稍后重试

4.在传输之前侦听——监控介质中是否有流量

5.未检测到载波信号——计算机传输

6.在传输之前侦听——监控介质中是否有流量

7.未检测到载波信号——计算机传输

8.发送冲突

9.发出堵塞信号

10.回退定时器——稍后重试

如图所示,集线器互连成一个称为“扩展星型”的物理拓扑。扩展星型可以极大地扩展冲突域。 通过一台集线器或一系列直接相连的集线器访问公共介质的相连设备称为冲突域。冲突域也称为网段。 集线器和中继器因此会影响冲突域大小的增长。

以太网定时

发送的电信号需要一定的时间(延时)传播(传送)到电缆。信号路径中的每台集线器或中继器在将比特从一个端口转发到下一个端口时,都会增加延时时间。 这种累加的延时将会增大冲突发生的机率,因为侦听节点可能会在集线器或中继器处理报文时跳变成发送信号。

吞吐量速度为 10 Mbps 及以下的以太网通信是异步通信。这种环境下的异步通信意味着,每台接收设备将使用 8 个字节的定时信息来使接收电路与传入的数据同步,然后丢弃这 8 个字节。 吞吐量为 100 Mbps 及更高的以太网通信是同步通信。这种环境下的同步通信表示不需要定时信息。但是,由于兼容性的原因“前导码”和“帧首定界符 (SFD)”字段仍然存在。

不管介质速度如何,将比特发送到介质并在介质上侦听到它都需要一定的时间。这段时间称为比特时间。 实际计算的碰撞槽时间刚好比在冲突域的最远两点之间发送所需的理论时间长,与另一个时间最近的发送发生冲突,然后让冲突碎片返回发送站点而被检测到。

帧间隙和回退

以太网标准要求两个非冲突帧之间有最小的间隙。这样,介质在发送上一个帧后将获得稳定的时间,设备也获得了处理帧的时间。 此时间称为帧间隙,其长度是从一个帧的 FCS 字段最后一位到下一个帧的“前导码”第一位。

只要一检测到冲突,发送设备就会发送一个 32 位“堵塞”信号以强调该冲突。这可确保 LAN 中的所有设备都能检测到冲突。

回退定时:冲突发生后,所有设备都让电缆变成空闲(各自等待一个完整的帧间隙),发送有冲突的设备必须再等待一段时间,然后才可以重新发送冲突的帧,这段等待时间会逐渐增长。

以太网物理层

以太网物理层概述

以太网遵守 IEEE 802.3 标准。目前为通过光缆和双绞线电缆的运行定义 了四种数据速率: (1)10 Mbps - 10Base-T 以太网 (2)100 Mbps - 快速以太网 (3)1000 Mbps - 千兆以太网 (4)10 Gbps - 万兆以太网

10 和 和 100 Mbps 以太网

主要的 10 Mbps 以太网包括: (1)使用同轴粗缆的 10BASE5 (2)使用同轴细缆的 10BASE2 (3)使用 3 类/5 类非屏蔽双绞线电缆的 10BASE-T

100 Mbps 以太网也称为快速以太网,可以使用双绞线铜缆或光纤介质来实现。最常见的 100 Mbps 以太网有: (1)使用 5 类或更高规格 UTP 电缆的 100BASE-TX (2)使用光缆的 100BASE-FX

1000 Mbps 以太网

千兆以太网标准的开发产生了 UTP 铜缆、单模光缆和多模光缆的规格。 1000BASE-T 以太网使用全部四对 5 类或更高规格的 UTP 电缆提供全双工发送。

与 UTP 相比,光纤千兆以太网 - 1000BASE-SX 和 1000BASE-LX 有以下优势:无杂信、体积小,并且无需中继的距离远,带宽高。

以太网—— 未来选择

IEEE 802.3ae 标准经过改编,纳入了 10 Gbps - 通过光缆进行的全双工发送。 万兆以太网 (10GbE) 在不断发展,不仅用于 LAN,而且用于 WAN 和 MAN。 千兆以太网现已得到广泛采用,万兆产品也在不断增加,但 IEEE 和万兆以太网联盟仍未继续研究 40、100 甚至 160-Gbps 的标准。

集线器和交换机

传统以太网—— 使用集线器

传统以太网使用集线器来连接 LAN 网段中的节点。集线器不执行任何类型的通信过滤,而是将所有比特转发到其连接的每台设备。

以太网 ——使用交换机

交换机可以将 LAN 细分为多个单独的冲突域,其每个端口都代表一个单独的冲突域,为该端口连接的节点提供完全的介质带宽。 

在所有节点直接连接到交换机的 LAN 中,网络的吞吐量大幅增加。这种增加主要缘于三个原因: (1)每个端口有专用的带宽 (2)没有冲突的环境 (3)全双工操作

交换机—— 选择性转发

以太网交换机选择性地将个别帧从接收端口转发到连接目的节点的端口。 交换机维护着一个表,称为MAC 表。该表将目的 MAC 地址与用于连接节点的端口进行比对。

以太网 LAN 交换机采用五种基本操作来实现其用途: 获取、过期、泛洪、选择性转发、过滤 

地址解析协议 (ARP)

ARP 过程 – 将IP映射到MAC地址

ARP 协议具有两项基本功能: (1)将 IPv4 地址解析为 MAC 地址;(2)维护映射的缓存

具体的ARP转发过程可以看我之前的文章《网络基础知识之ARP协议》

ARP 过程—— 目的主机在本地网络外

如果目的 IPv4 主机不在本地网络上,则源节点需要将帧传送到作为网关的路由器接口,或用于到达该目的地的下一跳。

源节点将使用网关的 MAC 地址作为帧(其中含有发往其它网络上主机的 IPv4 数据包)的目的地址。

使用 ARP 代理时,就好像路由器接口是具有 ARP 请求所请求的 IPv4 地址的主机一样。 另一种使用代理 ARP 的情况是:主机认为它已经直接连接到目的主机所在的逻辑网络。如果主机配臵了错误的掩码,通常会发生这种情况。 还有一种使用代理 ARP 的情况是主机没有配臵默认网关。代理 ARP 可以帮助网络中的设备到达远程子网,而无需配臵路由或默认网关。

ARP 过程 – 删除地址映射

对于每台设备,ARP 缓存定时器将会删除在指定时间内未使用的 ARP 条目。具体时间取决于设备及其操作系统。

ARP 广播 – 问题

介质开销 安全性--ARP 欺骗/ ARP 毒化

优惠劵

Dark_Ice_

关注

关注

152

点赞

1215

收藏

觉得还不错?

一键收藏

打赏

知道了

3

评论

<13>基础知识——以太网(Ethernet )

目录以太网概述以太网——标准和实施以太网—— 第1层和第2层逻辑链路控制——连接到上层MAC——获取到介质的数据以太网的物理实现以太网——通过LAN的通信以太网历史以太网冲突管理发展到 1Gbps 及以上速度以太网帧帧——封装数据包以太网MAC 地址十六进制计数和编址另一个编址层以太网单播、组播和广播以太网MAC以太网中的MA...

复制链接

扫一扫

专栏目录

以太网是什么?看完明白了【史上最详细介绍】

xiaomanong2的博客

05-12

3万+

以太网是什么?

以太网(Ethernet)最早是由Xerox(施乐)公司创建的局域网组网规范,1980年DEC、Intel和Xeox三家公司联合开发了初版Ethernet规范—DIX 1.0,1982年这三家公司又推出了修改版本DIX 2.0,并将其提交给EEE 802工作组,经IEEEE成员修改并通过后,成为IEEE的正式标准,并编号为IEEE 802.3。虽然Ethernet规范和IEEE 802.3规范并不完全相同,但一般认为Ethernet和正IEEE 802.3是兼容的。

以太网是应用最广泛的

android 以太网 添加设置Ethernet

11-27

android在设置中添加以太网ethernet方法, 在可以是学习框架的一种好方法。

3 条评论

您还未登录,请先

登录

后发表或查看评论

以太网学习(1)--简介

飞翔的卡布达的博客

03-19

9855

目录

一、以太网简介

二、STM32MAC简介

三、 LAN8720简介

1)LAN8720地址设置

3)LAN8720寄存器

四、以太网DMA描述符

学习教程以STM32F4XX硬件平台进行学习。

一、以太网简介

以太网是一种计算机局域网技术。是目前最广泛的局域网技术,他的传输介质可以是光纤或双绞线,简单来说,以太网就是一种在局域网中,把附近的所有设备都连接起来,使得他们之间可以进行通讯的技术。

以太网的基本特征是多个站点都连接在一个总线上,所有的工作站都在不断地向总线上发出监听.

以太网(Ethernet)入门了解

公众号:风景邮递Yuan的博客

07-13

4384

以太网是一种标准化的网络通信协议,它定义了在网络上传输数据的方式。以太网使用一种称为载波侦听多路访问(CSMA/CD)的机制来避免数据冲突。以太网使用双绞线作为物理传输介质,可以在短距离内实现高速数据传输。以太网是一种重要的局域网通信协议,自1970年代中期问世以来,已经得到了广泛应用和普及。随着技术的进步和应用的发展,以太网不断演进和完善,并将在未来继续发挥重要作用。通过深入了解和学习本站其他模板样例文章的内容可以帮助我们更好地理解该领域的相关知识结构和表达方式;

网络学习-4.以太网基础

qq_31476855的博客

06-10

760

1.基本概念

以太网( Ethernet )是现实世界中最普遍的一种计算机网络,是一种计算机局域网技术,同时也是一种协议。以太网协议定义了一系列软件和硬件标准,从而将不同的计算机设备连接在一起。以太网设备组网的基本元素有交换机、路由器、集线器、光纤和普通网线以及以太网协议和通讯规则。以太网中网络数据连接的端口就是以太网接口。

2.以太网帧

在以太网链路上的数据包称作以太帧。以太帧起始部分由前导码和帧开始符组成。后面紧跟着一个以太网报头,以MAC地址说明目的地址和源地址。帧的中部是该帧负载的包含其他协议报头的

以太网及网络工作原理一

weixin_42227328的博客

12-06

5401

1、WAN、LAN和以太网简介

介绍以太网(Ethernet)我们首先要与广域网(WAN)、局域网(LAN)这两种概念区分开来,广域网(WAN),WAN我们常在家用路由上看到这个接口,WAN是由无数局域网构成,提供网络服务,让公司和个人通过公网进行查询、上传、下载这些服务。WAN的基础设施通常是网络运营商建设,并提供网络服务,比如国内电信、移动、联通,还有国内现在提供硬件铁塔公司。

局域网设施由企业、个人所组建,规模比较小,主要办公使用,以实现文件管理、应用软件共享、打印机共享等功能。局域网可大可小,大型公

以太网(Ethernet)相关基础知识

Already8888的博客

05-17

1万+

以太网Ethernet

•Ethernet Cabling

•Manchester Encoding

•The Ethernet MAC Sublayer Protocol

•The Binary Exponential Backoff Algorithm

•Ethernet Performance

•Switched Ethernet

以太网电缆

从上到下,分别是粗同轴电缆、细同轴电缆、双绞线、光纤

术语10base5的含义是:它使用基带信号运行在10Mbps的...

基础知识——以太网(Ethernet )

季秊爱桃楸的博客

07-14

3769

1980 年,Digital Equipment Corporation、Intel 和 Xerox (DIX) 协会发布了第一个以太网标准。1985 年,本地和城域网的电气电子工程师协会 (IEEE) 标准委员会发布了 LAN 标准。以太网在 OSI 模型的下两层,也就是 数据链路层和 物理层上运行。以太网遵守 IEEE 802.3 标准。目前为通过光缆和双绞线电缆的运行定义了四种数据速率:(1)10 Mbps - 10Base-T 以太网(2)100 Mbps - 快速以太网。

以太网基础知识

NowOrNever

02-18

1万+

什么是4B/5B编码?

4B/5B编码是百兆以太网(即快速以太网)中线路层编码类型之一,就是用5bit的二进制数来表示4bit二进制数,映射方式如下表所示:

为什么要进行4B/5B编码?

在通信网络中,接收端需要从接收数据中恢复时钟信息来保证同步,这就需要线路中所传输的二进制码流有足够多的跳变,即不能有过多连续的高电平或低电平,否则无法提取时钟信息。

Manchester(曼切斯特)编

计算机网络——物理层

qq_46440190的博客

05-14

5511

计算机网络——物理层

涉及内容如下:

(一)通信基础

信道、信号、带宽、码元、波特、速率

奈奎斯特定理与香农定理、编码与调制

电路交换、报文交换、分组交换;数据报与虚电路

(二)传输介质

双绞线、同轴电缆、光纤与无线传输介质;物理层接口的特性

(三)物理层设备

中继器、集线器

1.1 通信基础

1.1.1 基本概念

1、信号

连续变化的数据(信号)称为模拟数据(模拟信号)

取值仅允许为有限的几个离散数值的数据(信号)称为数字数据(数字信号)

2、码元

码元是指用一个固定时长的信号波形(数字脉冲)表示一

IP、TCP、UDP数据包长度问题

Alisa_xf的博客

03-15

1844

概念:

以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.

这个1500字节被称为链路层的MTU(最大传输单元). 但这并不是指链路层的长度被限制在1500字节,其实这这个MTU指的是链路层的数据区.并不包括链路层的首部和尾部的18个字节.

所以,事实上,这个1500字节就是网络层IP数据报的长度限制.

因为IP数据报...

以太网相关

03-16

以太网通路实现,设计两条用于10BASE-T 和 100BASE-TX 的发送通路,使其成为支持 10M/100M 传输速率 PHY芯片的重要组成部分。

详细分析车载以太网基础知识

01-14

本文将从入门者的角度,讲解车载以太网中的重要知识。 01车载以太网的组成 车载以太网用于连接汽车内不同电气设备的一种网络,从而满足车载环境中一些特殊需求,它与传统以太网不尽相同,车载以太网主要...

计算机网络基础——以太网

03-24

西门子公司对于以太网的视频教程.详细的介绍了以太网和网络基础和深入知识,可以值得看一看。

以太网基础知识.ppt

07-18

以太网原理,讲解以太网的发展史,是很好的入门资料,

10Mbps以太网Ethernet的几种形式分别介绍

10-01

本文将详细介绍10Mbps以太网Ethernet的几种形式,需要了解的朋友可以参考下

VRP基础(华为设备操作系统)

热门推荐

Dragon的博客

05-06

1万+

目录

1.VRP简介

(1)前言

(2)什么是VRP

2.VRP命令行

(1)用户视图

(2)系统视图

(3)接口视图

(4)用户权限级别与命令级别的对应关系

(5)命令行的使用

【1】进入命令视图

【2】退出命令视图

【3】在线帮助

【4】快捷键

3.基本配置

【1】配置设备名称

【2】配置设备系统时钟

【3】配置设备IP地址

4.Telnet简介

5.基础...

<5>路由基础——路由汇总

Dragon的博客

05-13

1万+

前言

随着业务对网络的需求不断增加,网络规模在逐渐变大。对于一个大规模的网络来说,路由器或者其他具备路由功能的设备势必需要维护大量的路由表项,未来维护臃肿的路由表,这些设备就不得不耗费大量的资源。当然,在一个规模更大的路由表中进行查询时,路由器也会显得更加吃力。因此在保证网络中的路由器到各个网段都具备IP可达性的同时,如何减少设备的路由表规模就是一个非常重要的课题。

路由汇总定义

一个网络如果具备科学的IP编址,并且进行合理的规划,是可以利用多种手段减少设备路由表规模的。其中一个非常常见而且又有效的办

以太网交换基础 TCP/IP

最新发布

08-18

以太网是一种常用的局域网技术,它通过物理层的设备(如以太网线)来传输数据。以太网交换基础是指使用以太网交换机来建立局域网内的连接和通信。交换机可以理解为位于网络接口层(数据链路层)的设备,它通过学习和转发数据帧来实现数据的传输和路由。而TCP/IP是一套协议簇,包括互联网层和传输层,其中互联网层负责数据的传输和路由,传输层则负责建立可靠的连接和传输数据。在TCP/IP分层中,以太网交换基础主要处于物理层和数据链路层,并通过操作系统提供的互联网层和传输层功能来实现与TCP/IP协议的通信。因此,以太网交换基础和TCP/IP是相互配合的技术,以太网交换基础为TCP/IP协议提供了物理层和数据链路层的支持,使得TCP/IP协议能够在局域网中进行可靠的数据传输和通信。123

#### 引用[.reference_title]

- *1* *2* *3* [TCP/IP基础知识——TCP/IP分层模型](https://blog.csdn.net/qq_38386085/article/details/117903055)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"]

[ .reference_list ]

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

Dark_Ice_

CSDN认证博客专家

CSDN认证企业博客

码龄6年

暂无认证

359

原创

2万+

周排名

5万+

总排名

70万+

访问

等级

8141

积分

790

粉丝

776

获赞

102

评论

5895

收藏

私信

关注

热门文章

<13>基础知识——以太网(Ethernet )

34627

服务器概念、组成和架构详解

33540

Istio 是啥?一文带你彻底了解

27590

详解k8s的4种Service类型

19396

【H3C模拟器】静态路由配置(两个基础实验)

17488

分类专栏

网络与路由交换

59篇

网络与路由交换实验

26篇

Linux 云计算技术

68篇

Linux集群管理教程

15篇

Linux网络服务&数据库教程

20篇

Linux系统管理

11篇

虚拟化技术

3篇

自动化技术

4篇

环境搭建

8篇

IT文章

41篇

心得体会 | 技术认证

25篇

分布式技术 | 监控技术

16篇

Shell | Python | Go

6篇

数据库技术

1篇

MySQL 数据库

12篇

Windows

2篇

Docker | Kuebrnetes

50篇

K3s

15篇

大数据技术

5篇

最新评论

经典!服务端 TCP 连接的 TIME_WAIT 过多问题的分析与解决

恋喵大鲤鱼:

请问如何缩短 MSL 呢?

【Docker】Docker 镜像仓库

阿J~:

支持博主,欢迎回赞哦~

03-K3S 安装-要求及选项

fuuhoo:

为啥国内源有的版本没有呢,比如1.23.6

【Docker】Docker 镜像仓库

D2508848470:

现在dockerhub是要翻墙了吗,打不开了

服务器概念、组成和架构详解

2301_80028422:

如果你的编程能力高的话,可以自己搭建服务器

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

【Docker】Docker 项目实战

【Docker】Docker 可视化图表 Portainer

【Docker】Docker Swarm 容器编排

2023年37篇

2022年52篇

2021年43篇

2020年244篇

目录

目录

分类专栏

网络与路由交换

59篇

网络与路由交换实验

26篇

Linux 云计算技术

68篇

Linux集群管理教程

15篇

Linux网络服务&数据库教程

20篇

Linux系统管理

11篇

虚拟化技术

3篇

自动化技术

4篇

环境搭建

8篇

IT文章

41篇

心得体会 | 技术认证

25篇

分布式技术 | 监控技术

16篇

Shell | Python | Go

6篇

数据库技术

1篇

MySQL 数据库

12篇

Windows

2篇

Docker | Kuebrnetes

50篇

K3s

15篇

大数据技术

5篇

目录

评论 3

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

打赏作者

Dark_Ice_

你的支持是我创作的核动力。

¥1

¥2

¥4

¥6

¥10

¥20

扫码支付:¥1

获取中

扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值