1.网络分层结构是什么样的
一般考察的是TCP/IP五层模型
应用层:为应用程序提供交互服务,如HTTP/FTP/SMTP等
传输层:负责向两台主机进程之间的通信提供传输服务,协议主要有TCP/UDP
网络层:根据IP定义网络地址,选择合适的路由节点,主要包括IP/ARP协议
链路层:两个相邻节点传输时,将网络层交下来的IP报文组装成帧,相邻节点之间传送帧
物理层:通过物理介质构建传输通路,实现相邻节点比特流透明传输
2.TCP和UDP的区别
TCP是面向连接的,UDP是无连接的
TCP提供可靠的服务,UDP不保证可靠交付
TCP有阻塞控制,UDP无阻塞控制,适合实时应用
TCP是点到点的,UDP支持一对一,一对多,多对多的交互通信
TCP首部开销大(20字节),UDP首部开销小(8字节)
3.TCP的三次握手
客户端先向服务端发送数据包并将SYN置1,假设序列号seq为X
服务端接收后通过SYN知道这是连接请求,发送相应包并将SYN和ACK都置1,序列号seq为Y,确认号ack为X+1
客户端收到相应包后将ACK置1,确认号ack为Y+1
这里说一个简单的理解:
A先告诉B:我们来聊天吧,此时B知道了对方能说话,自己能听到对方说话
B回答一句:好啊,能听到吗,此时A知道了自己能说话,自己能听到对方说话,对方能说话,对方能听到自己说话,但是目前唯一的问题就是B不知道自己能不能正常说话,对方能不能正常听到自己说话
于是A再回一句:我能听到,开始吧,此刻B知道自己能说话,对方也能听到说话,这时一切通信能力都是正常的
4.TCP的四次挥手
客户端先发送FIN表示自己要断开连接,进入FIN_WAIT_1(终止等待1)状态
服务端发送ACK表示同意,但是需要服务端处理完数据再给客户端发FIN信号,此时客户端进入FIN_WAIT_2(终止等待2)状态
服务端处理完数据,持续发送FIN表示关闭连接,此时客户端和服务端都进入了CLOSE_WAIT(半关闭状态)
客户端收到FIN后会发送一个相应的ACK,当不再受到服务端的FIN时确认服务端收到指令,此时TCP完全释放
5.为什么是四次挥手
主要在服务端收到客户端的FIN后,不是选择发送ACK+FIN,而是先发送ACK,表示自己还需要处理完所有数据,再发送FIN来断开连接,这样才能保证真正断开连接
6.HTTP协议有什么特点
HTTP协议允许传输任何类型的数据,HTTP协议是无状态的,每次发送请求服务器都会认为是一个新的请求,HTTP支持客户端/服务器模式
7.HTTP的短连接和长连接是什么
HTTP短连接是客户端每次和服务器进行HTTP操作,就建立一次连接,任务结束了就中断连接,在HTTP1.1之后默认使用长连接,即建立的TCP连接可以复用,需要客户端和服务端首部的Connection都设置为keep-alive才能建立长连接
8.HTTP1.1和HTTP2.0的区别
HTTP1.1使用文本传输,HTTP2.0使用二进制传输,传输效率更高
HTTP1.1的header中有大量信息,每次都要重新发送,在HTTP2.0进行了头部压缩,将header中的数据封装为头帧和数据帧,并且压缩,同时通过键值对的方式记录,对于相同的数据不会重复发送,可以降低开销
HTTP2.0允许服务端向客户端推送资源,无需客户端申请
9.HTTP通信安全吗
HTTP是明文传输,很容易遭到黑客的拦截和篡改,所以是不安全的,我们可以用HTTPS协议代替,HTTPS协议是HTTP协议加上SSL/TLS协议,密文传输,可以确保数据安全
10.HTTPS的原理
客户端和服务端都有两个密匙,分别叫做公钥和私钥,两个密匙并不相同,称为非对称加密,其中公钥是用来信息加密的,私钥是用来信息解密的,私钥需要严格保密。这种方式可以用密文传输保证安全,但为了防止黑恶拦截信息并且伪造交流的情况,HTTPS还引入了SSL证书,客户端通过验证证书的正确性来判断是不是正确的服务端。
具体过程如下:
客户端向服务端发送请求,告诉服务端自身支持的协议和机密算法,并提供一个随机数
服务端收到后选择一个RSA算法,将证书,公钥,自身信息发给客户端
客户端验证证书,通过后利用发来的公钥发送加密的握手信息
客户端解密后利用之前的随机数计算出一个对称加密的公钥,用公钥加密发送信息
后续都是用此方法对称加密
11.GET请求和POST请求的区别
GET请求参数在URL中传递,POST请求参数是在请求体中
GET请求会产生一个TCP数据包,POST请求会产生两个,因为GET请求会将请求头和请求体一同发出,而POST请求会先发送请求头,相应100才会发送请求体
GET请求会被浏览器主动储存,POST请求不会被主动储存
GET请求参数会被完整记录,POST请求参数不会被记录
12.常见攻击手段和解决方案
SQL注入:SQL注入具有巨大危险,可能会导致整个数据库被修改,方法措施有:过滤用户输入的特殊字符,禁止通过字符串拼接的SQL语句
XSS:跨站脚本攻击,在HTML页面中插入恶意脚本来信息窃取,方法措施有:对用户输入数据过滤或者转义
CSRF:攻击者伪造用户请求,访问一个用户曾认证过的网站,让网站误认为是用户操作从而执行任务,方法措施有:验证HTTP Referer,使用验证码,在请求地址添加token(最推荐这个方法,在服务器中生成一个token,HTTP请求中加入token,与服务器中token验证)