协议
协议可大略理解为打算机之间的一种约定,好比人与人之间对话所利用的措辞。在海内,不同地区的人讲的方言都不同,如果要沟通,就要约定一种大家都会的措辞,例如全国通用的普通话,普通话就相称于协议,沟通相称于通信,说话内容相称于数据信息。协议须要具备通用的特色,但在早期,每家打算机厂商都根据自己的标准光降盆网络产品,这使得不同厂商制造的打算机之间难以通信,严重影响了用户的日常利用。为了应对这些问题,ISO(国际标准化组织)制订了一套国际标准OSI(开放式系统互联通信参考模型),将通信系统标准化。所谓标准化是指建立技能标准,企业按照这个标准来制造产品,这大大提升了产品的兼容性、互操作性以及易用性。
OSI参考模型将繁芜的协议分成了7层(见下表),每一层各司其职,并且能独立利用,这相称于软件中的模块化开拓,有较强的扩展性和灵巧性。分层是一种管理哲学,将同一类功能的网络协议分到一层中,使协议变得灵巧可控。

在7层OSI模型中,发送方从第7层的运用层到第1层的物理层,由上至下按顺序传输数据,而吸收方则从第1层到第7层,由下至上吸收数据,如右图所示
TCP/IP
TCP/IP是为互联网做事的协议族,它是网络通信协议的统称,由IP、TCP、HTTP和FTP等协议组成。TCP/IP将通信过程抽象为4层,被视为简化的OSI参考模型(如右图所示,左边是OSI参考模型,右边是TCP/IP的模型),但卖力掩护这套协议族的不是ISO而是IETF(互联网工程任务组)。TCP/IP在标准化过程中看重开放性和实用性,须要标准化的协议会被放进RFC(Request For Comment)文档中,RFC文档详细记录了协议的实现、利用和实验等各方面的内容,并且这些文档可在线浏览。
发送的数据会在分层模型内通报,并且每到一层,就会附加该层的包首部,包首部包含了该层协议的干系信息,例如MAC地址、IP地址和端口号。下图描述了从传输层到互联网层,分别附加了TCP包首部和IP包首部。
互联网一词现在已经家喻户晓,它是由许多网络互联构成的一个巨型网络。早期的网络仅仅是连接打算机,而当代的互联网连接的却是全天下的人。互联网已经不再是纯挚的以数据为核心,而因此人为中央,渗透到生活中的方方面面,颠覆了许多传统模式,例如足不出户就能购物、社交或娱乐。
自己整理了一篇口试最爱问的一道题“从网址输入到看到内容背后的流程是什么样的?”的文章,关注"大众年夜众号:“琉忆编程库”,回答:“http”,我发给你。
二、HTTPHTTP(HyperText Transfer Protocol)即超文本传输协议,是一种获取网络资源(例如图像、HTML文档)的运用层协议,它是互联网数据通信的根本,由要乞降相应构成(如右图所示)。常日,客户端发起HTTP要求(在要求报文中会指定资源的URL),然后用传输层的TCP协议建立连接,末了做事器相应要求,做出应答,回传数据报文。HTTP自问世到现在,经历了几次版本迭代,目前主流的版本是HTTP/1.1,新一代HTTP/2.0是HTTP/1.1的升级版,各方面都超越了前者,但新技能要做到软硬件兼容还须要假以时日。
HTTP协议有三个特色,分别是持久连接、管道化以及无状态。
(1)持久连接
在HTTP的早期版本中,一次HTTP通信完成后就会断开连接,下一次再重新连接,如右图所示。在当时要求资源并不多的情形下,并不会造成大问题。但随着HTTP的遍及,要求的资源越来越弘大,例如一个HTML文档中可能会包含多个CSS文件、JavaScript文件、图像乃至视频,如果还这么操作,会造成巨大的通信开销。
为理解决上述问题,提出了持久连接,只要通信两端的任意一端没有明确提出断开,就保持连接状态,以便下一次通信复用该连接,这避免了重复建立和断开连接所造成的开销,加速了页面呈现,如下图所示。
(2)管道化
管道化是建立在持久连接上的进一步性能优化。过去,要求必须按照前辈先出的行列步队顺序,也便是发送要求后,要等待并吸收到相应,才能再连续下一个要求。启用管道化后,就会将行列步队顺序迁移到做事器,这样就能同时发送多个要求,然后做事器再按顺序一个接一个地相应,如下图所示。
(3)状态管理
HTTP是一种无状态协议,要乞降相应逐一对应,不会涌现两个要求复用一个相应的情形(如下图所示)。也便是说,每个要求都是独立的,纵然在同一条连接中,要求之间也没有联系。
在有些业务场景中,须要要求有状态,例如后台登录。成功登录后就得保存登录状态,否则每次跳转进入其他页面都会哀求重新登录。为了能管理状态,引入了Cookie技能,Cookie技能能让要乞降相应的报文都附加Cookie信息,客户端将Cookie值发送出去,做事器吸收并处理这个值,终极就能得到客户真个状态信息。
转载地址:https://mp.weixin.qq.com/s/W_A7IFs3l5QMFhX_sWdFhQ
原创: 琉忆 琉忆编程库