介于自己的网络方面知识烂的一塌糊涂,所以准备写相关网络的文章,但是考虑全部写在一篇太长了,所以分开写,希望大家能仔细看,最好可以指出我的错误,让我也能纠正。
1.讲解相关的整个网络体系结构:
网络体系结构小结
2.讲解相关网络的重要知识点,比如很多人都听过相关网络方面的名词,但是仅限于听过而已,什么tcp ,udp ,socket ,websocket, http ,https ,然后webservice是啥,跟websocket很像,socket和websocket啥关系长的也很像,session,token,cookie又是啥。
相关网络知识点小结-TCP/UDP
相关网络知识点小结- http/https
相关网络知识点小结- socket/websocket/webservice(待写)
相关网络知识点小结- cookie/session/token(待写)
3.相关的第三方框架的源码解析,毕竟现在面试个大点的公司,okhttp和retrofit源码是必问的。
okhttp源码解析(待写)
Retrofit源码解析(待写)
网络这块知识其实很多开发估计都很薄弱,很多开发一直都是使用一些框架,然后和后台约定好返回的数据结构,然后就可以干活了。比如我们知道了retrofit调用的api后,填入相关的http url及要传给服务器的指定参数,我们就可以拿到相关的返回JSON:
{
"success":true,
"msg":"xxxx",
"data":{
"key1":value1,
"key2":value2
}
}
(当然其中的``success``一般的也是会用``code``值来返回,
然后移动端来判断是否是200即可。)
复制代码
然后通过类似FastJson或者Gson等转换成对象,然后用在我们的app中即可。
所以在很多时候,我们发现我们对于网络的东西一窍不通,照样能做出一个app来。而且说起来也是头头是道,但是一旦去面试大点的公司,问的稍微详细点,就直接哑口无言,然后基本就面试GG了。
而介于我的网络基础也是超级烂,所以这次是参考别人的文章,自己理解,并且做了总结,文章最后会附上相关链接,并且一些图也是直接参考这些大佬们的文章里面的配图。(所以不要喷我直接盗图)。
不知道大家小时候有没有写过信,通过邮局寄出去,但是那时候我们要手动的把真正写的内容写在纸上,然后塞入信封中,然后在信封上写上相关发件人信息,收件人信息,邮编等,然后才能顺利的寄到目的地。而收件人最关心的肯定是里面的真正内容的纸张,甚至可以不看信封的信息。
那我们在平时发送相关的信息的时候其实也跟寄信有点像,我们也只是写了相关的主要信息,但是最后却能发送到指定的地点,因为帮我们一层层封装了数据(有点像帮忙写了信封上的信息)。然后对方收到信息的时候,也只看到了我们发给他的主要信息(有点像帮忙打开了信封,拿出来里面的主要内容)。
看这个图是不是感觉很像刚才寄信,我们主要的DATA内容被一层层封装,然后到了接收方后,一层层解封装。
有些人可能会问,那这一层层的,到底具体做了什么呢,其实让你现在想象你也大概知道一些,比如对方的地址和你的地址;各种约定好的协议(比如我们信封上面的邮编号也算是规定的协议);比如你用的是英文写的,或者用的中文写的,对方也要会看懂,大家最好也是要相互约定,这样寄信过去后才能更方面让对方读懂等等。
我们一步步具体来看:
其实上面那个图用的是OSI体系结构,所有我们可以看到有七层。
不好意思。。。走错片场了。。。应该是下面的图片。
其实看上面的图已经大概有点了解了:
来个更具体的图片:
然后很多人说七层太多了看不懂,然后表示直接放弃,(PS:我自己也表示放弃) 虽然知道封装了很多东西,但是层数太多,真心不想看下去。所以后来看到还有其他的比较少的层数结构
TCP / IP的体系结构简化了计算机网络的结构,由原来的七层编导现在的四层,但是其功能并没有减少。
是不是一下子少了很多,我们知道一个数据从这边发送到另外一个地方,很像寄信一样,我们就以寄信来说明,更加通俗易懂。寄信无非就是要有这几个条件:
所以上面的例子看懂了我们再来看TCP/IP的四层协议(当然我只是讲了一个大概,没有讲解详细,甚至如果讲错了,望指正
):
其实和上面的四层类似,只是最下面的网络接口层拆分成了OSI的最底下的二个层:物理层和数据链路层。其他都是一样的。
看了图片是不是一下子就明白了三者的关系了,类似于TCP/IP的结构更多的是把OSI的七层标准,把某几层合并简略成了一层。从而更好的理解。
emmmm.........希望大家轻喷。