TCP报文重组和会话的唯一确定规则

来源:互联网 发布:php获取qq号码 编辑:程序博客网 时间:2024/05/22 13:46

基本概念

四元组:源IP地址、目的IP地址、源端口、目的端口。

五元组:源IP地址、目的IP地址、协议号、源端口、目的端口。

六元组:源MAC地址、源IP地址、源端口号、目的MAC地址、目的IP地址和目的IP地址。

七元组:源MAC地址、源IP地址、源端口号、目的MAC地址、目的IP地址和目的IP地址和协议号。

 

五元组确定一个会话还是四元组?

五元组通常是指由源IP地址,源端口,目的IP地址,目的端口和传输层协议号这五个量组成的一个集合。例如:192.168.0.1/10000/TCP/121.14.88.76/80就构成了一个五元组。其意义是,一个IP地址为192.168.1.1的终端通过端口10000,利用TCP协议,和IP地址为121.14.88.76,端口为80的终端进行连接通讯。

五元组能够唯一确定一个会话。

 

在TCP会话重组时,使用序列号确定TCP报文顺序可以解决数据报文不按顺序到达及其重传问题,并且利用二维链表对TCP会话就行还原。难点在于解决多连接问题、IP包乱序到达和TCP会话重传的问题

原因:TCP协议是TCP/IP协议族中一个重要组成部分,TCP数据流的重组是高层协议分析系统设计和实现的基础。TCP协议是面向连接的可靠传输协议,而TCP下层的IP协议却是面向报文的不可靠协议,这回带来问题:IP不能保证TCP报文可靠的、顺序的传输。为了解决这个问题,TCP采取滑动窗口机制、字节流编号机制和快速重传算法机制等。这可以保证数据的可靠传输。

TCP会话(TCP_Session_IDT)可以通过四元组<源IP地址、目的IP地址、源端口号和目的端口号>唯一标识

使用HASH表快速查找定位的特征,解决多个TCP会话同时处理的问题,快速处理多个会话问题。

在TCP头中Sequence Number是判断该数据包是否重传和包乱序的重要参数。在TCP连接刚建立时,会为后续TCP传输设置一个初始的SequenceNumber,每传送一个包含有效数据的TCP包,后续传送的TCP数据包的Sequence Number会作响应的修改,如果前一个包长度为N,则这个包的Sequence Number为前一个包Sequence Number加N。它是为保证TCP数据包按序传输来设计的,可以有效的实现TCP数据的完整传输,特别是当数据传输出现错误时可以有效进行错误纠正。

TCP重组数据文件写指针的SYN算法如下:

File_Init_Write_Pointer= Init_Sequence Number + 1;

File_write_Pointer= Current Sequence Number – File_init_Write_point;

检查TCP会话中是否存在空洞,可以来确定会话重组成功、失败和超时。

TCP建立连接需要3次握手,而终止一个连接需要4次握手。这是因为一个TCP连接时全双工的,每个方向必须单独的进行关闭。

规则1:六元组<源MAC地址、源IP地址、源端口号、目的MAC地址、目的IP地址和目的IP地址>,协议号是TCP,它应该是唯一的会话

规则2:TCP头中4元组<syn、fin、seq、len>,它应该是唯一的,不唯一说明存在重传情况。

原创粉丝点击