OSI 模型实在太复杂,提出的也只是概念理论上的分层,并没有提供具体的实现方案。
用层只需要专注于为用户提供应用功能,比如 HTTP、FTP。应用层是不用去关心数据是如何传输的,就类似于,我们寄快递的时候,只需要把包裹交给快递员,我们不需要关心快递是如何被运输的。应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态。
传输层为应用层提供网络支持。传输层的报文中会携带端口号,因此接收方可以识别出该报文是发送给哪个应用。
网络层最常使用的是 IP 协议(Internet Protocol),IP 协议会将传输层的报文作为数据部分,再加上 IP 包头组装成 IP 报文,如果 IP 报文大小超过 MTU(以太网中一般为 1500 字节)就会再次进行分片。

IP 地址分成两种意义:
除了寻址能力, IP 协议还有另一个重要的能力就是路由。两台设备通过很多网关、路由器、交换机等众多网络设备连接起来,数据包到达一个网络节点,就需要通过路由算法决定下一步走哪条路径。
IP 的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据「下一个目的地」选择路径。寻址更像在导航,路由更像在操作方向盘。
接下来要交给网络接口层,在 IP 头部的前面加上 MAC 头部,并封装成数据帧。MAC 头部包含了接收方和发送方的 MAC 地址等信息。
网络接口层主要为网络层提供「链路级别」传输的服务,负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标识网络上的设备。

在域名中,越靠右的位置表示其层级越高。实际上域名最后还有一个点,比如 www.server.com. ,这个最后的一个点代表根域名。
域名的层级关系类似一个树状结构:

任何 DNS 服务器就都可以访问根域 DNS 服务器了。只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器。
域名解析的工作流程:
浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。


应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。 IP 协议控制网络包收发操作,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。
IP 中还包括 ICMP 协议和 ARP 协议