3.2.5 TCP SACK介绍
SACK 关注的同样是一个窗口内多个报文丢失的情况,它使用选择性确认机制和选择性重复重传策略处理这种问题。它将接收到的乱序报文信息均发送给发送方,这样发送方就能准确的知道哪些报文已经被接收方正确的接收,从而避免了不必要的重传,减少了网络延时,提高了网络的吞吐量。
发送端通过接收到的SACK块,来判断接收端的队列情况:哪些包已经接收,哪些包丢失。根据以前的SACK信息跟踪发送和接收包,每发一个包,该包都会根据Scoreboard记录的序列号和标志比特来确认是否已经被选择性应答。不需要重传标有SACK比特的包,而没有SACK标识的包而且序号小于最大的SACK包则要重传。无论是否被选择性应答,当被累计确认之后才从重发存储器中删除。SACK可以实现在一个RTT内恢复多个丢失报文段。
4. TCP协议仿真分析
4.1 OPNET Modeler中支持TCP协议的节点模型
从3.2节的对OPNET仿真机制的描述,我们可以知道多个模块组成了OPNET Modeler中网络节点模型,一个支持TCP协议的节点存在有一个TCP模块,它的节点结构如图3所示。从下面图中可以发现这个模型中有很多模块是利用协议命名的,图中可以很清晰的看到TCP模块,它用来实现对TCP协议的支持。这种建模方式是按照协议分层的,我们已经在3.2节中作了详细说明。
图3 支持TCP协议的节点模型
TCP模块通过两个相关的进程模型来实现TCP协议。其中tcp_manager_v3代表TCP模块的根进程[13],它通过调用tcp_conn_v3 进程来处理到达的请求,从而管理一系列的连接。tcp_conn_v3模型用来创建代表一个单独TCP连接的进程,用来处理一个独立的TCP连接。
在OPNET Modeler中,tcp_manager_v3动态的创建tcp_conn_v3,它们之间是父子进程的关系,通过共享内存的方式进行结构化数据的交流。tcp_conn_v3通过共享内存获得父进程的tcp_parameter_ptr,根据tcp_parameter_ptr获得当前节点相关的TCP设置,初始化本次连接的传输控制块(TCB)。
tcp_conn_v3中的函数部分共有80个函数,它包含了TCB初始化、缓冲区处理、选项处理、重传处理、定时器处理等TCP协议的整个核心逻辑。
4.2 TCP协议仿真
4.2.1 仿真网络模型
在计算机通信网络中,数据到达目的地是通过交换机、路由器等数据交换设备到达的,由于受到线路带宽等方面的影响,当网络负载过大的时候,不可避免的会出现拥塞。下面是简化的实际模型,建立网络模型就是从对象面板库中选取节点和链路,然后进行连接构建网络。对象面板库包含了实际网络系统中的很多节点,如服务器、客户端、路由器、交换机和链路等。建立如图4所示的网络模型,模型需要的节点和链路有:client、server、application_config、profile_config[14],其中client节点是ppp_wkstn类型的,它有一个串口可以连接到IP网络上,同时支持TCP协议;server节点与client节点相似,它是ppp_server类型的,可以为网络中的主机提供TCP类型的服务;Internet节点是ip32_cloud类型,代表一个网络云,其具有32个串行链路,它使用动态路由协议RIP或者OSPF来自动地建立路由表。节点是根据它们能支持相同的数据包格式而选择的。将节点拖到工作区间,用PPP_DS1链路进行连接,网络速率是1.544Mbps。为了真实的反映出网络拥塞时数据丢失情况,OPNET 提供了一种方法来实现:为了替代现实中由于网络拥塞而丢失数据的情况我们可以通过配置网络云人为的控制数据包丢失来实现。
图4 仿真模型 基于OPNET的TCP协议研究与仿真(8):http://www.youerw.com/tongxin/lunwen_1272.html