💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 网络:复习题 > 原文:<https://github.com/angrave/SystemProgramming/wiki/Networking%3A-Review-Questions> * [Wiki w / Interactive MC Questions](http://angrave.github.io/SystemProgramming/networkingreviewquestions.html) * 见[编码问题](#coding-questions) * 见[简答题](#short-answer-questions) * 参见 [MP Wearables](https://courses.engr.illinois.edu/cs241/mps/mp7/) Food For Thought 问题 ## 简答题 ## Q1 什么是插座? ## Q2 在端口 1000 和端口 2000 上侦听有什么特别之处? * 端口 2000 的速度是端口 1000 的两倍 * 端口 2000 的速度是端口 1000 的两倍 * 端口 1000 需要 root 权限 * 没有 ## Q3 描述 IPv4 和 IPv6 之间的一个重要区别 ## Q4 你何时以及为什么要使用 ntohs? ## Q5 如果主机地址是 32 位,我最有可能使用哪种 IP 方案? 128 位? ## Q6 哪种常见的网络协议是基于数据包的,可能无法成功传送数据? ## Q7 哪种常见协议是基于流的,如果数据包丢失会重新发送数据? ## Q8 什么是 SYN ACK ACK-SYN 握手? ## Q9 以下哪一项不是 TCP 的功能? * 数据包重新排序 * 流量控制 * 数据包重传 * 简单的错误检测 * 加密 ## Q10 什么协议使用序列号?他们的初始价值是多少?为什么? ## Q11 构建 TCP 服务器需要的最小网络调用是多少?他们的正确顺序是什么? ## Q12 构建 TCP 客户端需要的最小网络调用是多少?他们的正确顺序是什么? ## Q13 你何时会在 TCP 客户端上调用 bind? ## Q14 socket bind listen accept 的目的是什么? ## Q15 以上哪个调用可以阻塞,等待新客户端连接? ## Q16 什么是 DNS?它对你有什么用?哪个 CS241 网络电话会使用它? ## Q17 对于 getaddrinfo,如何指定服务器套接字? ## Q18 为什么 getaddrinfo 会生成网络数据包? ## Q19 哪个网络调用指定允许的积压的大小? ## Q20 哪个网络调用返回一个新的文件描述符? ## Q21 何时使用被动插座? ## Q22 epoll 什么时候比选择更好?何时选择比 epoll 更好的选择? ## Q23 `write(fd, data, 5000)`总是会发送 5000 字节的数据吗?什么时候会失败? ## Q24 网络地址转换(NAT)如何工作? ## Q25 @MCQ 假设网络在客户端和服务器之间有 20ms 的传输时间,建立 TCP 连接需要多长时间? 20 ms 40 ms 100 ms 60 ms @ANS 3 Way Handshake @EXP @END ## Q26 HTTP 1.0 和 HTTP 1.1 之间有什么区别?如果网络传输时间为 20 毫秒,将 3 个文件从服务器传输到客户端需要多少 ms? HTTP 1.0 和 HTTP 1.1 之间的时间差异如何? ## 编码问题 ## 问 2.1 写入网络套接字可能不会发送所有字节,并且可能会因信号而中断。检查`write`的返回值以实现`write_all`,该 COD1 将使用任何剩余数据重复调用`write`。如果`write`返回-1,则立即返回-1,除非`errno`为`EINTR` - 在这种情况下重复最后一次`write`尝试。您将需要使用指针算法。 ```c // Returns -1 if write fails (unless EINTR in which case it recalls write // Repeated calls write until all of the buffer is written. ssize_t write_all(int fd, const char *buf, size_t nbyte) { ssize_t nb = write(fd, buf, nbyte); return nb; } ``` ## 问 2.2 实现一个侦听端口 2000 的多线程 TCP 服务器。每个线程应从客户端文件描述符中读取 128 个字节,并在关闭连接并结束线程之前将其回送给客户端。 ## 问 2.3 实现侦听端口 2000 的 UDP 服务器。保留 200 字节的缓冲区。听取到达的数据包。有效数据包为 200 字节或更少,以 4 字节 0x65 0x66 0x67 0x68 开头。忽略无效的数据包。对于有效数据包,将第五个字节的值作为无符号值添加到运行总计中,并打印到目前为止的总数。如果运行总计大于 255,则退出。