tcp数据的发送最常用的函数是write,此处即以write函数为例来介绍tcp数据发送流程。其函数调用流程如图1-1与1-2所示。tcp sock场景下,f_op对应socket_file_ops即,file->f_op->write_iter对应socket_file_ops:sock_write_iter,接着它会调用sock_sendmsg-->sock_sendmsg_nosec-->inet_sendmsg-->tcp_sendmsg-->tcp_sendmsg_locked。
图1-1:函数ksys_write代码流程
图1-2:函数tcp_sendmsg_locked代码流程图
图1-1与1-2最终的结果是将write函数buf中的数据拷贝到一个或多个skb,然后将其链接到sk->sk_write_queue发送队列。最后调用tcp_push[1]将数据发送出去。
参考资料
[1] linux内核版本: linux5.7.8,