网站首页 > 精选文章 正文
一、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-09-29 服务器有哪些方法可以检查端口是否打开?
- 2025-09-29 为什么端口明明开着,nmap却扫描不出来,看老司机怎么指点迷津
- 2025-09-29 实战剖析内网域渗透(上)_内网渗透可以用来干嘛
- 2025-09-29 Masscan扫描工具神器,号称最快扫描器
- 2025-09-29 几款经典的端口扫描工具推荐_端口扫描工具怎么用
- 2025-09-29 「安全测试」使用python+nmap进行端口扫描
- 2025-09-29 如何检查 Linux 中开放的端口列表?
- 2025-09-29 网络安全工程师演示:黑客是如何使用Nmap网络扫描工具的?
- 2025-09-29 第二轮学习笔记: 扫描工具 -- nmap端口扫描
- 2025-09-29 红队渗透工具集——端口扫描_渗透常用端口
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)