网络的连接

1.输入网址
浏览器输入网址http://www.baidu.com/,https://www.baidu.com/
http默认80端口,https443端口,端口可忽略。域名的存在,主要是为了好记。

2.域名解析,DNS
域名的背后是服务器ip地址,怎样通过域名查找到ip呢?
DNS也分为服务器和客户端。
DNS服务器有一张表,存在大量ip和域名的对应关系。
DNS客户端又称为DNS解析器,当访问某个域名的时候,浏览器就会委托DNS解析器解析当前域名的ip地址是多少。
DNS解析器是一个程序,主要通过Socket库进行编写的,Socket携带“域名”参数发送到DNS服务器,DNS服务器返回对应的ip。
DNS服务器的ip地址是电脑上提前配置好的,所以Socket能够直接访问。
过去电脑上经常会遇到一个问题,QQ能够登陆,但是浏览器不能上网,原因是DNS污染了,QQ是直接连接的ip所以不受DNS的制约,重新配置一下DNS的ip即可恢复正常。

3.域名层次结构
很明显,网络上的域名千千万,一台DNS服务器肯定是无法支持的,然而我的DNS只是配置最近的一个服务器ip。DNS服务器有很多台,如何才能定位到我所访问的那个域名归属的DNS服务器呢?
域名是有层级结构的,比如www.a.b.c.com这个网址,层级从右至左,右边的com为顶级域,a为最低域,那么查询时,先找到存储com域名的DNS,如果该服务器没有www.a.b.c.com,那么再分配到储存c.com域的DNS,以此类推,直到找到www.a.b.c.com为止。
假如每次访问同一个网址都这么定位查询,那是要累死,所以当查询要对应的ip后,在DNS服务器上会缓存查询过的域名,下次就直接使用。

4.整合数据块
通过DNS找到ip后,Socket就能连接到需要访问的服务器。
先整合数据信息,然后准备发送。怎么整合,需要哪些信息?
当客户端(浏览器)向服务器发送数据,除了消息主数据外,还需要携带很多协议信息。协议的主要作用,通俗来讲,我认为就是为了方便描述客户端信息、规定传输方式、让服务端能读懂信息,保证客户端和服务端更畅通的交流。
Http层:http头部+数据块(一般就是请求参数啥的),常见的头部Cache-Control是否使用缓存,Content-Type请求类型等
TCP层:TCP头部+http头部+数据块(认为用户发送的数据),TCP的主要作用是将数据块拆分成一个个小的数据包进行传送,数据包携带编号和大小,方便TCP接收端进行校验和整合。
IP层:IP头部+TCP头部+http头部+数据块(认为用户发送的数据),IP头部主要是增加了MAC地址和Ip地址,然后将最终的数据块传送到网卡驱动。
网卡层:网卡驱动将来自IP协议层的数据转发到网卡,网卡将数据包以电信号的形式发送出去。

5.集线器、交换机和路由器
通俗来讲,
集线器:
一个可以连通很多电脑网线的设备,多台电脑连在一起就形成了局域网,假设集线器上的A电脑发送消息,它的过程:
A消息-集线器-转发所有电脑
集线器上面的其他电脑都全都可以接收到,消息是以广播的形式在传播。
交换机:
功能相当于集线器的升级版,A电脑发送消息的时候,过程:
A消息-交换机-转发到指定的电脑
它是怎么做到的呢,每台电脑的网卡具备唯一的地址,叫MAC地址,是出厂的时候就存在了,类似人的身份证ID,交换机内部有一张表,记录了每台电脑的Mac地址和交换机的端口号对应关系。比如A给B发送消息,B的端口是2号,那么该消息直接转发到2号端口,解决了“广播”的问题
路由器:
局域网电脑多了,交换机就需要增加无数个端口,很明显是不可能的。数量庞大了,可以拆分成多个小的局域网。
局域网之间的链接桥梁就是路由器。
甲局域网-交换机-路由器-交换机-乙局域网
那么通讯:
甲A-交换机-路由器-交换机-乙A
这样就实现了两个不同局域网的联网。现实的网络就是无数个局域网和路由器组合在一起的。

6.子网掩码和默认网关
子网掩码:
子网掩码可以用来辨别两个ip是否在同一个局域网内
假设子网掩码是255.255.255.0,这里有三台电脑,IP分别为:
A:192.168.0.1
B:192.168.0.2
C:192.168.1.1
用A,B,C分别和子网掩码做 & 操作,结果一致则表示在一个局域网。
255.255.255.0用二进制表示就是
11111111 11111111 11111111 00000000
1和其他数 & 操作结果为“其他数”原值,0和任何数 & 操作结果都为0,所以用255.255.255.0和其他ip地址做&操作是为了提取"地址前3位"(因为最后1位清0了)。
可以看出A,B,C计算结果分别为
A:192.168.0.0
B:192.168.0.0
C:192.168.1.0
所以AB在一个局域网,C不在。
默认网关:
上面的例子,A-B发送消息,直接通过内网转发,若A-C发送消息呢,那么需要通过路由器来进行转发,怎么知道路由器的地址是多少呢?
电脑上配置的默认网关在一般情况的的局域网中,就是路由器的ip地址。

7.服务器端
服务器端也是一台电脑,遵循了TCP/IP协议,HTTP协议等,

网卡将电信号转换为数字信息  
|
IP模块检查MAC和Ip头部
|
TCP组装数据块
|
Socket接收数据移交给服务器程序
|
服务器程序获取Http中的请求参数等信息
|
发送Http, 返回客户端想要的数据。


这时候和客户端发送Http的流程是一样的。

8.总结一下:

客户端
|
发送请求
|
DNS服务器
|
客户端拿到服务器Ip
|
通过Http、Tcp、Ip协议打包数据
|
网卡转化为电信号
|
交换机
|
路由器
|
交换机
|
网卡转化为数字信息
|
通过Http、Tcp、Ip协议解析数据
|
服务器获取请求参数
|
服务器发送Http,返回数据

–参考《网络是怎样连接的》