# 网络:复习题
> 原文:<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,则退出。
- UIUC CS241 系统编程中文讲义
- 0. 简介
- #Informal 词汇表
- #Piazza:何时以及如何寻求帮助
- 编程技巧,第 1 部分
- 系统编程短篇小说和歌曲
- 1.学习 C
- C 编程,第 1 部分:简介
- C 编程,第 2 部分:文本输入和输出
- C 编程,第 3 部分:常见问题
- C 编程,第 4 部分:字符串和结构
- C 编程,第 5 部分:调试
- C 编程,复习题
- 2.进程
- 进程,第 1 部分:简介
- 分叉,第 1 部分:简介
- 分叉,第 2 部分:Fork,Exec,等等
- 进程控制,第 1 部分:使用信号等待宏
- 进程复习题
- 3.内存和分配器
- 内存,第 1 部分:堆内存简介
- 内存,第 2 部分:实现内存分配器
- 内存,第 3 部分:粉碎堆栈示例
- 内存复习题
- 4.介绍 Pthreads
- Pthreads,第 1 部分:简介
- Pthreads,第 2 部分:实践中的用法
- Pthreads,第 3 部分:并行问题(奖金)
- Pthread 复习题
- 5.同步
- 同步,第 1 部分:互斥锁
- 同步,第 2 部分:计算信号量
- 同步,第 3 部分:使用互斥锁和信号量
- 同步,第 4 部分:临界区问题
- 同步,第 5 部分:条件变量
- 同步,第 6 部分:实现障碍
- 同步,第 7 部分:读者编写器问题
- 同步,第 8 部分:环形缓冲区示例
- 同步复习题
- 6.死锁
- 死锁,第 1 部分:资源分配图
- 死锁,第 2 部分:死锁条件
- 死锁,第 3 部分:餐饮哲学家
- 死锁复习题
- 7.进程间通信&amp;调度
- 虚拟内存,第 1 部分:虚拟内存简介
- 管道,第 1 部分:管道介绍
- 管道,第 2 部分:管道编程秘密
- 文件,第 1 部分:使用文件
- 调度,第 1 部分:调度过程
- 调度,第 2 部分:调度过程:算法
- IPC 复习题
- 8.网络
- POSIX,第 1 部分:错误处理
- 网络,第 1 部分:简介
- 网络,第 2 部分:使用 getaddrinfo
- 网络,第 3 部分:构建一个简单的 TCP 客户端
- 网络,第 4 部分:构建一个简单的 TCP 服务器
- 网络,第 5 部分:关闭端口,重用端口和其他技巧
- 网络,第 6 部分:创建 UDP 服务器
- 网络,第 7 部分:非阻塞 I O,select()和 epoll
- RPC,第 1 部分:远程过程调用简介
- 网络复习题
- 9.文件系统
- 文件系统,第 1 部分:简介
- 文件系统,第 2 部分:文件是 inode(其他一切只是数据...)
- 文件系统,第 3 部分:权限
- 文件系统,第 4 部分:使用目录
- 文件系统,第 5 部分:虚拟文件系统
- 文件系统,第 6 部分:内存映射文件和共享内存
- 文件系统,第 7 部分:可扩展且可靠的文件系统
- 文件系统,第 8 部分:从 Android 设备中删除预装的恶意软件
- 文件系统,第 9 部分:磁盘块示例
- 文件系统复习题
- 10.信号
- 过程控制,第 1 部分:使用信号等待宏
- 信号,第 2 部分:待处理的信号和信号掩码
- 信号,第 3 部分:提高信号
- 信号,第 4 部分:信号
- 信号复习题
- 考试练习题
- 考试主题
- C 编程:复习题
- 多线程编程:复习题
- 同步概念:复习题
- 记忆:复习题
- 管道:复习题
- 文件系统:复习题
- 网络:复习题
- 信号:复习题
- 系统编程笑话