歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

關於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;

}

Copyright © Linux教程網 All Rights Reserved