# 網絡:復習題
> 原文:<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 編程:復習題
- 多線程編程:復習題
- 同步概念:復習題
- 記憶:復習題
- 管道:復習題
- 文件系統:復習題
- 網絡:復習題
- 信號:復習題
- 系統編程笑話