48 | 接收网络包(下):如何搞明白合作伙伴让我们做什么?
该思维导图由 AI 生成,仅供参考
网络协议栈的 TCP 层
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了网络包接收的过程,重点分析了TCP层和Socket层的工作。在TCP层,详细介绍了TCP协议的功能和作用,以及在接收网络包过程中的具体操作。同时,对Socket层的工作也进行了深入剖析,包括Socket的创建、绑定和监听等步骤。文章还介绍了网络包在三个队列中的倒腾过程,解释了为什么需要在这三个队列中进行处理。此外,还详细分析了网络包在不同状态下的处理方式,以及乱序包的处理过程。 在接收网络包的过程中,从硬件网卡接收到网络包到内核接收网络包的过程,经历了多个层次的处理。从硬件网卡接收到网络包后,通过DMA技术放入Ring Buffer,然后通过中断通知CPU新的网络包的到来,接着由网卡驱动程序注册中断处理函数,再通过软中断触发接下来的处理过程,最终进入内核网络协议栈,经过多层处理后,进入用户态读取网络包的过程。 此外,文章还提到了对TCP协议、三次握手、发送和接收的连接维护、拥塞控制、滑动窗口等内容进行了解析,唯独四次挥手没有解析,鼓励读者自行尝试解析四次挥手的过程。 通过本文的阅读,读者可以全面了解网络包接收的全过程,深入理解各个层级的工作原理和功能,为进一步深入网络编程和网络技术打下坚实基础。
《趣谈 Linux 操作系统》,新⼈⾸单¥68
全部留言(21)
- 最新
- 精选
- 免费的人从kernel doc里发现这个说明: tcp_low_latency - BOOLEAN This is a legacy option, it has no effect anymore. 这个选项没用了?
作者回复: 4.13里面是tcp_low_latency - BOOLEAN If set, the TCP stack makes decisions that prefer lower latency as opposed to higher throughput. By default, this option is not set meaning that higher throughput is preferred. An example of an application where this default should be changed would be a Beowulf compute cluster. Default: 0 5.0里面就是 cp_low_latency - BOOLEAN This is a legacy option, it has no effect anymore.
2019-07-176 - 免费的人老师有计划讲epoll的实现吗?
作者回复: 讲不了了,要不这个专栏就太长了。在网络协议里面大致讲了一下epoll的内核实现,但是分析的不细
2019-07-175 - D这个 out_of_order_queue 是怎么实现的, 假如5,6已结到了,下个期待7,8,但是从队头拿出的是9,10,怎么办,重新入队吗,这样效率有点低吧,老师能讲讲吗
作者回复: 红黑树,可以先判断一把再拿
2019-07-174 - 取名字好麻烦大概也就看了五六七八遍
作者回复: 赞,加油
2019-08-162 - wjh_all_in老师,prequeue 队列和 backlog 队列需要做乱序的保证吗?如果没有,怎么保证可靠性?
作者回复: 要的,如果判断接不上,就回退到默认流程
2019-08-3031 - 没心没肺终于快结束了🙄
作者回复: 终于....
2019-07-171 - 许童童老师写得好!
作者回复: 谢谢
2019-07-17 - Geek_ty这里说一下,在17年后的Linux版本中已经取消了prequeue以及相关的操作,如果阅读较新的Linux内核的同学们请不要误解。现在只剩2个队列了。2020-08-15313
- Geek_jikuo问题:三层上送四层的时候,数据包是怎样知道自己属于哪个sock的? 答:tcp_v4_rcv() -> __inet_lookup_skb 根据数据包的ip+端口从tcp_hashinfo中找到,会有两个hash表:listening_hash和establish_hash哈希表 (注:参考文中一条笔记)2021-08-213
- 深海极光请问下老师,是linux协议栈通过tcp解析完成,放入到receive queue或者backlog queue 再去唤醒用户进程来读的吗,我们一般都是epoll读,而epoll是根据事件变化的,也是在fd的等待队列上睡眠,就是这一步是怎么关联的2020-04-112