网络编程面试题

1. TCP和UDP的区别

特性TCPUDP
连接类型面向连接(三向握手四次挥手)无连接
可靠性可靠传输,会重传

不可靠传输,会丢包

开销较大较小
应用场景文件传输、电子邮件、网页浏览视频会议、在线游戏、语音通话
流量控制
拥塞控制

2. TCP的三次握手过程

  1. 第一次握手(SYN):

    客户端发送一个带有SYN标志的段(SYN=1),并选择一个初始序号(ISN,Initial Sequence Number)。

    客户端进入SYN_SENT状态。

    这个接段表示客户端希望建立连接,并且它的序号字段包含客户端选择的初始序号。

  2. 第二次握手(SYN-ACK):

    服务器收到客户端的SYN段后,发送一个带有 SYN 和 ACK标志的段(SYN=1, ACK=1)。

    服务器选择自己的初始序号,并将这个序号放在序号字段中。

    服务器的 ACK 字段设置为客户端初始序号加1,表示确认收到了客户端的 SYN 段。

    服务器进入 SYN_RCVD 状态。

  3. 第三次握手(ACK):

    客户端收到服务器的 SYN-ACK 段后,发送一个带有 ACK 标志的段(ACK=1)。

    客户端的 ACK 字段设置为服务器初始序号加1,表示确认收到了服务器的 SYN 段。

    客户端进入 ESTABLISHED 状态。

    服务器收到客户端的 ACK 段后,也进入 ESTABLISHED 状态。

3. TCP的四次挥手过程?为什么是四次挥手?

  1. 第一次挥手(FIN)

    • 客户端发送一个带有 FIN 标志的段(FIN=1),表示客户端已经没有数据要发送了。
    • 客户端进入 FIN_WAIT_1 状态。
  2. 第二次挥手(ACK)

    • 服务器收到 FIN 段后,发送一个带有 ACK 标志的段(ACK=1),确认序号为客户端 FIN 段的序号加1。
    • 服务器进入 CLOSE_WAIT 状态。
    • 客户端收到 ACK 段后,进入 FIN_WAIT_2 状态。
  3. 第三次挥手(FIN)

    • 服务器发送一个带有 FIN 标志的段(FIN=1),表示服务器也没有数据要发送了。
    • 服务器进入 LAST_ACK 状态。
  4. 第四次挥手(ACK)

    • 客户端收到 FIN 段后,发送一个带有 ACK 标志的段(ACK=1),确认序号为服务器 FIN 段的序号加1。
    • 客户端进入 TIME_WAIT 状态,等待一段时间后(通常是2MSL,即两倍的最大段生存时间)关闭连接。
    • 服务器收到 ACK 段后,关闭连接,进入 CLOSED 状态。

4. 在最后一次挥手时客户端为什么要等待2MSL?

确保最后一个 ACK 段到达服务器

防止 ACK 段丢失导致服务器重新发送 FIN 段。

防止旧的数据包干扰新的连接

确保所有与旧连接有关的数据包已经在网络中消失,避免数据混乱或错误。

5. TCP是如何保证可靠传输的

首先是三向握手和四次挥手确保上行和下行都是良好的

每个数据段都有一个唯一的序列号

使用ACK返回机制,确认号表示期望收到的下一个数据段的序号。

具有差错检测机制,每个数据段都包含一个校验和,用于检测数据在传输过程中是否发生错误。

有阻塞控制和流量控制机制,弱网以及性能不足也能收发信号。

6. 如何实现并发服务器

使用多线程和并发处理函数Select、poll、epoll等

socket,bind,listen,epoll,while(1){……}

7. Select、poll、epoll的区别?Select有什么优点?

Select是

8. Tcp的粘包问题

9. UDP的丢包问题

10. TCP编程框架

11. 用过抓包工具么?抓过什么数据包?

12. 广播和组播的区别

13. Tcp/ip网络模型分为几层?每一层什么作用?都有哪些协议?

14. OSI模型?

15. 学过什么数据库?增删改查语句?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值