TCP/IP学习笔记
学习自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
网络包的分析
协议数据包 5个层次:
- Frame:物理层数据帧
- Ethernet II:以太网帧头部
- Internet Protocol Version 4:网际层IP包头部
- TCP、UDP:传输层头部
- HTTP、DNS、SSDP:应用层信息
物理层:
1 | 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字节
版本:4bit
首部长度:4bit
表示范围:0~15(十进制)
计算单位:4字节(表示15代表首部长度达到60字节)
区分服务:8bit
总长度:16bit
首部和数据之和
单位:字节
最大长度:2^16-1=65535字节
标识:16bit
具有相同的标识字段值的分片报文会被重组成原来的数据报
标志:3bit
第一位:0
第二位:DF(不分片)
第三位:MF(更多分片)
片偏移:13bit
计算单位:8字节
生存时间:8bit
协议:8bit
TCP:6
UDP:17
ICMP:1
首部检验和:16bit
校验数据报的首部,TTL发生变化,需重新计算
源地址:32bit
目的地址:32bit
4.3.2 ICMP协议
全称:Internet Control Message Protocol(控制报文协议)
报文结构(8字节):
- 类型:1字节
- 代码:1字节
- 校验和:2字节
- 不同类型和代码有不同的内容: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字节
源端口:16bit
目的端口:16bit
序列号:32bit
确认号:32bit
偏移字段:4bit
保留字段:4bit
全为0
标志位字段
- 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,表示数据已经发送完成,可以释放连接。
窗口大小:16bit
TCP校验和:16bit
紧急指针:16bit
可选字段:必须为32bits整数倍
4.4.2 UDP
全称:User Datagram Protocol (用户数据报协议)
首部:8字节
- 源端口:16bit
- 目的端口:16bit
- 长度:16bit
- 校验值:16bit