计算机网络篇

1,简述静态路由和动态路由
静态路由:由系统管理员设计和创建的路由表规定的路由,适用于网关数量有限且网络拓扑结构不易发生变化的场合,缺点是不能动态地适应网络的变化,当网络结构发生变化的时候需要管理员来修改路由表
动态路由:由路由协议动态创建的,路由协议通过交换各自拥有的路由信息实时更新路由表的内容,动态路由可以自动学习网络的拓扑结构并更新路由表,缺点是路由广播传递信息需要占据大量的网络带宽 

2,路由选择算法的必要步骤
1)向其他路由器传递路由信息
2)接受其他路由器传递过来的信息
3)根据收到的路由信息计算出到达每个目的网络的最优路径,并由此生成路由选择表
4)根据网络拓扑的变化作出反应,生成新的路由选择表,并将拓扑变化以路由信息的形式传递给其他路由器
其中有两个主要算法:路由协议是路由器之间实现信息共享的一种机制,分别是距离矢量法RIP、基于链路状态的路由协议OSPF
①距离矢量法RIP:路由器收集所有可以到达目的地的路径,并且保存到达每个目的地的最少站点数的路径信息,除最短路径外其他路径均丢弃;同时路由器也将得到的路由信息通过RIP协议传递给其他路由器,这样正确的信息逐渐扩散到了全网;RIP配置简单可靠、但只适用于小型的同构网络,它允许的最大站点数为15,任何超过15个站点的目的地均被标记为不可达;而且RIP每隔30s一次的路由信息广播也是造成网络风暴(大量广播信息充斥网络无法处理,占据大量网络带宽导致正常业务不能运行甚至瘫痪的状态)的主要原因
②基于链路状态的路由协议OSPF:OSPF将一个自治域划分为区,相应地有两种路由选择方式,当源和目的地在同一个区时采用区内路由选择,源和目的地不在一个区时采用区间路由选择增加了网络的稳定性并减少了开销,同时一个区内网络发生问题不会影响其他区的正常工作

3,简述域名解析过程,说一下本机如何干预域名解析

域名解析过程:在浏览器输入一个域名时,会经历如下过程;本地host文件是否有这个网址的映射关系(有直接调用这个ip地址映射完成域名解析,没有的话继续下一步)---本地DNS解析器缓存中是否有这个网址的映射关系---本地DNS服务器(即TCP/IP协议参数中设置的首选DNS服务器),如果查询的域名包含在本地配置区域的资源中则返回解析结果给客户机、此解析具有权威性---若不在本地DNS服务器区域的资源中但该服务器缓存了此网址映射关系,则调用这个IP地址映射完成域名解析、这个方法不具有权威性---都不行的话根据本地DNS服务器的设置进行查询,如果没有设置转发器的话,本地DNS就把请求发送至13台根DNS,根DNS收到请求后会返回一个负责该顶级域名服务器的IP,本地DNS收到IP信息后,将会联系负责该顶级域的服务器,这台负责顶级域的服务器收到请求后如果自己无法处理就找下一个负责该顶级域的DNS服务器并将其发送到本地DNS服务器;如果设置了转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。不管是本地DNS服务器用的是不是转发,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

如何通过本机来干预域名解析:通过修改本地的host来干预域名解析过程,例如在etc/host中加入192.168.1.188 www.baidu.com,保存之后ping一下baidu就会连接到192.168.1.188了

4,简述网关的作用、同一网段中的主机如何通信?

网关的作用:网关即网络中的关卡,互联网是由各种各样的网络连接起来的,网关的作用就是使不同的网络可以实现信息交流

同一网段中主机如何通信:如果通信双方位于同一网段中,那么它们之间的信息交换无需经过路由器或三层交换机即可自主完成;过程如下

首先发送主机查找自己的ARP表(ARP表中记录的是最近使用过的IP地址和MAC地址),如果找到了目的主机的话则可以直接实现通信,如果没有找到的话发送主机会以目的主机的IP地址为请求,广播ARP请求以期获得目的主机的MAC地址,并通过洪泛的方式向全网段主机转发但是只有目的主机会回应它,并将自己的MAC地址和IP地址装入ARP应答后回复给发送主机,发送主机收到回复之后会从中提取出目的主机的MAC地址,并在其ARP表中建立目的主机的对应表项(IP地址到MAC地址的映射),之后便可以向目的主机发送数据

5,简述CSRF攻击的思想及解决办法

CSRF即跨站请求伪造、即黑客通过伪造用户身份去做一些操作来达到自己的目的

CSRF攻击的思想:登录受信任的网站并在不登出此网站的情况下访问危险网站(登录受信任网站时已经在本地生成了cookie信息),这样黑客就获取了用户的cookie信息可以来达到不可告人的秘密了

解决办法CSRF攻击是利用了服务器不能识别用户身份的特点来进行攻击的一种手段,所以我们可以从服务器入手、增强服务器的识别能力进而解决问题,常见有两种方式

a、请求头中的Referer验证(不推荐)

HTTP头部有一个Referer字段、记录的是该请求的来源地址,既然CSRF攻击的思想是假装请求是从服务器发来的,那么我们就禁止跨域访问,在服务器端增加验证,过滤掉那些不是从本地服务器发送来的请求;不推荐使用这种方法,比如如果是从搜索引擎所搜结果调整过来,请求也会被认为是跨域请求;

b、请求令牌验证(token认证)

应用比较广泛;当用户通过正常渠道访问服务器时,服务器会返回一个随机的字符串保存在session中并将这个字符串作为令牌token返回给客户端,以隐藏的形式保存在客户端中,客户端每次请求都带着这个token,服务器根据token来判断请求是否合法;

6,MAC地址和IP地址有什么用?

MAC地址:即物理地址,用来唯一地标识主机、识别设备在网络中的位置;

IP地址:是由IP协议提供的一种统一的地址格式,为互联网上的每一个网络和每一台主机分配一个IP地址来屏蔽物理地址的差异;

数据包在节点上的移动是由ARP地址解析协议将IP地址转换为MAC地址来完成的

⭐7,简述TCP三次握手和四次挥手的过程

TCP三次握手

①第一次握手:建立连接时,客户端向服务器发送SYN请求包,请求序列号seq=x,请求建立连接并等待服务端的确认,此时客户端进入SYN_SENT(请求已发送)状态;

②第二次握手:服务器收到客户端的SYN请求包,向客户端发送一个同步确认报文ACK,确认号ack=x+1,同时发送一个请求包SYN,请求序列号seq=y给客户端,此时服务器进入SYN_RECV(请求已接收)状态;

③第三次握手:客户端收到ACK包和SYN包,向服务器发送一个ACK包表示自己已经收到,确认号ack=y+1;

三次握手结束,客户端和服务器成功建立连接,开始传输数据

TCP四次挥手

①第一次挥手:客户端数据传输完毕,发送一个FIN包给服务器端,此时客户端不再发送数据但是能够接收数据,客户端进入FIN_WAIT状态;

②第二次挥手:服务器端收到FIN包之后,向客户端发送一个ACK包表示自己已经收到,此时不会断开连接而是等待数据传输完毕,服务器进入CLOSE_WAIT状态;

③第三次挥手:服务器等待数据传输完毕后,向客户端发送一个FIN包表示可以断开连接,服务器进入FIN_WAIT状态;

④第四次挥手:客户端收到服务器的FIN包之后,向服务器发送一个ACK包表示自己已经收到,同时客户端进入TIME_WAIT状态,TIME_WAIT=2*MSL,这段时间中确保服务器不再有其他数据传输过来就断开连接;

四次挥手结束,客户端和服务器成功断开连接

引申

①四次挥手时为什么要有TIME_WAIT状态呢?

MSL即最长报文段寿命,它是任何报文在网络中的最长时间,超过这个时间报文将被丢弃;

TIME_WAIT=2*MSL,当TCP主动执行一个关闭,并发回最后一个ACK信息,该连接必须等待TIME_WAIT时间,这样可以让TCP再次发送最后的ACK以防发送方的ACK丢失(接收方超时重传FIN包);假如客户端发送ACK之后就直接关闭,如果发送端的ACK信息丢失、服务器无法接收到的话服务器就没发正常的关闭连接;

所以TIME_WAIT状态就是为了保证连接的正常关闭的

②为什么TCP需要三次握手,两次行不行?

为了实现可靠数据传输,TCP 协议的通信双方,都必须维护一个序列号,以标识发送出去的数据包中哪些是已经被对方收到的;三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤。如果只有两次的话,只有客户端的请求序列号能够被确认

③三次握手,若对方没有收到握手信息会怎么样?

第一次握手、第二次握手:对方没有收到的话,请求方无法得到服务方的ACK确认信息,超时后重传;

第三次握手:对方没有收到的话, server端会根据TCP的超时重传机制,等待3s、6s、12s后重新发送ACK+SYN包,以便请求方发送ACK包;server端重发ACK+SYN包的次数默认为5(可以修改),如果重发指定次数之后还是没收到请求方的ACK应答,那么一段时间后,server会自动关闭这个连接

⭐8,简述TCP和UDP的区别

TCP和UDP都是传输层的协议,TCP是传输控制协议,UDP是用户数据报协议;两者区别如下:

①TCP面向连接,在传输数据之前客户端和服务器必须通过三次握手建立连接、数据传输完毕也需要通过四次挥手断开连接;UDP是无连接的;

②TCP可靠,能保证数据的按需到达;UDP不可靠,它不能保证数据的按序到达、甚至不能保证数据的全部到达,它只是尽最大可能的交付;

③TCP需要的资源更多,头部需要20个字节(不含可选项);UDP需要的资源少,头部只需要8个字节;

④TCP有流量控制和拥塞控制;UDP没有;

⑤TCP仅支持一对一连接;UDP支持一对一、一对多、对多对的通信;

⑥TCP提供面向字节流的服务、UDP面向报文的服务;

⑦TCP慢,UDP快;

⑧TCP适用于对可靠性要求高、不过对时间要求不高的场合;UDP适合与对时间要求高但对可靠性要求不高的场合(比如游戏);

⑨基于TCP的协议:FTP、Telnet、SMTP;基于UDP的协议:DNS、SNMP(简单网络管理协议)

9,介绍一下TCP和UDP的头部结构

原文链接:TCP协议和UDP协议头部结构_Everglow—的博客-优快云博客_tcp和udp头

①TCP头部有20个字节(不含可选项的话)

 源端口号、目的端口号:发送端和接收端的窗口号

序列号:本报文段的数据第一个字节的序号

确认号:期望收到的对方下一个报文段的第一个数据字节的序号

首部长度:TCP报文段的数据起始处距离TCP报文段的起始处有多少字节

保留:保留为今后使用,目前置为0

紧急URG:此位置1,表明紧急指针字段有效,告诉系统此报文段有紧急数据应尽快传送

确认ACK:=1时确认号字段有效,在连接建立后所有传达的报文段都要把此位置1

推送PSH:当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP 就可以使用推送(push)操作,这时,发送方TCP 把 PSH 置 1,并立即创建一个报文段发送出去,接收方收到 PSH = 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满后再向上交付

复位RST:用于复位相应的TCP连接

同步SYN:仅在三次握手建立连接时有效,SYN=1,ACK=0时,表明这是一个连接请求报文段,若对方同意建立连接,则应在相应的报文段中使用SYN=1和ACK=1

终止FIN:用来释放连接,当FIN=1时,表明请求释放连接

窗口:即滑动窗口、指接收方最大的接收窗口

校验和:校验和字段检验的范围包括首部和数据两部分,在计算校验和时需要加上12字节的伪头部

紧急指针:仅在URG=1时有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据),即指出了紧急数据的末尾在报文中的位置,注意:即使滑动窗口为零时也可发送紧急数据

选项:长度可变,最多40字节

②UDP头部有8个字节

源端口号、目的端口号:发送端和接收端的端口号

长度:UDP用户数据报的长度、最小值是8字节(只有首部)

校验和:检测UDP用户数据报在传输中是否出错,出错的话就丢弃 

10,简述TCP慢启动(用于拥塞控制)

TCP慢启动:是TCP的一种拥塞控制协议,慢启动也叫指数增长期,是指每次TCP接收窗口收到确认时都会增长,增长的大小就是已确认段的数目,这种情况一直维持到发生网络拥塞或者到达预先设置的窗口;如果发生丢失事件TCP就认为发生了网络拥塞,此时进入线性增长阶段;如果上一步进入线性增长阶段是因为到达了预先设置的阈值,那么接收窗口线性增长到发生网络拥塞时就立即把拥塞窗口置为1,进行新一轮的慢启动,同时新一轮的指数增长期初始阈值变为原来(发生网络拥塞时的值)的一半。例:

 11,TCP如何保证数据有序

主机每次发送数据时,TCP就给每个数据包分配一个序列号并且发送方在一个特定的时间内等待接收方对这个序列号的确认,如果在这段时间内没有收到接收方的确认,TCP就认为这个数据包发生了丢失,会进行重传操作;接收方利用序列号对收到的数据进行确认,以便检测收到的数据是否发生了丢失或者乱序等,接收方一旦受到序列化的数据就会把它们重组成数据流并传递到高层进行处理。具体步骤如下:

①发送方将已发送的数据存入缓冲区,并为每个数据包启动一个超时定时器

②如果在特定时间内收到了接收方对这个数据序列号的确认,则释放这个数据包使用的缓冲区

③没有收到确认的话,则重传此数据包直至收到确认或者超过最大次数为止

④接收方收到数据时,先进行CRC循环冗余校验,如果正确的话则交给上层协议,并向发送方发送一个确认信息表明数据已收到,如果接收方有数据要传给发送方的话,则跟确认信息一起发过去;如果不正确的话就丢失让发送方重新发送

12,TCP怎么知道发生了网络拥塞

发生了丢包现象就认为发生了网络拥塞;接收方在没有收到期望的序列号数据之前会对之前的数据进行重复确认,发送方在收到某个应答之后又连续收到3个同样的应答包,则发送方就知道数据发生了丢失,即发生了拥塞。

13,TCP常见的拥塞控制算法有哪些

①TCP Tahoe/Reno

最初的实现,包括慢启动和拥塞避免两部分,基于超时重传和重复确认为条件判断是否发生了丢包。两者的区别在于:Tahoe如果收到三次重复确认(即发生了网络拥塞),就将慢启动阈值设置为网络拥塞时拥塞窗口的一半,并立即将拥塞窗口设置为1,重新进入慢启动状态;而Reno如果收到三次重复确认,就进入快重传而不进入慢启动,直接将拥塞窗口减半进入拥塞控制阶段,称为快恢复;

②TCP BBR

由Google设计,于2016年发布的拥塞算法。以往大部分拥塞算法是基于丢包来作为降低传输速率的信号,而BBR则基于模型主动探测;该算法认为网络接口控制器逐渐进入千兆速度时,丢包不应该被认为是识别拥塞的主要因素,该算法有更高的吞吐量和更低的延迟;

14,简述TCP超时重传

这是TCP保证可靠性的一种机制,TCP协议要求发送方每发送一个数据包就启动一个定时器并等待接收方的确认信息,接收端每接收一个数据就会返回确认信息,若在定时器超市之前没有数据没能被确认就认为数据已经丢失或被破坏,需要对数据进行重新组织和重传。

引出

①在TCP发送方等待接收方对这个数据包确认的时间里它会不会发其他的数据?

滑动窗口机制,滑动窗口的大小决定了在无需等待确认包的情况下、发送方能发送的最大数据量,该机制使用了大量的缓冲区(用于把已经发送但没有收到确认信息的数据包暂存于缓冲区,如果需要重传就从缓冲区里找,如果收到确认信息不需要重传就把该数据包从缓冲区删除);如果在等待的时间里不发其他的数据那么传输效率会很低。

滑动窗口过小怎么办?

如果窗口过小,如果发送较大的数据时需要不停的等待确认、会造成较大延迟,传输数据的效率低。

⭐15,说说TCP的可靠性保证

TCP主要提供了校验和、序列号/确认信息、超时重传、最大消息长度、滑动窗口、拥塞控制等机制来保证可靠性,如下

校验和:接收方通过校验和来检验数据是否发生了异常,如果是则直接丢弃重新发送,如果不是才传给上层协议并向发送方发送对这个数据包的确认信息;

序列号/确认信息:类似于课堂问答的形式,老师针对一个题问你“听懂了吗”,如果你说“听懂了”老师才讲下一个,如果你没有回应或者说没懂,老师就会重新讲一遍;计算机也是这样的,发送方发送信息给接收方,接收方会回应一个包,这个包就是应答包。这个过程中,只要发送方有一个包传输,接收方没有回应确认包(ACK包),都会重发。或者接收方的应答包,发送端没有收到也会重发数据;这就可以保证数据的完整性

 超时重传:见14;要注意的是在重发的过程中,假如一个包经过多次的重发也没有收到对端的确认包那么就会认为接收方异常并强制关闭连接,并且通知应用信息异常强行终止;

最大消息长度:在建立连接时,双方约定一个最大的长度MSS作为发送的单位,重传时也是以这个单位进行重传,理想的情况下是该长度的数据刚好不被网络层分块;

滑动窗口机制:为了解决在超时重传的过程中,发送方等待确认方确认信息的时间中效率低下的问题。 滑动窗口的大小就是在无需等待确认包的情况下,发送方还能发送的最大数据量,该机制的实现依靠大量的缓冲区,通过对多个段进行确认应答的功能。通过下一次的确认包可以判断接收端是否已经接收到了数据,如果已经接收了就从缓冲区里面删除数据,发生丢失就重传,那么如何知道需要重传的数据有哪些呢?接收端没有收到期望的序列号数据之前,会对之前的数据进行重复确认,发送方发送了这个应答包之后,又连续3次收到同样的应答包,则数据已经丢失了需要重发;

 拥塞控制:TCP慢启动机制,先发出少量数据,摸清当前网络的拥堵状态后,再决定以多大的速度传送数据

 16,说一说SYN flood是什么?如何防止呢?

SYN flood是当前最流行的Dos(拒绝服务攻击)与DDos(分布式拒绝服务攻击)的方式之一,它是利用TCP协议的缺陷,发送大量的伪造TCP连接请求,使被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式;可以采取以下方法来防止这种攻击:

①从ISP互联网服务提供商购买服务;通常会造成30到60min的网络延迟;

②保留在内部自己解决:使用入侵防御系统/防火墙技术和专用于防御DDos攻击的专用硬件来实现内部预防和响应DDos攻击;

③使用内容分发网络CDN:IT团队可以将基础设施置于内容分发网络(CDN)后面,这种方法可以最大程度地减少对企业网络基础设施的攻击

17,说说什么是TCP拆包和粘包?

TCP并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况来对数据包进行划分,所以我们认为一个完整的包可能被拆分为多个包进行传输(拆包),也有可能把多个包粘合成一个包进行传输(粘包)

18,说说从系统层面上,UDP如何保证尽量可靠?

可以参考传输层可靠TCP协议:

①添加请求/应答机制,确保数据正常的从发送方传输到接收方;

②添加超时重传机制(添加发送和接收缓冲区)

19,说说TCP的keepalive和HTTP的keepalive两者的区别

TCP的keepalive:连接建立之后,当连接很久没有数据报文传输时需要判断对方是否还在线来判断连接要不要维护,TCP协议有一种巧妙的方法来解决这个问题,当超过一定时间后,TCP就自动发送一个为空的数据包给对方,如果对方回应那么说明在线,连接保持;反之尝试多次仍无反应就认为连接丢失;TCP的keepalive用于在established(连接已成功建立)的状态时,双方检测连接的可用性

HTTP的keepalive:http早期、每个http请求都要要求打开一个socket连接并且使用一次就断开,使用keepalive状态可以减少连接建立的次数,可以提高性能、但是长时间的TCP连接也会导致系统资源的无效占用,配置不当的话有时比多次建立连接的代价更大,所以正确的配置keepalive的time out时间很重要;HTTP的keepalive是为了避免多次建立连接时进行的三次握手和四次挥手的过程

20,简述TCP的延迟ACK和累计应答

TCP的延迟ACKTCP在接收到对端的报文后,并不会立即发送ACK,而是等待一段时间发送、主要是为了把ACK和要发送给对方的数据一块发送当然这个时间不能无限延长,否则对端会认为数据包超时了而去重传;Linux利用动态调节算法来确定延迟的时间;

累计应答:为了保证顺序写,每一个包都有一个序号,在建立连接时会商定起始的序号是多少,然后按照序号一个个发送;同时为了保证不丢包,发送方发送的包接收方都要进行应答,但不是一个个应答,而是会应答某个之前的序号,该模式就称为累计应答;

21,讲一下TCP如何加速一个大文件的传输

平滑发包:在 RTT 往返时间内均匀发包,规避微分时间内的流量突发,尽量避免瞬间拥塞;

丢包预判有些网络的丢包是有规律的,例如每隔一段时间就丢一次包、或者会连续的丢好几个包等,如果可以提前发现这个规律,就可以针对性提前多发数据,减少因丢包造成的重传;

带宽评估:通过单位时间内收到的 ACK 信息来得知接收方的有效接收速率,通过这个速率来合理控制发送方的发包速度;

22,服务器怎么判断客户端发生了连接呢?

有两种方法:分别是TCP内部的keepalive(判断连接是否还在成功建立着)和应用层的heart-beat机制;

①TCP内部的keepalive:连接建立之后一段时间内如果没有数据传送的话,TCP会发送一个的数据包给对方,经过多次尝试都没有回应的话TCP就认为连接已经断开了,这个过程需要的时间比较长

②应用层的heart-beat机制:可以很快的判断连接是否发生了中断,并且由于是在应用层实现,也可以自行决定连接中断后应该采取的行动,而TCP的keepalive机制在判断连接断开之后只能将连接关闭

23,说说端到端、点到点的区别

端到端:针对传输层来说的,传输层为网络内的主机提供端到端的通信,因为无论是可靠的TCP还是不可靠的UDP都负责的是把数据从发送端传输到接收端,无论期间跨越多少个节点;端到端通信是建立在点到点通信的基础上的,它由一段一段的点到点通信构成,比点到点通信高级;它是一个网络连接、指的是在传输数据之前,需要从发送端到接收端建立一条链路,链路建立之后,发送端就可以发数据给接收端,直到最后的数据传输完毕并得到接收端的确认,传输结束;

点到点:针对数据链路层或者是网络层来说的,点到点通信基于IP地址或MAC地址,是指一个设备发送数据给与它直接相连的其他设备,这台设备在合适的机会下再把数据传输到下一个点,通过一台一台直接相连的设备之间的点到点通信来完成端到端通信、即把数据从发送端传输到接收端;点到点通信不保证数据传输的可靠性,也不能知道源主机和目的主机之间是哪两个进程在通信

24,说一下端到端、点到点的优点和缺点

端到端

优点:链路建立之后,发送端知道接收端一定能收到,而且数据经过中间交换设备时不需要进行存储转发,因此传输延迟小;

缺点:

①直到接收端收到数据为止,发送端要一直参与传输的过程,如果整个过程比较长的话会对发送端的资源造成浪费;

②如果接收主机关机或者是发生障碍,那么数据传输不到接收端去;

点到点

优点:

①发送方将数据发出之后,它的职责就完成了,不需要参与整个传输的过程,不会对发送方的资源浪成浪费;

②即使接收方主机发生了关机或者是故障现象,点到点通信也可以通过存储转发技术来进行缓冲;

缺点:不可靠,即使发送方发出了数据,接收方也不一定能收到;

⭐25,浏览器从接收到URL(统一资源定位器)到展示页面的全过程

①浏览器获取域名

②根据DNS域名解析协议得到该域名对应服务器的IP地址

③浏览器通过三次握手与服务器建立TCP连接

④连接建立之后,浏览器通过http协议向服务器发送服务请求(get方式)

⑤服务器得到HTML代码,从中提取资源并将其返回给浏览器

⑥浏览器得到资源之后,与服务器通过四次挥手断开连接

⑦浏览器渲染资源给用户

26,说一下HTTP和HTTPS的区别

HTTP:互联网上应用最广泛的一种网络协议,是一个客户端、服务端请求和应答的标准,用于www服务器传输超文本到本地浏览器,它可以使浏览器更加高级,使网络传输减少;

HTTPS:以安全为目标的HTTP通道,简单讲就是HTTP的安全版,即HTTP加入SSL安全套接层协议HTTPS的主要作用有两个,①建立信息安全通道来保障数据传输的安全、②确保网站的真实性;

区别:

①HTTPS需要申请证书、需要一定的费用,免费证书比较少;

②HTTP是超文本传输协议,信息是明文传输,而HTTPS则是具有安全性的SSL加密传输协议;

③端口不一样,HTTP是80、HTTPS是443;

④HTTP连接简单、是无状态的,HTTPS是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,比HTTP安全;

27,HTTP中的referer头的作用

HTTP中referer是头部的一部分,当浏览器向web服务器发送请求时一般会带上referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此获得一些信息用于处理;作用如下:

①将HTTP请求发给服务器后,如果服务器要求必须是某个网站或某几个网站才能访问,而你发送的referer不符合它的要求,此时就会拦截或者是跳转到它要求的地址,然后通过这个地址进行访问;

②防御CSRF(跨站请求伪造),比对HTTP请求的来源地址,如果referer中的地址是安全可信任的地址就放行,反之不放行

28,HTTP的方法有哪些

GET: 用于请求访问已经被URI(统一资源标识符)识别的资源;

POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式;

③PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置;

④HEAD: 获得报文首部,一般用于验证URI是否有效;

⑤DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件;

⑥OPTIONS:查询相应URI支持的HTTP方法;

29,说一下HTTP1.0 1.1 2.0的区别

http1.0

默认不支持长连接、需要设置keepalive参数指定

http1.1

默认长连接keepalive、http可以复用TCP连接,但是同一时间只能对应一个http请求

http2.0

同一时间可以对应多个http请求

30,HTTP常见的响应状态码及其含义

200:请求被正常处理

204:请求被处理了但是返回的响应报文中没有内容

206:请求被处理但是只返回了部分内容

301:跳转、代表永久性重定向,请求的资源已被分配到了新的URI(统一资源标识符)

302:临时性重定向

303:重定向,表示服务器要将浏览器重定向到另一个资源

304:客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回了 304

307:临时性重定向

400:请求报文中存在语法错误

401:发送的请求需要有通过HTTP认证的认证信息

403:对请求资源的访问被拒绝了

404:服务器无法找到对应的资源

500:服务器端在执行请求时发生了错误

503:服务器超负荷或其他问题,无法处理请求

31,说一下GET请求和POST请求的区别

HTTP的get和post方法都是为了请求资源的,区别如下:

①get请求在URL中传递的参数有长度限制,但是post没有

②post更加安全,get的参数会暴露在URL上

③get通过URL传递参数,post放在request body中

④get只能进行URL编码,post支持多种编码方式

⑤get请求参数会被完整保存在浏览器的历史记录中,post的参数不会被保留

⑥get请求会被浏览器主动cache、但post不会,不过post可以手动设置

⑦get请求在浏览器中回退是无害的,post的话会再次提交资源访问请求

32,说说cookie和session的关系和区别

关系:cookie和session都是会话的一种方式;典型场景比如“购物车”、当我们点击下单按钮时,服务器并不知道具体用户的具体操作,为了标识并跟踪用户,服务器为每个用户设置cookie或者session

 区别

①cookie数据存放在客户的浏览器上,session数据存放在服务器中;

cookie不是很安全,其他人可以通过获取你的cookie来进行cookie欺骗,如果对安全性要求比较高、应该考虑使用session

session在一定时间内存放于服务器中,当访问较多时会比较占用服务器的性能,如果服务器的性能有限、应该考虑使用cookie

单个cookie保存的数据不能超过4K,很多浏览器也限制一个站点最多保存20个cookie

⭐33,说一下HTTPS的加密和认证过程

HTTPS是以安全为目标的HTTP通道,加入了SSL安全套接层协议,加密和认证过程如下:

①客户端在浏览器输入一个HTTPS网址、然后连接到server的443(https的端口号)端口,采用HTTPS协议的server有一套数字证书(一套公钥和密钥);

②server将公钥传送给客户端、客户端解析证书,验证成功之后会返回一个私钥(随机数),然后客户端用证书将这个私钥加密后传给server;

③server用密钥解密之后得到这个私钥,然后将要传递的信息和私钥通过加密后一块传递给客户端;

④客户端用之前的私钥来解密server发来的消息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值