关于 linux中TCP数据包(SKB)序列号的小笔记

关于 SKB序列号的小笔记

为了修改TCP协议,现在遇到了要改动tcp分组的序列号,但是只是在tcp_sendmsg函数中找到了SKB的end_seq 一直没有找到seq

不清楚在那里初始化了,就跟踪了分配SKB的函数sk_stream_alloc_skb()还是没有找到,最后在函数skb_entail中找到:

static inline void skb_entail(struct sock *sk, struct sk_buff *skb)

{struct tcp_sock *tp = tcp_sk(sk);struct tcp_skb_cb *tcb = TCP_SKB_CB(skb);skb->csum = 0;tcb->seq = tcb->end_seq = tp->write_seq;tcb->flags = TCPHDR_ACK;tcb->sacked = 0;skb_header_release(skb);tcp_add_write_queue_tail(sk, skb);sk->sk_wmem_queued += skb->truesize;sk_mem_charge(sk, skb->truesize);if (tp->nonagle & TCP_NAGLE_PUSH)tp->nonagle &= ~TCP_NAGLE_PUSH;

}

烦恼忧愁不用追,吃点好的别嫌贵,

关于 linux中TCP数据包(SKB)序列号的小笔记

相关文章:

你感兴趣的文章:

标签云: