HTTP状态码及其含义

  1. 1xx:信息性状态码
  2. 2xx:成功类
  3. 3xx:重定向类
  4. 4xx:客户端错误类
  5. 5xx:服务端错误类
  1. 200:请求成功
  2. 301:永久性重定向,会缓存
  3. 302:临时重定向,不会缓存
  4. 400:客户端请求语法错误
  5. 403:权限限制
  6. 404:找不到资源
  7. 500:服务器内部错误(内部异常啦)

HTTP请求方式

  1. GET:查询
  2. POST:新增数据
  3. PUT:修改数据
  4. HEAD:请求获取响应头信息
  5. DELETE:删除
  6. OPTIONS:返回所有可用的请求方法
  7. CONNECT:用于SSL隧道基于代理的请求
  8. TRACE:追踪请求和响应的传输路径

    网络体系结构

  9. OSI-7层

    1. 应用层、表示层、会话层
  10. TCP/IP-4层
  11. 教学专用-5层

image.png

怎么理解HTTP的无状态

浏览器发送请求给服务器后并不记忆浏览器,浏览器再次发送请求,服务器不知道你是谁。

浏览器中键入URL后发生什么?

  1. 进行DNS域名解析
  2. TCP三次握手
  3. SSL/TLS安全握手
  4. HTTP、HTTPS报文
  5. 浏览器解析报文并渲染页面
  6. TCP四次挥手

    HTTP各个版本区别

  7. HTTP1.0:默认短连接,可以设置Connection: keep-alive 这个字段,强制开启长连接

  8. HTTP1.1:默认长连接,管道机制(客户端可以同时发送多个请求),流模式(服务器每产生一块数据就发送一块数据)
  9. HTTP2.0

    POST和GET区别

  10. GET请求产生1个数据包,POST产生2个数据包(先header在body)

  11. GET不安全、POST安全
  12. 提交form表单时,GET支持ACSII码,POST支持整个ISO10646字符集

HTTP 如何实现长连接?在什么时候会超时?

  1. TCP的keep-alive包含三个参数
    1. tcp_keepalive_time:允许闲置的时间
    2. tcp_keepalive_intvl:闲置时间过长后,每隔tcp_keepalive_intvl s发送探测
    3. tcp_keepalive_probes:发送了超过tcp_keepalive_probes次,就断开连接
  2. HTTP的长连接是依靠TCP实现的

    HTTP和HTTPS区别

  3. HTTP

    1. 明文传输容易被窃听
    2. 没有验证对方身份
    3. 数据完整性未校验,容易被中间人篡改
  4. HTTPS

    1. 定义:HTTPS = HTTP + SSL/TLS
    2. HTTPS的工作流程
    • 客户端发起HTTPS请求,连接到服务器的443端口
    • 服务器返回公钥和数字证书
    • 客户端对数字证书进行验证
    • 客户端生成秘钥,并通过公钥加密,传输给服务器
    • 服务器通过私钥解密,之后请求均使用这个秘钥加密传输

      301和302的区别

  5. 301:永久性重定向,老地址永远的不用啦,以后的请求都转到重定向的那个地址

  6. 302:临时性重定向,老地址可能还会用到,以后的请求还是走老地址

    数字签名和数字证书

  7. 名词解释

    1. 数字证书:是网络中标识通讯各方身份的一个数字认证,就是网络中的服务器的一个身份证
    2. 数字签名:是数字证书的组成部分,是对数字证书中服务器信息的一个签名

image.png

  1. 数字证书的构成

    1. 公钥、个人信息、其他信息
    2. 数字签名:公钥和个人等信息,经过Hash摘要算法加密,形成消息摘要;将消息摘要拿到拥有公信力的认证中心(CA),用它的私钥对消息摘要加密,形成数字签名

      对称加密与非对称加密有什么区别

  2. 对称加密:指加密和解密使用同一密钥,如:DES、AES

  3. 非对称加密:加密和解密用不同秘钥,如:非对称加密算法有RSA

    DNS解析过程

  4. 查询浏览器缓存

  5. 查询操作系统缓存
  6. 查询系统hosts文件
  7. 查询路由器缓存
  8. 通过本地域名服务查询(递归查询方式)
  9. 通过根域名服务器查询(迭代的方式)

image.png

什么是CSRF攻击,如何避免

  1. 是什么:Cross-site request forgery跨站请求伪造
  2. 攻击原理:
    1. Tom登录银行网站
    2. Tom被弹出的广告吸引啦,点了进去
    3. 广告中触发了银行的转账接口,这个接口入参是黑客事先造好的,Tom->黑客转100块
    4. 银行系统拿到这个请求,是Tom,于是成功转账

image.png

  1. 解决方式

    1. 服务端检查Refer
    2. 添加校验token(我提交页每次生成token,黑客是拿不到我页面上的token的)

      聊聊各层有哪些协议

  2. 应用层

    1. HTTP
    2. FTP
    3. SMTP
    4. DNS
  3. 传输层
    1. TCP
    2. UDP
  4. 网络层
    1. IP:网际协议
    2. ARP:地址转换协议
    3. RARP:反向地址转换协议
    4. ICMP:Internet控制报文协议
  5. 数据链路层
    1. PPP:点对点协议
    2. ARQ:自动重传请求协议
    3. CSMA/CD:停止等待协议
  6. 物理层

    1. 网线
    2. 中继器
    3. HUB

      WebSocket和Socket的区别

  7. Socket:ip+port+协议,Socket是一套标准,屏蔽网络细节,以方便开发者更好地进行网络编程

  8. WebSocket是一个持久化的协议,它是伴随H5而出的协议,用来解决http不支持持久化连接的问题。
  9. Socket一个是网编编程的标准接口,而WebSocket则是应用层通信协议

    什么是DoS、DDoS、DRDoS攻击?

  10. Denial of Service(DoS):拒绝服务,一切能引起DoS行为的攻击都被称为DoS攻击。最常见的DoS攻击就有计算机网络宽带攻击、连通性攻击(一直请求你)。

  11. Distributed Denial of Service(DDos):分布式拒绝服务。是指处于不同位置的多个攻击者同时向一个或几个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。常见的DDos有SYN Flood、Ping of Death、ACK Flood、UDP Flood等。
  12. Distributed Reflection Denial of Service(DRDos):该方式靠的是发送大量带有被害者IP地址的数据包给攻击主机,然后攻击主机对IP地址源做出大量回应,从而形成拒绝服务攻击

    什么是XSS攻击,如何避免?

  13. 是什么:跨站脚本攻击(Cross-Site Scripting),它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。XSS攻击一般分三种类型:存储型 、反射型 、DOM型XSS

  14. 运行原理

image.png

  1. 解决方式

forward和redirect的区别

  1. forword(直接转发):请求是同一个,
  2. redirect(重定向):浏览器重定向

    Session和Cookie的区别

  3. Session存放在服务器端、Cookie存放在浏览器端

  4. 默认浏览器请求服务器,会返回一个Cookie,这个Cookie存放的是SessionID
  5. 每次浏览器请求会将域名下的Cookie信息带到请求中
  6. 服务器能够根据Cookie中的SessionID信息获取浏览器Session

    ARP 协议的工作过程?

  7. 作用:实现IP地址->MAC地址的转换

  8. 每台主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。
  9. 流程描述

    1. 主机检查自己ARP列表是否有,IP对应的MAC地址信息,有则直接发送
    2. 向本地网段发送ARP广播包,查询目标主机的MAC地址
    3. 局域网中的其他主机收到ARP广播包后,会检查目的IP是不是自己,不是直接丢掉
    4. 若局域网中的主机发现ARP广播包中找的人就是自己,先把源IP和MAC信息更新到自己的ARP列表,然后发送网络包告诉源主机自己的MAC
    5. 源主机收到响应后将MAC信息保存ARP列表,若没返回,则请求失败

      TCP 和 UDP 分别对应的常见应用层协议有哪些?

  10. TCP

    1. HTTP
    2. FTP
    3. SSH
  11. UDP

    1. TFTP
    2. DNS

      TCP中的保活计时器的作用

      服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两个小时。若两个小时都没有收到客户端的数据,服务端就发送一个探测报文段,以后则每隔 75秒钟发送一次。若连续发送10个探测报文段后仍然无客户端的响应,服务端就认为客户端出了故障,接着就关闭这个连接。

      服务端大量CLOSED_WAIT

      image.png
  12. 服务器端不执行socket的close()操作,那么就没法进入LAST_ACK,导致大量连接处于CLOSE_WAIT状态

  13. 导致原因:一般是程序bug,或者关闭socket不及时

    URI和URL的区别

  14. URI:统一资源标志符,主要作用是唯一标识一个资源。

  15. URL:统一资源定位符,主要作用是提供资源的路径
  16. 比喻:URL是URI的一种。身份证、指纹、学籍号都可以唯一标识这个人。但是想找到你,还是需要告诉我你家庭地址,江苏省徐州市xxx小区xxx单元xxx号叫xxx的人。这个家庭地址也可以唯一标识你同时可以唯一定位你的东西,叫做URL

    ICMP报文

  17. ICMP定义:Internet控制消息协议

  18. 特点

    1. 面向无连接的协议,用于传输出错报告控制信息
    2. 主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息
    3. 当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息
    4. ping就是基于ICMP报文

      Ping原理

  19. 作用:是一种因特网包探索器,用于测试网络连接量的程序。Ping是工作在TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送ICMP(Internet Control Message Protocol 因特网报文控制协议) 请求报文,测试目的站是否可达及了解其有关状态

  20. 过程

    1. 源主机新建一个固定格式的ICMP请求数据包
    2. 将该数据包和目标机器B的IP地址打包为ICMP包
    3. IP层协议将本机IP地址为源地址,机器B的IP地址为目标地址,加上一些其他的控制信息,构建一个IP数据包
    4. 获取目标主机的MAC地址
    5. 构建MAC帧
    6. 目的主机收到MAC帧后,校验是否是自己MAC,不是则丢弃,是则响应一个包
    7. 源主机收到响应包后计算响应时间

      TCP为什么是三次握手

  21. 总结一句话:让通信双方知道对方都有收发消息的能力

    TCP为啥是四次挥手

    确保服务器端(被动结束方)信息发送完毕

    TCP四次挥手的2MSL

  22. 2MSL:1MSL是报文在网络中最大存活时间

  23. 作用
    1. 确保最后一个ACK被接收。2MSL等的是自己ACK超时+1MSL的服务端重传FIN的时间
    2. 防止FIN先于一些数据包到客户端,客户端等2MSL看看还有没有其他数据包到来

TCP的粘包和拆包

image.png

  1. TCP可不管数据包业务逻辑,只会根据自己实际情况对所有数据包进行拆包和粘包
  2. 发生场景
    1. 粘包:发送时:TCP发送缓冲>发送数据时。接收时:应用层未及时接收缓冲区数据
    2. 拆包:待发送数据大于MSS,TCP发送缓冲剩余空间<发送数据时
  3. 解决方式

    1. 将所有数据包封装成固定长度
    2. 增加特殊字符分割
    3. 自定义数据包格式(类似于自定义一个TCP报文)

      TCP流量控制和滑动窗口

  4. 产生原因:发送端发送数据太快,导致接收端接收不过来,数据就会丢失。因此需要一种机制控制

  5. 控制流程

    1. TCP三次握手建立完成后,双方协商了一个窗口大小(假设是200字节)SND.WND=200,RCV.WND=200
    2. 发送方发送80字节后,SND.WND的可用大小就减少了80(200-80=120),SND.NXT=当前位置+80
    3. 接收方接收后,RCV.WND的可用量减少80(200-80=120)RCV.NEX+=80
    4. 发送方再次发送了120,SND.WND没量了,无法发送数据啦
    5. 接收方接收120后,RCV.WND也没有量了,但是它处理完了80字节并告诉发送方
    6. 发送方接收确认消息,SND.WND又有80可以用啦。

      半连接队列和SYN Flood

  6. 半连接队列(SYN):SYN报文接收后,返回ACK、SYN后,该连接进入半连接队列

  7. 全连接队列(ACCEPT):客户端回复ACK后,进入全连接队列
  8. SYN Flood:伪造SYN,导致大量的半连接产生

    1. 解决方式:syn cookie和SYN Proxy防火墙
    2. syn cookie:以数据包的源地址、端口等信息为参数计算出一个cookie值作为自己的SYNACK包的序列号,回复SYN+ACK后,服务器并不立即分配资源进行处理,等收到发送方的ACK包后,重新根据数据包的源地址、端口计算该包中的确认序列号是否正确,如果正确则建立连接,否则丢弃该包。
    3. Syn Proxy防火墙:服务器防火墙会对收到的每一个SYN报文进行代理和回应,并保持半连接。等发送方将ACK包返回后,再重新构造SYN包发到服务器,建立真正的TCP连接

      拥塞控制

  9. 四种算法:慢启动、拥塞避免、拥塞发生、快速恢复

  10. 和流量控制的区别:流量控制作用于接收者,拥塞控制作用于网络防止过多的包注入网络
  11. 拥塞控制产生想法:发送方维护一个拥塞窗口cwnd(congestion window) 的变量,用来估算在一段时间内这条链路(水管)可以承载和运输的数据(水)的数量。它大小代表着网络的拥塞程度,并且是动态变化的,但是为了达到最大的传输效率,我们该如何知道这条水管的运送效率是多少呢?简单就是先尽力让管子到达快爆的程度,然后就停止发送速度增加,进而减少
  12. 慢启动算法:每次收到ACK将cwnd*2,当到达慢启动阀值ssthresh时开始拥塞避免算法
  13. 拥塞避免算法:每个ACK cwnd = cwnd + 1/cwnd 每个RTT (往返时间)cwnd = cwnd + 1。当出现RTO超时重传时(进入拥塞发生阶段),当快重传时进入(快速恢复阶段)
  14. 拥塞发生阶段:慢启动阀值sshthresh = cwnd /2,cwnd=1,开始慢启动
  15. 快速恢复:当发送方接收三次同样的ACK后,进入快重传,开启快恢复拥塞窗口大小 cwnd = cwnd/2

慢启动阀值 ssthresh = cwnd

TCP和UDP

  1. TCP
    1. 面向连接的
    2. 可靠的
    3. 面向字节流
  2. UDP

    1. 无连接的
    2. 不可靠的
    3. 面向报文

      TCP如何确保可靠的?

  3. 三次握手、四次分手、可控制流量控制、拥塞控制、超时重传

  4. 三次和四次确保连接和断开的可靠性
  5. TCP有状态,记录哪些数据发了,哪些数据没有发
  6. 可控制性,超时重传、流量和拥塞控制

    TCP报文各字段

  • 16位窗口大小:是TCP流量控制的一个手段。这里说的窗口,指的是接收通告窗口。它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。

    超时重传

    在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
    RTT:就是数据完全发送完,到收到确认信号的时间,即数据包的一次往返时间。
    RTO:超时重传时间,应略大于RTT

    快速重传

    发送方连续收到接收方3次重复的ACK响应时,快速重传ack的报文

    带选择确认的重传(SACK)

    只有快速重传的情况下,发送方无法准确的知道重传哪些报文,无奈只能重传所有。引入SACK后,SACK会返回接收方最近接收的消息数据,这样3个重复ACK回来后,发送方可以定位哪些包要重传

    重复SACK(D-SACK)

    告诉发送方哪些包发重复啦!