后端网络编程知识点总结

这篇博客总结了后端网络编程面试中常见的问题,包括TCP与UDP的区别、UDP connect的作用、TCP连接状态、socket服务端的实现、epoll与select的区别、epoll触发模式、大规模连接的并发模型设计、TCP连接的结束过程、TIME_WAIT状态、TCP头部字段、滑动窗口机制、非阻塞connect的处理、select返回可读的特殊情况、TCP的KeepAlive机制以及TCP选项的作用。内容详细,适合面试复习。
摘要由CSDN通过智能技术生成

这一篇是网络编程的面试知识点的总结。不打算从计算机网络的基础讲起,只是摘要性的总结一下知识点,更多的内容请从经典的书籍中获取。

1、tcp与udp的区别(必问)

  • 可靠性

      首先,TCP是一个面向连接的协议,需要三次握手。具有可靠性,但是并不是百分百的可靠,它通过序列号确认,超时重传等机制提供数据的可靠传送或者故障的可靠通知,但并不能保障数据一定会被对方接收。
      UDP是一个无连接的协议。UDP不保证数据报会到达最终的目的地,不保证数据报的先后顺序不变,不保证每个数据报只到达一次。不会自动的重传以及报告错误。

  • 协议类型

      每个UDP数据报都有一个长度,改数据报的长度随数据一道传递给接收端应用程序,而TCP是一个字节流协议,没有任何的记录边界。TCP和UDP都可以IPv4和IPv6。
      

  • 流量控制

      TCP提供流量控制,TCP总是告知对端在任何时刻它一次能够从对端接收多少字节的数据。从而保证发送端的发送的数据不会使接收缓冲区溢出。接收端的窗口大小会动态的变化。UDP不提供流量控制。

  • 全双工

      TCP连接是全双工的,意味着连接上的应用可以在任何时刻既发送数据又接收数据。需要的话也可转化成单工的连接。UDP**可以**是全双工的。
     
      比较来看,UDP似乎不是很好的选择,但是它胜在速度快(不需要建立连接),占用资源少(不需要状态维护)。报文的首部开销小,8个字节,TCP首部20个字节。从实际应用来说,也会选择UDP模拟实现TCP,或者使用上层协议保证传输可靠。

2、udp调用connect有什么作用?

  UDP的connect和TCP的connect不是一个概念,没有三次握手的过程。对于使用connect的已经连接的UDP套接字,与默认的未连接的套接字相比:
  

  1. 再也不能给输出操作指定目的地的IP和端口号。写到已连接UDP套接字上的任何内容都会自动发送到connect指定的协议地址上。使用write或send代替sendto。

  2. 不必使用recvfrom获悉数据报发送者,因为从内核返回的数据报只有那些指定协议地址的数据报。改用read,recv,recvmsg。

  3. 由已连接UDP套接字引发的异步错误会返回给它们所在的进程。而未连接套接字不接收任何异步错误。

    总的来说,connect启动一个声明和限定通信方的作用。同时,更少次数的连接和断开可以提高数据的传输效率。

    如果对一个已连接的UDP套接字进程再次调用connect,可以:

    1.指定新的IP地址和端口。

    2.断开套接字。

3、tcp连接中时序图,状态图,必须非常非常熟练

这个没什么好说的,看图。
这里写图片描述

这里写图片描述

4、socket服务端的实现,select和epoll的区别(必问)

  基本的socket服务端实现就在上面的图上。
  epoll的出现比较晚了,epoll是linux独有的高效的IO复用的机制。先简单提一下poll和select,poll和select很相似,但是poll没有select的文件描述符的限制(默认1024),poll使用pollfd结构代替描述符fd。
  而epoll与poll的不同在于:poll每次返回整个文件描述符的数组,用

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值