選擇題(10*2)
1、主機甲與主機乙之間已建立一個 TCP 連接,主機甲向主機乙發送了兩個連續的 TCP 段,分別包含 300 字節和 500 字節的有效載荷,第一個段的序列號為 200,主機乙正確接收到兩個段后,發送給主機甲的確認序列號是______。 (2009考研408試題)
A.500
B.700
C.800
D.1000
解析: C
考查 TCP 的數據編號與確認。
TCP是面向字節流的,其選擇確認(Selective ACK)機制是接收端對字節序號進行確認,其返回的序號是接收端下一次期望接收的序號,因此主機乙接收兩個段后返回給主機甲的確認序列號是1000。
2、一個 TCP 連接總是以 1KB 的最大段長發送 TCP 段,發送方有足夠多的數據要發送。當擁塞窗口為 16KB時發生了超時,如果接下來的 4 個 RTT(往返時間)時間內的 TCP 段的傳輸都是成功的,那么當第 4 個RTT 時間內發送的所有 TCP 段都得到肯定應答時,擁塞窗口大小是______。 (2009考研408試題)
A.7 KB
B.8 KB
C.9 KB
D.16 KB
解析:C
考查 TCP 的擁塞控制方法。
無論在慢開始階段還是在擁塞避免階段,只要發送方判斷網絡出現擁塞(其根據就是沒有按時收到確認),就要把慢開始門限 ssthresh 設置為出現擁塞時的發送方窗口值的一半(但不能小於 2)。然后把擁塞窗口 cwnd 重新設置為 1,執行慢開始算法。這樣做的目的就是要迅速減少主機發送到網絡中的分組數,使得發生擁塞的路由器有足夠時間把隊列中積壓的分組處理完畢。 因此,在發送擁塞后,慢開始門限 ssthresh 變為 16/2 =8 KB,發送窗口變為 1 KB。在接下來的 3個 RTT 內,擁塞窗口執行慢開始算法,呈指數形式增加到 8 KB,此時由於慢開始門限 ssthresh 為 8 KB,因此轉而執行擁塞避免算法,即擁塞窗口開始“加法增大”。因此第 4 個 RTT 結束后,擁塞窗口的大小為 9 KB。
3、若路由器 R 因為擁塞丟棄 IP 分組,則此時 R 可向發出該 IP 分組的源主機發送的 ICMP 報文類型是______。 (2010考研408試題)
A.路由重定向
B.目的不可達
C.源點抑制
D.超時
解析:C
考查 ICMP 協議。
ICMP 差錯報告報文有 5 種,終點不可達、源點抑制、時間超過、參數問題、改變路由(重定向), 其中源點抑制是當路由器或主機由於擁塞而丟棄數據報時,就向源點發送源點抑制報文,使源點知道應當把數據報的發送速率放慢。
4、如果本地域名服務器無緩存,當采用遞歸方法解析另一網絡某主機域名時,用戶主機、本地域名服務器發送的域名請求消息數分別為______。 (2010考研408試題)
A.一條、一條
B.一條、多條
C.多條、一條
D. 多條、多條
解析:A
考查 DNS 系統域名解析過程。
當采用遞歸查詢的方法解析域名時,如果主機所詢問的本地域名服務器不知道被查詢域名的 IP 地址,那么本地域名服務器就以 DNS 客戶的身份,向其他根域名服務器繼續發出查詢請求報文,這種方法用戶主機和本地域名服務器發送的域名請求條數均為 1 條。
5、TCP/IP參考模型的網絡層提供的是_____。 (2011考研408試題)
A.無連接不可靠的數據報服務
B.無連接可靠的數據報服務
C.有連接不可靠的虛電路服務
D.有連接可靠的虛電路服務
解析:A。
TCP/IP的網絡層向上只提供簡單靈活的、無連接的、盡最大努力交付的數據報服務。此外考察IP首部,如果是面向連接的,則應有用於建立連接的字段,但是沒有;如果提供可靠的服務,則至少應有序號和校驗和兩個字段,但是IP分組頭中也沒有(IP首部中只是首部校驗和)。因此網絡層提供的無連接不可靠的數據服務。有連接可靠的服務由傳輸層的TCP提供。
6、若某通信鏈路的數據傳輸速率為2400bps,采用4相位調制,則該鏈路的波特率是_____。 (2011考研408試題)
A.600波特
B.1200波特
C.4800波特
D.9600波特
解析:B。
有 4 種相位,則一個碼元需要由 log24=2 個 bit 表示,則波特率=比特率/2=1200波特。
7、ARP 協議的功能是_____ 。 (2012考研408試題)
A.根據 IP 地址查詢 MAC 地址
B.根據 MAC 地址查詢 IP 地址
C.根據域名查詢 IP 地址
D.根據 IP 地址查詢域名
解析:A
考查 ARP 協議的功能。
在實際網絡的數據鏈路層上傳送數據時,最終必須使用硬件地址,ARP 協議是將網絡層的 IP 地址解析為數據鏈路層的 MAC 地址。
8、某主機的 IP 地址為 180.80.77.55,子網掩碼為 255.255.252.0。若該主機向其所在子網發送廣播分組,則目的地址可以是_____ 。(2012考研408試題)
A.180.80.76.0
B.180.80.76.255
C.180.80.77.255
D.180.80.79.255
解析:D
考查 IP 地址的特點。
由子網掩碼可知前 22 位為子網號、后 10 位為主機號。IP 地址的第 3 個字節為 01001101(下划線為子網號的一部分),將主機號全置為 1,可得廣播地址為 180.80.79.255。
9、站點 A、B、C 通過 CDMA 共享鏈路,A、B、C 的碼片序列(chipping sequence)分別是(1,1,1,1)、(1,-1,1,-1)和(1,1,-1,-1)。若 C 從鏈路上收到的序列是(2,0,2,0,0,-2,0,-2,0,2,0,2), 則 C 收到 A 發送的數據是____ 。
A.000 B.101 C.110 D.111
解析:B
把收到的序列分成每 4 個數字一組,即為(2,0,2,0)、(0,-2,0,-2)、(0,2,0,2),因為題目求的是 A 發送的數據,因此把這三組數據與 A 站的碼片序列(1,1,1,1)做內積運算,結果分別是(2,0,2,0)·(1,1,1,1)/4=1、(0,-2,0,-2)·(1,1,1,1)/4=-1、(0,2,0,2)·(1,1,1,1)/4=1,所以 C 接收到的 A 發送的數據是 101,選 B。
10、對於 100Mbps 的以太網交換機,當輸出端口無排隊,以直通交換(cut-through switching)方式轉發一個以太網幀(不包括前導碼)時,引入的轉發延遲至少是_____。
0 μs
B. 0.48 μs
C. 5.12 μs
D. 121.44 μs
解析:B
直通交換方式是指以太網交換機可以在各端口間交換數據。它在輸入端口檢測到一個數據包時,檢查該包的包頭,獲取包的目的地址,啟動內部的動態查找表轉換成相應的輸出端口,在輸入與輸出交叉處接通,把數據包直通到相應的端口,實現交換功能。通常情況下,直通交換方式只檢查數據包的包頭即前 14 個字節,由於不需要考慮前導碼,只需要檢測目的地址的 6 B,所以最短的傳輸延遲是 0.48μs。
填空題(5*2)
11、計算機網絡的主要功能有 通信、 資源共享、 分布計算、 提高可靠性。
12、沖突窗口是從數據發送開始到網絡上最遠的兩個站之間信號傳播時延的兩倍止的時間區間。
13、對於 4KHz 的電話每秒采樣 8K 次如用 8bit 來表示每個采樣值若要傳 32 路電話則要求信道帶寬為 32*8*8K=2.048 Mbps。
14、網絡應用系統通信模型稱為 客戶/服務器模型Client/Server 。
15、網絡上兩個進程之間進行通信需要用一個五元組來標識本地主機地址、本地端口號、協議、遠程主機地址、遠程端口號。
簡答題(4*5)
16、什么是端口,網絡通信中為什么要引入端口?
解析:
端口是TCP/IP協議簇中,應用層進程與傳輸層協議實體間的通信接口。端口是操作系統可分配的一種資源;應用程序(進程)通過系統調用與某端口綁定(binding)后,傳輸層傳給該端口的數據都被相應進程接收,相應進程發給傳輸層的數據都通過該端口輸出。
17、HTTP協議的內容有哪些?
解析:
HTTP請求信息;
HTTP方法;
HTTP響應信息;
URL;
HTTP流程。
18、在IE地址欄中輸入域名后的HTTP流程。
解析:
(1)URL自動解析;
(2)獲取IP,建立TCP連接;
(3)客戶端瀏覽器向服務器發出HTTP請求;
(4)Web服務器應答,並向瀏覽器發送數據;
(5)Web服務器關閉TCP連接。
19、試分析面向連接的服務器和無連接的服務器各自的優缺點。(電子科技大學網絡編程考試)
解析:
(1)
面向連接的服務的優點:
易於編程;
自動處理分鍾丟失,分組失序;
自動驗證數據差錯,處理連接狀態
面向連接的服務的缺點:
在每個連接都有一個單獨的套接字,耗費更多的資源
在空閑的連接上不發送任何分組
始終運行的服務器會因為客戶的崩潰,導致無用套接字的過多而 耗盡資源
(2)
無連接服務的優點:
沒有資源耗盡問題
無連接服務缺點:
需要自己完成可靠通信問題,必要時,需要一種自適應重傳的復 雜技術,需要程序員具有相當的專業知識,對於可靠通信的場合, 盡量使用TCP。
編程題(30)
20、TCP客戶端需要向服務器端8629發出連接請求,與服務器進行信息交流,當收到服務器發來的是“BYE”時,立即向對方發送“BYE”,然后關閉連接,否則,繼續向服務器發送信息。
import java.io.*; import java.net.*; class Client2{ public Client2() { try {String s; Socket socket = new Socket("服務器地址", 8629); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(),true); BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); while(true) { System.out.println("請向服務器輸出一條字符串:"); s=line.readLine(); out.println(s); //向服務器發出信息;
s=in.readLine().trim(); //收到服務器發來的信息;
System.out.println("服務器返回的信息是:"); System.out.println(s); if(s.equals("BYE")) { out.println("BYE"); line.close(); out.close(); in.close(); socket.close(); break;} } } catch (IOException e){} } public static void main(String[] args) { new Client2(); }} import java.io.*; import java.net.*; class Server { public static void main(String[] args) { new UDPServer() ; } } class UDPServer { public UDPServer() { try { DatagramSocket socket = new DatagramSocket(1986); //建立一個Socket連接
System.out.println("服務器IP:" + InetAddress.getLocalHost().getHostAddress()); //顯示服務器信息
while (true) { // 接收
byte[] instr = new byte[200]; DatagramPacket receive = new DatagramPacket(instr, instr.length); socket.receive(receive); //接收客戶機發過來的數據
String str = new String(receive.getData()); //提取數據
if(str.trim().equals("BYE")) {socket.close();break;} System.out.println("收到客戶端消息:" + str.trim()); //打印客戶機消息 // 發送
System.out.print("服務器發送消息:"); str = new BufferedReader(new InputStreamReader(System.in)).readLine(); //得到輸入的數據
byte[] outstr = new byte[str.length()]; outstr = str.getBytes(); DatagramPacket send = new DatagramPacket(outstr,outstr.length, receive.getAddress(), receive.getPort()); //向客戶機發送數據
socket.send(send); //執行發送
} } catch (Exception e) { //錯誤處理 //e.printStackTrace();
} } } UDP發送端 import java.io.*; import java.net.*; class Client { public static void main(String[] args) { new UDPClient(); } } class UDPClient { public UDPClient() { System.out.print("請輸入服務器的地址:"); String serverip = null; try { serverip = new BufferedReader(new InputStreamReader(System.in)).readLine(); //取得輸入的服務器地址
} catch (IOException e1) { //錯誤處理 //e1.printStackTrace();
} try { DatagramSocket socket = new DatagramSocket(); //建立Socket
while (true) { // 發送
System.out.print("客戶端發送消息:"); String send = new BufferedReader(new InputStreamReader(System.in)).readLine(); //讀入客戶機輸入的消息
byte[] outstr = new byte[send.length()]; outstr = send.getBytes(); InetAddress address = InetAddress.getByName(serverip); DatagramPacket packet = new DatagramPacket(outstr, outstr.length, address, 1986); //向服務器發送數據報
socket.send(packet); //發送數據報 // 接收
byte[] instr = new byte[200]; packet = new DatagramPacket(instr, instr.length); //接收數據報
socket.receive(packet); //接收數據
String out = new String(packet.getData()); //取出信息
if(out.trim().equals("BYE")) {socket.close();break;} System.out.println("收到服務器消息:" + out.trim()); //打印服務器發過來的信息
} } catch (Exception e) { // 錯誤處理 // e.printStackTrace();
} } }
解析題(20)
21、某公司網絡如圖所示。 IP 地址空間 192.168.1.0/24 被均分給銷售部和技術部兩個子網,並已分別為部分主機和路由器接口分配了 IP 地址,銷售部子網的 MTU=1500B ,技術部子網的 MTU=800B 。

(1)銷售部子網的廣播地址是什么?技術部子網的子網地址是什么?若每個主機僅分配一個IP 地址,則技術部子網還可以連接多少台主機?
(2)假設主機 192.168.1.1 向主機 192.168.1.208 發送一個總長度為 1500B 的 IP 分組, IP 分組的頭部長度為 20B,路由器在通過接口 F1 轉發該 IP 分組時進行了分片。若分片時盡可能分為最大片,則一個最大 IP 分片封裝數據的字節數是多少?至少需要分為幾個分片?每個分片的片偏移量是多少?
(2018考研408試題)
解析:
1)廣播地址是網絡地址中主機號全 1 的地址(主機號全 0 的地址,代表網絡本身) 。銷售部和技術部均分配了 192.168.1.0/24 的 IP 地址空間, IP 地址的前 24 位為子網的網絡號。 於是在后 8 位中划分部門的子網,選擇前 1 位作為部門子網的網絡號。令銷售部子網的網絡號為 0,技術部子網的網絡號為 1,則技術部子網的完整地址為 192.168.1.128 ;令銷售部子網的主機號全 1,可以得到該部門的廣播地址為 192.168.1.127 。 每個主機僅分配一個 IP 地址,計算目前還可以分配的主機數,用技術部可以分配的主機數,減去已分配的主機數, 技術部總共可以分配計算機主機數為128-2=126(減去全 0 和全 1 的主機號)。 已經分配了 208-129+1=80 個,此外還有 1 個 IP 地址分配給了路由器的端口 (192.168.1.254) ,因此還可以分配 126-80-1=45 台。
2)判斷分片的大小,需要考慮各個網段的 MTU ,而且注意分片的數據長度必須是 8B 的整數倍。由題可知,在技術部子網內, MTU=800B ,IP 分組頭部長 20B,最大 IP 分片封裝數據的字節數為 (800-20)/8 ×8=776 。至少需要的分片數為 (1500-20)/776 =2 。第 1 個分片的偏移量為 0;第 2 個分片的偏移量為 776/8=97 。
