为什么要讲 Buffer
首先为什么一个小小的 Buffer 我们需要单独拎出来聊?或者说,Buffer 具体是在哪些地方被用到的呢?
例如,我们从磁盘上读取一个文件,并不是直接就从磁盘加载到内存中,而是首先会将磁盘中的数据复制到内核缓冲区中,然后再将数据从内核缓冲区复制到用户缓冲区内,在图里看起来就是这样:
请求数据包从发送到接收,都经历什么?
之前讲了“从输入 URL 再到浏览器成功看到界面”中的域名是如何变成 IP 地址的,了解了 DNS 相关的东西。这篇文章就聊聊发生在 DNS 解析之后的操作——建立连接。也就是我们常说的三次握手。
看到三次握手你可能会说,这不是面试都被问烂了的题吗?
三次握手不就是:
服务器接收到客户端的数据包之后,通过标志位判断出了客户端想要建立连接。服务器收到了客户端回复的 ACK 之后,服务器的状态也变成了 ESTABLISH
可能大家都知道或者被问过一个问题,那就是很经典的“从浏览器输入 URL 再到页面展示,都发生了什么”。这个问题虽然简单,但是真的能够从回答的各种细节上看出不同人之间的水平差距。