网络协议入门

2019/03/14 计算机网络

刚系统学习网络协议不久,苦于一直找不到适合自己思路的教程,只好东拼西凑地阅读各种文章书籍,好不容易才拼凑出便于自己理解的网络协议说明书。 该说明书从最常用的网络程序——浏览器入手。

OSI 模型把网络通信工作分为七层:应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层;实际上使用的 TCP/IP 模型则划分五层(貌似一 开始是划分为四层的,把现在的数据链路层和物理层划到一起):应用层(对应 OSI 中的应用层、表示层和会话层)、传输层、网络层、数据链路层和物理层。 以下内容均为 TCP/IP 模型分层。

我们常用的浏览器位于应用层,协议为 HTTP。在浏览网页时,用户会在地址栏输入网页地址或者通过搜索引擎获取地址,浏览器会向该地址对应的服务器发出请求, 服务器根据请求返回相应的内容,最终呈现到用户面前的就是各式各样的网页,这都是可以想象的。

应用层

从网络协议的角度来看,在用户输入访问地址后,浏览器会先分析地址。如果是通过域名访问,会先通过 DNS 查询出域名对应的 IP 地址;然后,构造 HTTP 报文, 报文格式如下:

HEAD / HTTP/1.1
Host: 127.0.0.1

HTTP 报文最终会由目标服务器接收,报文就是浏览器和服务器的沟通语言。

传输层

HTTP 报文来到传输层。传输层的协议有 TCP 和 UDP,对应用层数据进行分段封装,负责端到端的通信。由于主机上有多个程序需要用到网络,通信时还需要一个 参数来确定数据包到底属于哪个程序,这个参数叫做端口(port),这样不同的程序就能发送、获取各自的数据。端口是每一个使用网卡的程序的编号,它的范围是 0 到 65535 之间的整数,其中 0 到 1023 端口被系统占用,用户只能选用大于 1023 的端口。浏览器会随机选用一个端口和服务器通信,这也是传输层要做的。

网络层

传输层数据来到网络层。该层主要有 IP 协议,IP 协议用来规定网络地址,即 IP 地址。IP 地址分为两部分,前面一部分为网络部分,后面一部分为主机部分。网络 部分相同的地址位于同一子网,通过子网掩码(subnet mast)可以判断两台主机是否同属一个子网。例如主机 A 的 IP 地址为 192.168.10.10,主机 B 的 IP 地址为 192.168.10.20,子网掩码为 255.255.255.0。两个 IP 地址分别与子网掩码进行按位与运算(&):

192.168.10.10 & 255.255.255.0 == 192.168.10.0
192.168.10.20 & 255.255.255.0 == 192.168.10.0

两者的结果一样,因此它们在同一子网络。

网络层会对传输层数据添加源 IP 地址和目标 IP 地址等信息,封装为 IP 数据包。

到这层,已经确定了服务器的主机和端口。Unix 系统把主机+端口称为套接字(socket),有了 socket 就可以进行网络编程。

这里说明一下:所谓的 TCP 连接,就是在客户端和服务端内存中保存的一份关于通信对方的信息,如 IP 地址、端口等。

数据链路层

数据链路层需要为上层数据包进行添加 MAC 地址、分片等操作,并负责把数据转为电信号,例如规定 0 和 1 的信号,多少个信号为一组,每个信号位有什么意义。 以太网规定,一组电信号构成一个数据包,称为帧(Frame)。数据链路层需要 MAC 地址来传送数据,发送者的 MAC 地址可以确定,但是接收者的 MAC 地址 我们并不知道,这时候需要用到 ARP 协议。如果发送者和接收者在同一子网络中,可以通过 ARP 协议发送广播向子网所有主机查询目标 IP 的 MAC 地址; 如果不同一个子网络中,则要把数据包发送到网关(gateway),由网关进行后续处理。这里用户主机把源 MAC 地址设为主机地址,目标 MAC 地址设为路由器或 子网其它主机的 MAC 地址。

物理层

物理层规定网络的电气特性,通过光纤等方式把主机连接起来,传输电信号。

这里假设浏览器请求的是外网服务器

用户主机把数据传输到路由器之后,路由器会对数据进行重新封装,把源 MAC 地址设为路由器 MAC 地址,目标 MAC 地址设为下一跳的 MAC 地址。至于怎么确 定下一跳的 MAC 地址,目前还没研究过。并根据目标 IP 和路由表进行路由选择。

这里直接跳到服务器,服务器接收到数据后,进行重组并往上层层解封并解析数据,最后到达 web 服务器软件,web 服务器软件对 HTTP 报文进行解析,并进行 各种判断,生成对应的响应报文。接着就是按上述步骤把响应报文由物理层往上层把数据传给请求的主机,最后到达浏览器,剩下的就是浏览器对报文的处理了。

Search

    Table of Contents