「万字整理」HTTP协议,TCP和UDP,计网及网络安全——面试高频考点(推荐收藏)

文章目录

  • 计算机网络
  • 传输层:TCP和UDP
    • 什么是三次握手 (three-way handshake)?
        • TCP建立连接可以两次握手吗?为什么?
        • 可以采用四次握手吗?为什么?
        • 第三次握手中,如果客户端的ACK未送达服务器,会怎样?
        • 如果已经建立了连接,但客户端出现了故障怎么办?
        • 初始序列号是什么?
    • 什么是四次挥手?
        • 为什么不能把服务器发送的ACK和FIN合并起来,变成三次挥手(CLOSE_WAIT状态意义是什么)?
        • 如果第二次挥手时服务器的ACK没有送达客户端,会怎样?
        • 客户端TIME_WAIT状态的意义是什么?
    • TCP如何实现流量控制?
        • 滑动窗口
        • 什么是零窗口(接收窗口为0时会怎样)?
    • TCP的拥塞控制是怎么实现的?
        • 拥塞控制
        • slow start
        • 快重传
    • TCP如何最大利用带宽?
        • TCP速率受到三个因素影响
    • TCP与UDP的区别
        • 什么叫无连接?
        • 什么叫不可靠?
        • 什么时候选择TCP,什么时候选UDP?
        • HTTP可以使用UDP吗?
        • 面向连接和无连接的区别
        • virtual circuit
    • TCP如何保证传输的可靠性
  • 应用层:HTTP和HTTPS
    • HTTP和HTTPS有什么区别?
        • Https的连接过程?
        • 输入 [www.baidu.com,怎么变成](http://www.baidu.xn--com%2C-yj5fs80afjwtvd/) [https://www.baidu.com](https://www.baidu.com/) 的,怎么确定用HTTP还是HTTPS?
        • HTTPS连接的时候,怎么确定收到的包是服务器发来的(中间人攻击)?
        • **HTTPS 中间人攻击**
        • 什么是对称加密、非对称加密?区别是什么?
        • 数字签名、报文摘要的原理
    • GET与POST的区别?
    • Session与Cookie的区别?
    • 从输入网址到获得页面的过程 (越详细越好)?
    • HTTP请求有哪些常见状态码?
    • 什么是RIP (Routing Information Protocol, 距离矢量路由协议)? 算法是什么?
  • **计算机网络体系结构**
        • 路由器、交换机位于哪一层?
  • 网络层协议
    • IP地址的分类?
    • 什么叫划分子网?
    • 什么是ARP协议 (Address Resolution Protocol)?
    • 什么是NAT (Network Address Translation, 网络地址转换)?
    • 客户端不断进行请求链接会怎样?DDos(Distributed Denial of Service)攻击?
  • 网络安全
    • DDos 攻击
        • DDos 预防 **( 没有彻底根治的办法,除非不使用TCP )**
    • **SQL 注入**
        • (1). SQL注入攻击的总体思路
        • (2). SQL注入攻击实例
        • (3). 应对方法
    • **XSS 攻击**
        • (1). XSS攻击的危害
        • (2). 原因解析
        • (3). XSS 攻击分类
    • 持久性XSS攻击 (留言板场景)

计算机网络

「万字整理」HTTP协议,TCP和UDP,计网及网络安全——面试高频考点(推荐收藏)_第1张图片

传输层:TCP和UDP

什么是三次握手 (three-way handshake)?

  • 第一次握手:Client将SYN置1,随机产生一个初始序列号seq发送给Server,进入SYN_SENT状态;
  • 第二次握手:Server收到Client的SYN=1之后,知道客户端请求建立连接,将自己的SYN置1,ACK置1,产生一个acknowledge number=sequence number+1,并随机产生一个自己的初始序列号,发送给客户端;进入SYN_RCVD状态;
  • 第三次握手:客户端检查acknowledge number是否为序列号+1,ACK是否为1,检查正确之后将自己的ACK置为1,产生一个acknowledge number=服务器发的序列号+1,发送给服务器;进入ESTABLISHED状态;服务器检查ACK为1和acknowledge number为序列号+1之后,也进入ESTABLISHED状态;完成三次握手,连接建立。

TCP建立连接可以两次握手吗?为什么?

不可以。有两个原因:

首先,可能会出现已失效的连接请求报文段又传到了服务器端

client 发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达 server。本来这是一个早已失效的报文段。但 server 收到此失效的连接请求报文段后,就误认为是 client 再次发出的一个新的连接请求。于是就向 client 发出确认报文段,同意建立连接。假设不采用 “三次握手”,那么只要 server 发出确认,新的连接就建立了。由于现在 client 并没有发出建立连接的请求,因此不会理睬 server 的确认,也不会向 server 发送数据。但 server 却以为新的运输连接已经建立,并一直等待 client 发来数据。这样,server 的很多资源就白白浪费掉了。采用 “三次握手” 的办法可以防止上述现象发生。例如刚才那种情况,client 不会向 server 的确认发出确认。server 由于收不到确认,就知道 client 并没有要求建立连接。

其次,两次握手无法保证Client正确接收第二次握手的报文(Server无法确认Client是否收到),也无法保证Client和Server之间成功互换初始序列号。

可以采用四次握手吗?为什么?

可以。但是会降低传输的效率。

四次握手是指:第二次握手:Server只发送ACK和acknowledge number;而Server的SYN和初始序列号在第三次握手时发送;原来协议中的第三次握手变为第四次握手。出于优化目的,四次握手中的二、三可以合并。

第三次握手中,如果客户端的ACK未送达服务器,会怎样?

Server端:
由于Server没有收到ACK确认,因此会重发之前的SYN+ACK(默认重发五次,之后自动关闭连接进入CLOSED状态),Client收到后会重新传ACK给Server。

Client端,两种情况:

  1. 在Server进行超时重发的过程中,如果Client向服务器发送数据,数据头部的ACK是为1的,所以服务器收到数据之后会读取 ACK number,进入 establish 状态
  2. 在Server进入CLOSED状态之后,如果Client向服务器发送数据,服务器会以RST包应答。

如果已经建立了连接,但客户端出现了故障怎么办?

服务器每收到一次客户端的请求后都会重新复位一个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

初始序列号是什么?

TCP连接的一方A,随机选择一个32位的序列号(Sequence Number)作为发送数据的初始序列号(Initial Sequence Number,ISN),比如为1000,以该序列号为原点,对要传送的数据进行编号:1001、1002…三次握手时,把这个初始序列号传送给另一方B,以便在传输数据时,B可以确认什么样的数据编号是合法的;同时在进行数据传输时,A还可以确认B收到的每一个字节,如果A收到了B的确认编号(acknowledge number)是2001,就说明编号为1001-2000的数据已经被B成功接受。

什么是四次挥手?

「万字整理」HTTP协议,TCP和UDP,计网及网络安全——面试高频考点(推荐收藏)_第2张图片

  • 第一次挥手:Client将FIN置为1,发送一个序列号seq给Server;进入FIN_WAIT_1状态;
  • 第二次挥手:Server收到FIN之后,发送一个ACK=1,acknowledge number=收到的序列号+1;进入CLOSE_WAIT状态。此时客户端已经没有要发送的数据了,但仍可以接受服务器发来的数据。
  • 第三次挥手:Server将FIN置1,发送一个序列号给Client;进入LAST_ACK状态;
  • 第四次挥手:Client收到服务器的FIN后,进入TIME_WAIT状态;接着将ACK置1,发送一个acknowledge number=序列号+1给服务器;服务器收到后,确认acknowledge number后,变为CLOSED状态,不再向客户端发送数据。客户端等待2*MSL(报文段最长寿命)时间后,也进入CLOSED状态。完成四次挥手。

为什么不能把服务器发送的ACK和FIN合并起来,变成三次挥手(CLOSE_WAIT状态意义是什么)?

因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复ACK,表示接收到了断开连接的请求。等到数据发完之后再发FIN,断开服务器到客户端的数据传送。

如果第二次挥手时服务器的ACK没有送达客户端,会怎样?

客户端没有收到ACK确认,会重新发送FIN请求。

客户端TIME_WAIT状态的意义是什么?

第四次挥手时,客户端发送给服务器的ACK有可能丢失,TIME_WAIT状态就是用来重发可能丢失的ACK报文。如果Server没有收到ACK,就会重发FIN,如果Client在2*MSL的时间内收到了FIN,就会重新发送ACK并再次等待2MSL,防止Server没有收到ACK而不断重发FIN。

MSL(Maximum Segment Lifetime),指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

TCP如何实现流量控制?

滑动窗口

「万字整理」HTTP协议,TCP和UDP,计网及网络安全——面试高频考点(推荐收藏)_第3张图片

使用滑动窗口协议实现流量控制。防止发送方发送速率太快,接收方缓存区不够导致溢出。接收方会维护一个接收窗口 receiver window(窗口大小单位是字节),接受窗口的大小是根据自己的资源情况动态调整的,在返回ACK时将接受窗口大小放在TCP报文中的窗口字段告知发送方。发送窗口的大小不能超过接受窗口的大小,只有当发送方发送并收到确认之后,才能将发送窗口右移。

发送窗口的上限为接受窗口和拥塞窗口中的较小值。接受窗口表明了接收方的接收能力,拥塞窗口表明了网络的传送能力。

「万字整理」HTTP协议,TCP和UDP,计网及网络安全——面试高频考点(推荐收藏)_第4张图片

什么是零窗口(接收窗口为0时会怎样)?

如果接收方没有能力接收数据,就会将接收窗口设置为0,这时发送方必须暂停发送数据,但是会启动一个持续计时器(persistence timer),到期后发送一个大小为1字节的探测数据包,以查看接收窗口状态。如果接收方能够接收数据,就会在返回的报文中更新接收窗口大小,恢复数据传送。

TCP的拥塞控制是怎么实现的?

拥塞控制

「万字整理」HTTP协议,TCP和UDP,计网及网络安全——面试高频考点(推荐收藏)_第5张图片

拥塞控制主要由四个算法组成:慢启动(Slow Start)、拥塞避免(Congestion voidance)、快重传 (Fast Retransmit)、快恢复(Fast Recovery)

  1. 慢启动:刚开始发送数据时,先把拥塞窗口(congestion window)设置为一个最大报文段MSS的数值,每收到一个新的确认报文之后,就把拥塞窗口加1个MSS。这样每经过一个传输轮次(或者说是每经过一个往返时间RTT),拥塞窗口的大小就会加倍

slow start

「万字整理」HTTP协议,TCP和UDP,计网及网络安全——面试高频考点(推荐收藏)_第6张图片

  1. 拥塞避免:当拥塞窗口的大小达到慢开始门限(slow start threshold)时,开始执行拥塞避免算法,拥塞窗口大小不再指数增加,而是线性增加,即每经过一个传输轮次只增加1MSS.

无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。(这是不使用快重传的情况)

  1. 快重传:快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。

快重传

「万字整理」HTTP协议,TCP和UDP,计网及网络安全——面试高频考点(推荐收藏)_第7张图片

  1. 快恢复:当发送方连续收到三个重复确认时,就把慢开始门限减半,然后执行拥塞避免算法。不执行慢开始算法的原因:因为如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方认为现在网络可能没有出现拥塞。
    也有的快重传是把开始时的拥塞窗口cwnd值再增大一点,即等于 ssthresh + 3*MSS 。这样做的理由是:既然发送方收到三个重复的确认,就表明有三个分组已经离开了网络。这三个分组不再消耗网络的资源而是停留在接收方的缓存中。可见现在网络中减少了三个分组。因此可以适当把拥塞窗口扩大些。

TCP如何最大利用带宽?

TCP速率受到三个因素影响

  • 窗口:即滑动窗口大小,见TCP如何实现流量控制
  • 带宽:这里带宽是指单位时间内从发送端到接收端所能通过的“最高数据率”,是一种硬件限制。TCP发送端和接收端的数据传输数不可能超过两点间的带宽限制。发送端和接收端之间带宽取所通过线路的带宽最小值(如通过互联网连接)。
  • RTT:即Round Trip Time,表示从发送端到接收端的一去一回需要的时间,TCP在数据传输过程中会对RTT进行采样(即对发送的数据包及其ACK的时间差进行测量,并根据测量值更新RTT值),TCP根据得到的RTT值更新RTO值,即Retransmission TimeOut,就是重传间隔,发送端对每个发出的数据包进行计时,如果在RTO时间内没有收到所发出的数据包的对应ACK,则任务数据包丢失,将重传数据。一般RTO值都比采样得到的RTT值要大。

TCP与UDP的区别

  1. TCP是面向连接的,UDP是无连接的;

什么叫无连接?

UDP发送数据之前不需要建立连接

  1. TCP是可靠的,UDP不可靠;

什么叫不可靠?

UDP接收方收到报文后,不需要给出任何确认

  1. TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多;

  2. TCP是面向字节流的,UDP是面向报文的;

什么意思?

面向字节流是指发送数据时以字节为单位,一个数据包可以拆分成若干组进行发送,而UDP一个报文只能一次发完。

  1. TCP有拥塞控制机制,UDP没有。网络出现的拥塞不会使源主机的发送速率降低,这对某些实时应用是很重要的,比如媒体通信,游戏;

  2. TCP首部开销(20字节)比UDP首部开销(8字节)要大

  3. UDP 的主机不需要维持复杂的连接状态表

什么时候选择TCP,什么时候选UDP?

对某些实时性要求比较高的情况,选择UDP,比如游戏,媒体通信,实时视频流(直播),即使出现传输错误也可以容忍;其它大部分情况下,HTTP都是用TCP,因为要求传输的内容可靠,不出现丢失

HTTP可以使用UDP吗?

HTTP不可以使用UDP,HTTP需要基于可靠的传输协议,而UDP不可靠

注:http 3.0 使用udp实现 https://zh.wikipedia.org/wiki/HTTP/3

面向连接和无连接的区别

无连接的网络服务(数据报服务)-- 面向连接的网络服务(虚电路服务)

虚电路服务:首先建立连接,所有的数据包经过相同的路径,服务质量有较好的保证;

数据报服务:每个数据包含目的地址,数据路由相互独立(路径可能变化);网络尽最大努力交付数据,但不保证不丢失、不保证先后顺序、不保证在时限内交付;网络发生拥塞时,可能会将一些分组丢弃;

virtual circuit

「万字整理」HTTP协议,TCP和UDP,计网及网络安全——面试高频考点(推荐收藏)_第8张图片

TCP如何保证传输的可靠性

  1. 数据包校验
  2. 对失序数据包重新排序(TCP报文具有序列号)
  3. 丢弃重复数据
  4. 应答机制:接收方收到数据之后,会发送一个确认(通常延迟几分之一秒);
  5. 超时重发:发送方发出数据之后,启动一个定时器,超时未收到接收方的确认,则重新发送这个数据;
  6. 流量控制:确保接收端能够接收发送方的数据而不会缓冲区溢出

应用层:HTTP和HTTPS

HTTP和HTTPS有什么区别?

  1. 端口不同:HTTP使用的是80端口,HTTPS使用443端口;
  2. HTTP(超文本传输协议)信息是明文传输,HTTPS运行在SSL(Secure Socket Layer)之上,添加了加密和认证机制,更加安全;
  3. HTTPS由于加密解密会带来更大的CPU和内存开销;
  4. HTTPS通信需要证书,一般需要向证书颁发机构(CA)购买

Https的连接过程?

  1. 客户端向服务器发送请求,同时发送客户端支持的一套加密规则(包括对称加密、非对称加密、摘要算法);
  2. 服务器从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥(用于非对称加密),以及证书的颁发机构等信息(证书中的私钥只能用于服务器端进行解密);
  3. 客户端验证服务器的合法性,包括:证书是否过期,CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配;
  4. 如果证书受信任,或者用户接收了不受信任的证书,浏览器会生成一个随机密钥(用于对称算法),并用服务器提供的公钥加密(采用非对称算法对密钥加密);使用Hash算法对握手消息进行摘要计算,并对摘要使用之前产生的密钥加密(对称算法);将加密后的随机密钥和摘要一起发送给服务器;
  5. 服务器使用自己的私钥解密,得到对称加密的密钥,用这个密钥解密出Hash摘要值,并验证握手消息是否一致;如果一致,服务器使用对称加密的密钥加密握手消息发给浏览器;
  6. 浏览器解密并验证摘要,若一致,则握手结束。之后的数据传送都使用对称加密的密钥进行加密

总结:非对称加密算法用于在握手过程中加密生成的密码;对称加密算法用于对真正传输的数据进行加密;HASH算法用于验证数据的完整性。

输入 www.baidu.com,怎么变成 https://www.baidu.com 的,怎么确定用HTTP还是HTTPS?

你访问的网站是如何自动切换到 HTTPS 的?

一种是原始的302跳转,服务器把所有的HTTp流量跳转到HTTPS。但这样有一个漏洞,就是中间人可能在第一次访问站点的时候就劫持。 解决方法是引入HSTS机制,用户浏览器在访问站点的时候强制使用HTTPS。

HTTPS连接的时候,怎么确定收到的包是服务器发来的(中间人攻击)?

使用对称与非对称加密结合

传输数据阶段依然使用对称加密,但是对称加密的秘钥会采用非对称加密传输。

「万字整理」HTTP协议,TCP和UDP,计网及网络安全——面试高频考点(推荐收藏)_第9张图片

  • 浏览器向服务端发送 client_random 和加密方法列表。
  • 服务端收到后返回 server_random、加密方法以及公钥。
  • 浏览器收到后生成另一个随机数 pre_master,并用公钥加密,传给服务端(重点)。
  • 服务端用私钥解密这个被加密后的 pre_master。

到此,服务端和浏览器就有了相同的 client_random、server_random 和 pre_master,然后服务端和浏览器会使用这三组随机数生成对称秘钥。有了对称秘钥后,双方就可以使用这个对称加密的密钥来传输数据。

HTTPS 中间人攻击

针对SSL的中间人攻击方式主要有两类,分别是SSL劫持攻击和SSL剥离攻击

SSL劫持攻击
攻击者在传输过程中伪造服务器的证书,将服务器的公钥替换成自己的公钥;

但是对于客户端来说,如果中间人伪造了证书,在校验证书过程中会提示证书错误。

SSL剥离攻击
中间人和服务器之间仍然保持HTTPS服务器;

之后将HTTPS范文替换为HTTP返回给浏览器。

HTTPS 从协议上解决了 HTTP 时代的中间人攻击问题,但是 HTTPS 在用户主动信任了伪造证书的时候也会发生中间人攻击(比如早期的 12306 需要手动信任证书),HTTPS 中间人攻击流程如下:

  1. 客户端用 HTTPS 连接服务器的 443 端口。
  2. 服务器下发自己的数字证书给客户端。
  3. 黑客劫持了服务器的真实证书,并伪造了一个假的证书给浏览器。
  4. 浏览器可以发现得到的网站证书是假的,但是浏览器选择信任。
  5. 浏览器生成随机对称密钥 A,用伪造的证书中的公钥加密发往服务器。
  6. 黑客同样可以劫持这个请求,得到浏览器的对称密钥 A,从而能够窃听或者篡改通信数据。
  7. 黑客利用服务器的真实公钥将客户端的对称密钥 A 加密发往服务器。
  8. 服务器利用私钥解密这个对称密钥 A 之后与黑客通信。
  9. 黑客利用对称密钥 A 解密服务器的数据,篡改之后利用对称密钥 A 加密发给客户端。
  10. 客户端收到的数据已经是不安全的了。

以上就是 HTTPS 中间人攻击的原理,这也就是 HTTPS 抓包为什么要信任证书的原因。所以,操作系统内置权威 CA 公钥来保证数字签名以及数字证书的安全性。实施 HTTPS 中间人攻击需要手动信任攻击者的假证书。

什么是对称加密、非对称加密?区别是什么?

  • 对称加密:加密和解密采用相同的密钥。如:DES、RC2、RC4
  • 非对称加密:需要两个密钥:公钥和私钥。如果用公钥加密,需要用私钥才能解密。如:RSA
  • 区别:对称加密速度更快,通常用于大量数据的加密;非对称加密安全性更高(不需要传送私钥)

数字签名、报文摘要的原理

  • 发送者A用私钥进行签名,接收者B用公钥验证签名。因为除A外没有人有私钥,所以B相信签名是来自A。A不可抵赖,B也不能伪造报文。
  • 摘要算法:MD5、SHA

GET与POST的区别?

  1. GET是幂等的,即读取同一个资源,总是得到相同的数据,POST不是幂等的;
  2. GET一般用于从服务器获取资源,而POST有可能改变服务器上的资源;
  3. 请求形式上:GET请求的数据附在URL之后,在HTTP请求头中;POST请求的数据在请求体中;
  4. 安全性:GET请求可被缓存、收藏、保留到历史记录,且其请求数据明文出现在URL中。POST的参数不会被保存,安全性相对较高;
  5. GET只允许ASCII字符,POST对数据类型没有要求,也允许二进制数据;
  6. GET的长度有限制(操作系统或者浏览器),而POST数据大小无限制

Session与Cookie的区别?

Session是服务器端保持状态的方案,Cookie是客户端保持状态的方案

Cookie保存在客户端本地,客户端请求服务器时会将Cookie一起提交;Session保存在服务端,通过检索Sessionid查看状态。保存Sessionid的方式可以采用Cookie,如果禁用了Cookie,可以使用URL重写机制(把会话ID保存在URL中)。

从输入网址到获得页面的过程 (越详细越好)?

  1. 浏览器查询 DNS,获取域名对应的IP地址:具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;
  2. 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;
  3. TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;
  4. 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
  5. 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;
  6. 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。

HTTP请求有哪些常见状态码?

  1. 2xx状态码:操作成功。200 OK
  2. 3xx状态码:重定向。301 永久重定向;302暂时重定向
  3. 4xx状态码:客户端错误。400 Bad Request;401 Unauthorized;403 Forbidden;404 Not Found;
  4. 5xx状态码:服务端错误。500服务器内部错误;501服务不可用

什么是RIP (Routing Information Protocol, 距离矢量路由协议)? 算法是什么?

每个路由器维护一张表,记录该路由器到其它网络的”跳数“,路由器到与其直接连接的网络的跳数是1,每多经过一个路由器跳数就加1;更新该表时和相邻路由器交换路由信息;路由器允许一个路径最多包含15个路由器,如果跳数为16,则不可达。交付数据报时优先选取距离最短的路径。

(PS:RIP是应用层协议:https://www.zhihu.com/question/19645407)

优缺点

  • 实现简单,开销小
  • 随着网络规模扩大开销也会增大;
  • 最大距离为15,限制了网络的规模;
  • 当网络出现故障时,要经过较长的时间才能将此信息传递到所有路由器

计算机网络体系结构

「万字整理」HTTP协议,TCP和UDP,计网及网络安全——面试高频考点(推荐收藏)_第10张图片

  • Physical, Data Link, Network, Transport, Application
  • 应用层:常见协议:
    • FTP(21端口):文件传输协议
    • SSH(22端口):远程登陆
    • TELNET(23端口):远程登录
    • SMTP(25端口):发送邮件
    • POP3(110端口):接收邮件
    • HTTP(80端口):超文本传输协议
    • DNS(53端口):运行在UDP上,域名解析服务
  • 传输层:TCP/UDP
  • 网络层:IP、ARP、NAT、RIP…

路由器、交换机位于哪一层?

  • 路由器网络层,根据IP地址进行寻址;
  • 交换机数据链路层,根据MAC地址进行寻址

网络层协议

IP地址的分类?

「万字整理」HTTP协议,TCP和UDP,计网及网络安全——面试高频考点(推荐收藏)_第11张图片

路由器仅根据网络号net-id来转发分组,当分组到达目的网络的路由器之后,再按照主机号host-id将分组交付给主机;同一网络上的所有主机的网络号相同。

什么叫划分子网?

从主机号host-id借用若干个比特作为子网号subnet-id;子网掩码:网络号和子网号都为1,主机号为0;数据报仍然先按照网络号找到目的网络,发送到路由器,路由器再按照网络号和子网号找到目的子网:将子网掩码与目标地址逐比特与操作,若结果为某个子网的网络地址,则送到该子网。

什么是ARP协议 (Address Resolution Protocol)?

ARP协议完成了IP地址与物理地址的映射。每一个主机都设有一个 ARP 高速缓存,里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。当源主机要发送数据包到目的主机时,会先检查自己的ARP高速缓存中有没有目的主机的MAC地址,如果有,就直接将数据包发到这个MAC地址,如果没有,就向所在的局域网发起一个ARP请求的广播包(在发送自己的 ARP 请求时,同时会带上自己的 IP 地址到硬件地址的映射),收到请求的主机检查自己的IP地址和目的主机的IP地址是否一致,如果一致,则先保存源主机的映射到自己的ARP缓存,然后给源主机发送一个ARP响应数据包。源主机收到响应数据包之后,先添加目的主机的IP地址与MAC地址的映射,再进行数据传送。如果源主机一直没有收到响应,表示ARP查询失败。

如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。

什么是NAT (Network Address Translation, 网络地址转换)?

用于解决内网中的主机要和因特网上的主机通信。由NAT路由器将主机的本地IP地址转换为全球IP地址,分为静态转换(转换得到的全球IP地址固定不变)和动态NAT转换。

客户端不断进行请求链接会怎样?DDos(Distributed Denial of Service)攻击?

服务器端会为每个请求创建一个链接,并向其发送确认报文,然后等待客户端进行确认


网络安全

DDos 攻击

  • 客户端向服务端发送请求链接数据包
  • 服务端向客户端发送确认数据包
  • 客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认

DDos 预防 ( 没有彻底根治的办法,除非不使用TCP )

  • 限制同时打开SYN半链接的数目
  • 缩短SYN半链接的Time out 时间
  • 关闭不必要的服务

SQL 注入

SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

(1). SQL注入攻击的总体思路

(1). 寻找到SQL注入的位置
  (2). 判断服务器类型和后台数据库类型
  (3). 针对不通的服务器和数据库特点进行SQL注入攻击

(2). SQL注入攻击实例

比如,在一个登录界面,要求输入用户名和密码,可以这样输入实现免帐号登录:

用户名: ‘or 1 = 1 --
密 码:

用户一旦点击登录,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了。这是为什么呢?下面我们分析一下:从理论上说,后台认证程序中会有如下的SQL语句:String sql = “select * from user_table where username=’ “+userName+” ’ and password=’ “+password+” ‘”; 因此,当输入了上面的用户名和密码,上面的SQL语句变成:SELECT * FROM user_table WHERE username=’’or 1 = 1 – and password=’’。分析上述SQL语句我们知道,
username=‘ or 1=1 这个语句一定会成功;然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用。这样,上述语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

(3). 应对方法

(1). 参数绑定

使用预编译手段,绑定参数是最好的防SQL注入的方法。目前许多的ORM框架及JDBC等都实现了SQL预编译和参数绑定功能,攻击者的恶意SQL会被当做SQL的参数而不是SQL命令被执行。在mybatis的mapper文件中,对于传递的参数我们一般是使用#和KaTeX parse error: Expected 'EOF', got '#' at position 11: 来获取参数值。当使用#̲时,变量是占位符,就是一般我们…时,变量就是直接追加在sql中,一般会有sql注入问题。

(2). 使用正则表达式过滤传入的参数

XSS 攻击

XSS是一种经常出现在web应用中的计算机安全漏洞,与SQL注入一起成为web中最主流的攻击方式。XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些脚本代码嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

(1). XSS攻击的危害

  • 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
  • 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
  • 盗窃企业重要的具有商业价值的资料
  • 非法转账
  • 强制发送电子邮件
  • 网站挂马
  • 控制受害者机器向其它网站发起攻击

(2). 原因解析

**主要原因:**过于信任客户端提交的数据!

**解决办法:**不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。

**进一步分析细节:**客户端提交的数据本来就是应用所需要的,但是恶意攻击者利用网站对客户端提交数据的信任,在数据中插入一些符号以及javascript代码,那么这些数据将会成为应用代码中的一部分了,那么攻击者就可以肆无忌惮地展开攻击啦,因此我们绝不可以信任任何客户端提交的数据!!!

(3). XSS 攻击分类

(1). 反射性XSS攻击 (非持久性XSS攻击)

漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS攻击包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击),例如,正常发送消息:

http://www.test.com/message.php?send=Hello,World!

接收者将会接收信息并显示Hello,World;但是,非正常发送消息:

http://www.test.com/message.php?send=<script>alert(‘foolish!)</script>

接收者接收消息显示的时候将会弹出警告窗口!

持久性XSS攻击 (留言板场景)

XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。也就是说,每当用户使用浏览器打开指定页面时,脚本便执行。与非持久性XSS攻击相比,持久性XSS攻击危害性更大。从名字就可以了解到,持久性XSS攻击就是将攻击代码存入数据库中,然后客户端打开时就执行这些攻击代码。

例如,留言板表单中的表单域:
<input type=“text” name=“content” value=“这里是用户填写的数据”>

正常操作流程是:用户是提交相应留言信息 —— 将数据存储到数据库 —— 其他用户访问留言板,应用去数据并显示;而非正常操作流程是攻击者在value填写:

<script>alert(‘foolish!)script> 

并将数据提交、存储到数据库中;当其他用户取出数据显示的时候,将会执行这些攻击性代码。

修复漏洞方针

漏洞产生的根本原因是 太相信用户提交的数据,对用户所提交的数据过滤不足所导致的,因此解决方案也应该从这个方面入手,具体方案包括:

  • 将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能
    获取到cookie了(如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击);

  • 表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合。。。。

  • 对数据进行Html Encode 处理

  • 过滤或移除特殊的Html标签,例如:

需要注意的是,在有些应用中是允许html标签出现的,甚至是javascript代码出现。因此,我们在过滤数据的时候需要仔细分析哪些数据是有特殊要求(例如输出需要html代码、javascript代码拼接、或者此表单直接允许使用等等),然后区别处理!

你可能感兴趣的:(浏览器及网络知识,javascript,前端,网络)