PHP面试常考之网络协议

你好,是我琉忆,欢迎您来到PHP面试专栏。
本周(2019.2-25至3-1)的一三五更新的文章以下:html

周一:PHP面试常考之会话控制
周三:PHP面试常考之网络协议
周五:PHP面试常考题之会话控制和网络协议

送2本书:《PHP程序员面试笔试真题解析》程序员

本身整理了一篇面试最爱问的一道题“ 从网址输入到看到内容背后的流程是什么样的?”的文章,关注公众号:“ 琉忆编程库”,回复:“ http”,我发给你。

如下正文的内容来自《PHP程序员面试笔试宝典》书籍,若是转载请保留出处:面试

1、协议和TCP/IP

在20世纪80年代,计算机网络诞生,它可以将一台台独立的计算机互相链接,使得位于不一样地理位置的计算机之间能够进行通讯,实现信息传递和资源共享,造成一组规模大、功能强的计算机系统。不过,计算机要想在网络中正常通讯,必须遵照相关网络协议的规则,经常使用的网络协议有TCP、UDP、IP和HTTP等。编程

协议

协议可简单理解为计算机之间的一种约定,比如人与人之间对话所使用的语言。在国内,不一样地区的人讲的方言都不一样,若是要沟通,就要约定一种你们都会的语言,例如全国通用的普通话,普通话就至关于协议,沟通至关于通讯,说话内容至关于数据信息。协议须要具有通用的特征,但在早期,每家计算机厂商都根据本身的标准来生产网络产品,这使得不一样厂商制造的计算机之间难以通讯,严重影响了用户的平常使用。为了应对这些问题,ISO(国际标准化组织)制定了一套国际标准OSI(开放式系统互联通讯参考模型),将通讯系统标准化。所谓标准化是指创建技术标准,企业按照这个标准来制造产品,这大大提高了产品的兼容性、互操做性以及易用性。segmentfault

OSI参考模型将复杂的协议分红了7层(见下表),每一层各司其职,而且能独立使用,这至关于软件中的模块化开发,有较强的扩展性和灵活性。分层是一种管理哲学,将同一类功能的网络协议分到一层中,使协议变得灵活可控。性能优化

在7层OSI模型中,发送方从第7层的应用层到第1层的物理层,由上至下按顺序传输数据,而接收方则从第1层到第7层,由下至上接收数据,如右图所示。服务器

clipboard.png

TCP/IP

TCP/IP是为互联网服务的协议族,它是网络通讯协议的统称,由IP、TCP、HTTP和FTP等协议组成。TCP/IP将通讯过程抽象为4层,被视为简化的OSI参考模型(如右图所示,左边是OSI参考模型,右边是TCP/IP的模型),但负责维护这套协议族的不是ISO而是IETF(互联网工程任务组)。TCP/IP在标准化过程当中注重开放性和实用性,须要标准化的协议会被放进RFC(Request For Comment)文档中,RFC文档详细记录了协议的实现、运用和实验等各方面的内容,而且这些文档可在线浏览。网络

clipboard.png

发送的数据会在分层模型内传递,而且每到一层,就会附加该层的包首部,包首部包含了该层协议的相关信息,例如MAC地址、IP地址和端口号。下图描绘了从传输层到互联网层,分别附加了TCP包首部和IP包首部。模块化

clipboard.png

互联网一词如今已经家喻户晓,它是由许多网络互联构成的一个巨型网络。早期的网络仅仅是链接计算机,而现代的互联网链接的倒是全世界的人。互联网已经再也不是单纯的以数据为核心,而是以人为中心,渗透到生活中的方方面面,颠覆了许多传统模式,例如足不出户就能购物、社交或娱乐。  性能


本身整理了一篇面试最爱问的一道题“ 从网址输入到看到内容背后的流程是什么样的?”的文章,关注公众号:“ 琉忆编程库”,回复:“ http”,我发给你。

2、HTTP

HTTP(HyperText Transfer Protocol)即超文本传输协议,是一种获取网络资源(例如图像、HTML文档)的应用层协议,它是互联网数据通讯的基础,由请求和响应构成(如右图所示)。一般,客户端发起HTTP请求(在请求报文中会指定资源的URL),而后用传输层的TCP协议创建链接,最后服务器响应请求,作出应答,回传数据报文。HTTP自问世到如今,经历了几回版本迭代,目前主流的版本是HTTP/1.1,新一代HTTP/2.0是HTTP/1.1的升级版,各方面都超越了前者,但新技术要作到软硬件兼容还须要假以时日。

clipboard.png
HTTP协议有三个特征,分别是持久链接、管道化以及无状态。

(1)持久链接
在HTTP的早期版本中,一次HTTP通讯完成后就会断开链接,下一次再从新链接,如右图所示。在当时请求资源并很少的状况下,并不会形成大问题。但随着HTTP的普及,请求的资源愈来愈庞大,例如一个HTML文档中可能会包含多个CSS文件、JavaScript文件、图像甚至视频,若是还这么操做,会形成巨大的通讯开销。

为了解决上述问题,提出了持久链接,只要通讯两端的任意一端没有明确提出断开,就保持链接状态,以便下一次通讯复用该链接,这避免了重复创建和断开链接所形成的开销,加速了页面呈现,以下图所示。

(2)管道化
管道化是创建在持久链接上的进一步性能优化。过去,请求必须按照先进先出的队列顺序,也就是发送请求后,要等待并接收到响应,才能再继续下一个请求。启用管道化后,就会将队列顺序迁移到服务器,这样就能同时发送多个请求,而后服务器再按顺序一个接一个地响应,以下图所示。 

clipboard.png

(3)状态管理
HTTP是一种无状态协议,请求和响应一一对应,不会出现两个请求复用一个响应的状况(以下图所示)。也就是说,每一个请求都是独立的,即便在同一条链接中,请求之间也没有联系。  

clipboard.png

在有些业务场景中,须要请求有状态,例如后台登陆。成功登陆后就得保存登陆状态,不然每次跳转进入其余页面都会要求从新登陆。为了能管理状态,引入了Cookie技术,Cookie技术能让请求和响应的报文都附加Cookie信息,客户端将Cookie值发送出去,服务器接收并处理这个值,最终就能获得客户端的状态信息。


预告:本周五更新PHP面试常考题之会话控制和网络协议,敬请期待。

以上内容摘自《PHP程序员面试笔试宝典》书籍,该书已在天猫京东当当等电商平台销售。
图片描述

更多PHP相关的面试知识、考题能够关注公众号获取:琉忆编程库
图片描述

对本文有什么问题或建议均可以进行留言,我将不断完善追求极致,感谢大家的支持。

相关文章
相关标签/搜索