在网络时代里,真正自由的有两种人,第一种人就是与世隔绝的人,另外一种人就是一个了解计算机网络的人。
----某位网安大佬
互联网的本质就是一系列的网络协议,最早由ISO国际组织定义为7层网络参考模型,后面应用于不同的场合,依据功能又划分出4层和5层的tcp/ip模型,其实功能都一样
七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。五层划分为:应用层、传输层、网络层、数据链路层、物理层。四层划分为:应用层、传输层、网络层、网络接口层。
我们这里就采用简化版五层网络模型来讲解网络是如何通信的
访问网站的基本过程
如果我们想访问一个网站的服务器,那必须知道他的IP地址。由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串
简单来说,域名只是一个我们自己给IP地址起的别名,当我们要访问一个网站时,我们先要向DNS服务器询问域名对应的IP地址,然后再进行访问。
协议封装
大多数通讯协议都是包含两个部分,一个head头部分,一个data数据部分。协议的封装无非就是将数据放在data数据部分,然后加上自己特殊的协议头。
应用层
顾名思义,应用成就是应用程序所主导的分层。是用来组织统一各种类型应用数据的
在应用层向百度服务器发送的请求内容通过浏览器封装为一个请求内容
传输层
传输层功能:建立端口到端口的通信
这里提一下端口这个概念,端口是用来计算机标识计算机上的应用程序而产生的。如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。
每个计算机都有65535个端口,其中1~1024为系统端口。(注意端口号只有本地意义,在因特网中不同计算机的相同端口是没有联系的)
传输层有两个协议:tcp, udp协议
其中tcp是可靠传输,在进行通信前,会进行三次握手,断开连接前,会进行四次挥手。而udp则是像广播一样直接广播数据(不管对方是否收到)
我们通常说的http协议是基于tcp的,也是因为http是建立在应用层的协议,其依赖的是传输层的tcp协议。
下图是此时的数据包
HTTP头数据封装了原端口和目标端口
我们这里假设原端口(浏览器发送时所用的端口)为404,目标端口为53(dns服务器的端口)
网络层
网络层主要套一层IP协议
ip协议有ipv4和ipv6,ipv4的ip地址只有32位,而v6则有128位,这是因为全球每个局域网对外的公网ip都是唯一的,而上网人数如此庞大,32位是不够的,后面则把32位升级到了128位,但是两个协议是无法互通的。
ip协议规定,网络层的数据格式也是由ip包头和ip数据两部分组成:
IP头包含:发送方的ip地址接收方的ip地址
data包含:数据内容
此时,网络传输数据的格式就变成:
此时我们的电脑会检查IP地址,发现IP地址并不是局域网内的,于是将此数据给下一层准备发往网关(家用路由器)
数据链路层
局域网之内的通信是基于MAC地址来标识设备的
mac地址的由来:接入Internet的设备都必须具备网卡,发送端的和接收端的地址便是指网卡的唯一物理地址,即Mac地址。每块网卡出厂时都被烧录上一个实际上唯一的Mac地址,长度为48位2进制,通常由12位16进制数表示,(前六位是厂商编码,后六位是流水线号)。
同一子网下的2台设备A、B进行通信,A会以广播的方式发送上面约定的头和数据内容组合而成数据包到同一子网下的所有设备,然后每个设备接收和解析数据,如果发现头里的接收方的mac地址和自己不符合则丢弃数据,如果发现mac一样,则响应数据。
此时将会通过以太网协议封装以太网头。
Ethernet规定每一数据帧,最短为64字节(一个字节8位数字),最长1518个字节,超过最长限制就分片发送。
每一数据帧由两部分组成:head头和data数据。
head包含(18个字节):发送方的mac地址(6字节)接收方的mac地址(6字节)数据类型(6字节)
data包含(48~1500字节):数据内容
我们通过ARP协议获取到路由器的mac地址.Arp协议提供了一种从IP向mac地址映射的方法.
物理层
物理层功能:主要是基于 硬件的物理特性 发送高低电压(电信号),高电压对应数字1,低电压对应数字0,物理特性包含电信号(电缆)、光信号(光缆)、无线电波(射频设备)等。无论中间通过什么传输,最终在接收端都转化成电信号,也就是0101这样的高低电平,这时接收到的数据就是一堆无意义的数字,因此要在发送和接收的双方都约定好,每N位数字代表什么含义,如表示数据头,还是数据格式,还是数据内容等。这种约定就称为协议,与物理层最接近的就是数据链路层,使用以太网协议Ethernet。
数据的进一步传输
此时数据会通过物理层来到家用路由器网卡的接口通过光猫转化为光信号通过光缆向外发送数据
家用路由器将此数据通过以太网协议发送到交换机
交换机是一个二层设备(只能将数据包解析到数据链路层)
他可以把此时的数据包解析到数据链路层,看一下里面的mac地址,我找到目标上级路由器,并将数据包发送给上级路由器
路由器可以解析三层数据,即解析到网络层
上级路由器拿到数据后看到目标IP仍然不在他的局域网内,于是往上做好nat转换后向上一级路由转发跳转到互联网(也就是一层一层的路由器错综复杂形成的的网)
数据也就这么在一层层路由器中一层一层的跳着
互联网再将它转发给目标dns服务器附件的路由器,进行我上述操作的反向操作,让dns服务器得到最终的数据内容,告诉我们baidu.com服务器的IP地址
我们拿到目标网站的IP地址后,也是通过上述流程与目标服务器通讯。这就是最基本的网络通信的基本过程。
Comments 1 条评论
博主 ccckfg
说实话,我自己都看的头晕眼花的
(/ω\),这东西确实难说清楚,太复杂了,这个讲的还不是很详细。有些地方表述也不够严谨后,面会慢慢完善:)