计算机网络面试《葵花宝典》
目录
一、物理层
1.1 简述一下原理体系结构各层常用的协议
二、数据链路层
2.1 网关是什么?同网段主机如何通信(ARP协议工作原理)?
2.2 简述MAC地址
三、网络层
3.1 简述IP地址
3.2 简述IPv4的分类编址
四、运输层
4.1 静态路由和动态路由
4.2 常用的路由协议
4.3 TCP的三次握手和四次挥手
4.4 TCP为什么不能采用 2 次握手?
4.5 TCP 3 次握手时没收到对方信息会怎样?
4.6 TCP三报文握手时能携带数据吗?
4.7 什么叫半连接队列?
4.8 TCP主机的各种状态
4.9 为什么在四报文挥手后,需要2MSL时间等待?
4.10 简述TCP和UDP的区别
4.11 TCP首部与UDP首部格式的定义
4.12 简述TCP的 延迟应答 和 累计应答
4.13 简述TCP超时重传
4.14 TCP的拥塞控制算法有哪些?
4.15 简述TCP的流量控制
4.16 TCP如何保证有序?
4.17 TCP如何保证可靠传输?
4.18 举例TCP / UDP各自的应用场景?
4.19 简单解释一下TCP的粘包和拆包
4.20 详细说说TCP的粘包是如何产生的?
4.21 怎么解决粘包和拆包的问题?
4.22 解释一下TCP / HTTP的keep-alive,再说说heart-beat机制?
4.23 如何改进让UDP更加可靠?
4.24 如何改进让TCP更快的传输大文件?
4.25 说说端到端、点到点通信的区别?
4.26 什么是 SYN flood 攻击?如何防御?
五、应用层
5.1 说说域名解析的过程
5.2 说说浏览器从输入URL到展现页面的过程
5.3 说说HTTP有哪些方法(请求)
5.4 说说GET请求和POST请求的区别
5.5 简述HTTP中Referer的作用
5.6 简述HTTP和HTTPS的区别
5.7 说说HTTPS是怎样工作的
5.8 说说什么是数字签名?什么又是数字证书?
5.9 简述HTTP 1.0 / 1.1 / 2.0 的主要区别
5.10 简述HTTP常见的响应状态码及其含义
5.11 什么是HTTP的重定向?有什么用?
5.12 Cookie 和 Session 是什么?它们有什么区别?
5.13 什么是域名劫持?
5.14 CSRF攻击是什么?如何防御?
5.15 什么是SQL注入攻击?如何防御?
5.16 什么是XSS攻击?如何防御?
一、物理层
1.1 简述一下原理体系结构各层常用的协议
二、数据链路层
2.1 网关是什么?同网段主机如何通信(ARP协议工作原理)?
网关:网络中的关卡,用于不同网络之间的互连、翻译和转换。交换机、路由器等都可成为网关。
同网段主机:同网段主机,即在同一路由器下的主机。同网段主机通信不通过路由器(一般通过交换机)
ARP地址解析协议:用于已知 IP 地址时,查询 MAC 地址
同网段主机通信(ARP协议工作原理):发送主机查找自己的ARP表,若其中有接收方的MAC地址,则直接建立通信。反之,发送方以目的主机IP地址为内容,广播 ARP请求 以期获知目的主机MAC地址。目的主机接收到此ARP请求后会进行应答。发送方接受应答后,在自己的ARP表中建立该IP地址到MAC地址的映射。
2.2 简述MAC地址
MAC(Media Access Control),硬件地址 / 物理地址,被用作媒体接入控制。是被写死在EEPROM中的,全球唯一。同网段的设备间可以使用ARP协议和MAC地址进行通讯。MAC地址为6字节,有单播 / 多播 / 广播三种。
三、网络层
3.1 简述IP地址
IP 地址就是给因特网上的每一台主机 (或路由器) 的每一个接口分配一个在全世界范围内是唯一的4字节的标识符,主要标识两部分信息:
- 网络编号: 标识因特网上数以百万计的网络
- 主机编号: 标识同一网络上不同主机(或路由器各接口)
用哪些字段表示网络、哪些字段表示主机,这是一个哲学问题,由此引申出IPv4编址方式的演变:分类编址、划分子网、无分类编址
3.2 简述IPv4的分类编址
根据32位IP地址的前段值,可将IP地址分为:A、B、C、D、E五类:
- A类:以0开头(0~127),网络号1字节,主机号3字节;
- B类:以10开头(128~191),网络号2字节,主机号2字节;
- C类:以110开头(192~223),网络号3字节,主机号1字节;
- D类:以1110开头,为多播地址;
- E类:以1111开头,为广播地址;
除此之外,还要做出另外几点申明:
- 只有A、B、C类地址可以被分配给主机或路由器的各接口;
- 主机号为“全0”的地址是网络地址,不能分配给主机或路由器的各接口;
- 主机号为“全1”的地址是广播地址,不能分配给主机或路由器的各接口;
- A类地址,网络号0(保留地址)和127(本地环回测试地址)皆不分配;
四、运输层
4.1 静态路由和动态路由
静态路由:由系统管理员设计与构建。适用于网关数量有限、且网络拓朴结构不经常变化的网络。优点是不占用网络资源,其缺点是不能动态地适用网络状况的变化。
动态路由:是由路由选择协议而动态构建的,路由协议之间通过交换各自所拥有的路由信息实时更新路由表的内容。动态路由可以自动学习网络的拓朴结构,并更新路由表。其缺点是路由广播将占据大量的网络资源。
4.2 常用的路由协议
RIP距离向量协议:采用举例向量算法,以“路程上的路由器数量”作为选择线路的唯一考量。RIP使用非常广泛,它简单、可靠,便于配置。但是RIP只适用于小型网络,超过15个站点的目的地被标记为不可达。
OSPF开放最短路径优先:采用SPF算法,通过计算链路的各种性能以找出最佳链路。OSPF将一个自治域再划分为区(故有区内路由选择和区间路由选择),OSPF不限制网络规模,更新效率高,收敛速度快。
BGP 和 BGP4 路由协议:外部网关协议。它的主要功能是与其它自治域的 BGP 交换网络可达信息。
4.3 TCP的三次握手和四次挥手
(1)三次握手
- 第一次握手:①客户端发送TCP连接请求报文段(SYN=1,seq=x);②客户端进入:同步已发送;
- 第二次握手:①服务器发送TCP连接请求的确认(SYN=1,ACK=1,seq=y,ack=x+1);②服务器进入:同步已接收;
- 第三次握手:①客户端发送对TCP连接请求的确认的确认(ACK=1,seq=x+1,ack=y+1);②客户端、服务器进入:连接已建立;
英文解释:
SYN —— 同步位、ACK —— 确认位、seq —— 序号字段、ack —— 确认号字段
- 任意端的seq在最初都是随机选取的,之后自己每使用一次序号,seq 就 +1
- ack总等于本机最后一次收到的seq + 1
(2)四次挥手
- 第一次挥手:①客户端发送TCP连接释放报文段(FIN=1,ACK=1,seq=u,ack=v);②客户端进入:终止等待1
- 第二次挥手:①服务器发送TCP普通确认报文段(ACK=1,seq=v,ack=u+1);②服务器进入:关闭等待;③客户端进入:终止等待2;④服务器通知自己的应用进程,准备断开连接,还有什么数据要发送?⑤这时,TCP连接处于半关闭状态,服务器依然可以向客户端发送数据;
- 第三次挥手:①服务器发送TCP连接释放报文段(FIN=1,ACK=1,seq=w,ack=u+1);②服务器进入:最后确认;③服务器应用进程通知其TCP:发送完成,被动关闭;
- 第四次挥手:①客户端发送TCP普通确认报文段(ACK=1,seq=u+1,ack=w+1);②客户端进入:时间等待,然后进入关闭状态;③服务器进入:关闭状态;
4.4 TCP为什么不能采用 2 次握手?
- 为了防止已失效的连接请求报文段 突然又传送到了TCP服务器,因而导致错误;
- 若只进行2次握手,则无法确认接收方的序列号
4.5 TCP 3 次握手时没收到对方信息会怎样?
- 第 1 次丢失,服务器不会收到连接请求,便不发送确认;客户主机收不到确认,于是超时重传;
- 第 2 次丢失,客户主机收不到确认,于是超时重传;
- 第 3 次丢失,服务器收不到确认的确认,于是超时重传。若多次重传仍未收到应答,则关闭此连接。
4.6 TCP三报文握手时能携带数据吗?
第一次、第二次握手(SYN+ACK)是不允许携带数据的,但是第三次握手时(ACK),客户主机事实上已经处于“链接已建立”的状态,故可以携带数据。
4.7 什么叫半连接队列?
在三报文握手时,服务器收到第一次SYN后,进入SYN_RCVD状态,此时没有完全建立连接,成为半连接队列。
4.8 TCP主机的各种状态
4.9 为什么在四报文挥手后,需要2MSL时间等待?
MSL(Maximum Segment Lifetime)最长报文段寿命,它是任何报文在网络上存在的最长时间。2MSL对应的状态为TIME_WAIT,在四报文挥手后,客户主机需要等待2MSL再关闭的原因是:
- 保证客户主机发送的最后一个ACK报文段能够到达服务端。若客户端发送的最后一个ACK丢失,服务器TCP连接无法正常关闭,会导致服务器FIN+ACK的超时重传;客户端等待2MSL,便可接受到这个重传,从而重新发送最后一个ACK。
- 防止"已失效的报文段"出现在本连接中。客户端在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。
4.10 简述TCP和UDP的区别
TCP是面向连接、面向字节流的可靠传输,UDP是无连接、面向应用报文的不可靠传输;UDP支持单播 / 多播 / 广播,TCP只支持单播;TCP传输保证有序,速度慢,而UDP不保证有序性,速度快。
面向连接 与 无连接
- TCP是面向连接的,必须使用“三报文握手”和“四报文挥手”来控制连接 ,并且通过流量控制、拥塞控制、超时重传来保证可靠传输。
- UDP是无连接的, 只提供不可靠传输。
面向字节流 和 面向应用报文
- TCP将应用层报文看做字节流,为他们编号、添加首部后分段发送出去
- UDP直接给应用层报文添加UDP首部,然后发送出去
4.11 TCP首部与UDP首部格式的定义
(1)TCP首部,20 byte
typedef struct _TCP_HEADER{
short m_ssourPort; //源端口号16bit
short m_sDestPort; //目的端口号16bit
unsigned int m_uisequNum; //序列号32bit
unsigned int m_uiAcknow1edgeNum; //确认号32bit
short m_sHeaderLenAndF1ag; //前4位:TCP头长度;中6位:保留;后6位:标志位
short m_swindowsize; //窗口大小16bit
short m_schecksum; //检验和16bit
short m_surgentPointer; //紧急数据偏移量16bit
}__attribute__((packed))TCP_HEADER,*PTCP_HEADER;
(2)UDP首部,8 byte
typedef struct _UDP_HEADER{
unsigned short m_ussourPort; //源端口号16bit
unsigned short m_usDestPort; //目的端口号16bit
unsigned short m_usLength; //数据包长度16bit
unsigned short m_uschecksum; //校验和16bit
}__attribute__((packed))UDP_HEADER,*PUDP_HEADER;
4.12 简述TCP的 延迟应答 和 累计应答
- 延迟应答(捎带确认):TCP在接收到报文后,并不立即发送ack,而是等待一段时间再发送,以便将ack和要发送的数据一块发送。为保证正常通信,不应将延迟设置过长。
- 累计应答:接收方发送 对按序到达的最后一个数据 的确认。如:到达了1,2,3,5,则发送ack4,表明4以前的数据都已按序到达,现希望收到4号以后的数据。
4.13 简述TCP超时重传
- TCP协议要求在发送端每发送一个报文段,就启动一个定时器并等待确认信息;
- 接收端成功接收新数据后返回确认信息;
- 若在定时器超时前数据未能被确认,TCP就认为报文段中的数据已丢失或损坏,需要对该报文段进行重传。
4.14 TCP的拥塞控制算法有哪些?
TCP发送方维护一个 发送窗口cwnd 和一个 慢启动门限ssthresh;
- 慢开始:cwnd < ssthresh 时,使用慢开始算法;发送窗口初始值置为1,每成功完成一次传输,则将发送窗口乘以2;
- 拥塞避免:当 cwnd > ssthresh 时,改用拥塞避免算法;每成功完成一次传输,则将发送窗口加一;一旦遇到超时重传,将 ssthresh 更改为此时窗口的的 1 / 2,将 cwnd 设为 1,重启发送;
- 快重传:发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,避免引起超时重传;
- 快恢复:发送方一旦收到3个连续的重复确认,将 ssthresh 和 cwnd 调整为当前窗口的一半,开始执行拥塞避免算法;
4.15 简述TCP的流量控制
在TCP通信中,接收方对发送方进行流量控制,是通过发送累计确认时,调整接受/发送窗口实现的。流量控制使得TCP通信能按照当前网络状况及缓存情况做出适当调整,是一种保障可靠传输的方法。
4.16 TCP如何保证有序?
TCP基于滑动窗口机制,进行超时重传,从而实现可靠传输。
- 为了保证数据包的可靠传递,发送方必须把已发送的数据包保留在缓冲区;
- 如在定时器超时之前收到了对方发来的应答信息,则释放该数据包占用的缓冲区;
- 否则,重传该数据包;
- 接收方收到数据包后,先进行CRC校验,如果正确则把数据交给上层协议,然后给发送方发送一个累计应答包
4.17 TCP如何保证可靠传输?
TCP基于滑动窗口机制,通过校验和、确认应答、超时重传、最大消息长度等方法保证可靠传输。
- 滑动窗口机制 (GBN:回退N帧协议):①发送方一次性发送窗口内的全部数据;②接收方进行累计确认ACKn(确认收到的按序到达的最后一个数据序号n);③发送方根据ACK可确认是否进行部分数据的重传;④数据被按序接收后,窗口向后滑动,发送新数据。
- 校验和:TCP在计算检验和时,会在TCP首部加上一个12字节的伪首部。若检测出数据有差错,就会要求进行重传。
- 确认应答(ACK):接收方会对收到的数据进行确认,确认应答的方式有即时确认和捎带确认
- 超时重传:①发送端为每一个报文段开启一个定时器;②接收端成功接收新数据后返回确认信息;③若超时未确认,则需要对该报文段进行重传。
- 最大消息长度(MSS):在建立TCP连接的时候,双方约定一个最大的长度作为发送的单位,这样可以有效减少错误率。
4.18 举例TCP / UDP各自的应用场景?
(1)TCP
- FTP:文件传输协议,端口21
- Telnet:远程登录协议,端口23
- SMTP:电子邮件发送协议,端口25
- POP3:电子邮件接受协议,端口110
- HTTP:超文本传输协议
- 常用于金融领域。
(2)UDP
- DHCP:动态主机配置协议,为局域网主机动态分配IP信息
- DNS:域名解析服务,端口53
- SNMP:简单网络管理协议,端口161,用来管理网络设备
- TFTP:简单文件传输协议,端口69
- 常用于游戏和音视频媒体。
4.19 简单解释一下TCP的粘包和拆包
TCP根据缓冲区的实际情况,将应用层的数据包(看做比特流)进行拆分再为其添加首部,也可以将多个较小的数据包封装成一个大的包。
另外,UDP 不存在粘包和拆包的问题,因为UDP是面向应用层报文的(而非面向比特流)。UDP收到的都是完全正确的包,只是有丢包和乱序的问题
4.20 详细说说TCP的粘包是如何产生的?
(1)发送方产生粘包
- 当应用层交付的数据包过于的小时,TCP 协议默认启用 Nagle 算法,将这些较小的数据包进行合并发送;这个合并过程就是在发送缓冲区中进行的(堆压),也就是说数据发送出来它已经是粘包的状态了
(2)接收方产生粘包
- 接收方网络层交付帧给传输层,传输层将其放置接收缓冲区,然后由应用层来主动获取;如果放数据的速度 > 应用层拿数据速度,接收方就会产生粘包
4.21 怎么解决粘包和拆包的问题?
特殊字符控制;
在包头首都添加数据包的长度。
4.22 解释一下TCP / HTTP的keep-alive,再说说heart-beat机制?
(1)TCP keep-alive
- TCP服务器进程每收到一次TCP客户进程的数据,重置keep-alive;
- 若保活计时器定时周期内未收到TCP客户进程发来的数据,则TCP服务器进程就向TCP客户进程发送一个探测报文段,以后则每隔一段时间发送一次。若一连发送10个探测报文段后仍无TCP客户进程的响应,TCP服务器进程就认为TCP客户进程所在主机出了故障,接着就关闭这个连接。
(2)HTTP keep-alive
- HTTP 一般会有 httpd 守护进程,里面可以设置 keep-alive timeout。当 tcp 链接闲置超过这个时间就会关闭。也可以在 HTTP 的 header 里面设置超时时间
(3)应用层 heart-beat
- heart-beat应用层保活机制,用来测试连接是否中断。其时间间隔都比较短,可以很快的决定连接是否中断
4.23 如何改进让UDP更加可靠?
最简单的方式是在应用层模仿传输层TCP的可靠性传输。
- 为应用层添加 seq/ack 机制;
- 为应用层添加发送和接收缓冲区;
- 为应用层添加超时重传机制。
4.24 如何改进让TCP更快的传输大文件?
- 建连优化:TCP在建立连接时,如果丢包,会进入重试,重试时间是1s、2s、4s、8s的指数递增间隔,缩短定时器可以让TCP在丢包环境建连时间更快,非常适用于高并发短连接的业务场景;
- 平滑发包:在RTT内均匀发包,规避微分时间内的流量突发,尽量避免瞬间拥塞;
- 丢包预判:有些网络的丢包是有规律性的,如果程序能自动发现这个规律,就可以针对性提前多发数据,减少重传时间、提高有效发包率;
- 带宽评估:通过单位时间内收到的ACK或SACK信息可以得知客户端有效接收速率,通过这个速率可以更合理的控制发包速度。
- 带宽争抢:有些场景是大家互相挤占带宽的
4.25 说说端到端、点到点通信的区别?
端到端通信:
- 端到端通信是针对传输层来说的,即从发送端到接收端;
- 它是一个网络连接,指的是在发送端与接收端之间建立的一条链路;
- 端到端通信建立在点到点通信的基础之上,它是由一段段的点到点通信信道构成的,是比点到点通信更高一级的通信方式,完成应用进程之间的通信;
- 端到端的优点:链路建立之后,经过中间交换设备时不需要进行存储转发,因此传输延迟小;
- 端到端的缺点:①直到接收端收到数据为止,发送端的设备一直要参与传输。如果整个传输的延迟很长,那么对发送端的设备造成很大的浪费;②如果接收设备关机或故障,那么端到端传输不可能实现。
点到点通信:
- 点到点通信是针对数据链路层或网络层来说的,即节点到节点;
- 点对点是基于MAC地址和或者IP地址,是指一个设备发数据给直接连接的其他设备,这样依次转发,直到接收端。
- 点到点通信不保证数据传输的可靠性;
- 由物理层、数据链路层和网络层组成的通信子网为网络环境中的主机提供点到点的服务;
- 点到点的优点:①发送端设备送出数据后,它的任务已经完成,不需要参与整个传输过程,这样不会浪费发送端设备的资源;②即使接收端设备关机或故障,点到点传输也可以采用存储转发技术进行缓冲点到点的缺点:
- 点到点的缺点:发送端发出数据后,不知道接收端能否收到或何时能收到数据;
4.26 什么是 SYN flood 攻击?如何防御?
SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,通过发送大量伪造的TCP连接请求,使被攻击方资源耗尽的攻击方式。对于 SYN flood,有三种应对方式:
- 从互联网服务提供商(ISP)购买服务。许多互联网服务提供商(ISP)提供DDoS缓解服务,当企业网络受到攻击时,企业需要向互联网服务提供商(ISP)报告事件以开始缓解。
- 保留在内部并自己解决。企业可以使用入侵防御系统/防火墙技术和专用于防御DDoS攻击的专用硬件来实现内部预防和响应DDoS攻击。
- 使用内容分发网络(CDN)。将基础设施置于内容分发网络(CDN)后面。
五、应用层
5.1 说说域名解析的过程
- 先检查本地hosts文件
- 查找本地DNS服务器缓存
- 本地DNS服务器启动查询
- 转发模式:本地DNS服务器把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。
- 直接模式:本地DNS就把请求发至13台根DNS根服务器,它们收到请求后会判断这个域名是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器会联系该IP对应的DNS服务器,该DNS服务器再向下层查询。
- 客户端到本地DNS服务器——递归查询;DNS服务器之间——迭代查询
5.2 说说浏览器从输入URL到展现页面的过程
- 输入URL地址
- 浏览器通过DNS域名解析服务,查找域名的IP地址
- 浏览器向 web 服务器发送一个HTTP请求
- 服务器的永久重定向响应
- 服务器处理请求,并返回一个HTTP响应
- 浏览器显示HTML
- 浏览器发送请求获取嵌入在HTML中的资源(如图片、音频、视频、CSS、JS等等)
5.3 说说HTTP有哪些方法(请求)
- GET:用于请求访问已经被URL识别的资源;
- POST:用于传输信息给服务器。主要功能与GET方法类似,但一般推荐使用POST方式;
- PUT:传输文件。报文主体中包含文件内容,保存到对应URI位置;
- HEAD:获得报文首部。一般用于验证URI是否有效。
- DELETE:删除文件。与PUT方法相反,删除对应URI位置的文件。
- OPTIONS:查询相应URI支持的HTTP方法。
5.4 说说GET请求和POST请求的区别
- GET请求在URL中传送的参数是有长度限制的,而POST没有;
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息;
- GET参数通过URL传递,POST放在Request body中;
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留;
- GET请求只能进行url编码,而POST支持多种编码方式;
- GET请求会被浏览器主动cache,而POST不会,除非手动设置;
- GET产生的URL地址可以被Bookmark,而POST不可以;
- GET在浏览器回退时是无害的,而POST会再次提交请求。
5.5 简述HTTP中Referer的作用
(1)HTTP Referer是header的一部分
- 当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
- 假如在 www.google.com 里有一个 www.baidu.com 链接,那么点击进入这个 www.baidu.com 它的header信息里就有:Referer = http://www.google.com
(2)防盗链
- 只允许我本身的网站访问本身的图片服务器。将某http请求发给服务器后,如果服务器要求必须是特定地址才能访问,就会进行拦截(或者跳转到他要求的地址,然后再通过这个地址进行访问)
(3)防止恶意请求
- 比如静态请求是*.htm1结尾的,动态请求是*.shtm1,那么由此可以这么用,所有的*.shtm1请求,必须Referer为我自己的网站。
(4)空 Referer
- 定义: 一个HTTP请求中不包含Referer头部 或 Referer头部的内容为空;
- 表明该请求并不是由链接触发的,如:直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含Referer字段的;
- 那么在防盗链中,设置不允许空Referer,则该URL不允许直接访问,必须通过己方网站的链接
(5)防御CSRF
- 比对HTTP请求的来源地址,如果Referer中的地址是安全可信任的地址,才能放行
5.6 简述HTTP和HTTPS的区别
HTTP:是一个客户端和服务器端请求和应答的标准(传输协议),用于从WWW服务器传输超文本到本地浏览器。它可以使浏览器更加高效,且使网络传输减少。
HTTPS:HTTP的安全版。HTTPS的安全基础是SSL(Secure Sockets Layer:安全套接字协议)。其主要作用可以分为两种:①建立一个信息安全通道,来保证数据传输的安全;②是确认网站的真实性
5.7 说说HTTPS是怎样工作的
- 客户端发送自己支持的加密规则给服务器,代表告诉服务器要进行连接了;
- 服务器向客户端发送证书,证书中包含服务器信息,加密公钥,证书的办法机构;
- 客户端收到网站的证书之后要做下面的事情:
- 验证证书的合法性;
- 如果验证通过证书,客户端会生成一串随机数,并用证书中的公钥进行加密;
- 用约定好的 hash 算法计算握手消息,然后用生成的密钥进行加密,一起发送给服务器。
- 服务器接收到客户端传送来的信息,要做下面的事情:
- 用私钥解析出密码,用密码解析握手消息,验证 hash 值是否和浏览器发来的一致;
- 使用密钥加密消息;
- 如果计算法 hash 值一致,握手成功。
5.8 说说什么是数字签名?什么又是数字证书?
(1)数字签名
- 为了避免数据在传输过程中被篡改,可以让发送端做一个数字签名:①发送方:把数据的摘要消息进行一个加密,得到一个签名,和数据一起发送。②接收方:把接收到的数据摘要进行同样的加密,如果两次签名一致,则说明数据未被篡改。
(2)数字证书
- 虽然使用数字签名可以保证数据不被篡改,但如果同时公钥也被替换,则仍然可以伪造数据。为了保证发送方的公钥真实可信,CA 证书机构会负责颁发一个证书,里面的公钥都是经过备案的,保证为真。客户端只有验证服务器提供的证书为真,才会进行接下来的动作。
5.9 简述HTTP 1.0 / 1.1 / 2.0 的主要区别
(1)HTTP 1.0
- 默认不支持长连接,需要设置keep-alive参数指定
- 强缓存expired、协商缓存last-modified\if-modified-since有一定的缺陷
(2)HTTP 1.1
- 默认长连接(keep-alive),http请求可以复用TCP连接,但是同一时间只能对应一个http请求(串行)
- 增加了强缓存cache-control、协商缓存etaglif-none-match是对HTTP 1.0缓存的优化
(3)HTTP 2.0
- 多路复用,一个Tcp中多个http请求是并行的
- 二进制格式编码传输
- 使用HPACK算法做header压缩
- 服务端推送
5.10 简述HTTP常见的响应状态码及其含义
1XX:信息类状态码(表示接收请求状态处理)
2XX:成功状态码(表示请求正常处理完毕)
3XX:重定向(表示需要进行附加操作,已完成请求)4XX:客户端错误(表示服务器无法处理请求)
5XX:服务器错误状态码(表示服务器处理请求的时候出错)
- 200:从状态码发出的请求被服务器正常处理
- 204:服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分【即没有内容】
- 206:部分的内容(如:客户端进行了范围请求,但是服务器成功执行了这部分的干请求
- 301:跳转,代表永久性重定向(请求的资源已被分配了新的URI,以后已使用资源,现在设置了URI)
- 302:临时性重定向(请求的资源已经分配了新的URI,希望用户本次能够使用新的URl来进行访问)
- 303:由于请求对应的资源存在的另一个URI(因使用get方法,定向获取请求的资源)
- 304:客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回了304
- 307:临时重定向【该状态码与302有着相同的含义】
- 400:请求报文中存在语法错误(当错误方式时,需修改请求的内容后,再次发送请求)
- 401:发送的请求需要有通过HTTP认证的认证信息
- 403:对请求资源的访问被服务器拒绝了
- 404:服务器上无法找到请求的资源
- 500:服务器端在执行请求时发生了错误
- 503:服务器暂时处于超负载或者是正在进行停机维护,现在无法处理请求
5.11 什么是HTTP的重定向?有什么用?
301重定向(301 Move Permanently),指页面永久性转移,表示为资源或页面永久性地转移到了另一个位置。当用户向服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中包含状态码 301 ,表示该资源已经永久改变了位置。
301重定向有哪些用途?
- 网页开发过程中,时常会遇到网站目录结构的调整,将页面转移到一个新地址;
- 网页扩展名的改变,这些变化都会导致网页地址发生改变,此时用户收藏夹和搜索引擎数据库中的旧地址是一个错误的地址,访问之后会出现404页面,这样会导致网站流量的损失,可使用重定向防止损失。
- 或者是我们需要多个域名跳转至同一个域名,例如本站主站点域名为 www.conimi.com ,而还有一个域名 www.nico.cc,由于对该域名设置了301重定向,当输入www.nico.cc 时,自动跳转至 www.conimi.com 。
5.12 Cookie 和 Session 是什么?它们有什么区别?
- Cookie与Session都是会话的一种方式。服务器通过为用户创建Cookie或Session跟踪用户的数据或状态;
- Cookie数据存放在客户的浏览器上,Session数据放在服务器上;
- Cookie不是很安全,容易收到CSRF攻击,考虑到安全应当使用Session;
- Session会占用服务器的性能,考虑到减轻服务器压力应当使用Cookie;
- 单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie。
5.13 什么是域名劫持?
DNS劫持就是通过劫持了DNS服务器,修改域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP。其结果就是对特定的网址不能访问或访问的是假网址。
5.14 CSRF攻击是什么?如何防御?
CSRF—— 跨站请求伪造,该攻击方式的步骤是:
- 受害者登录受信任网站A,并在本地生成Cookie
- 受害者在不登出A的情况下,访问危险网站B
- 攻击者获取Coolie,进而完成破坏
防御CSRF攻击的方式——请求令牌验证(token验证):
- 当用户通过正常渠道访问服务器时,服务器会生成一个随机的字符串
- 字符串并作为令牌(token)返回给客户端,以隐藏的形式保存在客户端中
- 客户端每次请求都必须带着这个 token,服务器对 token 进行验证
5.15 什么是SQL注入攻击?如何防御?
SQL注入——提交的表单数据都会拼接到 SQL 查询语句中,遭受SQL注入,表单中的参数会被替换为SQL语句,这样就可以骗过SQL数据库,从而执行一段恶意代码。
要防御SQL注入,可以:
- 把数据库权限降至最低,尽可能地减少 SQL 注入攻击带来的危害
- 避免网站打印出SQL错误信息,把代码里的SQL语句暴露出来,以防止攻击者利用这些错误信息进行SQL注入。
- 对进入数据库的特殊字符进行转义处理,或编码转换
5.16 什么是XSS攻击?如何防御?
XSS攻击——利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些脚本代码嵌入到web页面中去。用户访问页面时,都会执行恶意的嵌入代码,从而进行破坏。
(1)XSS攻击可能造成的危害:
- 盗取各类用户帐号
- 控制企业数据,包括读取、篡改、添加、删除企业敏感数据
- 非法转账
- 强制发送电子邮件
- 控制受害者机器向网站发起攻击
(2)如何防止XSS攻击:
受到XSS攻击的主要原因就是过于信任客户端提交的数据,才给了客户恶意修改web的契机!解决办法是不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。
计算机网络面试《葵花宝典》相关推荐
- 计算机网络面试常见知识点(含HTTPS和TLS)
计算机网络面试常见问题 计算机网络面试常见问题 一.TCP/IP 各层的结构与功能, 都有哪些协议? 1.1Tcp/IP的五层协议 1.2应用层 1.3运输层 1.4网络层 1.5数据链路层 1.6物 ...
- 计算机网络 - 面试篇
计算机网络 - 面试篇 综合 OSI七层模型 讲一下网络五层模型,每一层的职责? 在浏览器地址栏输入一个URL后回车,执行的全部过程 tcp.udp.http.https等常用协议 Cookie 和 ...
- 一小时搞定计算机网络面试
一小时搞定计算机网络面试 一.计算机网络体系结构参考模型: 七层协议的作用: 1.物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介 质的传输速率等.它的主要作用是传输比特流( ...
- 计算机网络面试的基本问题
计算机网络 面试基本题 文章目录 计算机网络 9. tcp和udp 10.三次握手过程&为什么是三次 11.SYN攻击,以及怎么预防 12.序列号能不能固定 13.tcp的keep-alive ...
- 计算机网络面试问题汇总
计算机网络面试问题集锦: https://blog.csdn.net/qq_32534441/article/details/88655480 搞定计算机网络面试,看这篇就够了: https://bl ...
- 搞定计算机网络面试,看这篇就够了
目录 一 OSI与TCP/IP各层的结构与功能,都有哪些协议 1 应用层 2 运输层 3 网络层 4 数据链路层 5 物理层 二 TCP三次握手和四次挥手(面试常客) 为什么要三次握手 为什么要传回s ...
- 今天会是有offer的一天么:计算机网络面试问题集锦
写在前面 UP打算把最近面试中被问到的一些关于计算机网络的问题进行了整理和总结,一方面方便自己复习,另一方面也希望帮助其他找工作找实习的同学. 1. OSI与TCP/IP各层的结构与作用 应用层 应用 ...
- 面试/笔试第一弹 —— 计算机网络面试问题集锦【转】
(转自:https://blog.csdn.net/justloveyou_/article/details/78303617) 写在前面: 找工作告一段落,期间经历了很多事情,也思考了许多问题,最后 ...
- 中职教资计算机网络面试,2018下半年教师资格证面试:中学信息技术教案《计算机网络的组成》...
报名条件 考试指南 历年考情 选课报班专业老师在线答疑 2018下半年教师资格证面试:中学信息技术教案<计算机网络的组成> 一.教学目标 1.能够说出计算机网络的组成,并且能认识调制解调器 ...
最新文章
- 剑指offer:面试题14- II. 剪绳子 II
- Jenkins Mac安装更改用户名
- 哪里可以找到python的免费教程-哪里可以找到比较靠谱的Python教程?
- IDL与C#混合编程技术
- 解决为什么JDK要带着JRE一起下载
- 【debug】UnboundLocalError local variable a referenced before assignment
- 【转】每天一个linux命令(61):wget命令
- Gogs代码托管系统安装配置手册
- iOS开发——UI基础-KVC
- r语言跟python哪个适合数据分析_R语言 vs Python对比:数据分析哪家强?
- shapley值法初学入门详细介绍
- 写给青春,写给军乐团
- L1W3 用1层隐藏层的神经网络分类二维数据
- 一个简单的HTML网页
- 三菱Q系列PLC ,QD77MS16走总线控制伺服项目
- CDH-TXKT-集群的维护
- 推荐一款开源跨平台 [业务大屏,数据报表] 快速开发平台
- 基于51单片机之数码管设计#扩展三位数码管电路,完成0-999递增或递减计数功能,递减间隔200ms左右
- 什么是块存储、文件存储、对象存储
- MIT Molecular Biology 笔记6 转录的调控
热门文章
- JavaScript jq 三位分节法 input输入数字时每3位使用逗号隔开
- IP地址、端口号、网络字节序
- 搜狐畅游薪酬公开,这是件好事么?-看点-虎嗅网
- 说说部署网站的奇葩事
- 如何修改textfield的 return 键的类型
- 《癌症·真相》读书简摘
- 利用python 批量下载美拍视频
- 分享65个NET源码,总有一款适合您
- 工业互联网WMS系统源码:springboot+ VUE(小程序端+调试视频+部署文档)
- 跨国药企在中国 | 赛诺菲来优时胰岛素生产基地落地北京;拜耳启动处方药北京工厂产能提升项目...