网站首页 > 教程文章 正文
一、TCP 三次握手
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的可靠传输协议,其核心特性之一是在数据传输前建立逻辑连接。“三次握手(Three-Way Handshake)”是TCP连接建立的标准过程,用于确保客户端与服务器双方“同步”连接状态,并确认双方的发送和接收能力正常。
1. 三次握手的具体步骤
假设客户端(Client)主动连接服务器(Server),整个过程通过**SYN(同步序列号)和ACK(确认应答)**两种标志位完成,具体步骤如下:
步骤 | 角色 | 发送的数据包 | 目的 |
第一步(SYN) | Client → Server | SYN=1(请求同步),Seq=x(客户端初始序列号,随机生成) | 客户端向服务器声明:“我想和你建立连接,我的初始序列号是x。” |
第二步(SYN+ACK) | Server → Client | SYN=1(同意同步),Seq=y(服务器初始序列号,随机生成),ACK=1(确认客户端的SYN),Ack=x+1 | 服务器向客户端声明:“收到你的连接请求,我的初始序列号是y,确认你可以发送数据(x+1表示下一个期望接收的序列号)。” |
第三步(ACK) | Client → Server | ACK=1(确认服务器的SYN),Seq=x+1(客户端下一个序列号),Ack=y+1(确认服务器的序列号) | 客户端向服务器声明:“收到你的确认,我的下一个序列号是x+1,确认你可以发送数据(y+1表示我期望接收的下一个序列号)。” |
2. 为什么需要“三次”握手?
关键目的是防止“失效的连接请求”被误接收。假设采用两次握手:
- 客户端发送SYN后,若因网络延迟未收到服务器的SYN+ACK,可能重发SYN;
- 服务器收到第一次SYN后回复SYN+ACK,若客户端未收到,服务器会认为连接已建立并等待数据;
- 此时客户端重发的SYN到达服务器,服务器会认为是新的连接请求,导致“半开连接”(Half-Open Connection)浪费资源。
三次握手通过“客户端最终确认”避免了这一问题:服务器只有在收到客户端的第三次ACK后,才会正式建立连接并分配资源。
3. 安全风险与防御
三次握手的缺陷可能被攻击者利用,典型风险是SYN洪水攻击(SYN Flood):
- 攻击者伪造大量客户端的SYN包(不发送第三次ACK),导致服务器的“半连接队列”被填满(半开连接无法释放);
- 服务器无法处理新的合法连接请求,最终导致服务瘫痪(DoS攻击)。
防御方法:
- SYN Cookie:服务器不立即分配半连接队列资源,而是通过加密算法生成一个“Cookie”(基于客户端IP、端口、时间戳等),在收到第三次ACK时验证Cookie有效性,减少资源消耗;
- 防火墙速率限制:通过防火墙限制单位时间内SYN包的数量(如每分钟仅允许100个SYN请求);
- 缩短半连接超时时间:减少服务器等待第三次ACK的时间(如从默认的60秒缩短至30秒)。
二、端口扫描攻击
端口扫描(Port Scanning)是攻击者通过向目标主机的特定端口发送探测数据包,判断端口是否开放、运行何种服务的技术。其核心目的是收集目标网络的服务信息,为后续攻击(如漏洞利用)提供依据。
1. 端口扫描的原理
- 端口状态:TCP端口有65536个(0-65535),分为“开放”(服务监听)、“关闭”(无服务监听)、“过滤”(被防火墙拦截)三种状态;
- 探测方式:通过发送特定类型的TCP/UDP数据包(如SYN、ACK、FIN),根据目标返回的响应(如RST、SYN-ACK)判断端口状态。
2. 常见扫描类型
扫描类型 | 原理 | 特点 | 工具示例 |
全连接扫描(TCP Connect) | 完成三次握手(发送SYN→接收SYN+ACK→发送ACK),与目标建立完整连接。 | 技术简单,但会留下完整的连接日志(易被检测)。 | Netcat(nc)、Telnet |
半开放扫描(SYN Scan) | 仅发送SYN包,不完成三次握手: | 隐蔽性强(无完整连接日志),是最常用的扫描方式。 | Nmap(-sS参数) |
FIN扫描(FIN Scan) | 发送FIN包(用于关闭连接),若目标返回RST(端口关闭),否则认为端口开放(适用于无状态防火墙)。 | 绕过部分防火墙规则,但对Windows系统无效(Windows会忽略FIN包)。 | Nmap(-sF参数) |
UDP扫描(UDP Scan) | 发送UDP数据包到目标端口: | 耗时久(UDP无连接),但可发现DNS、SNMP等UDP服务。 | Nmap(-sU参数) |
3. 安全风险与防御
端口扫描的直接风险是暴露网络服务信息(如开放了SSH 22端口、HTTP 80端口),攻击者可针对性利用服务漏洞(如SSH弱密码、HTTP SQL注入)。
防御方法:
- 防火墙过滤:通过ACL(访问控制列表)限制外部对非必要端口的访问(如仅开放80/443端口);
- 端口最小化:关闭不必要的服务端口(如禁用Telnet 23端口,改用SSH 22);
- 入侵检测(IDS):部署IDS监控异常扫描行为(如短时间内大量SYN包发送到不同端口);
- 服务加固:对开放端口的服务(如SSH、HTTP)启用认证(如密钥登录)、加密(如TLS)和漏洞修复(定期更新补丁)。
三、公网IP与私网IP的区别
IP地址是网络设备的“网络身份证”,根据使用范围可分为公网IP(Public IP)和私网IP(Private IP),两者的核心差异在于“是否可在互联网上全局路由”。
1. 定义与范围
类型 | 定义 | IP地址范围(RFC 1918标准) | 唯一性 |
公网IP | 由互联网号码分配机构(IANA)或其授权机构(如APNIC、ARIN)分配,可在全球互联网上唯一标识一个设备。 | - A类:0.0.0.0~9.255.255.255(保留0.0.0.0/8和127.0.0.0/8) | 全球唯一,无重复。 |
私网IP | 由企业/家庭内部网络(如局域网、校园网)自行分配,仅在局域网内有效,无法直接在互联网上路由。 | 10.0.0.0/8(10.0.0.0~10.255.255.255) | 局域网内唯一,不同局域网可重复(如多家公司都可使用192.168.1.1)。 |
2. 核心差异
维度 | 公网IP | 私网IP |
作用范围 | 全球互联网(跨运营商、跨国家)。 | 局域网(如企业内网、家庭Wi-Fi)。 |
路由能力 | 可被互联网核心路由器(如BGP路由表)识别并转发。 | 仅能在局域网内路由(需通过NAT转换为公网IP才能访问互联网)。 |
分配方式 | 由IANA或其授权机构分配(需申请,费用较高)。 | 由局域网管理员自行分配(如路由器DHCP自动分配)。 |
典型场景 | 企业服务器(如官网、邮件服务器)、云服务器(如阿里云ECS的公网IP)。 | 个人电脑、手机、智能家居设备(通过家庭路由器共享公网IP访问互联网)。 |
3. NAT(网络地址转换)的作用
由于私网IP无法直接访问互联网,需通过**NAT(Network Address Translation,网络地址转换)**技术将私网IP映射为公网IP。典型场景:
- 家庭网络:路由器(公网IP:223.5.5.5)为内网设备(私网IP:192.168.1.100)分配临时公网端口(如223.5.5.5:12345),实现内网设备访问互联网;
- 企业网络:企业出口路由器将多个内网私网IP(如10.1.1.2~10.1.1.100)映射到一个公网IP的不同端口,节省公网IP资源。
4. 安全影响
- 公网IP暴露风险:公网IP直接暴露在互联网中,易成为攻击目标(如DDoS、端口扫描),需部署防火墙、WAF等防护措施;
- 私网IP隐蔽性:私网IP无法被互联网直接访问,天然具备一定隐蔽性,但需防范内网横向渗透(如攻击者通过钓鱼邮件进入内网后,扫描私网IP的开放端口)。
总结
TCP三次握手是TCP连接的“握手仪式”,需重点关注SYN洪水攻击的防御;端口扫描是攻击者的“信息收集工具”,需通过网络设备过滤和IDS监控应对;公网与私网IP的本质区别是“全局唯一性”,NAT技术则是连接两者的桥梁。理解这些概念,有助于数通工程师在设计网络架构时平衡通信需求与安全性(如合理分配公网IP、限制私网端口开放),并为后续渗透测试、安全防护提供基础。
猜你喜欢
- 2025-08-21 TCP协议原理,有这一篇就够了_tcp协议技术
- 2025-08-21 TCP三次握手和四次挥手详解_tcp三次握手的作用
- 2025-08-21 深入解析常见三次握手异常_深入解析常见三次握手异常行为
- 2025-08-21 连肝7个晚上,总结了66条计算机网络的知识点
- 2025-08-21 Linux实例常用内核网络参数介绍与常见问题处理
- 2025-08-21 01-安装配置maxscale-6.0,mysql中间件
- 2025-08-21 TCP 的三次握手,四次挥手和重要的细节—干货满满,建议细读
- 2025-08-21 Linux使用中的一些问题及解决过程(记录1)
- 2025-08-21 DDOS攻击会带来什么危害?有什么应对策略?
- 2025-08-21 浅析大规模DDOS防御架构 应对T级攻防(1)
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)