一、OSI七层模型和各自功能
从上至下:
应用层:给应用程序提供统一接口
表示层:格式编码,加密\解密,压缩\解压缩
会话层:建立、维护和释放通信回话
传输层:端到端的数据传输
网络层:数据的路由、转发、分片
数据链路层:数据封帧,差错检测,MAC寻址
物理层:物理网络中传输数据帧
二、为什么需要三次握手?两次不行?
三次握手的过程:
1、第一次握手:客户端给服务器发送一个 SYN 报文,并指明客户端的初始化序列号 ISN(c)。此时客户端处于 SYN_Send 状态。。
2、第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_RCVD 的状态。
3、第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 established 状态。
4、服务器收到 ACK 报文之后,也处于 established 状态,此时,双方以建立起了链接
三次握手的作用:
1、确认双方的接收与发送能力是否正常。
2、指定自己的初始化序列号,为后面的可靠传送做准备。
ISN是动态生成的
SYN-ACK重传次数:指数增长,1s,2s,4s,8s
第三次握手是可以携带数据的
三、为什么需要四次挥手?三次不行?
刚开始双方都处于 establised 状态,假如是客户端先发起关闭请求,则:
1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。
2、第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的ack值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。
3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。
4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的ack值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态
5、服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
四、TCP和UDP有哪些区别?各自应用场景?
TCP协议主要特点
1、TCP是面向连接的传输层协议
2、每一条TCP连接只能有两个端点(即两个套接字),只能是点对点的;
3、TCP是可靠传输,传送的数据无差错、不丢失、不重复、按序到达
4、TCP提供全双工通信,两端任何时候都可以发送数据
5、面向字节流:把数据看成一连串无结构的字节流
TCP可靠性原理
a.传输信道无差错,保证传输数据正确;
b.不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据;
1、三次握手连接,四次挥手释放连接,传输通道可靠
2、TCP采用连续ARQ协议(回退N,Go-back-N;超时自动重传)保证传输正确性,使用滑动窗口进行流量控制
3、TCP慢开始、拥塞避免、快重传、快恢复进行拥塞控制
UDP协议特点
1、无连接
2、尽最大努力交付,不保证可靠交付
3、面向报文,对应用层交下来的报文,不合并、不拆分,保留原报文的边界
4、没有拥塞控制
5、支持一对一、一对多、多对多的交互通信
6、首部开销小,只有8字节
TCP和UDP的区别
1、TCP是可靠传输,UDP是不可靠传输
2、TCP面向连接,UDP无连接
3、TCP传输数据有序,UDP不保证数据有序性
4、TCP不保存数据边界,UDP保留数据边界
5、TCP传输速度相对于UDP较慢
6、TCP有流量控制和拥塞控制,UDP没有
7、TCP是重量级协议,UDP是轻量级协议
8、TCP首部较长20字节,UDP首部较短8字节
基于TCP和UDP的常用协议
HTTP、HTTPS、FTP、TELNET、SMTP(简单邮件传输协议)基于可靠的TCP
TFTP、DNS、DHCP、SNMP(简单网络管理协议)基于不可靠的UDP
TCP和UDP应用场景
TCP应用场景:
效率要求相对低,准确性要求相对高:文件传输,接收邮件,远程登录(数据确认、重发、排序)
UDP应用场景:
效率要求相对高,准确性要求相对低:QQ聊天、在线视频、网络语音电话(即时通信,不可以重发)、广播机制
五、HTTP1.0,1.1,2.0的版本区别
HTTP1.0
浏览器与服务器只保持短暂的连接,浏览器每次请求都要与服务器建立一个TCP连接,服务器完成处理后立即断开TCP连接,性能较差
HTTP1.1
引入了持久连接,TCP连接默认不关闭,可以被多个请求复用
引入了管道机制,同一个TCP连接里面,客户端可以同时发送多个请求
服务端依然顺序执行,效率还有待提升
HTTP2.0
采用了多路复用,客户端和扣篮器都可以同时发送多个请求或回应,不用按照顺序一一对应,原因是进行了二进制分帧(将信息分割为更小的消息和帧,采用二进制格式编码)
Header压缩(压缩消息)
服务端推送(事先缓存可能发送的消息,直接读缓存)
六、POST和GET有哪些区别?各自应用场景?
使用场景:
GET用于获取资源,POST用于传输实体主体
参数:
GET参数以查询字符串出现在URL中,POST参数存储在实体主体中
URL只支持ASCII码,参数存在中文等字符需要提前编码,POST参数支持标准字符集
安全性:
安全的方法:GET、HEAD、OPTIONS
不安全的方法:POST、PUT、DELETE
幂等性:
幂等方法不应该具有副作用,所有的安全方法都是幂等的
GET、HEAD、PUT、DELETE等方法都是幂等的,POST不是
可缓存:
GET和HEAD可缓存,PUT和DELETE不可缓存,POST大多数情况不可缓存
响应报文状态码可缓存,包括:200,203,204,206,300,301,404,405,410,414,and501
XMLHttpRequest:
是一个API,在AJAX中被大量使用
XMLHttpRequest中的POST:先发送Header再发送Data;GET:Header和Data一起发送
七、HTTP哪些常用的状态码及使用场景?
状态码分类:
1xx:表示目前是协议的中间状态,还需要后续请求
2xx:表示请求成功
3xx:表示重定向状态,需要重新请求
4xx:表示请求报文错误
5xx:服务器端错误
常用状态码:
101 切换请求协议,从 HTTP 切换到 WebSocket
200 请求成功,有响应体
301 永久重定向:会缓存
302 临时重定向:不会缓存
304 协商缓存命中
403 服务器禁止访问
404 资源未找到
400 请求错误
500 服务器端错误
503 服务器繁忙
八、HTTP状态码301和302的区别,都有哪些用途?
301重定向的概念
页面永久性转移,表示资源或页面永久性地转移到了另外一个位置
哪些情况需要做301重定向?
网站目录结构调整;多个域名跳至同一域名
301重定向有什么优点?
有利于网站首选域的确定,URL权重集中,提升自然排名
302重定向又是什么?
页面暂时性转移,常被用作网址劫持,导致网站降权,严重时网站会被封掉
301与302的区别
302页面暂时性转移
九、在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?
在 HTTP 中响应体的 Connection 字段指定为 keep-alive
十、HTTP如何实现长连接?在什么时候会超时?
1、HTTP的httpd守护进程里面设置keep-alive timeout,HTTP的header里面设置超时时间
2、TCP 的 keep-alive 包含三个参数,支持在系统内核的 net.ipv4 里面设置:当 TCP 链接之后,闲置了 tcp_keepalive_time,则会发生侦测包,如果没有收到对方的 ACK,那么会每隔 tcp_keepalive_intvl 再发一次,直到发送了 tcp_keepali
(1)tcp_keepalive_intvl = 15
(2)tcp_keepalive_probes = 5
(3)tcp_keepalive_time = 1800ve_probes,就会丢弃该链接。
十一、TCP如何保证有效传输及拥塞控制原理
tcp是面向连接的、可靠的、传输层控制协议
可靠体现在:有状态、有控制
1、有状态是指TCP会确认发送了哪些报文,接近方接收了哪些报文,哪些没收到,保证数据包按序到达,不允许有差错
2、可控制是指丢包或网络不佳则会跳转自己的行为,减少发送或者重发
拥塞控制原理
三种办法:
慢启动阈值+拥塞避免
快速重传
快速恢复
慢启动阈值+拥塞避免
TCP 主要维护两个核心状态:
拥塞窗口(cwnd)
慢启动阈值(ssthresh)
在发送端使用拥塞窗口来控制发送窗口的大小
然后采用一种比较保守的慢启动算法来慢慢适应这个网络,在开始传输的一段时间,发送端和接收端会首先通过三次握手建立连接,确定各自接收窗口大小,然后初始化双方的拥塞窗口,接着每经过一轮 RTT(收发时延),拥塞窗口大小翻倍,直到达到慢启动阈值。
然后开始进行拥塞避免,拥塞避免具体的做法就是之前每一轮 RTT,拥塞窗口翻倍,现在每一轮就加一个。
快速重传
在 TCP 传输过程中,如果发生了丢包,接收端就会发送之前重复 ACK,比如 第 5 个包丢了,6、7 达到,然后接收端会为 5,6,7 都发送第四个包的 ACK,这个时候发送端受到了3 个重复的 ACK,意识到丢包了,就会马上进行重传,而不用等到 RTO (超时重传的时间)
快速恢复
如果发送端收到了 3 个重复的 ACK,发现了丢包,觉得现在的网络状况已经进入拥塞状态了,那么就会进入快速恢复阶段:
拥塞阈值降低为拥塞窗口的一半
拥塞窗口大小变为拥塞阈值
拥塞窗口再线性增加,以适应网络状况
十二、IP地址有哪些分类?
A类地址(1~126):网络号占前8位,以0开头,主机号占后24位。
B类地址(128~191):网络号占前16位,以10开头,主机号占后16位。
C类地址(192~223):网络号占前24位,以110开头,主机号占后8位。
D类地址(224~239):以1110开头,保留位多播地址。
E类地址(240~255):以1111开头,保留位今后使用
特殊:私有地址:
A类:10.0.0.0-10.255.255.255
B类:172.16.0.0-172.31.255.255
C类:192.168.0.0-192.168.255.255
0.0.0.0\255.255.255.255\127.0.0.1(本机地址)
169.254.x.x ->DHCP
十三、GET请求中URL编码的意义
避免歧义
十四、什么是SQL注入?举个例子?
SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
1、总体思路
(1). 寻找到SQL注入的位置
(2). 判断服务器类型和后台数据库类型
(3). 针对不同的服务器和数据库特点进行SQL注入攻击
2、SQL注入攻击实例
用户名:‘or 1 = 1’ --
3、应对方法
(1)参数绑定:SQL预编译和参数绑定
(2)使用正则表达式过滤传入的参数
十五、XSS攻击,举个例子?
XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些脚本代码嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
1、XSS攻击的危害
盗取用户账号
控制企业数据
盗窃企业的商业价值材料
非法转账
强制发送电子邮件
网站挂马
控制受害者及其向其他网站发起攻击
2、原因解析
主要原因:过于信任客户端提交的数据
解决办法:不信任任何客户提交的数据,先过滤处理再进行下一步操作
3、XSS攻击分类
(1)反射性XSS攻击(非持久性XSS攻击)
攻击者注入的数据反映在响应中,一个XSS攻击包含一个带XSS攻击向量的链接
(2)持久性XSS攻击(留言板场景)
XSS攻击向量存储在网站数据库
与非持久性XSS攻击相比,持久性XSS攻击危害性更大
4、修复漏洞方针
重要的cookie标记为http only
表单数据规定值的类型
对数据进行Html Encode处理
过滤或移除特殊的Html标签
过滤JavaScript事件的标签
十六、讲一下网络五层模型,每一层的职责?
1、物理层
把两台计算机连起来,通过光纤、电缆、双绞线等
在计算机之间通过高低电频来传送0,1信号
2、数据链路层
制定一套规则来进行0,1传送
(1)以太网协议
一组电信号构成一个数据包(帧),由标头(Head)和数据(Data)两部分组成
大小一般为64-1518个字节
标头:说明数据,例如发送者、接受者等信息,固定18字节
数据包:具体的内容
(2)MAC地址
每个网卡接口都有一个唯一的地址就是MAC地址
MAC地址由48个二进制位构成,在网卡生产时唯一标识
(3)广播与ARP协议
①广播
在同一子网中,A要向B发送一个数据包包含B的MAC地址,A广播发送,同一子网中的C,D也会收到数据包,把数据包中的MAC地址拿出来跟自己比对,相同则接受这个数据包,否则就丢弃
②ARP协议
获得子网中其他计算机的MAC地址
3、网络层
如何区分哪些计算机术语同一个子网,于是有了IP协议
(1)IP协议
它所定义的地址称为IP地址,32位2进制数,地址范围0.0.0.0~255.255.255.255
IP地址分为两部分,网络位+主机位,不固定
网络位一样则两台计算机处于同一子网中
如何知道网络位和主机位各占多少--子网掩码(网络位全为1,主机位全为0)
如何判断IP地址处于同一子网:把IP地址与子网掩码做与运算,结果相同则处于同一字网
(2)ARP协议
在子网中广播发包(包含接收方IP地址),接收方取出IP与自己对比,相同则把自己的MAC地址回复给对方,否则丢弃数据包
询问是MAC地址栏填入了特殊的MAC地址,对方知道你要干嘛,发送数据则填入对方真实的MAC地址
两个IP不在同一子网,将数据举报发给网关,然后让网关进行转发传送
(3)DNS服务器
DNS解析域名返回对应的IP给我们
网络层的功能:找到另一台计算机在哪里,是否属于同一字网
4、传输层
计算机A传数据给计算机B,指定一个端口,以供特定的应用程序来处理
传输层:端到端的通信;网络层:主机到主机的通信
TCP可靠传输;UDP不可靠传输
5、应用层
指定数据的格式规则
十七、对称加密和非对称加密的区别
对称加密:加密解密同一个密钥
非对称加密:公钥+私钥,公钥可以随意发布,私钥自由自己知道
用对称加密传送信息,用非对称加密传送对称加密的密钥
十八、每一层对应的网络协议
1、应用层
超文本传输协议:HTTP
文件传输协议:FTP
简单邮件传输协议:SMTP
域名系统:DNS
安全外壳协议:SSH
动态主机配置协议:DHCP
远程登录协议:TELNET
2、传输层
传输控制协议:TCP
用户数据报协议:UDP
3、网络层
网际协议:IP
地址解析协议:ARP
Internet控制报文协议:ICMP
Internet组管理协议:IGMP
路由信息协议:RIP
分布式链路状态协议:OSPF
边界网关协议:BGP
4、数据链路层
自动重传请求:ARQ
停止等待协议:CSMA/CD
点对点协议:PPP
5、物理层
中继器、集线器、网线、HUB
十九、TCP和UDP分别对应的常见应用层协议
1、TCP
FTP、Telnet、SMTP、POP3、HTTP
2、UDP
DNS、SNMP、TFTP
二十、滑动窗口、流量控制
TCP利用滑动窗口实现流量控制的机制,解决网络拥塞
滑动窗口的大小意味着接收方还有多大的缓冲区可以接收滑动数据