了解Web及网络基础

在面试中经常会问一些关于TCP/IP和HTTP/HTTPS相关的问题,在工作中虽然可以用okhttp之类的库,但是必须要有基础才能把库的实现了解清楚,才能更好的处理网络问题。所以在这系列的博文中记录下学习的内容。

网络通信是需要一个统一的规则的,这样才可以在不同硬件、操作系统之间通信,这个规则称为协议。各种协议集合统称为TCP/IP。
TCP/IP协议族里重要的一点就是分层,可以分为4层:应用层、传输层、网络层和数据链路层。(为什么要分层呢?这就像编程里的常常说得MVC/MVP模式,把不同的内容分离开,方便日后维护,网络分层也一样,如果没有分层,在需要改变设计的时候,就必须把所有部分整体替换掉,而分层之后只需要把变动的层替换掉即可,并且不需要管其它层的实现、是否能确保传输送达等问题)。

  1. 应用层:有我们熟悉的HTTP、HTTPS和FTP、DNS等,应用的网络编程就是在这一层,所以要重点关注,其中HTTP的职责是生成针对目标WEB服务器的HTTP请求报文。
  2. 传输层:有两种性质不同的协议TCP/UDP,这两种不同的协议来告诉网络数据传输的方式,也需要重点关注下,主要工作原理是把应用层收到的数据(HTTP请求报文)进行分割成多个报文段,并在各报文上打上标记序号及端口号后转发给网络层,其中TCP会进行可靠性传递(三次握手)。
  3. 网络层:即IP层,用来处理在网络上流动的数据包,即是搜索对方的地址,并把数据包传输给对方, 根据ARP协议来把IP地址反差出对应的MAC地址。
  4. 链路层:用来连接网络的硬件部分,网络适配器、网卡等,了解即可。

这里写图片描述

发送端在各层之间传输数据时,每经过一层时会被打上一个该层所属的首部信息,反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。
这里写图片描述

TCP是一种可靠的协议,为了确保可靠,TCP协议采用了三次握手策略,如果在握手的过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。

第一次握手:客户端向服务端发送一个SYN包
第二次握手:服务端接收到客户端的SYN包进行确认,并发送ACK+SYN包
第三次握手:客户端收到服务端的ACK+SYN包后向服务端发送ACK包**

这里写图片描述

DNS(Domain Name System) 位于应用层的协议,提供域名到IP地址之间的解析服务。

从在浏览器输入网址到显示网址内容经历的步骤如下:
1. 客户端向DNS发起域名解析,解析后返回IP给客户端;
2. HTTP协议生成针对目标WEB服务器的HTTP请求报文;
3. TCP协议将HTTP请求报文分割成报文段,按序号分为多个报文段,把每个报文段可靠地传递给对方;
4. IP协议层负责搜索对方的地址,一边中转一边传送;
5. 服务器端的TCP层按序号以原来的顺序重组请求报文;
6. 服务器端地HTTP层对请求的内容进行处理;

这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章