| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 计算机网络基础 -> 正文阅读 |
|
[网络协议]计算机网络基础 |
体系结构
OSPF(开放式最短路径优先,Open Shortest Path First) OSPF协议(open short path first)采用链路状态路由算法,他可能是在大型企业使用最广泛的内部网关协议(IGP)。 OSPF协议的简单描述: 1、周期性的收集链路状态,并扩散给AS中的所有路由器; 2、用收到的链路状态建立整个AS的拓扑结构图; 3、利用Dijkstra算法计算到AS表中所有网络的最短路径; 4、利用这些了路径上的下一跳建立路由表。 OSPF协议的详细描述: 发现邻居:OSPF路由器每10s(Hello Inverval)向邻居发送Hello分组。如果40s(Dead Interval,4 times hello interval)都收不到邻居发来的Hello分组,则把到邻居的链路标记为失效。多路访问网络采用多播(224.0.0.5,all OSPF routers)发送Hello分组。 Hello分组:包含优先权、已知的邻居(收到过Hello)、DR和BDR。 完全相邻:在发现邻居之后,OSPF路由器将与邻居交换链路状态数据库中的LSA,请求得到更新的或者没有的LSA。 完全相邻状态(fully adjacency):在与邻居的链路状态数据库变得完全 一样 生成LSA:每30分钟或链路变化时,每个OSPF路由器会生成router LSA, 中转网的DR会生成network LSA。 扩散LSA:产生的LSA立即封装为Update分组,被可靠地扩散出去(需要认证)。若通过收到多个LSA,由发出此121LSA的路由器ID(发通告路由器),链路状态和序列号唯一确定。第二次收到来自相同的发通告路由器、相同LSA类型和相同序号的LSA将丢弃它。 序号:序列号唯一,新产生的LSA的序号自增1,序列号越大表示越新, 防止扩散形成回路。 收集LSA:路由器收集到LSA之后,用新LSA替换链路状态数据库中旧LSA。如果一个LSA在60分钟(max age)没有被更新,它将从链路状态数据库移除。 计算最短路径:当链路状态数据库被改变时,OSPF路由器将利用Dijkstra算法计算到所有网络的最短路径。 建立路由表:利用得到的最短路径产生路由表。 Ping命令原理ping 使用的是ICMP协议,它发送ICMP回送请求消息给目的主机。 IP协议:一种无连接的,不可靠的数据包协议。 ICMP协议:通过IP协议发送,是IP层的附属协议,是介于IP层和TCP层之间的协议,一般认为属于IP层协议。IP协议用它来与其他主机或路由器交换错误报文和其他的一些网络情况。在ICMP包重携带了控制信息和故障恢复信息。 主机可达:源主机发送ICMP回送请求消息给目的主机,目的主机必须 返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答则该 主机可达。 Traceroute:用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。 ?TTL (Time To Live,生存周期):每经过一次路由器TTL值减 1,直到减到 0 时该 IP 包会被丢弃。此时,IP 路由器将会发送一个 ICMP 超时消息给发送端主机,并通知该包已被丢弃。 TCP和UDP区别TCP报文头:TCP报文固定长度20字节+可变长度 源端口、目标端口:两计算机进程间通信,源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个 序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0 开始 确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号 数据偏移:表示TCP报文段的首部长度,共4位,指定TCP报文段长度。指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节 URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效 ACK:表示确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段 PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中 RST:RST=1说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段 SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段 FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段 窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值 校验和:提供额外的可靠性 紧急指针:标记紧急数据在数据字段中的位置 选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节 常见选项: 最大报文段长度:Maxium Segment Size,MSS,通常1460字节, 指明自己期望对方发送TCP报文段时那个数据字段的长度,数据字段的 长度加上TCP首部的长度才等于整个TCP报文段的长度。。 窗口扩大:Window Scal,随着时延和带宽比较大的通信产生(如 卫星通信),需要更大的窗口来满足性能和吞吐率,所以产生了这个窗 口扩大选项。 时间戳: Timestamps,计算RTT(往返时间);防止回绕序号PAWS;区分相同序列号的不同报文。 UDP报文头:UDP首部有8个字节,由4个字段构成,每个字段都是两个字节 源端口:主机的应用程序使用的端口号。 目的端口:目的主机的应用程序使用的端口号。 长度:是指UDP头部和UDP数据的字节长度。因为UDP头 部长度为 8字节,所以该字段的最小值为8。 校验和(检查和):检测UDP数据报在传输中是否有错,有错则丢弃。在计算校验和的时候,需要在UDP数据报之前增加12字节的伪首部,伪首部并不是UDP真正的首部。只是在计算校验和,临时添加在UDP数据报的前面,得到一个临时的UDP数据报。校验和就是按照这个临时的UDP数据报计算的。伪首部既不向下传送也不向上递交,而仅仅是为了计算校验和。这样的校验和,既检查了UDP数据报,又对IP数据报的源IP地址和目的IP地址进行了检验。 TCP如何保证数据的正确性1. 分块:应?数据被分割成TCP认为最适合发送的数据块。 2. 排序:TCP 给发送的每?个包进?编号,接收?对数据包进?排序,把有序数据传送给应?层。 3.?校验和:?TCP 将保持它?部和数据的检验和。这是?个端到端的检验和,?的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP ?将丢弃这个报?段和不确认收到此报?段。 4. 去重:TCP 的接收端会丢弃重复的数据。 5. 流量控制:?TCP 连接的每??都有固定??的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收?来不及处理发送?的数据,能提示发送?降低发送的速率,防?包丢失。TCP使?的流量控制协议是可变??的滑动窗?协议。?(TCP 利?滑动窗?实现流量控制) 6. 拥塞控制:?当?络拥塞时,减少数据的发送。 7. ARQ协议(Automatic Repeat-reQuest):自动重传请求,停止等待ARQ协议和连续ARQ协议,?也是为了实现可靠传输的,它的基本原理就是每发完?个分组就停?发送,等待对?确认,在收到确认后再发下?个分组。 停止等待ARQ:每发完一个分组就停止发送,等待对方确认(回复ACK)。 如果超时,未收到 ACK 确认,则重新发送,直到收到确认后再发下一个分 组。若接收方收到重复分组,就丢弃该分组,但同时还要发送确认。 连续ARQ协议:发送方维持一个发送窗口,凡位于发送窗口内的分组可 以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按 序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正 确收到了。 8. 超时重传:当TCP发出?个段后,它启动?个定时器,等待?的端确认收到这个报?段。如果超时无确认,将重发这个报?段。 TCP拥塞控制?当输入的负载到达一定程度吞吐量不会增加,即吞吐量维持在其所能控制的最大值,转发节点的缓存不够大这造成分组的丢失是拥塞的征兆。 TCP的四种拥塞控制算法 1.慢开始:拥塞窗口 1->2->4 呈指数增加,当拥塞窗口导到门限后,采用拥塞避免算法 假设当前发送方拥塞窗口cwnd的值为1,而发送窗口swnd等于拥塞窗口cwnd,因此发送方当前只能发送一个数据报文段(拥塞窗口cwnd的值是几,就能发送几个数据报文段),接收方收到该数据报文段后,给发送方回复一个确认报文段,发送方收到该确认报文后,将拥塞窗口的值变为2 2.拥塞避免:每个传输轮次,拥塞窗口cwnd只能线性加一。同理,16+1……直至到达24,假设24个报文段在传输过程中丢失4个,接收方只收到20个报文段,给发送方依次回复20个确认报文段,一段时间后,丢失的4个报文段的重传计时器超时了,发送发判断可能出现拥塞,更改cwnd和ssthresh.并重新开始慢开始算法。 3.快重传:当收到三个重复的 ACK?之后,表明丢包,此时立即重传该包,而不等到定时器超时,同时取消慢启动,不再指数增加,而是一直线性增加 发送方发送1号数据报文段,接收方收到1号报文段后给发送方发回对1号报文段的确认,在1号报文段到达发送方之前,发送方还可以将发送窗口内的2号数据报文段发送出去,接收方收到2号报文段后给发送方发回对2号报文段的确认,在2号报文段到达发送方之前,发送方还可以将发送窗口内的3号数据报文段发送出去。 4.快恢复 TCP三次握手和四次挥手三次握手 第一次握手:建立连接时,客户端发送SYN包(SYN=1,seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;若客户端第一个SYN包丢失,未收到Server的ACK,Client会持续重传SYN包,尝试75秒。 SYN:同步序列编号(Synchronize Sequence Numbers)。 第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包(SYN=1,ACK=1),此时服务器进入SYN_RECV状态;若发送后未收到Client的ACK,则Server会持续发送SYN+ACK包。 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=1,seq=x+1,ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。如果ACK丢失,服务器端TCP的连接状态仍为SYN_RECV,并等待3秒、6秒、12秒会重新发送SYN+ACK包,以便Client能够重新发送ACK,Server重发SYN+ACK默认为5次。 四次挥手 终止等待1(FIN-WAIT-1):客户端进程发出FIN(连接释放)报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已发送数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。 关闭等待(CLOSE-WAIT):服务器收到FIN报文,发出ACK确认报文(ACK=1,ack=u+1),并且带上服务器序列号seq=v(等于前面已发送数据的最后一个字节的序号加1),此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向释放,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。 终止等待2(FIN-WAIT-2):客户端收到服务器的ACK确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。 最后确认(LAST-ACK):服务器将最后的数据发送完毕后,就向客户端发送FIN连接释放报文(FIN=1,ack=u+1)由于在半关闭状态,服务器很可能又发送了一些数据,此时的序列号为seq=w(等于前面已发送数据的最后一个字节的序号加1),此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。 时间等待(TIME-WAIT):客户端收到服务器的连接释放报文后,必须发出ACK确认(ACK=1,ack=w+1,seq=u+1)此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2??MSL(最长报文段寿命)的时间,用来重发因网络情况可能丢失的ACK报文(服务端如果没有收到ACK,将不断重复发送FIN报文),当客户端撤销相应的TCB后,才进入CLOSED状态。 TCB(传输控制块):包含了数据发送双方对应的socket信息以及拥有装载数据的缓冲区 关闭(CLOSED):服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。 HTTPHTTP:HTTP 协议是以 ASCII 码传输,基于请求与响应模式的、无状态的,建立在 TCP/IP 协议之上的应用层协议,80端口
HTTP/0.9:报文由请求和响应组成,但请求中只包含方法(GET)和请求的URL,响应中只包含实体(HTML格式字符串),没有版本信息、没有状态码或原因短语,也没有首部。 HTTP/1.0:传输内容格式不限制(文字、图像、视频、二进制文件),通信包括头部(HTTP header),只有短连接,支持cache,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令。通过Connection: keep-alive字段要求服务器不要关闭TCP连接,以便其他请求复用。存在连接无法复用,和head of line blocking(线头/队头阻塞)两个问题。客户端依据域名来向服务器建立连接,一般PC端浏览器会针对单个域名的server同时建立6~8个连接,手机端的连接数则一般控制在4~6个,不支持Host请求头字段,WEB浏览器无法使用主机头名来明确表示要访问服务器上的哪个WEB站点,这样就无法使用WEB服务器在同一个IP地址和端口号上配置多个虚拟WEB站点。HTTP/1.0不支持文件断点续传。 连接无法复用:导致每次请求都经历三次握手和慢启动。三次握手在高 延迟的场景下影响较明显,慢启动则对文件类大请求影响较大 head of line blocking:导致带宽无法被充分利用,以及后续健康请求被阻塞,损耗受网络环境影响,出现随机且难以监控。 HEAD:与GET类似,但服务器在响应中只返回首部。不会返回实体的 主体部分。客户端可检查资源首部:在不获取资源的情况下了解资源的情况 (判断类型);通过查看响应的状态码,看看某个对象是否存在;通过首部 内容测试资源是否被修改了。 PUT:与GET相反,向服务器写入文档。语义是让服务器用请求的主体 部分来创建一个由所请求的URL命名的新文档,或者这个URL已经存在的 话,就用这个主体替代它。 POST:起初是用来向服务器输入数据。通常用来支持HTML的表单。 TRACE:客户端发起一个请求时,这个请求可能会穿过防火墙、代 理、网关等一些应用程序,中间节点可能会修改原始HTTP的URL,TRACE 方法允许客户端在最终将请求发送给服务器,看看它变成了什么样子。在 到达最后的服务器后,服务端会响应报文,同时会携带原始请求报文。主要 用于诊断,TRACE请求中不能带有实体的主体部分。 OPTIONS:请求服务器告知其支持的各种功能。 DELETE:请服务器删除请求URL所指定的资源,但服务器并不 能 保证删除操作一定会被执行。 HTTP/1.1:在继承了HTTP 1.0优点的基础上,也克服了HTTP 1.0的性能问题。HTTP 1.1通过增加更多的请求头和响应头来改进和扩充HTTP 1.0的功能。提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。 持久连接:HTTP/1.1的默认模式使用带流水线的持久连接(Connection: Keep-Alive),客户端和服 务器发现对方一段时间没有活动,就可以主动关 闭连接。不过,规范的做法 是,客户端在最后一个请求时,发送Connection: close关闭服务器TCP连接。每个单独的网页文件的请求和应答需要使 用 独立的连接。 管道机制(pipelining):即在同一个TCP连接里面,客户端可以同时发送多个请求。HTTP 1.1允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果。浏览器客户端在同一时间,针对同一域名下的请求做一定数量限制,超过限制数目的请求会被阻塞。 connection头:request和reponse头中都可能出现一个connection的头,此header的含义是当client和server通信时对于长链接如何进行处理。如果client使用http1.1协议,但又不希望使用长连接,则需要在header中指明connection的值为close;如果server方也不想支持长连接,则在response中也需要明确说明connection的值为close。不论request还是response的header中包含了值为close的connection,都表明当前正在使用的tcp连接在当请求处理完毕后会被断掉。 Host请求头字段:WEB浏览器可以使用主机头名来明确表示要访问服 务器上的哪个WEB站点,实现在一台WEB服务器上可以在同一个IP地址 和端口号上使用不同的主机名来创建多个虚拟WEB站点 (也就是使用 nginx在收到相同的ip和端口号后针对用户请求的域名再次进行转发)。 断点续传:<code>RANGE:bytes=XXXX</code>表示要求服务器从文件 XXXX字节处开始传送。 HTTP2.0: 多路复用/多工 (Multiplexing):多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息,可以很容易的去实现多流并行而不用依赖建立多个 TCP 连接,HTTP/2 把 HTTP 协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息。并行地在同一个 TCP 连接上双向交换消息。在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了"队头堵塞"。 二进制分帧:HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧"(frame):头信息帧和数据帧。其中 HTTP1.x 的首部信息会被封装到?HEADER frame,而相应的 Request Body 则封装到 DATA frame 里面。客户端和服务器可以把 HTTP 消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来。在应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。在不改动 HTTP/1.x 的语义、方法、状态码、URI 以及首部字段的情况下, 解决了HTTP1.1 的性能限制,改进传输性能,实现低延迟和高吞吐量,TCP连接数的减少使得网络拥塞状况得以改善,同时慢启动时间的减少,使拥塞和丢包恢复速度更快。 ???????? HTTP面试题打开一个网页,整个过程会使用哪些协议? DNS解析?》TCP连接?》发送HTTP请求?》服务器处理请求并返回HTTP报文?》浏览器解析渲染页面?》连接结束 影响HTTP 网络请求的因素带宽:如果说我们还停留在拨号上网的阶段,带宽可能会成为一个比较严重影响请求的问题,但是现在网络基础建设已经使得带宽得到极大的提升,我们不再会担心由带宽而影响网速,那么就只剩下延迟了。 延迟:网络连接情况和浏览器阻塞(HOL blocking)浏览器会因为一些原因阻塞请求。浏览器对于同一个域名,同时只能保持有限个连接,根据浏览器内核不同可能会有所差异,超过浏览器最大连接数限制,后续请求就会被阻塞。 DNS 查询(DNS Lookup):浏览器需要知道目标服务器的 IP 才能建立连接,可以利用DNS缓存结果来达到减少连接时间。 DNS:将域名解析为 IP 的系统 建立连接(Initial connection):HTTP 是基于 TCP 协议的,浏览器最快在第三次握手时才能捎带 HTTP 请求报文,达到真正的建立连接,但是这些连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。 HTTP1.0和HTTP1.1的一些区别缓存处理:在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准;HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。 带宽优化和网络连接使用:HTTP1.0中,存在一些浪费带宽的现象,例如客户端需要某个对象的一部分,但服务器却传输整个对象,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。 错误通知管理:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。 Host头处理:在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报(400 Bad Request)。 长连接:HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。 HTTP2.0与HTTP1.X的区别二进制分帧:新的二进制格式,HTTP1.x解析基于文本,二进制实现方便且健壮 多路复用:连接共享,既每个request都是用作连接共享机制的,一个request对应一个id既一个连接上有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的id将request再归属到各自不同的服务端请求里面 Header压缩:2.0使用encoder来减少传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减少了需要传输的大小 服务端推送?具有server push功能 HTTP如何保存用户状态 HTTP 是一种不保存状态,即无状态(stateless)协议。通过Session 机制对请求和响应之间的通信状态进行保存。Session 的主要作用就是通过服务端记录用户的状态。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户(服务器会在一定时间内保存这个 Session,超时销毁Session)。服务端在内存和数据库中存储?Session(比如是使用内存数据库redis保存)。通过在 Cookie 中附加一个 Session ID 来方式来实现Session 跟踪。 Cookie与Session Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者应用场景不同。 Cookie:一般用来保存用户信息,数据保存在客户端(浏览器端)。①已经登录的用户信息;②存放了 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑,重新登录一般要将 Token 重写);③登录网站后访问网站其他页面不需要重新登录。 Session :通过服务端记录用户的状态,数据保存在服务器端,安全性更高。服务端给特定的用户创建特定的 Session 标识并且跟踪用户。 URI和URL的区别 URI(Uniform Resource Identifier) :是统一资源标志符,可以唯一标识一个资源。 URL(Uniform Resource Location) :是统一资源定位符,可以提供该资源的路径。URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。 HTTP 和 HTTPS 的区别 端口:HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。 安全性和资源消耗:?HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。HTTPS可以有效的防止运营商劫持。HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等; 非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。 SPDY对HTTP1.x的优化2012年google提出了SPDY的方案,优化了HTTP1.X的请求延迟,解决了HTTP1.X的安全性,具体如下: 降低延迟:针对HTTP高延迟的问题,SPDY采取了多路复用(multiplexing)。多路复用通过多个请求stream共享一个tcp连接的方式,解决了HOL blocking的问题,降低了延迟同时提高了带宽的利用率。 请求优先级(request prioritization):多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。 header压缩:前面提到HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。 基于HTTPS的加密协议传输:大大提高了传输数据的可靠性。 服务端推送(server push):采用了SPDY的网页,例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了。SPDY构成图: HTTP2.0可以说是SPDY的升级版(其实原本也是基于SPDY设计的),但是,HTTP2.0 跟 SPDY 仍有不同的地方,如下: HTTP2.0和SPDY的区别HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE HTTPSHTTPS是身披SSL外壳的HTTP。是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。 TLS:是传输层加密协议,前身是SSL协议,由网景公司1995年发布, 有时候两者不区分。 HTTPS特点内容加密:采用混合加密技术,中间者无法直接查看明文内容 验证身份:通过证书认证客户端访问的是自己的服务器 保护数据完整性:防止传输的内容被中间人冒充或者篡改 HTTPS建立连接过程单向认证 客户端SSL请求:客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息; 服务端SSL响应:服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书; 客户端验证服务器合法性:客户端使用服务端返回的信息验证服务器的合法性,包括:证书是否过期;发行服务器证书的CA是否可靠;(通过查询浏览器或本机内的CA证书);返回的公钥是否能正确解开返回证书中的数字签名(通过使用本机或浏览器内置的CA公钥进行解密);服务器证书上的域名是否和服务器的实际域名相匹配;验证通过后,将继续进行通信,否则,终止通信; 客户端提供加密方案:客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择; 服务器选择加密方案:服务器端在客户端提供的加密方案中选择加密程度最高的加密方式,将选择好的加密方案通过明文方式返回给客户端; 客户端加密公钥:客户端接收到服务端返回的加密方式后,使用该加密方式生成产生随机码,用作通信过程中对称加密的密钥,使用服务端返回的公钥进行加密,将加密后的随机码发送至服务器; 获取对称加密密钥:服务器收到客户端返回的加密信息后,使用自己的私钥进行解密,获取对称加密密钥; 对称加密通讯:在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全; 双向认证 客户端SSL请求:客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息; 服务端SSL响应:服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书; 客户端验证服务器合法性:客户端使用服务端返回的信息验证服务器的合法性,包括:证书是否过期;发行服务器证书的CA是否可靠;(通过查询浏览器或本机内的CA证书);返回的公钥是否能正确解开返回证书中的数字签名(通过使用本机或浏览器内置的CA公钥进行解密);服务器证书上的域名是否和服务器的实际域名相匹配;验证通过后,将继续进行通信,否则,终止通信; 客户端发送证书:服务端要求客户端发送客户端的证书即客户端证书公钥,客户端会将自己的证书发送至服务端; 服务器验证客户端证书:验证客户端的证书,通过验证后获得客户端的公钥; 客户端发送加密方案:客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择 服务器选择加密方案:服务器端在客户端提供的加密方案中选择加密程度最高的加密方式; 服务器加密并发送加密方案:将加密方案通过使用之前获取到的公钥进行加密,返回给客户端 客户端解密报文获取加密方式和密钥:客户端收到服务端返回的加密方案密文后,使用自己的私钥进行解密,获取具体加密方式,而后,产生该加密方式的随机码,用作加密过程中的密钥,使用之前从服务端证书中获取到的公钥进行加密后,发送给服务端; 服务端解密消息获取密钥:服务端收到客户端发送的消息后,使用自己的私钥进行解密,获取对称加密的密钥,在接下来的会话中,服务器和客户端将会使用该密钥进行对称加密,保证通信过程中信息的安全; HTTPS加密算法HTTPS一般使用的加密与HASH算法如下 非对称加密算法:RSA,DSA/DSS 对称加密算法:AES,RC4,3DES、DES(56位) 数字签名算法(HASH算法):MD5,SHA1,SHA256 HTTPS关键指标加密:HTTPS通过对数据加密来使其免受窃听者对数据的监听,没有人能够监听用户和网站之间的信息交换,或者跟踪用户的活动。 数据一致性:数据在传输的过程中不会被窃听者所修改,用户发送的数据会完整的传输到服务端,保证用户发的是什么,服务器接受的就是什么 身份认证:指确认对方的真实身份,可以防止中间人攻击并建立用户信任。 HTTPS的缺点页面加载时间长:HTTPS协议多次握手,导致页面的加载时间延长近50%; 额外缓存开销和功耗:HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗; 证书费用高:申请SSL证书需要钱,功能越强大的证书费用越高。 服务器资源消耗大:SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。 IP地址分类A类:1.0.0.1~126.255.255.254 B类:128.1.0.1~191.255.255.254 C类:192.0.1.1~223.255.255.254 D类:224.0.0.1~239.255.255.254 E类:保留 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/29 9:56:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |