首先上一张网络分层图
本文以五层网络协议来讲解一下每层的用处,其他分层结构只是做了细分或者合并,此处不再细说。
1. 物理层
主要是一些物理连接,包括网线、光缆等等,传输的是电信号0,1
2.数据链路层
定义了信号的分组方式,一组电信号构成一个数据包,一个数据包称为一帧,一帧包含标头和数据两部分
标头包含一些传输信息,如发送方和接收方信息。
以太网协议就处于数据链路层,同一子网络的所有设备是靠以太网协议进行数据传输的,以太网协议规定传输信息必须包含双方设备的mac地址,此mac地址在数据标头中,传输时以广播形式通知本子网络内所有设备,所有接收设备拿到数据标头里的接收方mac地址与自身mac地址匹配,相同则处理,不同则丢弃。
3.网络层
由于以太网协议的局限性,广播方式是无法作用于不同子网络间的信息传输的。此时网络层就出现了,网络层定义了不同子网络的网络地址,也就是所熟知的IP地址,区分两个地址是否是处于同一个子网络,单纯看IP地址是无法区分,还要结合子网掩码做相应运算之后得出。
4.传输层
有了IP地址和mac地址,已经可以实现不同网络下设备间的通信,但是同一设备下可能存在多个程序,此时就需要有一个参数来区分不同程序。传输层就定义了这样一个参数,端口。
"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。有了它,就可以进行网络应用程序开发了。
5.应用层
应用层用于规定数据传输格式的,常用的HTTP、FTP、SMTP等都是应用层协议
案例分析
在浏览器搜索框输入https://www.baidu.com
- 首先需要DNS服务器根据域名解析出对应IP地址,因为数据传输是需要知道双方IP、mac地址、端口号等信息的。所以按下回车键的那一刻,会先向DNS服务器发送一个数据包(DNS服务器的地址在电脑的网络设置里面已经配好了),此后收到DNS服务器解析好的IP地址数据。
2.有了IP地址,在结合子网掩码(也在电脑的网络设置里配置好了),判断此IP地址是否与当前网络处于同一网络下
- 处于同一网络下,则通过ARP协议,根据IP地址获取到接收方的mac地址,然后依靠以太网协议,通过广播方式进行数据传输
- 不处于同一网络下,则需要通过网关进行数据转发(网关地址也在电脑的网络设置里配置好了)
- 经过多个网关的转发,百度服务器收到了以太网数据包。根据IP标头的序号,百度服务器将数据包拼起来,取出完整的TCP数据包,然后读出里面的"HTTP请求",接着做出"HTTP响应",再用TCP协议发回来。
- 本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。