注:本文翻译自Cloudflare博客The quantum state of a TCP port,同时融合了一些我个人的理解。 有时候我们可以有这样的感觉,一个看似简单的问题却可以引申出很复杂的答案,今天就让我们来看一个Linux网络协议栈中的例子。 什么时候两个TCP Socket可以共享一个地址?如果我在...
"I Hacked macOS" Stream Followup
Asahi Lina在17号直播了如何使用一个普通用户一键拿到root权限(事实上,这还是她拿到权限的降权)。 直播回放链接 整个直播内容很有启发性,由浅入深的解释了整个过程以及其背后的原理,我相信每个人看完都会有所收获。 内容大纲 GPU Basics Virtual Memory GPU command bu...
随笔接触Linux也几年时间了,翻过不少相关博客和书籍,尝试过啃一些Linux内核源代码,但总觉得少了点什么。琢磨来琢磨去,渐渐有了个想法:或许是缺少了理论与实践的结合。书上的知识虽珍贵,实践却是另一回事。曾经写过不少代码,读过不少书,但书归书,实践归实践。于是,我决定要开始真正动手,去改动Linux内核源代码,...
孔乙己: 系统调用的调用有四种写法既然这个系列是从源码开始手撕Linux网络协议栈,那么不妨先了解一下Linux的系统调用是如何发生的,然后尝试自己给Linux添加一个系统调用,以便之后更容易了解和学习网络模块的内核实现。 以一个简单的例子开始,以下是一个常规的Hello World。尝试编译这个程序并运行会毫不...
事前准备上一回说到一个系统调用是如何实现的,这次就从系统调用的定义开始拆解socket系统调用的源码。正所谓工欲善其事,必先利其器,由于C语言本身的特性,导致IDE跳转的功能并不总是好用。这里有两种解决方案,一种是使用ctags命令来生成符号文件供IDE使用,IDE大概率也内置了这样的功能。这个功能的缺点是,由于...
Bind系统调用的定义在上一集,我们讨论了socket系统调用的实现,并且介绍了一些关于阅读Linux内核代码的思路。这一集,我们将会拆解网络协议栈中的bind系统调用。我们首先可以通过man bind命令来查看一下它的函数原型。 首先它需要一个sockfd,即我们在socket系统调用中得到的结果。而第...
(最近在外地,没有自己的PC,只能周末腹泻式更新) Listen系统调用昨天介绍了bind系统调用,下一步就是listen系统调用了。它的参数很简单,只有两个。第一个是int fd,读者想必已经非常熟悉了,就是我们socket所对应的文件描述符;而第二个参数则是代表了最大连接请求等待队列的长度。也就是在liste...
(从外地回来赶上周天调休,鸽了一周)我自己又反复读了一下我的内容,感觉直接贴出长篇的代码有点不利于理解,这次尝试代码分段讲解。有兴趣的朋友也可以自己去网上找到完整的源码,以便查证我贴出来的内容是不是在断章取义。 Accept系统调用这次让我们来学习accept系统调用,这个系统调用的形式如下,sockfd即服务器...
大家五一假期快乐 :-) 今天来讲讲connect系统调用的实现,这个系统调用流程比较长,用于客户端向服务器端发起建立连接请求。同样的,可以先使用man connect指令来看看connect调用的用法。我们一定是先使用socket()系统调用创建了一个客户端socket,然后再将它的fd传递给connect,并...
Page 1 / 1