【linux】内核从tcp层调用IP层摸索中

合入代码:

登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/f5a93955e16d148a70f98e0f300f455b3ab594f3

这是运行日志:

https://gitee.com/r77683962/linux-6.9.0/raw/master/test_log/kern_tcp_ip.log

日志截取部分(也不知道对不对,凭感觉走。。。。)

从日志来看,这下边这个感觉接近真相了(图片版本)感觉有点像TCP调用IP层,IP层调用到L2层,不知道对不对,理解基本靠蒙:

非图片版本:

16:08:48.909399 PC kernel: net/ipv4/tcp.c tcp_recvmsg TCP: sk->sk_family: 2, sk->sk_portpair: 3394812673, sk->sk_dport: 47873, sk->sk_daddr: 2637854922, sk->sk_rcv_saddr: 1979754688

16:08:48.909659 PC kernel: include/net/l3mdev.h l3mdev_l3_rcv IPv4:

16:08:48.909666 PC kernel: net/ipv4/tcp_ipv4.c tcp_v4_rcv TCP:

16:08:48.909846 PC kernel: net/ipv4/tcp_ipv4.c tcp_v4_do_rcv TCP:

16:08:48.909851 PC kernel: include/net/l3mdev.h l3mdev_l3_rcv IPv4:

16:08:48.909859 PC kernel: net/ipv4/tcp_ipv4.c tcp_v4_rcv TCP:

16:08:48.909925 PC kernel: net/ipv4/tcp_ipv4.c tcp_v4_do_rcv TCP:

16:08:48.910600 PC kernel: net/ipv4/tcp_output.c tcp_send_delayed_ack TCP: sk->sk_family: 2, sk->sk_portpair: 3394812673, sk->sk_dport: 47873, sk->sk_daddr: 2637854922, sk->sk_rcv_saddr: 1979754688, sk->sk_state: 1

16:08:48.910617 PC kernel: net/ipv4/tcp.c tcp_recvmsg TCP: sk->sk_family: 2, sk->sk_portpair: 3394812673, sk->sk_dport: 47873, sk->sk_daddr: 2637854922, sk->sk_rcv_saddr: 1979754688

16:08:48.910629 PC kernel: message repeated 5 times: [ net/ipv4/tcp.c tcp_recvmsg TCP: sk->sk_family: 2, sk->sk_portpair: 3394812673, sk->sk_dport: 47873, sk->sk_daddr: 2637854922, sk->sk_rcv_saddr: 1979754688]

16:08:48.910630 PC kernel: net/ipv4/tcp.c tcp_sendmsg TCP: sk->sk_family: 2, sk->sk_portpair: 3394812673, sk->sk_dport: 47873, sk->sk_daddr: 2637854922, sk->sk_rcv_saddr: 1979754688

16:08:48.910636 PC kernel: net/ipv4/tcp.c tcp_push TCP:

16:08:48.910638 PC kernel: net/ipv4/tcp_output.c __tcp_push_pending_frames TCP:

16:08:48.910639 PC kernel: net/ipv4/tcp_output.c tcp_write_xmit TCP:

16:08:48.910641 PC kernel: net/ipv4/tcp_output.c tcp_transmit_skb TCP:

16:08:48.910643 PC kernel: net/ipv4/tcp_output.c __tcp_transmit_skb TCP:

16:08:48.910644 PC kernel: net/ipv4/tcp_output.c __tcp_transmit_skb TCP: sk->sk_family: 2, sk->sk_portpair: 3394812673, sk->sk_dport: 47873, sk->sk_daddr: 2637854922, sk->sk_rcv_saddr: 1979754688, sk->sk_state: 1

16:08:48.910646 PC kernel: net/ipv4/tcp_output.c tcp_event_ack_sent TCP: sk->sk_family: 2, sk->sk_portpair: 3394812673, sk->sk_dport: 47873, sk->sk_daddr: 2637854922, sk->sk_rcv_saddr: 1979754688, sk->sk_state: 1

16:08:48.910648 PC kernel: net/ipv4/tcp_output.c tcp_event_data_sent TCP: sk->sk_family: 2, sk->sk_portpair: 3394812673, sk->sk_dport: 47873, sk->sk_daddr: 2637854922, sk->sk_rcv_saddr: 1979754688, sk->sk_state: 1

16:08:48.910650 PC kernel: net/ipv4/ip_output.c ip_queue_xmit

16:08:48.910652 PC kernel: net/ipv4/ip_output.c __ip_queue_xmit

16:08:48.910654 PC kernel: net/ipv4/ip_output.c ip_local_out

16:08:48.910655 PC kernel: net/ipv4/ip_output.c __ip_local_out

16:08:48.910657 PC kernel: include/net/l3mdev.h l3mdev_ip_out

16:08:48.910658 PC kernel: include/net/l3mdev.h l3mdev_l3_out

kern.log完整版本:

登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/raw/master/test_log/kern_tcp_ip_l2.log

打印日志代码合入:

登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/aaa5103ae41d662594c97f7aa90e4c07e25795e8

登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/f5a93955e16d148a70f98e0f300f455b3ab594f3

由于这也是不断摸索的,不同电脑打印效果或者调用网络层次的函数可能不太一样。

现在发现日志量比较大,如果是自已学习摸索,可以根据实际情况把不需要打印的日志代码去掉。

有时我会上传在内核源代码中添加打印日志的代码,编译日志,查看内核运行日志三部分,为什么呢?

1、 内核源代码中添加打印日志的代码,这块一般是看代码,自已也思索,因为有的代码太复杂,看不懂(难道那些巨佬为了显摆自已的代码水平高吗,doge),有些打印信息也不一定对,有错误的地方等等;

2、编译日志,在修改代码的时候其实要小心,全量编译是比较耗时的,我这估计要编译7个小时,修改代码如果不小心修改到依赖层次偏底层的代码,那么所有直接依赖和间接依赖的源代码都需要重新编译,那么有什么办法可以找代码层级较高的源码(一个非常简单粗暴的办法:在全量编译里边找越往后的代码级别越高)呢?

比如:我的全量编译日志是这个:

https://gitee.com/r77683962/linux-6.9.0/raw/master/compile_log/compile.log

3、查看内核运行日志,这部分主要是可以看到添加到内核源代码的打印日志,有一点点成就感,doge ,而且可以根据自已实验学习的需要打印对自已有用的信息,便天学习,定位问题什么的。。。

相关推荐
网硕互联的小客服3 分钟前
未来趋势:AI与量子计算对服务器安全的影响
运维·服务器·网络·网络安全·量子计算
黑客老李10 分钟前
EDUSRC:智慧校园通用漏洞挖掘(涉校园解决方案商)
服务器·前端·网络·安全·web安全
宇钶宇夕12 分钟前
STEP 7 MicroWIN SMART V2.2 的详细安装步骤及注意事项
运维·服务器·程序人生·自动化
是阿建吖!18 分钟前
【Linux | 网络】网络基础
linux·网络
mmoyula18 分钟前
【RK3568 驱动开发:实现一个最基础的网络设备】
android·linux·驱动开发
阿杆39 分钟前
😡同事查日志太慢,我现场教他一套 grep 组合拳!
linux·后端
墨小傲1 小时前
基于Linux下的vscode c/c++开发环境搭建详细教程
linux·c语言·vscode
cui_win1 小时前
【网络】Linux 内核优化实战 - net.ipv4.tcp_timestamps
linux·网络·tcp/ip
czhc11400756631 小时前
Linux 77 FTP
linux·运维·服务器
魂尾ac1 小时前
Centos Docker 安装(100%成功)
linux·docker·centos