网络原理 涉及到的内容很多,会分成几个部分分别进行介绍。
但是:网络原理在面试中会常考!
常考部分以及面试题会重点标出,如果没时间直接挑重点标出看。
本文主要介绍网络原理中的【应用层】部分,以及关于应用层部分的协议。
(但是本部分基本不涉及面试题!)
【回顾】
生活原本沉闷,但是跑起来就会有风!
网络上传输的数据本质上都是bit流(一堆二进制位),也可以把这些数据视为“字符串”。
基于常用的格式来传输数据就可以更加通用、也更加方便。
① 【注:HTML也是标签化的格式,但是最本质的区别是:XML的标签名字是自定义的,而HTML的标签名字都是约定好的】
② XML缺点:丑;数据多了编写复杂;数据要通过网络传输是消耗网络带宽的,而XML中包含了大量的标签就导致网络带宽占用更高了
3)JSON(重点理解一下):当前最流行的一种数据组织格式,相当于XML的替代品。(JSON源自于js的对象,但是仍然是不一样的,如:js对象的属性可以是函数的,但是JSON中没有函数这样的说法)
JSON首先使用{},然后{}中包含多组键值对,键值对之间使用 ,来分隔 ;键和值之间使用:分隔。键只能是字符串类型,值可以是字符串、数组、数字、json等。
① JSON优点:可读性非常好;看起来美观;扩展性强
② JSON缺点:引入额外的字符串,传输数据量变大了,消耗更多的带宽
4)上述的XML和JSON都是属于带宽占用比较高、效率比较低的格式,也存在一些格式能够高效的组织数据。这类格式有很多,其中最典型的是protobuffer(谷歌搞的一个东西)。Protobuffer既是一个数据格式,同时也是一个库,用于操作这种格式的数据。
① protobuffer是一个二进制格式,不太方便研究这里具体是怎么组织的;但是要清楚,这种格式下组织出来的数据空间占比要比JSON和XML都少,明显提高了传输效率。
② protobuffer缺点:二进制不方便人肉眼观察,阅读和调试比较复杂。
③ 适合于对运行效率要求比较高的场景来使用。
① 域名解析的过程,可以简单的理解为:发送端主机作为域名系统树形结构的一个子节点,通过域名信息,从下到上查找对应IP地址的过程。如果到根节点(根域名服务器)还找不到,即找不到该主机。
② 域名解析使用DNS协议来传输数据。DNS协议是应用层协议,基于传输层UDP或TCP协议来实现。
① NAT能够将私有IP对外通信时转为全局IP。也就是就是一种将私有IP和全局IP相互转化的技术方法:
② 很多学校、家庭、公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP;
③ 全局IP要求唯一,但是私有IP不需要。在不同的局域网中出现相同的私有IP是完全不影响的。
这种关联关系也是由NAT路由器自动维护的。例如在TCP的情况下,建立连接时,就会生成这个表项;在断开连接后,就会删除这个表项。
① 无法从NAT外部向内部服务器建立连接;
② 转换表的生成和销毁都需要额外开销;
③ 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。
在后面内容中再进行详细介绍。