嵌入式开发高频面试题——第三章 网络编程

嵌入式开发高频面试题——第二章 C/C++高频面试题

3.1 TCP 和 UDP

3.1.1 TCP、UDP的区别 ⭐⭐⭐⭐⭐
  • TCP(Transmission Control Protocol)

    • 面向连接:TCP是面向连接的协议,通信之前需要建立连接(三次握手),数据传输完成后需要释放连接(四次挥手)。
    • 可靠性:TCP提供可靠的传输服务,通过校验和、序列号、确认应答、超时重传、流量控制和拥塞控制等机制来保证数据的可靠传输。
    • 数据顺序:TCP确保接收方按照发送方的顺序接收数据包,即使数据包在传输过程中被打乱,TCP也会重新排序。
    • 流控制:TCP通过滑动窗口机制控制数据流量,避免发送方发送数据过快而导致接收方无法及时处理。
  • UDP(User Datagram Protocol)

    • 无连接:UDP是无连接的协议,不需要建立和释放连接,直接发送数据报文。
    • 不可靠性:UDP不保证数据的可靠传输,没有确认应答、重传、顺序控制等机制。
    • 数据报模式:UDP将数据报封装为独立的包,发送方和接收方之间没有连接关系。
    • 轻量级:UDP相对于TCP更轻量,适用于对实时性要求高,但对数据可靠性要求不高的场景。
3.1.2 TCP、UDP的优缺点 ⭐⭐⭐
  • TCP的优点

    • 提供可靠的通信,确保数据完整性。
    • 有序传输,数据包按序到达。
    • 自动处理丢包、重传等问题。
  • TCP的缺点

    • 面向连接,需要三次握手建立连接,较为耗时。
    • 头部开销大,数据传输效率相对较低。
    • 由于有序性、可靠性和流控机制,导致时延增加。
  • UDP的优点

    • 无连接,开销小,传输速度快。
    • 适用于需要快速传输、实时性高的场景。
  • UDP的缺点

    • 不提供可靠传输,数据丢失、乱序等问题需应用层处理。
    • 没有拥塞控制,可能导致网络拥塞问题。
3.1.3 TCP 和 UDP 适用场景 ⭐⭐⭐
  • TCP

    • 适用于对数据传输可靠性要求较高的场景,例如:
      • 文件传输(FTP)
      • 电子邮件(SMTP)
      • Web浏览(HTTP/HTTPS)
      • 数据库连接(MySQL、SQL Server)
  • UDP

    • 适用于对实时性要求高但对数据传输可靠性要求不高的场景,例如:
      • 视频、语音流媒体(VoIP、实时视频传输)
      • 在线游戏
      • DNS查询
      • 局域网广播/多播
3.1.4 TCP 为什么是可靠连接 ⭐⭐⭐⭐

TCP之所以被称为可靠连接,是因为它通过一系列机制来确保数据的可靠性和正确性:

  1. 确认应答机制:发送方发送数据后,接收方必须发送ACK确认消息,如果发送方未收到确认消息,将重发数据。
  2. 序列号:TCP使用序列号来标识每个字节的数据,确保数据包能按照顺序正确接收。
  3. 超时重传:当发送方未在规定时间内收到ACK确认,将触发超时重传机制,重新发送数据。
  4. 校验和:TCP报文中包含校验和字段,用于校验数据的完整性,确保数据在传输过程中未被篡改。
  5. 流量控制:通过滑动窗口机制,TCP可以根据网络状况动态调整数据传输速率,防止网络拥塞。
3.1.5 典型网络模型,简单说说有哪些 ⭐⭐⭐

典型的网络模型有以下几种:

  1. OSI七层模型
    • 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
  2. TCP/IP四层模型
    • 应用层、传输层、网络层、网络接口层。
  3. 三层模型
    • 接入层、汇聚层、核心层。
3.1.6 HTTP1.1 和 HTTP1.0 的区别 ⭐⭐⭐
  • HTTP/1.0

    • 每次请求都需要新建一个TCP连接,请求结束后关闭连接。
    • 不支持持久连接(即无法复用连接)。
  • HTTP/1.1

    • 支持持久连接,即在同一个TCP连接上可以发送多个请求,减少了连接的建立和释放的开销。
    • 引入了Host字段,支持同一服务器上托管多个站点。
    • 增加了缓存控制字段,如 Cache-Control
3.1.7 URI(统一资源标识符)和 URL(统一资源定位符)之间的区别 ⭐⭐
  • URI(Uniform Resource Identifier):是统一资源标识符,它是一种字符串,用来标识资源。URI分为两类:URL和URN。
  • URL(Uniform Resource Locator):是统一资源定位符,是URI的子集,用来描述资源的访问方式(协议、主机名、端口、路径等),如https://www.example.com/path
  • URN(Uniform Resource Name):是统一资源名称,唯一标识资源而不涉及访问方式。

3.2 三次握手、四次挥手

3.2.1 什么是三次握手 ⭐⭐⭐⭐⭐
  • 三次握手是TCP建立连接的过程:
    1. 第一次握手:客户端向服务器发送一个SYN标志位为1的包,表示请求建立连接。
    2. 第二次握手:服务器收到SYN包后,回复一个SYN+ACK包,表示同意建立连接,并要求客户端确认。
    3. 第三次握手:客户端收到SYN+ACK包后,发送一个ACK包给服务器,表示确认连接已建立,之后双方就可以开始数据传输了。
3.2.2 为什么三次握手中客户端还要发送一次确认呢?可以二次握手吗? ⭐⭐⭐⭐
  • 在第二次握手后,服务器只能确定客户端能够接收到它发出的SYN包,但并不能确定客户端是否收到了ACK包。因此,客户端需要发送第三次确认(ACK),来让服务器确认整个连接是双向的。
  • 二次握手不可行:如果是二次握手,服务器不能确认客户端是否收到它的确认消息,这可能导致服务器不确定连接是否成功,存在连接不一致的问题。
3.2.3 为什么服务端易受到SYN攻击? ⭐⭐⭐⭐
  • SYN攻击是指攻击者伪造大量SYN请求包发送给服务器,但不完成三次握手的过程,导致服务器分配资源进行等待,直到耗尽资源,造成拒绝服务(DoS)。由于TCP的三次握手需要服务器维护半连接队列,而攻击者发出的SYN包不完成后续步骤,导致服务器资源耗尽。
3.2.4 什么是四次挥手 ⭐⭐⭐⭐⭐
  • 四次挥手是TCP关闭连接的过程:
    1. 第一次挥手:客户端发送FIN包,表示数据发送完毕,要求关闭连接。
    2. 第二次挥手:服务器收到FIN包,发送ACK包表示确认接收。
    3. 第三次挥手:服务器也发送FIN包,表示它的数据也发送完毕。
    4. 第四次挥手:客户端收到FIN包后,发送ACK包,表示关闭确认。此时连接正式关闭。
3.2.5 为什么客户端最后还要等待2MSL? ⭐⭐⭐⭐
  • 2MSL(Maximum Segment Lifetime):指的是数据包在网络中最大存活时间。
  • 客户端等待2MSL是为了确保服务器收到了最后一个ACK包,如果服务器未收到ACK,会重发FIN包,客户端在2MSL时间内可以再次回复ACK,避免连接不完全关闭的情况。
3.2.6 为什么建立连接是三次握手,关闭连接确是四次挥手呢? ⭐⭐⭐⭐
  • 建立连接需要三次握手:三次握手确保双方都能发送和接收数据,从而保证通信的可靠性。
  • 关闭连接需要四次挥手:因为TCP连接是全双工的,每个方向的连接都需要单独关闭。客户端和服务器都需要发送FIN和ACK
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CFuYuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值