sk_send_head相关

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相关_第1张图片

下图表示目前已经发送的报文都得到了确认,因此sk_send_head指向sk_write_queue的头。

sk_send_head相关_第2张图片

接着,tcp_transmit_skb发送了sk_send_head指向的一个数据包(序号1),然后tcp_transmit_skb调用tcp_event_new_data_sent,通过tcp_advance_send_head函数,使得sk_send_head指向下一个skb(序号2)

sk_send_head相关_第3张图片

 

你可能感兴趣的:(linux_network)