面试题汇总
计算机网络
1、OSI七层模型分别是什么?各自功能是什么?TCP/IP四层模型?
OSI七层:
物理层---底层数据传输,如网线;网卡标准
数据链路层---定义数据的基本格式,如何传输,如何标识;如网卡MAC地址
网络层---定义IP编址,定义路由功能;如不同设备的数据转发
传输层---端到端传输数据的基本功能;如TCP UDP
会话层---控制应用程序之间会话能力;如不同软件数据分发给不同软件
表示层---数据格式标识,基本压缩加密功能
应用层---各种应用软件;包括web应用
TCP/IP四层:
数据链路层、网络层、传输层、应用层
总结
网络七层模型是一个标准,而非实现。
网络四层模型是一个实现的应用模型。
网络四层模型有七层模型简化合并而来。
2、三次握手(建立TCP连接)
三次握手
【作用是为了确认双方的接受与发送能力是否正常】
刚开始客户端处于closed的状态,服务端处于listen状态。
1、第一次握手:客户端给服务端发送一个SYN报文,并指明客户端的初始化序列号ISN,此时客户端处于SYN_send状态。
2、第二次握手:服务端接口到客户端的SYN报文之后,会以自己的SYN报文作为应答,并且也指定了自己的初始化序列号ISN,同时会把客户端的ISN+1作为ACK的值,表示已经接收到了客户端的SYN,此时服务端处于SYN_RCVD的状态。
3、第三次握手:客户端收到服务端的SYN后,会发送一个ACK报文,当然也是把服务器的ISN+1作为ACK的值,表示已经收到了服务端的SYN报文,此时客户端处于established状态。
4、服务器收到ACK报文之后,也处于established状态,此时,双方建立起连接
三次握手作用
- 确认双方的接收和发送功能正常
- 指定初始化序列号,为后面的可靠性传输做准备
ISN固定吗?
ISN是动态生成的
固定容易暴露确认号,不安全,容易受到攻击
半连接队列?全连接队列?
半连接队列:服务器第一次收到客户端的SYN,处于SYN_RCVD状态,此时双方还没完全建立连接,服务器会把此种状态下的请求连接放在一个队列中,此队列称之为半连接队列
全连接队列:已经完成三次握手,建立起的连接就会放在全连接队列中。如果全连接队列满了,会存在丢包的状态
SYN+ACK重传:服务器发送SYN+ACK后,未收到客户端的确认包,会有等待重试机制,当重试超多规定次数,系统将该连接信息从半连接队列中删除
三次握手过程中可以携带数据吗?
第一次和第二次不可以,容易受到攻击,
第三次可以携带数据,从客户端的角度 双方的接收与发送工能正常,所以携带数据页应该没啥问题
3、四次挥手(释放TCP连接)
刚开始双方都处于 establised 状态,假如是客户端先发起关闭请求,则:
1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。
2、第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。
3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。
4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态
5、服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
-
TIME_wait状态
客户端发送ACK之后不直接关闭,而是要等一会关闭,一般等待时间至少是一个报文的来回时间
等待原因:要确保服务器是否已经收到客户端的ACK报文,如果没有收到,服务端会重发FIN报文,客户端收到FIN报文之后知道之前ACK丢失,重发ACK
4、TCP和UDP区别,应用场景
区别:
TCP是可靠传输,UDP是不可靠传输
TCP面向连接 UDP无连接
TCP传输数据有序 UDP不保证数据的有序性
TCP传输速度相对UDP较慢
TCP有流量控制和拥塞控制 UDP没有
TCP重量级协议 UDP是轻量级协议
TCP不保存数据边界 UDP保存数据边界
TCP首部较长20字节 UDP首部较短8字节
TCP应用场景
效率要求相对低,但对准确性要求相对搞的场景。
e.g.文件传输、远程登录等
UDP应用场景
效率要求相对到,对准确性要求相对低的场景。
e.g.在线视频、网络语音通话、qq聊天等
TCP可靠性原理
- 首先,采用三次握手建立TCP连接,四次挥手释放TCP连接,从而保证建立的传输通道是可靠的
- 其次,TCP采用了连续ARQ协议(回退N,go-back-N;超时自动重传)来保证数据传输正确性,使用滑动窗口协议来保证接方能够及时处理所接受到的数据,进行流量控制。
- 最后,TCP使用慢开始、拥塞避免、快重传和快恢复来进行拥塞控制,避免网络拥塞
ARP协议工作原理
网络层的APR协议完成了IP地址与物理地址MAC地址的映射。
每天主机都会在自己ARP缓冲区建立一个ARP列表,表示IP地址和MAC地址的对应关系。当源主机将一个数据包发送给目的主机时,先检查自己的ARP列表是否存在这个IP,存在直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播,查询此目的主机的MAC地址。网络中所有的主机收到这个ARP请求后,会检查数据包中IP是否和自己IP地址一致,如果不想通就忽略此数据包,如果相同,先添加到自己的ARP列表中,若之前此IP存在则直接覆盖,然后给源主机发送一个ARP响应数据包。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。