1. TCP/UDP的区别:
TCP(Transmission Control Protocol)传输控制协议
UDP(User Data Protocol,用户数据报协议)
(1)都是一种网络传输协议;
(2)TCP需建立连接,UDP不需要;
(3)TCP是可靠的传输协议,UDP属于不可靠的;
(4)由于TCP需建立真实的连接,所以需消耗服务器的负载要大于UDP
2. TCP三次握手和四次挥手,为什么挥手是四次?
- TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)
(1)第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
(2)第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;
(3)第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
完成三次握手,主机A与主机B开始传送数据。
-
四次挥手:
(1)Client发送FIN=M,关闭Client至Server的数据传送
(2)Server收到后发送ACK=1, ack=M+1, 确认关闭
(3)Server发送FIN=N,关闭Server至Client的数据传送
(4)Client收到后发送ACK=1, ack=N+1, 确认关闭,连接断开 -
为什么挥手四次:
因为建立连接时Serever将ACK(响应)与SYN(请求)放在一个报文中发给Client,而关闭连接时,收到对方FIN仅表示对方不再发送数据但仍可接受,己方可以立即关闭也可以再发送一些数据后再发送FIN报文表示同意现在关闭连接,因此己方ACK和FIN一般会分开发送。
3. 即时通讯中为什么大多使用UDP?
- 网络开销相对较小,可尽可能的利用整个带宽
- 减轻服务器负担,节省运营商成本
4. TCP做心跳检测网络情况?
指客户端每隔一小段时间向服务器发送的一个数据包,通知服务器自己仍在线,并传输一些必要的数据,包的内容一般是很小的包,或只包含包头的空包。
保活的两种方式:
(1)应用层面的心跳机制:自定义心跳消息头。
优点:灵活,可携带额外信息,通用,不依赖协议。缺点:工作量、代码复杂度
(2)TCP协议自带保活功能:打开keep-alive功能即可。优点:使用简单,减少应用层代码复杂度。
5. HTTP的几种请求方式及适用情况?
- GET:请求指定的资源
- POST:向指定资源提交数据进行处理请求(如提交表单或上传文件),数据包含在请求体中,多次请求结果不同
- PUT:向指定资源上传其最新内容,多次请求结果相同
- DELETE:请求服务器删除Request-URL所标识的资源
6. HTTPS建立连接的流程,证书的作用,如何解决中间人劫持攻击?
- 流程
------------------ 发送请求和支持的协议 -------------------->
<---------- 返回 加密协议+证书(服务器地址、公钥、颁发机构)---------
客户端 -------- 生成对称密钥,用公钥对此加密,并对握手消息加密后发送 ------> 服务器
<------------- 私钥解密得对称密钥,以此加密握手消息发送 ---------------
-------------------- 验证后使用对称密钥开始传输,连接完成 -------------> - 证书作用:传递公钥,验证服务器身份
- 中间人劫持
攻击者将自己接入客户端与服务器之间,在传输过程中伪造证书,将服务器公钥替换为自己的公钥,窃取通信数据。
解决:完全的证书校验(是否过期、域名匹配、校验证书链)、客户端保存证书
7. HTTP断点续传?
请求头中Range字段指定第一个字节至最后一个字节的位置,如:Range: bytes=527648-
响应头中使用206状态值,且Content-Range字段描述响应覆盖的范围和整个实体长度:Content-Range: bytes 527648-1514385/1514386
8.网络七层模型
应用层 为应用程序和底层网络提供接口
表示层 数据的表示、安全、压缩 (HTTP/FTP)
会话层 建立、管理、终止会话
(SOCKET)
传输层 定义端口间的通信,帮助不同应用程序接收到自己所需数据(TCP/UDP)
网络层 逻辑地址寻址,建立主机之间的通信(IP)
数据链路层 建立逻辑连接,规定二进制数据解读方式
物理层 硬件设备