计算机网络---网络通信

in 计算机网络 with 0 comment

一直想写有关计算机网络的内容,趁着这段时间在准备面试。就顺便整理复习一下。

网络分层模型

image.png
ISO/OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI。

TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议,通过20多年的发展已日渐成熟,并被广泛应用于局域网和广域网中,目前已成为事实上的国际标准。TCP/IP协议簇是一组不同层次上的多个协议的组合,通常被认为是一个四层协议系统,与OSI的七层模型相对应。

以上这些都是百度百科的东西。但是理解起来有点困难,待我慢慢分析。

物理层

物理层最好理解。如果在两台计算机中,要实现他们相互通信的话,最简单的办法就是使用一条线,将他们连接起来,然后通过高低电频的方式,完成信息的交互。
这样,简单的物理层就实现了。物理层实际上就是布线、光纤、网卡和其它用来把两台网络通信设备连接在一起的东西
image.png
但是随着设备的不断增加,两两相连实现通信的方式肯定是不现实的。这时,就可以进入下一层了。

数据链路层

数据链路层还有一个名字,叫做MAC层。叫他MAC层的原因,是在这里,主要就是使用的MAC地址进行通信的。
MAC地址,通俗的就可以理解为一个实际的地址。假如要去某个人的家里,那么就必须要先知道他的家庭地址才可能去到他家。现实生活中的家庭地址就可以理解成网络中的MAC地址。MAC地址也是唯一的,它就是计算机的唯一标识。在计算机出厂时,MAC地址在网卡上就已经确定好了。MAC地址则是48位的,通常表示为12个16进制数。包括手机也有MAC地址。
类似这样
image.png

在数据链路层中,还有一个设备,叫做交换机。

交换机的作用是通过一条网线连接多台电脑实现上网的功能。在交换机中,记录了连接设备的MAC地址。所以,将其他计算机连接到交换机上,然后通过交换机中记录的计算机唯一物理标识MAC地址,实现在同一个交换机上设备的通信。
同时,交换机可以通过互相桥接的方式即一台连接下一台,下一台连接下一台,使用多台交换机共同记录的MAC地址来实现连接在不同的交换机的计算机完成通信。

虽然交换机通过桥接可以完成通信,但是毕竟他是一个物理设备,首先是他自己的物理内存有限,其次是大规模的桥接方式实现,就是一个交换机找另外一台交换机的MAC,另一台没有MAC地址,在找另外一台交换机找MAC地址...故而在比较小的局域网内使用交换机桥接是没什么问题的。

在现在的生活中,我们上网大部分都是通过路由器接网线来实现多设备的上网的。现在就来到了第三层网络层了。

网络层

在不同的网络内,在交换机的基础上再连接一个路由器,再通过路由器来连接计算机设备。路由器在跨两个网络的连接点,所以它也叫网关。
有了网关,网关再去找到不同的交换机去找到相应的MAC地址。在找到相应的交换机,这里又提出了一个大家熟知的名词--IP地址
IP地址的作用有两个。

  1. 标识网络
  2. 标识设备

它和MAC地址不同,MAC地址是计算机的唯一标识,IP地址用来是标识设备。所以现在每台设备又有了一个IP地址。简单点说,在网络中,就是通过IP地址找到设备,再通过设备,找到MAC地址,最后通过计算机的MAC地址,完成通信。

传输层

现在设备通信的问题已经解决了。接着就是是关于设备通信数据传输的问题。在传输层,就是我们常说的TCP/UDP协议了。我们往往采用的是TCP协议。
TCP协议百度百科这样说的:TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。别看就是这一句简单的几句话。它的内容还是很多的。
先是它的可靠性。一个比喻就是,如果远距离运输一辆自行车。如果将自行车组装好再运输,在运输过程中出现磕碰和损坏的几率就会增大(丢包)。但是将自行车使用零件来远距离运输,磕碰和损坏的几率就会减少。TCP协议就是通过将数据分段传输来保证数据的可靠性。

TCP协议三次握手

为了保证传输的可靠性,TCP协议在UDP基础之上建立了三次对话的确认机制,即在正式收发数据前,必须和对方建立可靠的连接。
模拟一下三次握手。大概就是这样
image.png
通过三次握手的形式,建立连接,三次握手主要就是判断客户端和服务端的连接是否有效。当三次握手成功。就可以开始传输数据了。
这里SYN包和ACK包都是TCP协议的首部。

TCP协议四次挥手

四次挥手,同样也是基于以上的原理。尤其是通信双方都可以独立关闭自己的通信通道,也就是半关闭。
image.png
连接释放需要发送4次报文才能完成. 这是因为TCP连接是全双工的, 每一端都需要对读写部分分别进行关闭才行. 当一端关闭读/写或者都关闭时, 该端就会向对象发送FIN来告知对端我将要关闭了, 对端知道后挥发送确认, 关闭端确认后再发送一个确认给对端. 整体就是首先进行关闭的一方将执行主动关闭, 而另一方执行被动关闭。
FIN包也是TCP协议的首部。

应用层

数据传输也搞定了,现在就来到了应用层。
应用层就是经常使用HTTP协议、HTTPS协议、DNS协议等。

我们怎么通过URL访问到的网站

摘自博客面试环节:在浏览器输入 URL 回车之后发生了什么?
当我们访问百度时。直接在浏览器url地址输入www.baidu.com就可以访问到百度了。这其中发生了这些过程。
首先。当我们输入域名时,首先会判断是使用的是HTTP协议和HTTPS协议,即URL解析。(关于这两个协议之前写过一篇文章)
然后再进行DNS查询。
DNS查询会下面几个顺序

  1. 浏览器缓存
    浏览器会先检查是否在缓存中,没有则调用系统库函数进行查询。
  2. 操作系统缓存
    操作系统也有自己的 DNS缓存,但在这之前,会向检查域名是否存在本地的 Hosts 文件里,没有则向 DNS 服务器发送查询请求。
  3. 路由器缓存
    路由器也有自己的缓存。
  4. ISP DNS 缓存
    ISP DNS 就是在客户端电脑上设置的首选 DNS 服务器,它们在大多数情况下都会有缓存。
  5. 根域名服务器查询
    在前面所有步骤没有缓存的情况下,本地 DNS 服务器会将请求转发到互联网上的根域。

以上步骤查询出的结果就是IP地址。比如我给我毕设设置的Hosts文件
image.png

DNS查询过程就是通过迭代和递归一层一层往下查。因为我修改了Hosts文件的原因。在我在浏览器输入www.penglei.com那么访问的就是127.0.0.1这个本地地址。
在DNS查询过程中可能会有DNS劫持的问题。

接着,就到了传输层。使用TCP三次握手完成连接。TCP/IP 分为四层,在发送数据时,每层都要对数据进行封装。(套娃??)
image.png
接着服务器处理请求。打开网站的方式都是get请求。

image.png
接着浏览器接受相应。完成渲染页面。这样就完成了访问www.baidu.com的过程。

每层的作用

以下使用TCP/IP分层模型分析

应用层

通过DNS解析,获得到了IP地址,浏览器会开始构造一个 HTTP 报文,其中包括:

传输层

传输层会发起一条到达服务器的 TCP 连接,为了方便传输,会对数据进行分割(以报文段为单位),并标记编号,方便服务器接受时能够准确地还原报文信息。
在建立连接前,会先进行 TCP 三次握手。

网络层

网络层即网关,也叫路由器了。网络层将数据段打包,并加入源及目标的IP地址,并且负责寻找传输路线。
判断目标地址是否与当前地址处于同一网络中,是的话直接根据 Mac 地址发送,否则使用路由表查找下一跳地址,以及使用 ARP 协议查询它的 Mac 地址。

ARP协议

ARP协议是属于网络链路层的东西,但在TCP/IP中,它位于网络层。
所谓ARP协议就是在交换机中记录了设备了MAC地址。通过IP地址具体信息找到连接了该设备的交换机。再使用交换机找到MAC地址。

链路层

现在获得了MAC地址。就可以传输数据了
根据以太网协议将数据分为以“帧”为单位的数据包,每一帧分为两个部分: