本文通过使用GDK7调试套件在Linux内核下观察数据包发送过程
1. TCP/IP参考模型与OSI参考模型
TCP/IP参考模型与OSI参考模型的关系,如图1.1所示。
图1.1 TCP/IP参考模型与OSI参考模型的关系
2. 观察信息发送的过程
2.1 应用程序层
断下函数sock_sendmsg,并查看栈回溯,如图2.1所示。
图2.1 查看栈回溯
有信息发送时的栈回溯 无信息发送时的栈回溯
lk!sock_sendmsg lk!sock_sendmsg
lk!sock_write_iter+0x8c lk!__sys_sendto+0x13f
lk!do_iter_readv_writev+0x14c lk!__x64_sys_sendto+0x28
lk!do_iter_write+0x86 lk!do_syscall_64+0x5a
lk!vfs_writev+0x98 lk!entry_SYSCALL_64+0x7c
//通过观察图2.1中的栈回溯,我们可看到应用程序层内调用的函数信息及过程。
//在应用程序层内,进程通过使用套接字,将信息写入套接字内。
使用套接字发送信息时,信息会到达系统调用的函数sock_sendmsg,与此同时也会检查用户缓冲区是否可读,如果可读,则通过套接字描述符(由发出调用的进程提供)获取结构体sock;然后它会根据所传输的信息创建消息头,并创建1个套接字控制