概述
流量分析是网络安全和管理中的一个重要方面,它涉及到监测、捕获、解码、分析网络流量的过程。
理解网络协议
- TCP/IP:互联网协议套件,是一系列网络通信协议的集合,包括传输控制协议(TCP)和互联网协议(IP)。
- HTTP/HTTPS:超文本传输协议,用于在网络上传输网页。HTTPS是HTTP的安全版本,加入了SSL/TLS加密。
- DNS:域名系统,将域名和IP地址相互映射。
- FTP、SSH、SMTP等:用于文件传输、安全登录、邮件发送等的协议。
会话和流
- 会话是指两个网络实体之间的一次完整的通信过程,可以是TCP连接的建立、数据传输和断开。
- 流是会话中的数据传输部分,具体到每一个数据包的传输细节。
tcp 序列号和确认号
序列号(Sequence Number)
- TCP将数据作为一个有序的字节流传输。每个字节都按顺序编号,这个编号就是序列号。
- 序列号指的是当前数据段(packet)第一个字节的编号。它用于确保数据的顺序性,让接收方正确地重组来自发送方的数据流。
- 在连接建立时,发送方和接收方都会随机选择一个初始序列号作为起始点,之后的通信中,每个数据包的序列号会基于这个初始值连续递增,以反映传输的字节流的顺序。
确认号(Acknowledgment Number)
- 确认号是接收方用来告诉发送方已成功接收到的数据的序列号。具体来说,它是接收方期望接收的下一个字节的序列号。
- 当接收方收到一个数据段时,它会发送一个ACK(确认)数据包给发送方,ACK数据包中包含的确认号就是接收方已经接收并期望得到的下一个序列号的数据字节。
- 确认号使得发送方可以知道其发送的数据已被接收方正确接收,并可以继续发送后续的数据。如果一个数据包丢失,确认号可以帮助发送方识别并重传丢失的数据包。
tcp 三次握手和四次挥手
第一次握手:SYN(同步序列编号): 客户端:给服务器拨打电话,告诉服务器:“我想开始说话了“
第二次握手:SYN-ACK(同步应答): 服务器:接到电话后回应:“好的,我准备好了,你也准备好了吗?”
第三次握手:ACK(确认): 客户端:再次回应:“是的,我准备好了,我们开始吧。”
第一次挥手:FIN(结束): 告诉服务器:“我说完了,要挂电话了。”
第二次挥手:ACK: 服务器:回应:“我知道了,让我处理剩下的事情。”
第三次挥手:FIN: 服务器:处理完毕后告诉你:“我也准备结束通话了。”
第四次挥手:ACK: 确认服务器的结束请求,并回应:“好的,再见。”
OSI七层模型
物理层(Physical Layer):负责在物理媒介上传输原始的比特流(0和1)。这一层的设备包括电缆、光纤、集线器(Hub)等。 这一层主要是关于硬件标准,而不是协议,如电缆、光纤、无线电波、网络接口的物理特性。
数据链路层(Data Link Layer):负责在物理链接上建立、维护和解除逻辑链接,并进行帧的封装和解封装。设备包括交换机、网桥等。 Ethernet(局域网技术)、PPP(点对点协议)、ARP(地址解析协议,用于将网络层的地址转换为数据链路层的地址)
网络层(Network Layer):负责进行数据包的路由选择和转发。这一层的协议包括IP协议、ICMP协议等,设备有路由器等。
传输层(Transport Layer):负责提供端到端的可靠传输服务。它控制数据包的分割、流量控制、错误检测和恢复。主要的协议有TCP(传输控制协议)和UDP(用户数据报协议)。
会话层(Session Layer):负责在数据传输中建立、管理和终止会话。这一层允许不同用户和进程之间建立、使用和终止连接。 NetBIOS(会话建立在Windows系统中)、SSH(安全会话层协议)
表示层(Presentation Layer):负责数据的转换、加密和解密,压缩和解压缩等,以确保数据从一个系统传输到另一个系统时能够正确读取。 NetBIOS(会话建立在Windows系统中)、SSH(安全会话层协议)
应用层(Application Layer):为应用软件提供网络服务。它直接为用户的应用程序(如电子邮件、文件传输、远程登录)提供支持。 HTTP(网页浏览)、HTTPS(安全的网页浏览)、FTP(文件传输)、SMTP(邮件传输)、POP3/IMAP(邮件接收)。 Web浏览器, 邮件客户端。
设计
捕获网络流量
确保捕获足够的数据,以便能够重建完整的会话。这可能包括确保长时间运行或定位在网络架构中的关键位置(如网关或服务器前)。
会话重组
- TCP重组:对于TCP流量,需要根据序列号和确认号重组分段的数据流,以恢复原始会话的数据。这一步是必要的,因为TCP数据包可能因为网络延迟或重传而到达顺序不一致。
- UDP和其他协议:虽然UDP不是面向连接的协议,但你仍然可以通过源和目标地址、端口号以及协议类型来追踪和重组会话。
- 使用专门的库和工具(如Wireshark的Follow TCP Stream功能或Scapy)可以帮助自动化这个过程。