TCP/IP常用协议
TCP/IP常用协议
TCPIP之网络支撑协议
- ARP
- ICMP
ARP
- ARP
- 无故ARP
- 代理ARP
- RARP
ARP
- ARP(地址解析协议)
- ARP是网络层协议,在同一广播域内,将IP地址解析成MAC地址
- ARP封装与报文格式
硬件类型:1(以太网)
协议类型:0x0800(IP)
硬件地址长度:6(MAC地址长度)
协议地址长度:4(IP地址长度)
操作:
1(ARP请求,二层封装广播,目的MAC为FFFF-FFFF-FFFF)
2(ARP应答,二层封装单播)
- ARP请求
- ARP应答
-
ARP表
ARP表的核心条目是目标设备的IP地址与其对应的物理MAC地址的绑定关系。例如:
192.168.1.1 → 00:1a:2b:3c:4d:5e
作用:当设备需发送数据时,通过查询ARP表将目标IP转换为MAC地址,确保数据帧在物理网络中正确传输
-
路由器
-
主机
-
-
ARP的工作流程
无故ARP
- 请求型无故ARP
- 使用广播方式主动发送自己IP地址的ARP
- 请求自己IP地址的MAC地址,用于重复IP地址检测,如果收到了回应,那么就代表当前IP不可用,如果没有收到回应,那么当前IP是可以用的。
- 应答型无故ARP
- 也是广播发送自己的IP地址
- 用于刷新其他主机或设备的ARP表
- 用于刷新交换机的MAC地址表
代理ARP
代理ARP相当于现在的网关,通过代理ARP能实现不同网段的主机之间的通信。
但是这种通信法式其实是一种欺骗,我们都知道MAC地址是和IP地址向映射的,但是这种方式,两个不同网段的主机进行通信,IP地址是对方的,但是MAC地址却是路由器的,但是他们又确确实实能进行通信,所以算是一种ARP欺骗。
-
设备默认情况
- Cisco设备所有三层接口都默认开启了代理ARP。
- 华为/华三设备代理ARP默认关闭
-
工程配置要求
- 所有三层接口都不行关闭代理ARP
RARP
- 知道自己的MAC地址,但不知道自己的IP地址,通过RARP来获取IP地址,早期用于无盘工作站的开机引导,现在已经完全被淘汰了。
- 已经被DHCP取代。
ICMP
- ICMP
- Ping
- TraceRoute
- 目标不可达
- ICMP重定向
- 工程配置要求
ICMP
ICMP工作在网络层,封装IP,协议号1,用于发送错误信息和控制消息。
Ping
- ICMP回显报文
- 分为类型为0,代码为0的ECHO回显应答报文和类型为8,代码为0的ECHO回显请求报文。
ECHO回显请求报文:
ECHO回显应答报文:
- Ping
TraceRoute
- 主机TraceRoute
- 路由TraceRoute
TraceRoute 依赖 TTL机制(Time to Live,生存时间)和 ICMP/UDP协议 实现路径追踪:
- TTL机制
- 探测包初始TTL值设为1,每经过一个路由器,TTL值减1。
- 当TTL降为0时,当前路由器丢弃数据包,并向源主机发送ICMP超时消息(Type 11),其中包含路由器自身的IP地址。
- 逐步探测路径
- 发送TTL=1的探测包 → 获取第一跳路由器信息。
- 发送TTL=2的探测包 → 获取第二跳路由器信息。
- 重复直至到达目标主机或达到最大跳数(默认30跳)
至于为什么这么多超时的,那是因为在公网上,为了安全着想,有很多路由功能的设备是关闭了应答请求功能的。
目标不可达
- 网络不可达
- 主机不可达
- 协议不可达
- 端口不可达
- 协议归属
- 属于ICMP差错报文,类型值固定为
Type=3
,通过Code字段细分具体错误原因。 - 封装在IP数据包中(IP头部协议字段值为1),工作于网络层。
- 属于ICMP差错报文,类型值固定为
- 核心功能
- 错误诊断:明确告知源主机数据包丢弃的原因(如目标主机离线、路由缺失等)。
- 网络优化:帮助管理员快速定位故障节点,避免盲目重传
- 目标不可达ICMP信息
ICMP重定向
- ICMP重定向
ICMP重定向(ICMP Redirect)是ICMP协议的一种控制报文(类型值5),其核心功能是优化网络路径选择。当路由器检测到主机使用非最优路由时,会主动向源主机发送此报文,指示其修改路由表,将数据直接发送至更优的下一跳设备。
ICMP重定向(ICMP Redirect)是ICMP协议的一种控制报文(类型值5),其核心功能是优化网络路径选择。当路由器检测到主机使用非最优路由时,会主动向源主机发送此报文,指示其修改路由表,将数据直接发送至更优的下一跳设备。以下是详细解析:
🔍 一、核心原理
-
触发条件
路由器在以下场景会发送ICMP重定向报文:- 入接口与出接口相同:数据包从某个接口进入,又需从同一接口转发。
- 源IP与下一跳同网段:数据包的源IP地址和最优下一跳IP地址属于同一子网。
- 非源路由数据包:数据包未指定强制路径(源路由选项)。
- 路由器拥有目标路由:路由器需知晓更优路径。
-
报文结构
字段 值 作用 Type(类型) 5 标识为ICMP重定向报文 Code(代码) 0-3 细化类型(0:网络重定向;1:主机重定向) Gateway Address(网关地址) IPv4地址 指定更优的下一跳IP地址 Original IP Header(原始IP头) 可变 包含触发重定向的数据包头前64比特
⚙️ 二、工作流程
以典型拓扑为例(主机→默认网关R1→目标网关R2):
- 主机发送数据:主机将跨网段数据包发送至默认网关R1(如192.168.1.253)。
- 网关检测非最优路径:R1发现目标IP(如
192.168.3.1
)与R2(192.168.1.254
)直连同一网段。- 满足入/出接口相同且源IP与下一跳同网段条件。
- 发送重定向报文:
- R1转发原始数据包至R2。
- 同时向主机发送ICMP重定向报文,建议新网关为R2(192.168.1.254)。
- 主机更新路由表:
- 支持重定向的主机(如Windows)添加一条主机路由(目标IP→R2的MAC)。
- 后续数据包直连R2,跳过R1。
💡 示例:主机访问
192.168.3.1
时,原路径主机→R1→R2
优化为主机→R2
,减少一跳延迟。
⚖️ 三、优缺点分析
优点 | 缺点 |
---|---|
✅ 自动优化路径:减少冗余路由,降低延迟。 | ❌ 安全隐患:攻击者可伪造重定向报文,劫持流量(如中间人攻击)。 |
✅ 简化主机配置:主机无需维护复杂路由表。 | ❌ 性能开销:维护大量主机路由可能消耗主机资源。 |
❌ 增加网络流量:重定向报文额外占用带宽 |
说白了就是攻击者可以发送一个ICMP重定向报文给你,然后修改你的网关变成攻击者的IP,那么你的上网流量就会从攻击者的电脑经过,安全风险很高。
工程配置要求
- interface FastEthernet1/0
- no ip proxy-arp //关闭代理APP
- no ip directed-broadcast //关闭定向广播
- no ip unreachables //关闭ICMP目标不可达
- no ip redirect //关闭ICMP重定向
TCP/IP应用协议
- 常见TCP应用协议
- 常见UDP应用协议
- DNS
- FTP
- Telnet
- 常用网络命令
常见TCP应用协议
常见UDP应用协议
DNS(域名解析协议)
- 主机名与IP地址映射需求
- IP地址难于记忆
- 能否用便于记忆的名字来映射IP地址
- Hosts文件
- Hosts文件是主机本地文件,记录了主机名和IP地址的对应信息
- DNS域名解析
- DNS系统采用客户机/服务器架构,封装于UDP,服务器端口号53
- 域名
- DNS域名是一种分级结构,每一级域名都由字母和数字组成,不分大小写;根域名用“.”表示,以“.”结尾的域名称为完全合格域名FQDN(Full Qualified Domain Name)
- DNS域名解析过程
-
递归查询
- DNS服务器收到递归查询请求后,负责把最终结果返回给请求方,如果本地查询不到,该DNS服务器将查询其他的DNS服务器,知道查询到结果。
- 一般客户机与本地DNS域名服务器之间采用递归查询方式。
-
迭代查询
- DNS服务器收到迭代查询请求后,如果本地查询不到,将返回一个可能查得到的DNS服务器地址给请求者,由请求者自行查询该DNS服务器,以此类推,请求者最终查到结果。
- 一般本地域名服务器与根域名服务器之间采用迭代查询方式。
-
递归查询——查询请求转发
- 如果本地查询不到,将该请求发给其他DNS服务器继续查询。
- 反向DNS查询
- 根据已知的IP地址查找主机所对应的域名
- DNS域名树中设立了一个in-addr.arpa反向查询域用于反向查询。
🔄 一、DNS解析过程概览(递归 + 迭代)
1. 浏览器缓存查找
- 浏览器会先检查自己是否缓存了该域名对应的IP地址(DNS缓存)。
- ✅ 如果有,直接使用,解析结束。
- ❌ 如果没有,进入下一步。
2. 操作系统缓存查找
- 操作系统维护一个DNS缓存(比如 Windows 中的
ipconfig /displaydns
)。 - ✅ 找到就返回IP。
- ❌ 没有则继续。
3. 本地DNS服务器(通常是ISP提供)
- 操作系统将域名请求发送给本地DNS服务器(如你宽带运营商配置的DNS)。
- 这个服务器一般具有递归查询能力,负责替你完成后续的查询。
📡 二、真正的DNS查询(本地DNS服务器开始递归查询)
如果本地DNS服务器自己也没有缓存,会按以下顺序发起迭代查询:
步骤 1:根DNS服务器
- 本地DNS请求根DNS服务器(全球13组,标识如
a.root-servers.net
)。 - 根服务器不返回具体IP,但会告诉你:“去找某个顶级域(TLD)服务器”。
- 例如请求
www.example.com
,根服务器返回.com
的TLD服务器地址。
步骤 2:顶级域名(TLD)服务器
- 本地DNS联系
.com
顶级域服务器。 - TLD服务器会告诉你:“去找
example.com
的权威DNS服务器”。
步骤 3:权威DNS服务器
- 本地DNS服务器向
example.com
的权威DNS服务器请求www.example.com
的IP地址。 - 权威DNS返回真正的 IP,比如
93.184.216.34
。
步骤 4:返回与缓存
- 本地DNS拿到结果后:
- 返回给操作系统 → 操作系统 → 返回给浏览器。
- 同时会把结果缓存起来(缓存时间由TTL决定)。
🔁 总结流程图
浏览器 → 操作系统 → 本地DNS(递归) →根DNS → TLD服务器 → 权威DNS → 返回IP
✅ 补充说明:
项目 | 说明 |
---|---|
📦 DNS缓存 | 浏览器、操作系统、本地DNS服务器都有缓存,优先级高。 |
⏳ TTL | 每个DNS记录都有“生存时间”,到期后才重新查询。 |
🔄 递归 vs 迭代 | 递归:本地DNS负责一站到底;迭代:逐级跳转由本地DNS完成。 |
🛡️ 常见公用DNS | 如 8.8.8.8(Google),1.1.1.1(Cloudflare),114.114.114.114(中国)。 |
FTP
-
FTP协议简介
-
FTP采用客户端/服务器架构,基于TCP,采用双TCP连接方式
-
控制连接使用TCP端口号21
-
数据连接使用TCP端口号20
-
-
FTP有两种文件传输模式
-
ASCII(默认的文件传输模式)
-
本地文件转换成标准的ASCII码再传输
-
适用于传输文本文件
-
-
Binary(二进制流模式,也称为图像文件传输模式)
- 文件按照比特流的方式进行传输
- 使用于传送程序文件
-
-
FTP有两种数据传输方式
- 主动方式
- 被动方式
-
-
FTP双TCP连接方式
-
数据连接
- 用于传输数据,包括上传、下载、文件列表发送等。数据传输结束后数据连接将终止。
-
控制连接
- 用于在FTP客户端和FTP服务器之间传输FTP控制命令及命令执行信息。控制连接在整个FTP会话期间一直保持打开。
-
-
FTP主动数据传输方式
- 主动方式也称为PORT方式
- FTP客户端通过向FTP服务器发送PORT命令,告诉服务器该客户端用于传输数据的临时端口号
- 当需要传送数据时,服务器通过TCP端口号20与客户端的临时端口建立数据传输通道,完成数据传输
- 在建立数据连接的过程中,由服务器主动发起连接,因此被称为主动方式。
- 主动方式也称为PORT方式
-
FTP——主动方式建立连接
-
FTP被动数据传输方式
- 被动方式也称为PASV方式
- FTP客户端通过向FTP服务器发送PASV命令,告诉服务器进入被动方式。服务器选择临时端口号并告知客户端
- 当需要传输数据时,客户端主动与服务器的临时端口号建立数据传输通道,完成数据传输
- 在整个过程中,由于服务器总是被动接收客户端的数据连接,因此被称为被动方式。
- 被动方式也称为PASV方式
-
FTP——被动方式建立连接过程
主动还是被动是基于服务器端来讲的。
这两种方式和和防火墙的关系:
✅ 一、基础前提(非常关键)
- FTP用两个TCP连接:
- 控制连接(固定端口21):用于登录、发命令。
- 数据连接(文件传输):用于传文件(端口是动态的)。
📡 二、主动模式(Active / PORT)
👇 建立流程:
- 客户端发起控制连接,连到服务端 21 端口(固定);
- 客户端告诉服务端:“我开了一个端口,比如 1025,你来连接我”;
- 服务端通过它的20端口连接回客户端的1025端口(数据连接)。
🔥 安全问题(客户端的角度):
- 客户端需要监听一个临时端口,允许服务端从外部“入站连接”它;
- 但是:
- 客户端的防火墙通常禁止这种入站连接;
- 如果客户端在 NAT(如路由器后面),这个入站连接无法穿透NAT;
- 所以:主动模式在客户端有防火墙或NAT时,经常失败。
🌐 三、被动模式(Passive / PASV)
👇 建立流程:
- 客户端发起控制连接(到服务端21端口);
- 客户端告诉服务端:“我处在防火墙或NAT后,请你告诉我你开放了哪个端口”;
- 服务端打开一个随机端口(比如 50000),告诉客户端这个端口号;
- 客户端主动连接服务端这个端口,建立数据连接。
✅ 优点(客户端主动):
- 客户端主动发起所有连接,符合防火墙/NAT的出站规则;
- 不需要客户端暴露任何端口;
- 所以被动模式更兼容现代网络环境。
🔁 四、防火墙 & NAT 的优先级影响
项目 | 主动模式(PORT) | 被动模式(PASV) |
---|---|---|
客户端发起连接 | ✅ 控制连接是客户端主动 | ✅ 控制+数据连接都是客户端主动 |
服务端发起连接 | ❌ 服务端要连客户端的数据端口 | ✅ 无需服务端发起连接 |
客户端 NAT 影响 | ❌ 服务端连接不了内网客户端 | ✅ 客户端主动出站,不影响 |
客户端防火墙影响 | ❌ 默认拒绝外部入站连接 | ✅ 出站连接默认允许 |
服务端防火墙影响 | ✅ 开放20/21即可 | ❌ 必须开放高位端口范围(比如50000-51000) |
🔑 五、你要记住的核心优先级(结论)
▶ 对客户端防火墙友好的优先级:
被动模式 > 主动模式
▶ 对服务端配置简单性的优先级:
主动模式 > 被动模式(因为被动要开很多高位端口)
🧠 举个实际例子理解
假设你在校园网或咖啡店:
- 你是客户端,你的电脑后面有NAT路由器 + 防火墙;
- 你不能让服务端连回你的电脑开的小端口(被NAT/防火墙挡住);
- 所以:你必须用被动模式,你连接服务端指定的端口(出站连接没问题)。
💡 总结一句话理解
主动模式让服务器“打电话”回客户端 —— 防火墙/NAT 可能不让你接这个电话。
被动模式让客户端“全程打电话” —— 防火墙和NAT都说“可以出门”。
Telnet
- Telnet
- Telnet基于客户端/服务器模式,服务器端口号23
- Telnet需要定义了一个通用终端数据标准-NVT(Net Virtual Terminal,网络虚拟终端)结构。
- Telnet具有简单的安全措施,登录时要求进行用户认证
- Telnet工作过程
- Telnet客户端
- 与远程服务器建立TCP连接
- 接收从键盘上输入的字符
- 把输入的字符变成NVT标准格式并发送给远程服务器
- 从远程服务器接收输出信息,并把这些信息显示在屏幕上
- Telnet服务器
- 接受客户端的TCP连接
- 对客户端进行用户认证
- 等待客户端输入命令
- 执行客户端输入的命令
- 把执行结果送回给客户端
- Telnet客户端
SMTP与POP3
- SMTP
- Simple Mail Transfer Protocol-简单邮件传输协议
- 用于发送和接收邮件
- 端口号25
- POP3
- Post Office Protocol v3-邮局协议版本3
- 用于客户端接收邮件
- 端口号110