TCP/IP小白看源码

写在前面:
本文章是本人关于Linux内核网络协议栈的课程学习报告,关于网络协议栈源码本人理解很浅,初学,不建议大家参考学习,仅作为个人的阶段性记录。
关于个人的初学建议,如果仅仅的阅读源码,可以尝试使用一些在线linux源码网站进行阅读。本人是因为接受不了虚拟机的卡顿(cup太老了,明年再换)大部分时候使用以下几个网站,各有优缺点。
https://elixir.bootlin.com/linux/latest/source/net
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net?h=v6.7-rc5
当然 其实直接去下个也很简单。
步入正题:
TCP/IP协议栈源代码分析
1、inet_init是如何被调用的?从start_kernel到inet_init调用路径
inet_init函数是TCP/IP协议栈的初始化函数之一,定义位于net/ipv4/af_inet.c文件中。
在这里插入图片描述

  1. start_kernel 函数是内核的入口函数,它位于 init/main.c 文件中。在这个函数中,内核进行了一系列的初始化工作。

  2. start_kernel 函数中,会调用 rest_init 函数来创建一个内核线程,并将其指定为 kernel_init- 函数。

  3. kernel_init 函数位于 init/main.c 文件中,它是内核初始化的第一个用户空间进程。在这个函数中,会进行一系列的初始化工作,包括初始化进程调度器、初始化内存管理、初始化设备驱动等。

  4. kernel_init 函数中,会调用 do_basic_setup 函数,该函数位于 init/main.c 文件中。在 do_basic_setup 函数中,会进行一些基本的系统设置,包括初始化控制台、初始化定时器、初始化系统调用接口等。

  5. do_basic_setup 函数中,会调用 init_IRQ 函数,该函数位于 arch/x86/kernel/irq.c 文件中。在 init_IRQ 函数中,会初始化中断控制器和处理器的中断设置。

  6. init_IRQ 函数中,会调用 init_timers 函数,该函数位于 kernel/time/timer.c 文件中。在 init_timers 函数中,会初始化内核的定时器。

  7. init_timers 函数中,会调用 timekeeping_init 函数,该函数位于 kernel/time/timekeeping.c 文件中。在 timekeeping_init 函数中,会初始化内核的时间管理。

  8. timekeeping_init 函数中,会调用 inet_init 函数,该函数位于 net/ipv4/af_inet.c 文件中。在 inet_init 函数中,会进行 TCP/IP 协议栈的初始化工作,如注册套接字类型、注册协议处理函数等。

start_kernel -> kernel_init -> do_basic_setup -> init_IRQ -> init_timers -> timekeeping_init -> inet_init

2、跟踪分析TCP/IP协议栈如何将自己与上层套接口与下层数据链路层关联起来的?
在Linux内核网络协议栈中,TCP/IP协议栈通过套接字(Socket)接口与上层应用程序进行交互,同时通过网络设备驱动程序与下层数据链路层进行通信。
具体来说,TCP/IP协议栈与上层套接口的关联是通过套接字(Socket)实现的。套接字是应用程序与网络协议栈之间的接口,它提供了一组函数调用(和操作系统中的有点不一样),用于创建、连接、发送和接收数据等操作。应用程序通过调用套接字接口提供的函数来与TCP/IP协议栈进行通信。
而与下层数据链路层的关联是通过网络设备驱动程序实现的。网络设备驱动程序负责将TCP/IP协议栈中的数据包发送到物理网络设备上,或者从物理网络设备接收数据包并传递给TCP/IP协议栈。这样,TCP/IP协议栈就能够与下层数据链路层进行通信。
3、TCP的三次握手源代码跟踪分析,跟踪找出设置和发送SYN/ACK的位置,以及状态转换的位置
TCP的三次握手的相关代码在Linux内核源码的网络协议栈部分。具体来说,涉及到TCP的三次握手的代码位于以下文件中:net/ipv4/tcp_ipv4.c:这个文件包含了TCP协议的实现,其中包括了TCP的连接建立、断开等操作的代码。include/net/tcp.h:这个文件定义了TCP协议的数据结构和函数原型,包括了与TCP三次握手相关的结构体和函数。
在这里插入图片描述

//简化源码:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值