1. 说说HTTP常用的状态码及其含义
2. HTTP 常用的请求方式,区别和用途?
3. 端口及对应的服务
6379 redis
4. ISO七层模型
应用层:网络服务与最终用户的一个接口,常见的协议有:HTTP FTP SMTP SNMP DNS.
表示层:数据的表示、安全、压缩。确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
会话层:建立、管理、终止会话,对应主机进程,指本地主机与远程主机正在进行的会话.
传输层:定义传输数据的协议端口号,以及流控和差错校验,协议有TCP UDP.
网络层:进行逻辑地址寻址,实现不同网络之间的路径选择,协议有ICMP IGMP IP等.
数据链路层:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路。
物理层:建立、维护、断开物理连接。
TCP四层模型
应用层
传输层
网际层
网络接口层
5. HTTP协议是无状态的
当浏览器第一次发送请求给服务器时,服务器响应了;如果同个浏览器发起第二次请求给服务器时,它还是会响应,但是呢,服务器不知道你就是刚才的那个浏览器。简言之,服务器不会去记住你是谁,所以是无状态协议。
6. 从浏览器地址栏输入url到显示主页的过程
- DNS解析,查找域名对应的IP地址。
- 与服务器通过三次握手,建立TCP连接
- 向服务器发送HTTP请求
- 服务器处理请求,返回网页内容
- 浏览器解析并渲染页面
- TCP四次挥手,连接结束
7. HTTP/1.0,1.1,2.0的区别
HTTP/1.0
默认使用短连接,每次请求都需要建立一个TCP连接。
它可以设置Connection: keep-alive 这个字段,强制开启长连接。
HTTP/1.1
持久连接,即TCP连接默认不关闭,可以被多个请求复用。
管道机制,即在同一个TCP连接里面,客户端可以同时发送多个请求。
HTTP/2.0
二进制协议,1.1版本的头信息是文本(ASCII编码),数据体可以是文本或者二进制;2.0中,头信息和数据体都是二进制。
完全多路复用,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。
报头压缩,HTTP协议不带有状态,每次请求都必须附上所有信息。Http/2.0引入了头信息压缩机制,使用gzip或compress压缩后再发送。
服务端推送,允许服务器未经请求,主动向客户端发送资源。
8. POST和GET有哪些区别
9. HTTP 与 HTTPS 的区别。
HTTP
是一个基于TCP/IP通信协议来传递明文数据的协议。
- 请求信息是明文传输,容易被窃听截取。
- 没有验证对方身份,存在被冒充的风险
- 数据的完整性未校验,容易被中间人篡改
HTTPS= HTTP+SSL/TLS
Https是身披SSL(Secure Socket Layer,安全套接层)的HTTP。
10. Https流程是怎样的?
- 客户端发起Https请求,连接到服务器的443端口。
- 服务器必须要有一套数字证书(证书内容有公钥、证书颁发机构、失效日期等)。
- 服务器将自己的数字证书发送给客户端(公钥在证书里面,私钥由服务器持有)。
- 客户端收到数字证书之后,会验证证书的合法性。如果证书验证通过,就会生成一个用于会话的对称密钥,用证书的公钥加密。
- 客户端将公钥加密后的密钥发送到服务器。
- 服务器接收到客户端发来的密文密钥之后,用自己之前保留的私钥对其进行非对称解密,解密之后就得到客户端的密钥,然后用客户端密钥对返回数据进行对称加密,酱紫传输的数据都是密文啦。
- 服务器将加密后的密文返回到客户端。
- 客户端收到后,用自己的密钥对其进行对称解密,得到服务器返回的数据。
11. HTTP的状态码,301和302的区别
301:(永久性转移)请求的网页已被永久移动到新位置。
302:(暂时性转移)服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
12. DNS的解析过程
假设要查询www.baidu.com的IP地址:
- 首先会查找浏览器的缓存,看看是否能找到www.baidu.com对应的IP地址,找到就直接返回。
- 将请求发往给本地DNS服务器,如果查找到也直接返回;
- 本地DNS服务器向根域名服务器发送请求,根域名服务器返回负责.com的顶级域名服务器的IP地址的列表。
- 本地DNS服务器再向其中一个负责.com的顶级域名服务器发送一个请求,返回负责.baidu的权威域名服务器的IP地址列表。
- 本地DNS服务器再向其中一个权威域名服务器发送一个请求,返回www.baidu.com所对应的IP地址。
13. WebSocket与socket的区别
- WebSocket是一个持久化的协议,它是伴随H5而出的协议,用来解决http不支持持久化连接的问题。
- Socket一个是网编编程的标准接口,而WebSocket则是应用层通信协议。
14. 什么是DoS、DDoS、DRDoS攻击?
- DOS: 是拒绝服务,一切能引起DOS行为的攻击都被称为DOS攻击。最常见的DoS攻击就有计算机网络宽带攻击、连通性攻击。
- DDoS: 是分布式拒绝服务。是指处于不同位置的多个攻击者同时向一个或几个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。常见的DDos有SYN Flood、Ping of Death、ACK Flood、UDP Flood等。
- DRDoS:是分布式反射拒绝服务,该方式靠的是发送大量带有被害者IP地址的数据包给攻击主机,然后攻击主机对IP地址源做出大量回应,从而形成拒绝服务攻击。
15. Http请求的过程与原理
- 客户端进行DNS域名解析,得到对应的IP地址
- 根据这个IP,找到对应的服务器建立连接(三次握手)
- 建立TCP连接后发起HTTP请求(一个完整的http请求报文)
- 服务器响应HTTP请求,客户端得到html代码
- 客户端解析html代码,用html代码中的资源(如js,css,图片等等)渲染页面。
- 服务器关闭TCP连接(四次挥手)
16. forward和redirect的区别
直接转发方式(Forward) ,客户端和浏览器只发出一次请求,HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。
间接转发方式(Redirect) 实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。
17. IP地址有哪些分类?
IP地址=网络号+主机号。
- 网络号:它标志主机所连接的网络地址表示属于互联网的哪一个网络。
- 主机号:它标志主机地址表示其属于该网络中的哪一台主机。
- A类地址(1~126):以0开头,网络号占前8位,主机号占后面24位。
- B类地址(128~191):以10开头,网络号占前16位,主机号占后面16位。
- C类地址(192~223):以110开头,网络号占前24位,主机号占后面8位。
- D类地址(224~239):以1110开头,保留位多播地址。
- E类地址(240~255):以11110开头,保留位为将来使用。
18. ARP 协议的工作过程
- 每台主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。
- 当源主机需要将一个数据包要发送到目的主机时,会首先检查自己的ARP列表,是否存在该IP地址对应的MAC地址;如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求的数据包里,包括源主机的IP地址、硬件地址、以及目的主机的IP地址。
- 网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同,就会忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址。
- 源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
19. 有了IP地址,为什么还要用MAC地址
- 只用MAC地址,后来随着网络中的设备越来越多,整个路由过程越来越复杂,便出现了子网的概念。对于目的地址在其他子网的数据包,路由只需要将数据包送到那个子网即可。
- 只用MAC地址的话,路由器则需要记住每个MAC地址在哪个子网,这需要路由器有极大的存储空间,是无法实现的。
- IP地址可以比作为地址,MAC地址为收件人,在一次通信过程中,两者是缺一不可的。
20. TCP 和 UDP 分别对应的常见应用层协议有哪些
基于TCP的应用层协议有:HTTP、FTP、SMTP、TELNET、SSH
- HTTP:默认端口80
- FTP: 文件传输协议, 默认端口(20用于传输数据,21用于传输控制信息)
- SMTP: 简单邮件传输协议,默认端口25
- TELNET: 网络电传, 默认端口23
- SSH:安全外壳协议,默认端口 22
基于UDP的应用层协议:DNS、TFTP、SNMP
DNS : 域名服务,默认端口 53
TFTP: 简单文件传输协议,默认端口69
SNMP:简单网络管理协议,通过UDP端口161接收,只有Trap信息采用UDP端口162。
21. TCP 的三次握手机制
- 第一次握手(SYN=1, seq=x),发送完毕后,客户端就进入SYN_SEND状态。
- 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1), 发送完毕后,服务器端就进入SYN_RCV状态。
- 第三次握手(ACK=1,ACKnum=y+1),发送完毕后,客户端进入ESTABLISHED状态,当服务器端接收到这个包时,也进入ESTABLISHED状态。
22. TCP握手为什么是三次,为什么不能是两次?不能是四次?
为什么握手不能是两次呢?
如果只有两次握手,服务端可能就不知道客户端是否收到服务端回复的收到的信息。
为什么握手不能是四次呢?
因为握手不能是四次呢?因为三次已经够了,三次已经能让双方都知道,而四次就多余了。
23. TCP四次挥手过程
- 第一次挥手(FIN=1,seq=u),发送完毕后,客户端进入FIN_WAIT_1状态。
- 第二次挥手(ACK=1,ack=u+1,seq =v),发送完毕后,服务器端进入CLOSE_WAIT状态,客户端接收到这个确认包之后,进入FIN_WAIT_2状态。
- 第三次挥手(FIN=1,ACK1,seq=w,ack=u+1),发送完毕后,服务器端进入LAST_ACK状态,等待来自客户端的最后一个ACK。
- 第四次挥手(ACK=1,seq=u+1,ack=w+1),客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入TIME_WAIT状态,等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入CLOSED状态。服务器端接收到这个确认包之后,关闭连接,进入CLOSED状态。
24. TCP挥手为什么需要四次呢?
服务端在收到客户端断开连接Fin报文后,并不会立即关闭连接,而是先发送一个ACK包先告诉客户端收到关闭连接的请求,只有当服务器的所有报文发送完毕之后,才发送FIN报文断开连接,因此需要四次挥手
25. TCP四次挥手过程中,为什么需要等待2MSL,才进入CLOSED关闭状态
- 为了保证客户端发送的最后一个ACK报文段能够到达服务端。 这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的服务端就收不到对已发送的FIN + ACK报文段的确认。服务端会超时重传这个FIN+ACK 报文段,而客户端就能在 2MSL 时间内(超时 + 1MSL 传输)收到这个重传的 FIN+ACK 报文段。接着客户端重传一次确认,重新启动2MSL计时器。最后,客户端和服务器都正常进入到CLOSED状态。
- 防止已失效的连接请求报文段出现在本连接中。 客户端在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个连接中不会出现这种旧的连接请求报文段。
26. 半连接队列和 SYN Flood攻击的关系
- TCP三次握手时,客户端发送SYN到服务端,服务端收到之后,便回复ACK和SYN,状态由LISTEN变为SYN_RCVD,此时这个连接就被推入了SYN队列,即半连接队列。
- 当客户端回复ACK, 服务端接收后,三次握手就完成了。这时连接会等待被具体的应用取走,在被取走之前,它被推入ACCEPT队列,即全连接队列。
SYN Flood是一种典型的DDos攻击,伪造不存在的IP地址,向服务器大量发起SYN报文。当服务器回复SYN+ACK报文后,不会收到ACK回应报文,导致服务器上建立大量的半连接半连接队列满了,这就无法处理正常的TCP请求啦。
27. 浏览器解析顺序
- 浏览器接收到响应数据后,解析器先对HTML之类的文档进行解析,构建成DOM节点树,同时,CSS会被CSS解析器解析生成样式表。
- 解析html标签过程中遇到
28. 浏览器解码顺序
浏览器一般的解码顺序是先进行html解码,再进行javascript解码,最后再进行url解码
29. JWT是什么?
JWT:JSON Web Token,其实token就是一段字符串,由三部分组成:Header,Payload,Signature。JWT 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。
Cookie、Session 和 Token 的区别主要有以下几点区别:
- 存储位置不同:Cookie 存储在客户端,即浏览器中的文本文件,通过在 HTTP 头中传递给服务器来进行通信;Session 是服务器端的存储方式,通常存储在服务器的内存或数据库中;Token 也是存储在客户端,但是通常以加密的方式存储在客户端的 localStorage 或 sessionStorage 中。
- 数据安全性不同:Cookie 存储在客户端,可能会被窃取或篡改,因此对敏感信息的存储需要进行加密处理;Session 存储在服务器端,通过一个 Session ID 在客户端和服务器之间进行关联,可以避免敏感数据直接暴露;Token 通常使用加密算法生成,有效期较短且单向不可逆,可以提供较高的安全性。
- 跨域支持不同:为了防止安全事故,因此 Cookie 是不支持跨域传输的,也就是不同域名下的 Cookie 是不能相互访问的;而 Session 机制通常是通过 Cookie 来保存 Session ID 的,因此 Session ID 默认情况下也是不支持跨域的;但 Token 可以轻松实现跨域,因为 Token 是存储在客户端的 localStorage 或者作为请求头的一部分发送到服务器的,所以不同的域名 Token 信息传输通常是不受影响的。
- 状态管理不同:Cookie 是应用程序通过在客户端存储临时数据,用于实现状态管理的一种机制;Session 是服务器端记录用户状态的方式,服务器会为每个会话分配一个唯一的 Session ID,并将其与用户状态相关联;Token 是一种用于认证和授权的一种机制,通常表示用户的身份信息和权限信息。
内网网段及其掩码
内网IP段:
C类:192.168.0.0 - 192.168.255.255 子网掩码:255.255.255.0
B类:172.16.0.0 - 172.31.255.255 子网掩码:255.255.255.0
A类:10.0.0.0 - 10.255.255.255 子网掩码:255.255.255.0
DDOS检测流程
- 流量监控:
- 通过实时捕获网络流量数据(如TCP连接数、数据包速率、端口活跃度等)建立基线模型。
- 检测多对一网络流(多个源IP向同一目标IP发送请求)。
- 异常识别:
- 提取流量特征(如IP地址增速、端口随机性、SYN/ACK比例异常)。
- 使用机器学习或阈值判断流量是否偏离正常范围(如带宽突增、延迟升高)。
- 攻击确认:
- 通过协议分析(如HTTP Flood的请求重复性)和流量清洗设备验证攻击模式。
- 结合云平台元数据(如AWS的169.254.169.254接口)判断是否为反射攻击。
- 响应处置:
- 启动防火墙或清洗设备过滤异常流量。
- 动态调整路由策略,将攻击流量牵引至黑洞或清洗中心。