Я пытаюсь написать скрипт 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");
}