Chinaunix
标题:
内核2.6.18中关于tcp_sacktag_write_queue函数的疑问
[打印本页]
作者:
一心向上
时间:
2014-08-18 17:37
标题:
内核2.6.18中关于tcp_sacktag_write_queue函数的疑问
for (i = 0; i< num_sacks; i++) {
__u32 start_seq = ntohl(sp[i].start_seq);
__u32 end_seq = ntohl(sp[i].end_seq);
........
/* D-SACK for already forgotten data...
* Do dumb counting. */
if (dup_sack &&
!after(end_seq, prior_snd_una) &&
after(end_seq, tp->undo_marker))
tp->undo_retrans--;
prior_snd_una表示接收本次ack之前的snd_una,undo_marker表示发生重传时的snd_una,上述代码的含义为如果有重复sack标志dup_sack,同时prior_snd_una不在sack块的end_seq之后且undo_marker在end_seq之后,则undo_retrans减一。我不理解的是,prior_snd_una代表原先的snd_una,那么其之后的段都是已经被确认的,如果end_seq在其后的话,那么接收端已经确认了。这时候肯定是重复传输了,干嘛还要判断dup_sack呢?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2