一、三大网络模型
1.1 各层功能
- 物理层:是 OSI 模型的最底层,主要负责处理物理介质上的信号传输。它定义了硬件设备、传输介质(如电缆、光纤、无线频段)的电气、机械、功能和规程特性,确保数据能够在物理介质上进行传输。例如,规定了网线的接口类型、信号的电压值、传输速率等。
- 数据链路层:负责将物理层接收到的信号转换为数据帧,并进行错误检测和纠正。它通过 MAC地址来标识网络中的设备(标识上层数据),实现设备之间的可靠数据传输。
- 网络层:主要功能是实现网络之间的数据路由和寻址。它通过 IP 地址来标识网络中的主机和网络,根据网络拓扑结构和路由协议,选择最佳的路径将数据包从源主机传输到目标主机。网络层还负责处理数据包的分片和重组,以适应不同网络链路的 MTU(最大传输单元)限制。
- 传输层:为应用程序提供端到端的通信服务。它负责在不同主机的应用程序之间建立、维护和管理连接,确保数据的可靠传输。传输层使用端口号来标识不同的应用程序进程,常见的传输层协议有 TCP(传输控制协议)和 UDP(用户数据报协议)。TCP 提供可靠的面向连接的服务,UDP 则提供不可靠的无连接服务。
- 会话层:主要负责建立、管理和终止会话。它协调不同主机上应用程序之间的通信会话,包括会话的建立、维护和终结等功能。会话层还可以提供会话管理的服务,如会话的恢复和重新连接等。
- 表示层:负责处理数据的表示和转换,确保不同系统之间能够正确地理解和处理数据。它包括数据的加密和解密、压缩和解压缩、字符编码转换等功能。例如,将不同字符集的文本进行转换,或者对视频、音频等数据进行格式转换,以适应接收方的要求。
- 应用层:是 OSI 模型的最高层,直接面向用户和应用程序。它提供了各种网络服务和应用程序接口,如 HTTP(超文本传输协议)用于网页浏览、SMTP(简单邮件传输协议)用于电子邮件发送、FTP(文件传输协议)用于文件传输等。应用层负责将用户的请求转换为网络能够理解的格式,并将服务器的响应转换为用户能够理解的形式。
1.2 TCP/IP协议栈
二、IP协议
2.1 IP包头结构
- 版本(Version):占 4 位,用于标识 IP 协议的版本,常见的有 IPv4 和 IPv6。IPv4 的版本值为 4,IPv6 的版本值为 6。
- 包头长度(Header Length):占 4 位,以 4 字节为单位,表示 IP 包头的长度。由于 IP 包头中可能包含可选字段,所以首部长度是可变的。通过该字段,接收方可以确定包头的结束位置和数据的开始位置。
- 服务类型(Type of Service,ToS):占 8 位,QOS使用。前3位为IP优先级,前6位为DSCP
- 报文长度(Total Length):占 16 位,以字节为单位,表示整个 IP 数据包(包括包头和数据部分)的长度。该字段的最大值为 65535 字节,但由于数据链路层对 MTU 的限制,实际传输的数据包长度通常会小于这个值。
- 标识符(Identifier):占 16 位,用于唯一标识一个数据包,主要用于数据包的分片和重组。当一个数据包需要被分片传输时,每个分片都会携带相同的标识符,以便接收方能够将它们正确地重组为原始数据包。
- 标志位(Flags):占 3 位,用于控制数据包的分片和指示数据包的状态。其中,第一位为保留位,必须设置为 0;第二位为不分片位(DF),如果设置为 1,表示该数据包不允许被分片;第三位为更多分片位(MF),如果设置为 1,表示该数据包还有更多的分片未传输。
- 分段偏移量(Fragment Offset):占 13 位,以 8 字节为单位,表示该分片在原始数据包中的偏移量。通过片偏移字段,接收方可以确定各个分片在原始数据包中的位置,从而正确地进行重组。
- 生存时间(Time to Live,TTL):占 8 位,用于指定数据包在网络中的生存时间。每经过一个路由器,TTL 的值就会减 1,当 TTL 的值减为 0 时,数据包将被丢弃。TTL 的作用是防止数据包在网络中无限循环,确保网络的稳定性。
- 协议(Protocol):占 8 位,用于标识上层协议,如 TCP(值为 6)、UDP(值为 17)、ICMP(值为 1)等。通过协议字段,接收方可以知道将数据包交给哪个上层协议进行处理。
- 包头校验和(Header Checksum):占 16 位,用于校验 IP 包头的完整性。计算校验和时,只对 IP 包头进行计算,不包括数据部分。发送方在发送数据包前,会根据 IP 包头的内容计算出一个校验和,并将其填入首部校验和字段;接收方在收到数据包后,会重新计算校验和,并与首部校验和字段的值进行比较,如果两者不相等,则说明数据包在传输过程中发生了错误。
- 源 IP 地址(Source IP Address):占 32 位,用于标识数据包的发送方 IP 地址。
- 目的 IP 地址(Destination IP Address):占 32 位,用于标识数据包的接收方 IP 地址。
- 可选字段(Options):长度可变,最多可达 40 字节。可选字段用于提供一些额外的功能,如记录路由、时间戳、安全选项等。但由于可选字段会增加 IP 包头的长度和处理复杂度,所以在实际应用中并不常用。
- 填充字段(Padding):用于保证 IP 包头的长度是 4 字节的整数倍。当可选字段的长度不是 4 字节的整数倍时,需要在可选字段后面添加填充字段,使 IP 包头的总长度满足 4 字节对齐的要求。
注:标识符--同一ip数据包的各个分片的标识符相同 IP分片只在目标主机上进行重组
三、TCP与UDP
3.1 TCP包头结构
- 源端口号(Source Port):占 16 位,标识发送端应用程序的端口号,用于区分同一台主机上的不同应用程序。
- 目的端口号(Destination Port):占 16 位,标识接收端应用程序的端口号,用于将数据准确交付到目标应用程序。注:0——65536,1024以下为知名端口号
- 序号(Sequence Number):占 32 位,用来标识 TCP 发送端发送数据的字节流编号。通过序号,接收端可以正确地将接收到的数据包按顺序组装成完整的数据。
- 确认号(Acknowledgment Number):占 32 位,是接收端期望收到的下一个字节的序号。它表示接收端已经成功接收了该序号之前的所有数据,用于实现可靠的数据传输。
- 报头长度(Data Offset):占 4 位,指示 TCP 包头的长度,以 4 字节为单位。由于 TCP 包头可能包含选项字段,长度不固定,因此需要这个字段来确定数据部分的起始位置。
- 预留(Reserved):占 6 位,保留字段,暂时未使用,通常设置为 0。
- 编码位(Control Bits):共 6 位,从左到右分别是 URG、ACK、PSH、RST、SYN、FIN。具体含义如下:
- URG(紧急指针标志):当 URG = 1 时,表明紧急指针字段有效,通知接收方尽快处理紧急数据。
- ACK(确认标志):当 ACK = 1 时,确认序号字段才有效。在建立连接后,所有发送的数据包都应将 ACK 置为 1。
- PSH(推送标志):当 PSH = 1 时,指示接收方应尽快将数据交付给应用程序,而不是等待缓冲区填满。
- RST(复位标志):当 RST = 1 时,用于重置连接。通常在出现错误或异常情况时,发送 RST 包来终止连接。
- SYN(同步标志):在建立连接时,SYN = 1 用于同步序号。SYN = 1 且 ACK = 0 表示这是一个连接请求包;SYN = 1 且 ACK = 1 表示这是一个连接确认包。
- FIN(结束标志):当 FIN = 1 时,表明发送方已完成数据发送,请求关闭连接。
- 窗口(Window Size):占 16 位,用于告知发送方接收方的接收窗口大小,即接收方当前能够接收的数据量。发送方根据这个字段来控制发送数据的速度,以避免接收方缓冲区溢出。
- 校验和(Checksum):占 16 位,用于检测 TCP 数据包在传输过程中是否发生错误。它是对 TCP 包头和数据部分进行计算得到的一个校验值,接收方通过重新计算校验和来验证数据的完整性。TCP报头和数据的校验和
- 紧急指针(Urgent Pointer):占 16 位,当 URG 标志位为 1 时,紧急指针字段有效。它指向紧急数据的最后一个字节的序号,用于在紧急情况下快速定位紧急数据的范围。
- 选项(Options):长度可变,通常为 0 - 40 字节。常见的选项包括最大段大小(MSS)、窗口扩大因子、时间戳等。选项字段用于在 TCP 连接建立过程中协商一些参数,或者提供一些额外的功能。
- 填充(Padding):由于选项字段的长度不一定是 4 字节的整数倍,为了保证 TCP 包头的长度是 4 字节的整数倍,可能需要添加填充字节,使整个包头长度满足要求。
3.2TCP连接建立——三次握手
客户端向服务器发送 SYN 包(第一次握手) SYN=1, Seq=x
服务器响应 SYN+ACK 包(第二次握手) SYN=1, ACK=1, Seq=y, Ack=x+1
客户端发送 ACK 包完成握手(第三次握手) ACK=1, Seq=x+1, Ack=y+1
3.3TCP连接断开——四次断开
客户端向服务器发送 FIN 包(第一次挥手) FIN=1, Seq=u
服务器响应 ACK 包(第二次挥手) ACK=1, Seq=v, Ack=u+1
服务器向客户端发送 FIN 包(第三次挥手) FIN=1, ACK=1, Seq=v, Ack=u+1
客户端响应 ACK 包(第四次挥手) ACK=1, Seq=u+1, Ack=v+1
3.4 UDP包头结构
四、上层协议标识
4.1常见IP协议号
协议 | IP协议号 | 协议 | IP协议号 |
---|---|---|---|
ICMP | 1 | RSVP | 46 |
IGMP | 2 | GRE | 47 |
IP in IP | 4 | ESP | 50 |
TCP | 6 | AH | 51 |
IGRP | 9 | EIGRP | 88 |
UDP | 17 | OSPF | 89 |
IPv6 in IP | 41 | VRRP | 112 |
4.2常见TCP端口号
应用 | TCP 端口号 | 应用 | TCP 端口号 |
---|---|---|---|
FTP - Data | 20 | BGP | 179 |
FTP | 21 | HTTPS | 443 |
SSH | 22 | RTSP | 554 |
Telnet | 23 | SOL Server | 1433 |
SMTP | 25 | Oracle | 1521 |
Tacacs+ | 49 | H323 | 1720 |
HTTP | 80 | PPTP | 1723 |
POP3 | 110 | MMS | 1755 |
文件共享 | 139、445 | 远程桌面 | 3389 |
4.3常见UDP端口号
应用 | UDP 端口号 | 应用 | UDP 端口号 |
---|---|---|---|
WINS | 42 | NetBIOS | 137、138、139 |
DNS | 53 | IPSec NAT - T | 500、4500 |
DHCP(bootps) | 67 | Syslog | 514 |
DHCP(bootpc) | 68 | RIP | 520 |
TFTP | 69 | L2TP | 1701 |
NTP | 123 | Radius | 1812、1813 |
SNMP | 161、162 | Radius cisco | 1645、1646 |