[计算机网络基础] 浏览器发送链接请求后发生了啥?细说OSI7层网络模型

前言

前段时间又和朋友聊到了OSI 7层模型. 没想到那么多年过去了还是不是特别熟悉. 往常都是搜下别人到博客了解下了事. 这回自己总结一轮.

注意: 关于浏览器客户端发送链接请求后发生了啥?这个问题. 我们等到最后再来阐述.


计算机网络

什么是计算机网络. 单看名词而言, 可以分成2个部分. 计算机网络.

  • 所谓计算机. 即计算的工具. 是但不局限于现在流行的PC机器.
  • 所谓网络. 即多台计算机组成的交互和通信系统. 主要的传输介质和媒介我们主要常见的有有线网络 -> 网线/光缆 无线网络 -> 无线电信号. (其实这些传输介质即我们计算机网络模型的最底层, 物理层设备之一.)

OSI 7 层模型 & TCP/IP 模型

OSI 即Open System Interconnection 开放系统网络互联?. 是ISO认证的一种计算机通信标准. (PS: 外国佬还是厉害. 标准都是别人制定的.)

主要的7层模型架构图如下所示:
[计算机网络基础] 浏览器发送链接请求后发生了啥?细说OSI7层网络模型

  • OSI 7层模型: 从下到上分别为: 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层.
  • TCP/IP 协议模型: 从下到上分别为: 网络接口层(物理层/数据链路层) 网际层 运输层 应用层.

为什么经常会问TCP/IP 协议?
因为从模型来看, 这TCP/IP 模型.

  • 最顶层为应用层, 多为应用协议, 比如HTTP HTTPS POP3 TELNET FTP.
  • 底层为物理设备, 也叫网络接口层, 比如网线等.
  • 从理解上来看. 物理设备是真的没啥可问的. 顶层模型也多为封装的SDK和接口. 你要是真的问报文如何设置. 估计真的没啥人能回答.
  • 其他 ARP协议 与 RIP协议干了啥? IMCP协议?
    这是我在牛客之前刷题的时候遇到的问题. 暂时记录在此. 最后再进行总结回答.

OSI 7 层模型(细节)

我们来看下, 这7层到底干了什么事情. 我们日常碰到的设备和协议究竟和这些有什么关系?
[计算机网络基础] 浏览器发送链接请求后发生了啥?细说OSI7层网络模型

  • 物理层(physical layer)
    物理层的传输单位是bit. 也就是一个0/1的二进制位数. 物理层主要考虑的是多大的电压表示0/1, 以及接收方如何识别发送方发生的比特信号0/1.
    主要设备: 中继器(放大信号用的) 集线器

注意: 线路&无线电(“双绞线、同轴电缆、光缆、无线信道” ) 本来认为网线在最底层的. 但是发现网线并不属于物理层.

“请注意,传递信息所利用的一些物理媒体,如双绞线、同轴电缆、光缆、无线信道等,并不在物理层协议之内而是在物理层协议的下面。因此也有人把物理层下面的物理媒体当作第0层。”
摘录来自: 谢希仁. “计算机网络(第7版) ("十二五"普通高等教育本科国家级规划教材)。” Apple Books.
PS: 据我所知, 貌似我们的光猫网线的电压为36V. 很多时候停电的时候电缆还有信号. 是不是很神奇.

  • 数据链路层(data link layer)
    数据链路层也叫链路层. 基本单位为帧. 主机之间互相传输, 主要是在一段一段链路上进行传输的. 数据链路将上层网络层的IP数据报组成帧, 两个节点间以帧的方式进行传输. 每一帧包括数据和必要的控制信息 (如同步信息、地址信息、差错控制等).
    在接收数据时, 控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束.这样, 数据链路层在收到一个帧后,就可从中提取出数据部分,上交给网络层.
    帧还能自动检测. 判断帧是否有差错. 会丢弃有错误的帧.

  • 网络层(network layer)
    网络层负责分组交换网上不同主机之间的交互服务.

    • 发送数据时, 网络层将运输层产生的报文段, 分组和数据报封装成IP报文. (1. 值得注意的是分组是一个笼统的概念.各个层的数据都可以说成是数据分组. 2. IP数据报不要与UDP数据报混淆. 一个是在网络层, 一个是在传输层.)
    • 网络层的另一个作用就是选择合适的路由, 使得传输层传递下来的数据能通过路由, 发送到合适的主机上.
    • 注: IP协议为 Internet Protocol. 为网络互联协议. IP (网络之间互连的协议)

“这里要强调指出,网络层中的“网络 ”二字,已不是我们通常谈到的具体网络,而是在计算机网络体系结构模型中的第3层的名称。

互联网是由大量的异构 (heterogeneous)网络通过路由器( router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议 IP(Internet Protocol)和许多种路由选择协议,因此互联网的网络层也叫做网际层 或IP层 。” —<计算机网络>

  • 传输层
    传输层的主要任务为为主机交互提供通用的数据传输服务. 运输层的服务是通用的, 一台主机上又多个进程, 其分别复用和分用运输层的服务.
    • 复用: 多个进程同时可以使用运输层进行传递信息.
    • 分用: 多个进程分别从传输层回收信息.
      传输层中的协议主要包括2种:
    • TCP 协议(Transmission Control Protocol 传输控制协议) 面向链接的, 可靠的数据传输协议. 数据传输单位为Seqment. (Java实现 Socket/ ServerSocket). TCP 协议是面向数据流的.
    • UDP协议(User Datagram Protocol 用户数据报协议) 无链接的数据传输协议. (best-effort 最大可能, 非可靠协议.) (Java实现 DatagramSocket)

    TCP (传输控制协议)
    UDP

  • 会话层
    暂无解释. SSL/ TLS.
  • 表示层
    暂无解释. 2个通信系统中交换信息.
  • 应用层
    主要任务为: 通过进程交互完成的特定网络. 协议即网络通信的相互规则. 本层的主要使用单位为报文. 应用层的协议非常多, 比如我们经常使用的http/https, telnet, DNS, SMTP PoP3 SMTP等.

协议的定制其实也没那么深奥. 因为TCP协议是一个双向协议. 所以我们可以这样设计一个简单的协议.
简单协议定制: ##start## start开始 ##stop## stop 结束.
OK. 我们来模拟一下通信. 有A和B 两端开始通信. A发送, B接收.
A发送: ##start## 今晚10点吃饭, 加班到12点. ##stop##
B接收: 根据协议规则进行解析. 获取 今晚10点吃饭, 加班到12点. 信息消息.(B心里肯定在骂人.)

[计算机网络基础] 浏览器发送链接请求后发生了啥?细说OSI7层网络模型
OK. 7层模型. 我们到这边就解释完了. 我们可以看到, 数据从机器上的进程出发

发送端:

  • -> 应用层: 根据协议封装成对应的数据报文. (协议数据报文)
  • -> 会话层 / 表示层: (略).
  • -> 传输层: 将上层数据, 封装成 TCP报文 / UDP数据报文.
  • -> 网络层: 将上层数据封装成IP报文.
  • -> 数据链路层: 报文封装层.
  • -> 物理层: 封装成0/1信号, 也就是bit单位. 随后进行传输.
  • -> 第0层: 网线或者其他介质进行传输到远端.

路由器端(接收):
-> 0层网络介质 -> 1层物理层 -> 2层数据链路 -> 3 层网络层路由器. 获取相应的远端地址.
路由器端(发送):
-> 3层网络层路由器 -> 2层数据链路 -> 物理层 -> 0层网络介质 -> 远端接收方计算机.

接收端:
发送端的逆向操作. 这边就不写了.

[计算机网络基础] 浏览器发送链接请求后发生了啥?细说OSI7层网络模型
PS: 之前一直不懂. 为什么路由器在第三层. 路由器又不在我的电脑上, 为啥是网络层设备呢. 和小伙伴交流后, 理解了一下. 终于弄明白了. 网络中数据流的流向是不断的上升和下沉的. 看上图就明白. 路由器就是网络层设备. 处理后, 随后即将数据流向下传递.


[计算机网络基础] 浏览器发送链接请求后发生了啥?细说OSI7层网络模型


TCP/IP 模型

根据上面的对比图. 即可知道. 由于OSI 7层模型过于复杂. 所以对于其中的某些细节进行了简化. 其次, OSI体系提出的时候, TCP/IP模型已经普及大半, 且比较容易实现, 细节的划分并不是那么严格.


初始问题

OK. 我们在回到最开始的问题.

问: 浏览器发送链接请求后发生了啥? 比如 http://www.baidu.com

答:

  1. 首先是DNS协议. DNS协议会读取本地缓存的DNS内存. 将域名解析为 12.1.1.2.(随便写的). 如果本地没有DNS配置和缓存. 那么先请求DNS协议给远方的域名服务器. 8.8.8.8 / 114.114.114.114 (貌似是Google的)

  2. 随后是Http协议. 根

    • 应用层: 首先根据DNS获取的地址, 进行拼装地址. 比如: http://12.1.1.2:80. 随后发送报文请求.
    • 表示层->会话层: 略
    • 传输层: 将上层内容封装, 封装为TCP报文或者为UDP报文.
    • 网络层: 封装为IP报文.
    • 数据链路层: 将IP报文分组, 封装成.
    • 物理层: 将转变为bit单位, 也就是0/1信号. 具体实现是通过不同V单位的电压设计.
    • 第0层: 网线.
  3. 路由器
    路由器部分主要又2个部分. 分别是接收数据, 再封装后, 再发送到远端.

    • 路由器接收: 网线 -> 物理层 bit -> 数据链路 -> 网络层IP报文 (通过IP 定位到具体需要发送的远端地址. 进行封装.)
    • 路由器发送: 网络层IP报文 -> 数据链路 -> 物理层bit -> 网线.
  4. 接收端
    即Server服务器. 具体细节也是2部分: 接收客户端信息, 向客户端发送响应. 具体细节和1类似. 这边就不再赘述了.


Others

还有人喜欢特么问. XX设备是XX层的? 理解整个体系后, 其实不难. 这里也一并说了.

各层的设备信息如下所示:

  • 物理层: 中继器(信号放大器) 集线器
  • 数据链路层: 网卡, 网桥, 二层交换机.
  • 网络层: 路由器, 三层交换机

一般来说,第三层以上的功能都是软件实现的,没有硬件设备与之对应。

  • 网络层以上: 网关. 防火墙.

以上. 总结完了. 舒服. 下面我们理解下TCP模型的 3次握手和4次挥手.


补充

貌似有张图不错. 补充在此处.

[计算机网络基础] 浏览器发送链接请求后发生了啥?细说OSI7层网络模型

  1. ARP协议与IMCP协议?

Reference

[1]. [计算机网络. 谢希文]
[2]. 计算机网络中的七层模型
[3]. 七层参考模型中防火墙属于哪一层
[4]. 网络各层的设备
[5]. 常用的各层设备
[6]. 网络各层设备