- HTTP状态码及其含义
- HTTP请求方式
- 网络体系结构
- 怎么理解HTTP的无状态
- 浏览器中键入URL后发生什么?
- HTTP各个版本区别
- POST和GET区别
- HTTP 如何实现长连接?在什么时候会超时?
- HTTP和HTTPS区别
- 301和302的区别
- 数字签名和数字证书
- 对称加密与非对称加密有什么区别
- DNS解析过程
- 什么是CSRF攻击,如何避免
- 聊聊各层有哪些协议
- WebSocket和Socket的区别
- 什么是DoS、DDoS、DRDoS攻击?
- 什么是XSS攻击,如何避免?
- forward和redirect的区别
- Session和Cookie的区别
- ARP 协议的工作过程?
- TCP 和 UDP 分别对应的常见应用层协议有哪些?
- TCP中的保活计时器的作用
- 服务端大量CLOSED_WAIT
- URI和URL的区别
- ICMP报文
- Ping原理
- TCP为什么是三次握手
- TCP为啥是四次挥手
- TCP四次挥手的2MSL
- TCP的粘包和拆包
- TCP流量控制和滑动窗口
- 半连接队列和SYN Flood
- 拥塞控制
- TCP和UDP
- TCP如何确保可靠的?
- TCP报文各字段
- 超时重传
- 快速重传
- 带选择确认的重传(SACK)
- 重复SACK(D-SACK)
HTTP状态码及其含义
- 1xx:信息性状态码
- 2xx:成功类
- 3xx:重定向类
- 4xx:客户端错误类
- 5xx:服务端错误类
- 200:请求成功
- 301:永久性重定向,会缓存
- 302:临时重定向,不会缓存
- 400:客户端请求语法错误
- 403:权限限制
- 404:找不到资源
- 500:服务器内部错误(内部异常啦)
HTTP请求方式
- GET:查询
- POST:新增数据
- PUT:修改数据
- HEAD:请求获取响应头信息
- DELETE:删除
- OPTIONS:返回所有可用的请求方法
- CONNECT:用于SSL隧道基于代理的请求
-
网络体系结构
OSI-7层
- 应用层、表示层、会话层
- TCP/IP-4层
- 教学专用-5层
怎么理解HTTP的无状态
浏览器发送请求给服务器后并不记忆浏览器,浏览器再次发送请求,服务器不知道你是谁。
浏览器中键入URL后发生什么?
- 进行DNS域名解析
- TCP三次握手
- SSL/TLS安全握手
- HTTP、HTTPS报文
- 浏览器解析报文并渲染页面
-
HTTP各个版本区别
HTTP1.0:默认短连接,可以设置Connection: keep-alive 这个字段,强制开启长连接
- HTTP1.1:默认长连接,管道机制(客户端可以同时发送多个请求),流模式(服务器每产生一块数据就发送一块数据)
-
POST和GET区别
GET请求产生1个数据包,POST产生2个数据包(先header在body)
- GET不安全、POST安全
- 提交form表单时,GET支持ACSII码,POST支持整个ISO10646字符集
HTTP 如何实现长连接?在什么时候会超时?
- TCP的keep-alive包含三个参数
- tcp_keepalive_time:允许闲置的时间
- tcp_keepalive_intvl:闲置时间过长后,每隔tcp_keepalive_intvl s发送探测
- tcp_keepalive_probes:发送了超过tcp_keepalive_probes次,就断开连接
-
HTTP和HTTPS区别
HTTP
- 明文传输容易被窃听
- 没有验证对方身份
- 数据完整性未校验,容易被中间人篡改
HTTPS
- 定义:HTTPS = HTTP + SSL/TLS
- HTTPS的工作流程
301:永久性重定向,老地址永远的不用啦,以后的请求都转到重定向的那个地址
302:临时性重定向,老地址可能还会用到,以后的请求还是走老地址
数字签名和数字证书
名词解释
- 数字证书:是网络中标识通讯各方身份的一个数字认证,就是网络中的服务器的一个身份证
- 数字签名:是数字证书的组成部分,是对数字证书中服务器信息的一个签名
数字证书的构成
对称加密:指加密和解密使用同一密钥,如:DES、AES
非对称加密:加密和解密用不同秘钥,如:非对称加密算法有RSA
DNS解析过程
查询浏览器缓存
- 查询操作系统缓存
- 查询系统hosts文件
- 查询路由器缓存
- 通过本地域名服务查询(递归查询方式)
- 通过根域名服务器查询(迭代的方式)
什么是CSRF攻击,如何避免
- 是什么:Cross-site request forgery跨站请求伪造
- 攻击原理:
- Tom登录银行网站
- Tom被弹出的广告吸引啦,点了进去
- 广告中触发了银行的转账接口,这个接口入参是黑客事先造好的,Tom->黑客转100块
- 银行系统拿到这个请求,是Tom,于是成功转账
解决方式
应用层
- HTTP
- FTP
- SMTP
- DNS
- 传输层
- TCP
- UDP
- 网络层
- IP:网际协议
- ARP:地址转换协议
- RARP:反向地址转换协议
- ICMP:Internet控制报文协议
- 数据链路层
- PPP:点对点协议
- ARQ:自动重传请求协议
- CSMA/CD:停止等待协议
物理层
Socket:ip+port+协议,Socket是一套标准,屏蔽网络细节,以方便开发者更好地进行网络编程
- WebSocket是一个持久化的协议,它是伴随H5而出的协议,用来解决http不支持持久化连接的问题。
Socket一个是网编编程的标准接口,而WebSocket则是应用层通信协议
什么是DoS、DDoS、DRDoS攻击?
Denial of Service(DoS):拒绝服务,一切能引起DoS行为的攻击都被称为DoS攻击。最常见的DoS攻击就有计算机网络宽带攻击、连通性攻击(一直请求你)。
- Distributed Denial of Service(DDos):分布式拒绝服务。是指处于不同位置的多个攻击者同时向一个或几个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。常见的DDos有SYN Flood、Ping of Death、ACK Flood、UDP Flood等。
Distributed Reflection Denial of Service(DRDos):该方式靠的是发送大量带有被害者IP地址的数据包给攻击主机,然后攻击主机对IP地址源做出大量回应,从而形成拒绝服务攻击
什么是XSS攻击,如何避免?
是什么:跨站脚本攻击(Cross-Site Scripting),它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。XSS攻击一般分三种类型:存储型 、反射型 、DOM型XSS
- 运行原理
- 解决方式
forward和redirect的区别
- forword(直接转发):请求是同一个,
-
Session和Cookie的区别
Session存放在服务器端、Cookie存放在浏览器端
- 默认浏览器请求服务器,会返回一个Cookie,这个Cookie存放的是SessionID
- 每次浏览器请求会将域名下的Cookie信息带到请求中
服务器能够根据Cookie中的SessionID信息获取浏览器Session
ARP 协议的工作过程?
作用:实现IP地址->MAC地址的转换
- 每台主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。
流程描述
TCP
- HTTP
- FTP
- SSH
UDP
服务器端不执行socket的close()操作,那么就没法进入LAST_ACK,导致大量连接处于CLOSE_WAIT状态
-
URI和URL的区别
URI:统一资源标志符,主要作用是唯一标识一个资源。
- URL:统一资源定位符,主要作用是提供资源的路径
比喻:URL是URI的一种。身份证、指纹、学籍号都可以唯一标识这个人。但是想找到你,还是需要告诉我你家庭地址,江苏省徐州市xxx小区xxx单元xxx号叫xxx的人。这个家庭地址也可以唯一标识你同时可以唯一定位你的东西,叫做URL
ICMP报文
ICMP定义:Internet控制消息协议
特点
作用:是一种因特网包探索器,用于测试网络连接量的程序。Ping是工作在TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送ICMP(Internet Control Message Protocol 因特网报文控制协议) 请求报文,测试目的站是否可达及了解其有关状态
过程
-
TCP为啥是四次挥手
TCP四次挥手的2MSL
2MSL:1MSL是报文在网络中最大存活时间
- 作用
- 确保最后一个ACK被接收。2MSL等的是自己ACK超时+1MSL的服务端重传FIN的时间
- 防止FIN先于一些数据包到客户端,客户端等2MSL看看还有没有其他数据包到来
TCP的粘包和拆包
- TCP可不管数据包业务逻辑,只会根据自己实际情况对所有数据包进行拆包和粘包
- 发生场景
- 粘包:发送时:TCP发送缓冲>发送数据时。接收时:应用层未及时接收缓冲区数据
- 拆包:待发送数据大于MSS,TCP发送缓冲剩余空间<发送数据时
解决方式
产生原因:发送端发送数据太快,导致接收端接收不过来,数据就会丢失。因此需要一种机制控制
控制流程
半连接队列(SYN):SYN报文接收后,返回ACK、SYN后,该连接进入半连接队列
- 全连接队列(ACCEPT):客户端回复ACK后,进入全连接队列
SYN Flood:伪造SYN,导致大量的半连接产生
四种算法:慢启动、拥塞避免、拥塞发生、快速恢复
- 和流量控制的区别:流量控制作用于接收者,拥塞控制作用于网络防止过多的包注入网络
- 拥塞控制产生想法:发送方维护一个拥塞窗口cwnd(congestion window) 的变量,用来估算在一段时间内这条链路(水管)可以承载和运输的数据(水)的数量。它大小代表着网络的拥塞程度,并且是动态变化的,但是为了达到最大的传输效率,我们该如何知道这条水管的运送效率是多少呢?简单就是先尽力让管子到达快爆的程度,然后就停止发送速度增加,进而减少
- 慢启动算法:每次收到ACK将cwnd*2,当到达慢启动阀值ssthresh时开始拥塞避免算法
- 拥塞避免算法:每个ACK cwnd = cwnd + 1/cwnd 每个RTT (往返时间)cwnd = cwnd + 1。当出现RTO超时重传时(进入拥塞发生阶段),当快重传时进入(快速恢复阶段)
- 拥塞发生阶段:慢启动阀值sshthresh = cwnd /2,cwnd=1,开始慢启动
- 快速恢复:当发送方接收三次同样的ACK后,进入快重传,开启快恢复拥塞窗口大小 cwnd = cwnd/2
TCP和UDP
- TCP
- 面向连接的
- 可靠的
- 面向字节流
UDP
三次握手、四次分手、可控制流量控制、拥塞控制、超时重传
- 三次和四次确保连接和断开的可靠性
- TCP有状态,记录哪些数据发了,哪些数据没有发
- 可控制性,超时重传、流量和拥塞控制
TCP报文各字段
- 16位窗口大小:是TCP流量控制的一个手段。这里说的窗口,指的是接收通告窗口。它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。
超时重传
在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
RTT:就是数据完全发送完,到收到确认信号的时间,即数据包的一次往返时间。
RTO:超时重传时间,应略大于RTT快速重传
发送方连续收到接收方3次重复的ACK响应时,快速重传ack的报文带选择确认的重传(SACK)
只有快速重传的情况下,发送方无法准确的知道重传哪些报文,无奈只能重传所有。引入SACK后,SACK会返回接收方最近接收的消息数据,这样3个重复ACK回来后,发送方可以定位哪些包要重传重复SACK(D-SACK)
告诉发送方哪些包发重复啦!