sk_send_head: 指向sk_write_queue中第一个未发送的skb,如果sk_send_head为空,代表发送队列所有的报文已经发送。
struct {
//......
struct sk_buff *sk_send_head;
struct sk_buff_head sk_write_queue;
//......
};
关于该字段重要的变化,可以看看datapath
下图表示目前已经发送的报文都得到了确认,因此sk_send_head指向sk_write_queue的头。
接着,tcp_transmit_skb发送了sk_send_head指向的一个数据包(序号1),然后tcp_transmit_skb调用tcp_event_new_data_sent,通过tcp_advance_send_head函数,使得sk_send_head指向下一个skb(序号2)