初识计算机网络

整体理解互联网

Posted by An automatic pencil on November 28, 2018

导言

  前两天看到一篇讲的不错的计算机网络文章,今天打算自己整理下来加深印象!

互联网的整体架构

  每个学过计网的人一开始都会接触到一张计算机网络的分层图。对于一个小白来讲,上来就看这张图根本不知道在讲什么意思,所以我们应该先摒弃这张图凭借直觉揣测互联网。一个很自然的想法当然是电脑之间要想通信就是先用物理方式连接。单纯的连接肯定是不行的,会有很多问题。

  • 传输速率和可靠性的问题。计算机内的数据都是01串,两台计算机通信需要控制传输速率,如果传输过快,接收方来不及处理,太慢耽误效率,而且要确保数据接收方收到。
  • 寻找接受方的问题。很多机器连接在一起,我们需要知道我们的接收方到底在哪?
  • 确定接收方进程的问题。我们知道计算机上有多个进程在运行。用户可以一边浏览网页一边微信聊天,不同的应用程序是运行在不同的进程中,那么接收到的消息到底是哪个进程呢?
  • 和用户交互的问题。主机上要有许多应用来和我们交互,比如浏览器,用户通过浏览器访问服务器的网页。

  这些问题直接处理起来很棘手,参杂在一块很复杂。于是人们想到了分层的方法,底层先解决一部分问题,然后上层在底层的基础上可以不考虑已经解决的问题。我们可以参考5层网络架构。如下图:

图像无法显示

  物理层解决主机间的物理连接和单位01信号传输,数据链路层解决校验问题以及控制传输速率和部分寻找接收方的问题,网络层解决主要寻找接收方问题,传输层解决确定进程问题,应用层主要是解决与用户交互的一些应用。要注意的是,这些层都是逻辑处理上的分层,并不是实际事务的分层。可能到这里你还不是很理解层是什么,没关系,可以先搁置后续会明白很多。

逐层讨论

  下面我们逐层讨论基本机制。

物理层

  主机之间通过一些物理媒介连接好,比如双绞线,光纤,无线通信等。然后运用相关通信技术传输01信号。主机只要定义好物理媒介接口信息就好了,比如接线口的类型等。具体传输细节在此不做讨论,留给通信的就好了!

数据链路层

  首先明确一个定义,协议。简单的可以理解协议就是一套规则,大家都遵守这套规则。对于传输速率的问题,数据链路层会解决。这一层为解决这个问题有一个著名的协议,滑动窗口协议。这个协议简单的来说就是确保传输速率恰当,并且对于发送的消息会确保发送成功。协议具体内容感兴趣的可以研究一下,在此不多做赘述。

  这一层部分解决了寻找接收方的问题。现实中如果我们在人群中找个人,最简单的方法就是冲着这群人大喊一声他的名字,这种方式叫做广播。就是对所有人都发个消息,然后每个人判断一下是否满足条件。还有一种方式就是类似于上学时有每个人的座位表,根据座位表和名字就能找到那个人了。这一层就是根据广播方式找接收方。首先为每个主机取个名字,这就是传说中的MAC地址。不同的是名字可以重复但是MAC地址不能重名,因为我们可以通过长相区分同名的人,但是计算机就不行了。MAC地址与生产网卡的生产厂商有关,不同厂商MAC前缀地址不同。然后还有一个问题就是如果每次都是广播找接收方这是个灾难,每次都给所有的主机发个消息,oh,boom,地球爆炸了。子网划分的终大意义就出来了,子网可以简单的理解为少数计算机组成的一个小型网络。这样在这个子网内采用这种广播方式是可行的。

图像无法显示

  就像上图,如果 1 想向 5 发送消息,那么他会向子网中的所有主机发送消息,消息中包含MAC地址,接收到的主机都会将消息中的MAC地址和自己的MAC地址比对,如果相同,接收消息。所有这些在原数据上添加的消息成为头,如下图:

图像无法显示

  在数据链路层,我们传输的封装后的数据称为帧。现在最常用的是以太网的封装格式。

网络层

  网络层是计算机网络最精彩的一层,当然精彩的细节部分在本篇文章中不详细说明,好尴尬。网络层主要处理的问题就是不在同一子网的通信双方寻找对方的问题。数据链路层中MAC地址的定义由于是与厂商有关,与子网完全没关系。于是IP地址引进,同一子网的主机有统一子网IP地址,有网络管理员分配。IP地址由子网号和主机号组合成,我们用子网掩码可以获取一个IP的这两个部分。子网号是多少位就有多少个1,主机号多少位就是多少个0,然后组到一起就是子网掩码。有了IP地址,处于不同子网的主机就可以通过它进行通信。

图像无法显示

  假定1 与 3 通信。一般来说,我们是不知道接收方的MAC地址,我们只知道IP地址。先讲一个协议,ARP协议。它是获取同一个子网中接收方的MAC地址。简单来说就是发送方在子网广播接收方IP地址,每个收到这个包的主机都和自己IP地址比对,如果相同将MAC地址返回。1 与 3 通信时通过ARP知道3不和自己在一个子网,所以它发送数据包时MAC地址是网关A的MAC,这样网关A接到数据包然后根据目的IP地址和路由传到网关B(这里就是最精彩的部分,A怎样找到B的),这时网关B再根据ARP协议和以太网广播将数据给3。   网络层的头部信息就是接收方IP地址等信息。

传输层

  传输层就是将进程信息写入头部,进程在计算机中用端口号标识。传输层最著名的就是TCP协议,它的主要作用就是建立端口与端口之间的连接来传输数据。

应用层

  应用层就比较清楚了,比如浏览器应用的http协议,以及DNS协议等。

实例理解

  可能讲完这些,忘的都差不多了,不过没关系,下面通过一个实例就会明白很多。还是看上面那个图,假定1要与3通信,并且1是客户端,3是服务器,1想访问3上的一个网页。用户首先打开浏览器应用,输入网址。这时候DNS协议派上用场了,DNS协议用来把网址转换成IP地址。首先我们知道,IP地址是接收方的标识,我们直接输入接收方IP是可以的。但是抽象的IP地址人是无法理解它的实际意义,所以人们想到用网址映射成IP地址。比如说www.taobao.com人们知道这个是淘宝网。具体DNS怎样映射的此处不做详解。浏览器通过DNS获取到3的IP后,由于这一次是请求服务器的网页信息,采用http协议封装数据,包括请求网页在服务器上的路径,请求方式等等信息。类似于下图:

图像无法显示

  数据在应用层封装完成后,到传输层利用TCP协议封装应用数据包,新增端口信息等。 然后经过网络层,根据IP协议将IP地址等添加到传输层数据包头部成为IP数据报。然后再到数据链路层添加MAC地址等信息封装成帧,最后送到物理层会将封装好的数据发送到线路上。如下图:

图像无法显示

  线路中的数据每到一个节点都是逆向解封装进行操作。首先1号主机通过子网掩码判断3号主机和自己不在同一个子网,所以1号主机把数据发给网关A,网关A通过网络层IP路由传给网关B,然后网关B判断到3号机和自己在同一个子网,利用ARP协议获取3号机MAC地址,然后广播给3号机。3号机取出网页数据,逆向返回给1号机,然后1号机浏览器渲染出来成我们的网页。

总结

  本次记录只是一个网络的大概理解,更多细节以后有时间再填坑!(逃)