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

前言:

介于本身的网络方面知识烂的一塌糊涂,因此准备写相关网络的文章,可是考虑所有写在一篇太长了,因此分开写,但愿你们能仔细看,最好能够指出个人错误,让我也能纠正。web

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

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

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

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

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

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

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

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

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网络通讯的前世此生--网络基础

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

相关文章
相关标签/搜索