学习自C语言中文网

1 硬件组成

1.1 网卡

也称网络适配器(Network Adapter),连接计算机和传输介质的接口。

计算机数据转换为能够通过传输介质传输的信号。

1.1.1 有线网卡

“线”指的是网线。

1.1.2 无线网卡

无线信号连接。通常指Wi-Fi网络的无线网卡。

1.1.3 蓝牙适配器

与无线网卡的区别是数据通信方式不同。

1.2 网络电缆

用来连接网络中的各个设备,供设备之间进行数据通信。

1.2.1 双绞线

两根具有绝缘保护层的铜导线缠绕组成

EIA/TIA 568B线序:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕

1.2.2 光纤

传输光信号的细而柔软的媒质。

光纤两端的”光猫“进行信号转换。

1.2.3 电话线

连接电话的线,线数比双绞线少

1.3 网络设备

网络组成中的设备

1.3.1 交换机

可将多个网络设备连接组成一个局域网。

用于数据交换

1.3.2 路由器

Router

又称网关设备(Gateway)

用于连接多个逻辑上分开的网络。

1.3.3 调制解调器

Modem

俗称”猫”

2 网络协议

2.1 TCP/IP

前身:ARPANET

协议族:TCP、IP、ICMP、HTTP等

层次 说明
应用层 为应用程序提供服务并规定应用程序中相关的通信细节。
传输层 为两台主机上的应用程序提供端到端的通信,提供流量控制、错误控制和确认服务。
网际层 提供独立于硬件的逻辑寻址,从而让数据能够在具有不同的物理结构的子网之间传递。负责寻找地址和路由选择的同时,网络层还可以实现拥塞控制、网际互联等功能。
网络访问层 提供了与物理网络连接的接口。针对传输介质设置数据格式,根据硬件的物理地址实现数据的寻址,对数据在物理网络中的传递提供错误控制。

2.2 OSI

层次 说明
应用层 为应用程序提供服务并规定应用程序中相关的通信细节。常见的协议包括超文本传输协议(HTTP)、简单邮件传送协议(SMTP)和远程登录(Telnet)协议等。
表示层 将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。该层主要负责数据格式的转换,确保一个系统的应用层信息可被另一个系统应用层读取。
会话层 负责建立和断开通信连接(数据流动的逻辑通路),以及记忆数据的分隔等数据传输相关的管理。
传输层 只在通信双方的节点上(比如计算机终端)进行处理,无须在路由器上处理。
网络层 将数据传输到目标地址,主要负责寻找地址和路由选择,网络层还可以实现拥塞控制、网际互联等功能。
数据链路层 负责物理层面上互连的节点间的通信传输。例如,一个以太网相连的两个节点之间的通信。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错和重发等。
物理层 利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。

3 学习工具

3.1 netwox

下载: https://sourceforge.net/projects/ntwox/

网络包的生成

3.2 wireshark

下载: http://www.wireshark.org

网络包的分析

协议数据包 5个层次:

  • Frame:物理层数据帧
  • Ethernet II:以太网帧头部
  • Internet Protocol Version 4:网际层IP包头部
  • TCP、UDP:传输层头部
  • HTTP、DNS、SSDP:应用层信息

物理层:

1
2
netwox 169
//查看物理、虚拟网络适配器的详情

数据链路层:

  • 介质访问控制(Media Access Control,MAC)

    提供与网络适配器连接的接口

  • 逻辑链路控制(Logical Link Control,LLC)

    对经过子网传递的帧进行错误检查,并且管理子网上通信设备之间的链路

4 层次协议

4.1 物理层

字段 含义
前同步码 用来使接收端的适配器在接收 MAC 帧时能够迅速调整时钟频率,使它和发送端的频率相同。前同步码为 7 个字节,1 和 0 交替。
帧开始定界符 帧的起始符,为 1 个字节。前 6 位 1 和 0 交替,最后的两个连续的 1 表示告诉接收端适配器:“帧信息要来了,准备接收”。

4.2 MAC层

MAC地址:48bit,前24bit特定厂商,后24bit为厂商自定

以太网帧(MAC帧):

目的地址:6字节

源地址:6字节

类型:2字节

数据:46~1500字节

FCS:4字节

4.3 IP层

探测局域网中所有主机的IP地址、主机名和MAC地址信息

1
netwox 3 -a 192.168.0.0/24

探测域名主机所有IP地址

1
netwox 3 -a www.baidu.com

构造IP数据报

1
netwox 38

4.3.1 IP协议

IP数据报头部:20字节

  1. 版本:4bit

  2. 首部长度:4bit

    表示范围:0~15(十进制)

    计算单位:4字节(表示15代表首部长度达到60字节)

  3. 区分服务:8bit

  4. 总长度:16bit

    首部和数据之和

    单位:字节

    最大长度:2^16-1=65535字节

  5. 标识:16bit

    具有相同的标识字段值的分片报文会被重组成原来的数据报

  6. 标志:3bit

    第一位:0

    第二位:DF(不分片)

    第三位:MF(更多分片)

  7. 片偏移:13bit

    计算单位:8字节

  8. 生存时间:8bit

  9. 协议:8bit

    TCP:6

    UDP:17

    ICMP:1

  10. 首部检验和:16bit

    校验数据报的首部,TTL发生变化,需重新计算

  11. 源地址:32bit

  12. 目的地址:32bit

4.3.2 ICMP协议

全称:Internet Control Message Protocol(控制报文协议)

报文结构(8字节):

  1. 类型:1字节
  2. 代码:1字节
  3. 校验和:2字节
  4. 不同类型和代码有不同的内容:4字节
类型 代码 含义
0 0 回显应答(ping 应答)
3 0 网络不可达
3 1 主机不可达
3 2 协议不可达
3 3 端口不可达
3 4 需要进行分片,但设置不分片位
3 5 源站选路失败
3 6 目的网络未知
3 7 目的主机未知
3 9 目的网络被强制禁止
3 10 目的主机被强制禁止
3 11 由于服务类型 TOS,网络不可达
3 12 由于服务类型 TOS,主机不可达
3 13 由于过滤,通信被强制禁止
3 14 主机越权
3 15 优先中止失效
4 0 源端被关闭(基本流控制)
5 0 对网络重定向
5 1 对主机重定向
5 2 对服务类型和网络重定向
5 3 对服务类型和主机重定向
8 0 回显请求(ping 请求)
9 0 路由器通告
10 0 路由器请求
11 0 传输期间生存时间为 0
11 1 在数据报组装期间生存时间为 0
12 0 坏的 IP 首部
12 1 缺少必需的选项
13 0 时间戳请求
14 0 时间戳应答
17 0 地址掩码请求
18 0 地址掩码应答

4.4 传输层

4.4.1 TCP

头部:20字节

  1. 源端口:16bit

  2. 目的端口:16bit

  3. 序列号:32bit

  4. 确认号:32bit

  5. 偏移字段:4bit

  6. 保留字段:4bit

    全为0

  7. 标志位字段

    • CWR(Congestion Window Reduce):拥塞窗口减少标志,用来表明它接收到了设置 ECE 标志的 TCP 包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率。
    • ECE(ECN Echo):用来在 TCP 三次握手时表明一个 TCP 端是具备 ECN 功能的。在数据传输过程中,它也用来表明接收到的 TCP 包的 IP 头部的 ECN 被设置为 11,即网络线路拥堵。
    • URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
    • ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
    • PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
    • RST:表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
    • SYN:在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
    • FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
  8. 窗口大小:16bit

  9. TCP校验和:16bit

  10. 紧急指针:16bit

  11. 可选字段:必须为32bits整数倍

4.4.2 UDP

全称:User Datagram Protocol (用户数据报协议)

首部:8字节

  1. 源端口:16bit
  2. 目的端口:16bit
  3. 长度:16bit
  4. 校验值:16bit