我正在尝试编写awk脚本来处理有线网络传输。到目前为止,我已经经历了很多awk脚本,但是它们都是针对无线技术编写的,因此,我发现自己可以编写自己的awk脚本来处理跟踪文件。我对指标计算有些困惑。
我尝试编写下面提供的awk脚本,但偶然发现了几个问题。他们是:
如果我们将tcp数据包从节点0发送到节点1,并且假设该数据包成功到达节点1,但在回程的过程中,作为确认数据包的“ ack”数据包被丢弃。我们会认为封包传送率为50%还是0?
在确定平均延迟时,我们将仅考虑源中间路径还是整个源目标路径?
在确定是否已成功接收到数据包时,我们是否应将源已接收的最终“ ack”数据包视为已接收?还是仅接收包的目的地被接收?
{
strEvent = $1; rTime = $2; from_node = $3; to_node = $4;
pkt_type = $5; pkt_size = $6; flgStr = $7; flow_id = $8;
src_addr = $9; dest_addr = $10; seq_no = $11; pkt_id = $12;
if(pkt_type == "tcp"){
if (pkt_id > idHighestPacket) idHighestPacket = pkt_id;
if (pkt_id < idLowestPacket) idLowestPacket = pkt_id;
if(rTime>rEndTime) rEndTime=rTime;
if(rTime<rStartTime) rStartTime=rTime;
if ( strEvent == "+" && send_flag[pkt_id] == 0 ) {
nSentPackets += 1 ; rSentTime[ pkt_id ] = rTime ;
send_flag[pkt_id] = 1;
}
if ( strEvent == "r" && pkt_id >= idLowestPacket) {
nReceivedPackets += 1 ; nReceivedBytes += pkt_size;
rReceivedTime[ pkt_id ] = rTime ;
rDelay[pkt_id] = rReceivedTime[ pkt_id] - rSentTime[ pkt_id ];
rTotalDelay += rDelay[pkt_id];
}
if(strEvent == "d"){
if(rTime>rEndTime) rEndTime=rTime;
if(rTime<rStartTime) rStartTime=rTime;
nDropPackets += 1;
}
}
}
END {
rTime = rEndTime - rStartTime ;
rThroughput = nReceivedBytes*8 / rTime;
rPacketDeliveryRatio = nReceivedPackets / nSentPackets * 100 ;
rPacketDropRatio = nDropPackets / nSentPackets * 100;
if ( nReceivedPackets != 0 ) {
rAverageDelay = rTotalDelay / nReceivedPackets ;
}
printf( "%15.2f\n%15.5f\n%15.2f\n%15.2f\n", rThroughput,rAverageDelay, nSentPackets, nReceivedPackets);
printf( "%15.2f\n%10.2f\n%10.2f\n%10.5f\n", nDropPackets, rPacketDeliveryRatio, rPacketDropRatio,rTime);
printf("Total Delay = %15.5f\n",rTotalDelay);
printf("Ending Analysis\n");
}