Skip to content

上位机

1. OSI参考模型与TCP/IP参考模型的区别

解答

OSI参考模型是一个7层模型,包括应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。而TCP/IP模型基于OSI模型进行了简化,形成一个4层模型。两者都采用分层体系结构,都是对等的层间通信。尽管TCP/IP模型比OSI模型更简洁,但在功能上差别不大,都是为了实现终端之间的通信。

2. TCP通信位于网络模型的哪一层?

解答

TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,无论是OSI参考模型还是TCP/IP参考模型,TCP都位于传输层。它在不可靠的互联网络上提供可靠的端到端字节流传输。

3. 如何理解面向连接、可靠、字节流?

解答

面向连接:TCP是点对点的通信协议,不能像UDP那样同时向多个主机发送消息。 可靠的:TCP能够保证报文到达接收端,即使网络链路变化。 字节流:基于字节流的传输,即无论消息大小都可以传输,消息是有序的,重复报文会自动丢弃。

4. 为什么需要TCP协议?

解答

因为IP层是不可靠的,它不保证网络包的交付、按序交付和完整交付。因此,需要TCP协议在传输层上保证数据包的可靠性。

5. TCP与UDP之间的区别及联系?

解答
  • 连接机制:TCP是面向连接的传输层协议,UDP不需要连接。
  • 服务对象:TCP是一对一的两点服务,UDP支持一对一、一对多、多对多。
  • 可靠性:TCP保证数据不丢失、不重复、按序到达,UDP是尽最大努力交付,不保证数据交付。
  • 拥塞控制、流量控制:TCP有拥塞控制和流量控制机制,UDP没有这些机制。

6. TCP首部报文分析

解答

TCP首部至少占用20个字节,包含源端口号、目标端口号、序列号、应答号、控制位、校验和等。

7. 简要说明TCP三次握手

解答
  1. 客户端发送SYN报文,seq=x,SYN=1。
  2. 服务器回复SYN+ACK报文,seq=y,ack=x+1,SYN=1,ACK=1。
  3. 客户端回复ACK报文,ack=y+1,ACK=1。

8. 简要说明TCP四次挥手

解答
  1. 客户端发送FIN报文,进入FIN_WAIT_1状态。
  2. 服务器回复ACK报文,进入CLOSED_WAIT状态。
  3. 客户端收到ACK后,进入FIN_WAIT_2状态。
  4. 服务器发送FIN报文,进入LAST_ACK状态。
  5. 客户端回复ACK报文,进入TIME_WAIT状态,最终进入CLOSE状态。
  6. 服务器收到ACK后,进入CLOSE状态。

9. TCP握手为什么刚好是三次?

解答

通过三次握手可以防止历史连接的建立,减少资源开销,帮助双方同步初始化序列号。两次握手无法防止历史连接的建立,四次握手通信次数过多。

10. TCP挥手为什么需要四次?

解答

客户端和服务端需要分别发送FIN报文和ACK报文,服务端可能在收到FIN报文后还有数据需要处理和发送,因此ACK和FIN一般会分开发送。

11. 四次挥手中的TIME_WAIT状态?

解答

主动关闭连接的一方进入TIME_WAIT状态,防止相同端口重新连接时收到旧数据包,保证被动关闭方能正确关闭连接。

12. 为什么TIME_WAIT时间为2MSL?

解答

MSL是报文最大生存时间,2MSL保证被动关闭方能收到最后的ACK报文,防止重复的FIN报文引发错误。

13. 什么是TCP的保活机制?

解答

在连接闲置一定时间后,发送探测报文以确定连接状态,如果多个探测报文无响应,则认为连接已经死亡。

14. 已经建立连接,客户端故障怎么办?

解答

触发TCP保活机制,根据保活时间、探测次数和探测间隔判断连接是否失效。默认保活时间为7200秒,探测次数为9,探测间隔为75秒。

15. TCP/IP协议与Socket之间是什么关系?

解答

TCP/IP是协议栈,Socket是编程接口。Socket提供标准编程接口,方便使用TCP/IP协议栈进行网络开发。

16. 什么是SYN攻击?

解答

攻击者伪造不同IP地址发送大量SYN报文,服务端进入SYN_RCVD状态,队列被占满,正常用户无法连接。

17. 如何避免SYN攻击?

解答

通过修改内核参数控制队列大小,或者计算Cookie值并验证ACK包合法性,防止队列被占满。

18. TCP服务器Socket编程流程

解答
  1. 初始化Socket,得到文件描述符。
  2. 调用Bind,绑定IP地址和端口。
  3. 调用Listen,进行监听。
  4. 调用Accept,建立客户端连接。
  5. 通过Send向客户端发送消息。
  6. 通过Receive接收客户端消息。

19. TCP客户端Socket编程流程

解答
  1. 初始化Socket,得到文件描述符。
  2. 调用Connect,连接服务器。
  3. 连接成功后调用Send发送消息。
  4. 通过Receive接收消息。

20. Listen中的backlog参数意义

解答

Linux内核维护两个队列:未完成连接队列(SYN队列)和已完成连接队列(Accept队列)。backlog参数指的是Accept队列的长度。

21. 什么是滑动窗口机制?

解答

滑动窗口机制是TCP用来控制数据流量的一种方法。发送方维护一个窗口大小,表示可以发送但未被确认的数据量。接收方通过发送窗口大小来通知发送方自己能接收的最大数据量,从而防止接收方的缓冲区溢出。

22. 什么是拥塞控制?

解答

拥塞控制是为了防止网络拥堵而采取的一系列措施。TCP的拥塞控制算法包括慢启动、拥塞避免、快速重传和快速恢复。慢启动阶段,拥塞窗口(cwnd)逐渐增大;在拥塞避免阶段,cwnd缓慢增大;快速重传和快速恢复用于在丢包时快速恢复数据传输。

23. TCP如何保证数据传输的可靠性?

解答

TCP通过以下几种方式保证数据传输的可靠性:

  • 序列号:保证数据包按序到达。
  • 确认应答(ACK):确认收到的数据包。
  • 重传机制:超时未收到ACK时重传数据包。
  • 校验和:检测数据传输中的错误。
  • 流量控制:通过滑动窗口机制防止接收方缓冲区溢出。
  • 拥塞控制:防止网络拥塞。

24. 什么是Nagle算法?

解答

Nagle算法是一种用于减少小包传输的算法。当TCP连接中有未确认的数据时,新数据不能发送,直到所有未确认的数据都被确认。这样可以减少网络中的小包数量,提高网络效率。应用程序可以通过禁用Nagle算法(即设置TCP_NODELAY选项)来降低传输延迟。

25. TCP延迟确认机制是什么?

解答

TCP延迟确认机制是指接收方在接收到数据包后,不立即发送ACK,而是等待一小段时间,可能将多个数据包的确认合并到一个ACK中。这种机制可以减少ACK的数量,提高网络效率,但也可能增加传输延迟。应用程序可以通过禁用延迟确认(如设置TCP_QUICKACK选项)来降低延迟。

转载:https://mp.weixin.qq.com/s/mzDEIp4cfgcXmURdLuXCQA