引言
快到考试月了,南校的老鲜肉也要过来北校了,(北校网络欢迎他们。。。)。我想比较重要的事还是开网吧,现在的大学生啊,没有网络就跟弱智一样(没错,说的就是我自己),然后很多人遇到所谓的“ip,子网掩码,默认网关,dns”会不会是一脸懵逼呢?今天我就让小R来给大家科普一下,看看他们究竟是什么,为啥没了他们我们就无法上网。(科普文,大神请自动绕道)
连接网络
在揭开他们的面纱前,我们先来看下你是怎样获取到别的电脑的内容的。一般情况下,我们会在浏览器输入要搜索的内容,如 Alt text ,接着回车,内容get Alt text 。 过程非常简单,但暗地里浏览器和我们的操作系统可是做了很多事情。下面我们结合上面的几个重要概念描述一下整个请求响应过程。第0步,OSI七层模型
在了解以下概念前,有必要先大概说一下OSI七层模型,如下图
第一步,dns
第二步,网关
当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的。设备驱动程序从不检查IP数据报中的目的IP地址。
也就是说在局域网是通过MAC地址来寻址的。
在了解有了ip地址和MAC地址后我们的计算机是如何找到目标服务器之前,有必要先简单说明一些基础知识
子网划分。子网划分,就是把ip地址分为两部分,一部分称为net_id
网络id, 用来划分网络。一部分称为host_id
主机id。用来定位局域网中的主机。它是通过ip的分段实现的(ip地址分类忽略,有兴趣可以自己google一下)。子网划分就是将ip地址分段,分为网络地址和主机地址,网络地址是用来区分不同的网络的,当我们说我们的网络地址不同实际上就是说我们处在不同的局域网内,主机地址不同指位于同一网络的不同主机地址,意味在局域网内的网络通信是不需要通过路由转发的。
同一局域网内的主机可以相互通信,而不同局域网内的主机是无法直接通信的,需要使用路由转发。而这个路由,就是前面所说的网关。网关可以是一台单纯的路由器也可以是具有路由功能的服务器。
我们可以看到,正常的网络访问网关也是必须的。
第三步,子网掩码
因此,我们需要判断我们要访问网站ip和我们的本地ip是否在同一个网段。而如何判断呢,原理十分简单,通过子网掩码进行简单的逻辑操作即可。 举个栗子,当我访问google时,它会通过dns缓存或者dns服务器找到它的ip,在我的电脑上google的ip是64.233.162.84
,ip4协议的ip地址是32位的二进制数,转化为01000000 11101001 10100010 01010100
,而我本机的地址是192.154.1.2
,转为二进制11000000 10011010 00000001 00000002
。要判断他们是否在同一个子网,需要用到所谓的子网掩码,如学校给我们的是255.255.255.0
,将上述两个ip与子网掩码分别逻辑与&
一下,如果结果相同则说明在同一个子网,否则在不同子网。由结果我们可以看到我和google的服务器不在同一个网段,数据无法直接传输过去,但我不能方啊,于是我去找了网关,“大哥,帮我传个数据呗,google那小子不住北区”。然后网关就通过复杂的路由规则帮我们将数据转发出去。最终到达google服务器。
第四步,接收数据
google收到我的请求数据后,通过同样的方式将数据传输到我的电脑上。同样的,它需要我的ip和MAC地址才能够找到我,而这些都是我发给它的,这也是为什么我们电脑要上网需要配置ip的原因—让别人找到你。
过程总结
通过dns缓存或者dns协议获取ip,如64.233.162.84
(所以我们需要知道dns服务器的ip)
判断是否在同一个网段,使用子网掩码。(所以我们需要知道子网掩码)
封装自身ip,对方ip,自身MAC,以及其他重要信息。(所以我们需要知道自身ip)
同一子网接通过交换机送达。不同子网通过网关转发。(所以我们需要一个或多个网关的ip)
请求送达,数据返回。
最后
网络协议和网络通信是非常复杂的,为了简单很多内容都省略了,当然很多目前我也不懂。(想进一步了解的欢迎一起讨论。)并且,校园网作为内部网络,内部数据处理有所不同,但整个流程大致如此。
@author:lingeors
@time: 2016-05-22 19:32:03