Android技能树 — 网络小结(1)之网络体系结构

4,863 阅读9分钟

前言:

介于自己的网络方面知识烂的一塌糊涂,所以准备写相关网络的文章,但是考虑全部写在一篇太长了,所以分开写,希望大家能仔细看,最好可以指出我的错误,让我也能纠正。

1.讲解相关的整个网络体系结构:

Android技能树 — 网络小结(1)之网络体系结构

2.讲解相关网络的重要知识点,比如很多人都听过相关网络方面的名词,但是仅限于听过而已,什么tcp ,udp ,socket ,websocket, http ,https ,然后webservice是啥,跟websocket很像,socket和websocket啥关系长的也很像,session,token,cookie又是啥。

Android技能树 — 网络小结(2)之TCP/UDP

Android技能树 — 网络小结(3)之HTTP/HTTPS

Android技能树 — 网络小结(4)之socket/websocket/webservice

相关网络知识点小结- cookie/session/token(待写)

3.相关的第三方框架的源码解析,毕竟现在面试个大点的公司,okhttp和retrofit源码是必问的。

Android技能树 — 网络小结(6)之 OkHttp超超超超超超超详细解析

Android技能树 — 网络小结(7)之 Retrofit源码详细解析

网络这块知识其实很多开发估计都很薄弱,很多开发一直都是使用一些框架,然后和后台约定好返回的数据结构,然后就可以干活了。比如我们知道了retrofit调用的api后,填入相关的http url及要传给服务器的指定参数,我们就可以拿到相关的返回JSON:

{
    "success":true,
    "msg":"xxxx",
    "data":{
        "key1":value1,
        "key2":value2
    }
}
(当然其中的``success``一般的也是会用``code``值来返回,
然后移动端来判断是否是200即可。)

然后通过类似FastJson或者Gson等转换成对象,然后用在我们的app中即可。

所以在很多时候,我们发现我们对于网络的东西一窍不通,照样能做出一个app来。而且说起来也是头头是道,但是一旦去面试大点的公司,问的稍微详细点,就直接哑口无言,然后基本就面试GG了。

而介于我的网络基础也是超级烂,所以这次是参考别人的文章,自己理解,并且做了总结,文章最后会附上相关链接,并且一些图也是直接参考这些大佬们的文章里面的配图。(所以不要喷我直接盗图)。

1.网络体系结构

不知道大家小时候有没有写过信,通过邮局寄出去,但是那时候我们要手动的把真正写的内容写在纸上,然后塞入信封中,然后在信封上写上相关发件人信息,收件人信息,邮编等,然后才能顺利的寄到目的地。而收件人最关心的肯定是里面的真正内容的纸张,甚至可以不看信封的信息。

那我们在平时发送相关的信息的时候其实也跟寄信有点像,我们也只是写了相关的主要信息,但是最后却能发送到指定的地点,因为帮我们一层层封装了数据(有点像帮忙写了信封上的信息)。然后对方收到信息的时候,也只看到了我们发给他的主要信息(有点像帮忙打开了信封,拿出来里面的主要内容)。

看这个图是不是感觉很像刚才寄信,我们主要的DATA内容被一层层封装,然后到了接收方后,一层层解封装。

有些人可能会问,那这一层层的,到底具体做了什么呢,其实让你现在想象你也大概知道一些,比如对方的地址和你的地址;各种约定好的协议(比如我们信封上面的邮编号也算是规定的协议);比如你用的是英文写的,或者用的中文写的,对方也要会看懂,大家最好也是要相互约定,这样寄信过去后才能更方面让对方读懂等等。

我们一步步具体来看:

1.1 OSI体系结构

其实上面那个图用的是OSI体系结构,所有我们可以看到有七层。

不好意思。。。走错片场了。。。应该是下面的图片。

其实看上面的图已经大概有点了解了:

  1. 物理层: 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。主要作用是将数据最终编码为用0、1标识的比特流,通过物理介质传输,这一层的数据叫做比特。
  2. 数据链路层:主要将接收到的数据进行MAC地址(网卡地址)的封装与解封装。常把这一层的数据叫做帧。这一层常工作的设备是交换机。
  3. 网络层:主要将接收到的数据进行 IP 地址的封装与解封装。常把这一层的数据叫做数据包。这一层设备是路由器。
  4. 传输层:定义了一些数据传输的协议和端口号。主要将接收的数据进行分段和传输,到达目的地址后在进行重组。常把这一层的数据叫做段。
  5. 会话层:通过传输层建立数据传输的通路。主要在系统之间发起会话或者接收会话请求。
  6. 表示层:主要进行对接收数据的解释、加密与解密、压缩与解压缩。 确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
  7. 应用层:主要是为一些终端应用程序提供服务。直接面对着用户的。

来个更具体的图片:

然后很多人说七层太多了看不懂,然后表示直接放弃,(PS:我自己也表示放弃) 虽然知道封装了很多东西,但是层数太多,真心不想看下去。所以后来看到还有其他的比较少的层数结构

1.2 TCP / IP的体系结构

TCP / IP的体系结构简化了计算机网络的结构,由原来的七层编导现在的四层,但是其功能并没有减少。

是不是一下子少了很多,我们知道一个数据从这边发送到另外一个地方,很像寄信一样,我们就以寄信来说明,更加通俗易懂。寄信无非就是要有这几个条件:

  1. 你寄信要先有个邮筒(邮局)吧,然后你把信投进去他们才开始受理。
  2. 要知道对方在哪个城市(也就是你填的邮编号码),不然你都不知道这封信发送到哪个城市,甚至有可能要中转好几次(你寄个信到某个城市,有时候一些近的城市可以直达,有时候一些很远的城市是不是要中转很多个城市,最后才到了目的地)
  3. 信送到了这个城市的邮局,但是伴随着的是很多其他都到这个城市的信,这时候具体要送到这个城市的具体的某个街道,某个小区等。这时候就会根据自己信封上面的具体收件人信息来确定这封信到底是属于具体的某个人的。
  4. 信到了收件人手里,里面的信封我们可能是用英文写的或者中文写的,又或者是通过某种格式来组成的加密信件(中国特务电视剧看过不),所以收件人在要读懂这封信,就要请相关的人来帮忙翻译解释。(反正寄过来英文信件,我肯定是找个英文厉害的人帮我翻译翻译)

所以上面的例子看懂了我们再来看TCP/IP的四层协议(当然我只是讲了一个大概,没有讲解详细,甚至如果讲错了,望指正):

  1. 网络接口层:就像邮筒一样,我们肯定需要有相应的物理层(比如网络相关硬件),同时还会放入一些核心信息,比如ip等 (这样邮局才能知道在把你这封信放在哪个城市运输车里面)
  2. 网络层:我们知道了ip,要把数据从一个主机传到另外一个地方的主机,同时中间可能有中转 (类似寄信从一个城市到另外一个城市) 。 详细的可以看:网络层的作用
  3. 运输层:一个电脑可能有多个进程同时在使用网络连接,那么网络包达到主机之后,怎么区分自己属于那个进程?(相当于很多信一起运到了这个城市,但是你的信具体属于哪个人的呢?) 所以传输层从网络层接收数据后,必须将数据正确递交给某个应用程序,也就是传输层曾能够区分不同进程的数据并且加以区分处理。(同时反过来,当处于发送方的那边,传输层从应用程序接收报文后要封装在传输层的段中再交给网络层发送)。具体详细可以参考:传输层作用概述
  4. 应用层:该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据的协议。应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。这个层的处理过程是应用特有的;数据从网络相关的程序以这种应用内部使用的格式进行传送,然后被编码成标准协议的格式。常用的程序比如电子邮件接收(POP3),远程登录(TELNET),文件传输访问(FTP),域名解析服务(DNS),控制信件的发送和中转(SMTP)等 (是不是相当于我们收到一个英文信件请英文好的人翻译,收到加密信件,请破解大师来帮忙翻译)

1.3 TCP/IP五层体系结构

其实和上面的四层类似,只是最下面的网络接口层拆分成了OSI的最底下的二个层:物理层和数据链路层。其他都是一样的。

1.4 各自的体系对应关系

看了图片是不是一下子就明白了三者的关系了,类似于TCP/IP的结构更多的是把OSI的七层标准,把某几层合并简略成了一层。从而更好的理解。

结语

emmmm.........希望大家轻喷。

参考文章:

传输层作用概述

网络层的作用

网络基础之一:网络体系结构详解

网络模型(7层网络模型)

浅谈Android网络通信的前世今生--网络基础

这是一份详细 & 清晰的计算机网络基础 学习指南