速讀原著-TCP/IP(交互式輸入)
- 2020 年 3 月 11 日
- 筆記
第19章 TCP的交互數據流
19.2 交互式輸入
首先來觀察在一個 R l o g i n連接上鍵入一個交互命令時所產生的數據流。許多 T C P / I P的初學者很吃驚地發現通常每一個交互按鍵都會產生一個數據分組,也就是說,每次從客戶傳到服務器的是一個位元組的按鍵(而不是每次一行)。而且,R l o g i n需要遠程系統(服務器)回顯我們(客戶)鍵入的字符。這樣就會產生4個報文段: (1)來自客戶的交互按鍵; (2)來自服務器的按鍵確認; (3)來自服務器的按鍵回顯; ( 4)來自客戶的按鍵回顯確認。圖 1 9 – 1表示了這個數據流。
然而,我們一般可以將報文段 2和 3進行合併—按鍵確認與按鍵回顯一起發送。下一節將描述這種合併的技術(稱為經受時延的確認)。
本章我們特意使用 R l o g i n作為例子,因為它每次總是從客戶發送一個位元組到服務器。在第 2 6章講到Te l n e t的時候,將會發現它有一個選項允許客戶發送一行到服務器,通過使用這個選項可以減少網絡的負載。圖1 9 – 2顯示的是當我們鍵入5個字符d a t e n時的數據流(我們沒有顯示連接建立的過程,並且去掉了所有的服務類型輸出。 B S D / 3 8 6通過設置一個R l o g i n連接的TO S來獲得最小時延)。
第1行客戶發送字符d到服務器。第2行是該字符的確認及回顯(也就是圖 1 9 – 1的中間兩部分數據的合併)。第3行是回顯字符的確認。與字符a有關的是第4 ~ 6行,與字符t有關的是第7 ~ 9行,第1 0 ~ 1 2行與字符e有關。第3 ~ 4、6 ~ 7、9 ~ 1 0和1 2 ~ 1 3行之間半秒左右的時間差是鍵入兩個字符之間的時延。
注意到1 3 ~ 1 5行稍有不同。從客戶發送到服務器的是一個字符(按下 R E T U R N鍵後產生的U N I X系統中的換行符),而回顯的則是兩個字符。這兩個字符分別是回車和換行字符(C R / L F),它們的作用是將光標回移到左邊並移動到下一行。
第1 6行是來自服務器的d a t e命令的輸出。這3 0個位元組由2 8個字符與最後的C R / L F組成。緊接着從服務器發往客戶的7個字符(第1 8行)是在服務器主機上的客戶提示符: svr4 % 。第1 9行確認了這7個字符。
注意T C P是怎樣進行確認的。第 1行以序號0發送數據位元組,第 2行通過將確認序號設為 1,也就是最後成功收到的位元組的序號加 1,來對其進行確認(也就是所謂的下一個期望數據的序號)。在第2行中服務器還向客戶發送了一序號為 1的數據,客戶在第 3行中通過設置確認序號為2來對該數據進行確認。