一直想写有关计算机网络的内容,趁着这段时间在准备面试。就顺便整理复习一下。
网络分层模型
ISO/OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI。
TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议,通过20多年的发展已日渐成熟,并被广泛应用于局域网和广域网中,目前已成为事实上的国际标准。TCP/IP协议簇是一组不同层次上的多个协议的组合,通常被认为是一个四层协议系统,与OSI的七层模型相对应。
以上这些都是百度百科的东西。但是理解起来有点困难,待我慢慢分析。
物理层
物理层最好理解。如果在两台计算机中,要实现他们相互通信的话,最简单的办法就是使用一条线,将他们连接起来,然后通过高低电频的方式,完成信息的交互。
这样,简单的物理层就实现了。物理层实际上就是布线、光纤、网卡和其它用来把两台网络通信设备连接在一起的东西
但是随着设备的不断增加,两两相连实现通信的方式肯定是不现实的。这时,就可以进入下一层了。
数据链路层
数据链路层还有一个名字,叫做MAC层。叫他MAC层的原因,是在这里,主要就是使用的MAC地址进行通信的。
MAC地址,通俗的就可以理解为一个实际的地址。假如要去某个人的家里,那么就必须要先知道他的家庭地址才可能去到他家。现实生活中的家庭地址就可以理解成网络中的MAC地址。MAC地址也是唯一的,它就是计算机的唯一标识。在计算机出厂时,MAC地址在网卡上就已经确定好了。MAC地址则是48位的,通常表示为12个16进制数。包括手机也有MAC地址。
类似这样
在数据链路层中,还有一个设备,叫做交换机。
交换机的作用是通过一条网线连接多台电脑实现上网的功能。在交换机中,记录了连接设备的MAC地址。所以,将其他计算机连接到交换机上,然后通过交换机中记录的计算机唯一物理标识MAC地址,实现在同一个交换机上设备的通信。
同时,交换机可以通过互相桥接的方式即一台连接下一台,下一台连接下一台,使用多台交换机共同记录的MAC地址来实现连接在不同的交换机的计算机完成通信。
虽然交换机通过桥接可以完成通信,但是毕竟他是一个物理设备,首先是他自己的物理内存有限,其次是大规模的桥接方式实现,就是一个交换机找另外一台交换机的MAC,另一台没有MAC地址,在找另外一台交换机找MAC地址…故而在比较小的局域网内使用交换机桥接是没什么问题的。
在现在的生活中,我们上网大部分都是通过路由器接网线来实现多设备的上网的。现在就来到了第三层网络层了。
网络层
在不同的网络内,在交换机的基础上再连接一个路由器,再通过路由器来连接计算机设备。路由器在跨两个网络的连接点,所以它也叫网关。
有了网关,网关再去找到不同的交换机去找到相应的MAC地址。在找到相应的交换机,这里又提出了一个大家熟知的名词–IP地址
IP地址的作用有两个。
- 标识网络
- 标识设备
它和MAC地址不同,MAC地址是计算机的唯一标识,IP地址用来是标识设备。所以现在每台设备又有了一个IP地址。简单点说,在网络中,就是通过IP地址找到设备,再通过设备,找到MAC地址,最后通过计算机的MAC地址,完成通信。
传输层
现在设备通信的问题已经解决了。接着就是是关于设备通信数据传输的问题。在传输层,就是我们常说的TCP/UDP协议了。我们往往采用的是TCP协议。
TCP协议百度百科这样说的:TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。别看就是这一句简单的几句话。它的内容还是很多的。
先是它的可靠性。一个比喻就是,如果远距离运输一辆自行车。如果将自行车组装好再运输,在运输过程中出现磕碰和损坏的几率就会增大(丢包)。但是将自行车使用零件来远距离运输,磕碰和损坏的几率就会减少。TCP协议就是通过将数据分段传输来保证数据的可靠性。
TCP协议三次握手
为了保证传输的可靠性,TCP协议在UDP基础之上建立了三次对话的确认机制,即在正式收发数据前,必须和对方建立可靠的连接。
模拟一下三次握手。大概就是这样
通过三次握手的形式,建立连接,三次握手主要就是判断客户端和服务端的连接是否有效。当三次握手成功。就可以开始传输数据了。
这里SYN包和ACK包都是TCP协议的首部。
TCP协议四次挥手
四次挥手,同样也是基于以上的原理。尤其是通信双方都可以独立关闭自己的通信通道,也就是半关闭。
连接释放需要发送4次报文才能完成. 这是因为TCP连接是全双工的, 每一端都需要对读写部分分别进行关闭才行. 当一端关闭读/写或者都关闭时, 该端就会向对象发送FIN来告知对端我将要关闭了, 对端知道后挥发送确认, 关闭端确认后再发送一个确认给对端. 整体就是首先进行关闭的一方将执行主动关闭, 而另一方执行被动关闭。
FIN包也是TCP协议的首部。
应用层
数据传输也搞定了,现在就来到了应用层。
应用层就是经常使用HTTP协议、HTTPS协议、DNS协议等。
我们怎么通过URL访问到的网站
摘自博客面试环节:在浏览器输入 URL 回车之后发生了什么?
当我们访问百度时。直接在浏览器url地址输入www.baidu.com就可以访问到百度了。这其中发生了这些过程。
首先。当我们输入域名时,首先会判断是使用的是HTTP协议和HTTPS协议,即URL解析。(关于这两个协议之前写过一篇文章)
然后再进行DNS查询。
DNS查询会下面几个顺序
- 浏览器缓存
浏览器会先检查是否在缓存中,没有则调用系统库函数进行查询。 - 操作系统缓存
操作系统也有自己的 DNS缓存,但在这之前,会向检查域名是否存在本地的 Hosts 文件里,没有则向 DNS 服务器发送查询请求。 - 路由器缓存
路由器也有自己的缓存。 - ISP DNS 缓存
ISP DNS 就是在客户端电脑上设置的首选 DNS 服务器,它们在大多数情况下都会有缓存。 - 根域名服务器查询
在前面所有步骤没有缓存的情况下,本地 DNS 服务器会将请求转发到互联网上的根域。
以上步骤查询出的结果就是IP地址。比如我给我毕设设置的Hosts文件
DNS查询过程就是通过迭代和递归一层一层往下查。因为我修改了Hosts文件的原因。在我在浏览器输入www.penglei.com那么访问的就是127.0.0.1这个本地地址。
在DNS查询过程中可能会有DNS劫持的问题。
接着,就到了传输层。使用TCP三次握手完成连接。TCP/IP 分为四层,在发送数据时,每层都要对数据进行封装。(套娃??)
接着服务器处理请求。打开网站的方式都是get请求。
接着浏览器接受相应。完成渲染页面。这样就完成了访问www.baidu.com的过程。
每层的作用
以下使用TCP/IP分层模型分析
应用层
通过DNS解析,获得到了IP地址,浏览器会开始构造一个 HTTP 报文,其中包括:
- 请求报头(Request Header):请求方法、目标地址、遵循的协议等等
- 请求主体(其他参数)
传输层
传输层会发起一条到达服务器的 TCP 连接,为了方便传输,会对数据进行分割(以报文段为单位),并标记编号,方便服务器接受时能够准确地还原报文信息。
在建立连接前,会先进行 TCP 三次握手。
网络层
网络层即网关,也叫路由器了。网络层将数据段打包,并加入源及目标的IP地址,并且负责寻找传输路线。
判断目标地址是否与当前地址处于同一网络中,是的话直接根据 Mac 地址发送,否则使用路由表查找下一跳地址,以及使用 ARP 协议查询它的 Mac 地址。
ARP协议
ARP协议是属于网络链路层的东西,但在TCP/IP中,它位于网络层。
所谓ARP协议就是在交换机中记录了设备了MAC地址。通过IP地址具体信息找到连接了该设备的交换机。再使用交换机找到MAC地址。
链路层
现在获得了MAC地址。就可以传输数据了
根据以太网协议将数据分为以“帧”为单位的数据包,每一帧分为两个部分:
- 标头:数据包的发送者、接受者、数据类型
- 数据:数据包具体内容
评论区