1. 程式人生 > >練習題|網絡編程-socket開發

練習題|網絡編程-socket開發

命令 互聯網 什麽 多少 TP 電信 請求 在服務器 三次

1、什麽是C/S架構?

  C指的是client(客戶端軟件),S指的是Server(服務端軟件),C/S架構的軟件,實現服務端軟件與客戶端軟件基於網絡通信。

2、互聯網協議是什麽?分別介紹五層協議中每一層的功能?

  互聯網協議就是計算機界通用的語言;互聯網協議分為osi七層或tcp/ip五層或tcp/ip四層;

技術分享圖片

物理層功能:主要是基於電器特性發送高低電壓(電信號),高電壓對應數字1,低電壓對應數字0。

數據鏈路層的功能:定義了電信號的分組方式按照以太網協議;一組電信號構成一個數據包,叫做一組數據‘幀’;每一數據幀分成:報頭head和數據data兩部分。head前六個字節和後六個字節是mac地址,基於mac地址來標示對方;在局域網內以廣播的方式工作。

網絡層功能:引入一套新的地址用來區分不同的廣播域/子網,這套地址即網絡地址。

傳輸層功能:建立端口到端口的通信,端口即應用程序與網卡關聯的編號。tcp和udp

應用層功能:有自己的協議如http、ftp協議,跑應用軟件。

3、基於tcp協議通信,為何建立鏈接需要三次握手,而斷開鏈接卻需要四次揮手?

tup協議,客戶端給服務端發一次消息,服務端要回應下並且給發給客戶端,然後客戶端再發給服務端,中間兩步回應下+給客戶端發消息可以合成一步,鏈接建立完成也就是三次握手;客戶端說要斷開鏈接PIN=1,服務端確認下ack=1,客戶端接收到了,這條管道就斷開了,服務端要斷開發PIN=1,客戶端回一個ack=1,管道就斷開了。

客戶端說把數據傳完了,服務端不一定傳完數據了,中間那兩步不能合成一步,所以斷開鏈接需要四次揮手。

技術分享圖片

4、為何基於tcp協議的通信比基於udp協議的通信更可靠?

   tcp協議一定是先建好雙向鏈接,發一個數據包要得到確認才算發送完成,沒有收到就一直給你重發;udp協議沒有鏈接存在,udp直接丟數據,不管你有沒有收到。

5、?流式協議指的是什麽協議,數據報協議指的是什麽協議?

流式協議指的是tcp協議,數據報協議指的是udp協議

6、什麽是socket?簡述基於tcp協議的套接字通信流程

Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口後面,對用戶來說,一組簡單的接口就是全部。

服務端先初始化Socket實例化一個類拿到對象(才能調用下面的接口),然後綁定IP端口(bind),監聽(listen)就是說客戶端可以來連我了,調用accept接收鏈接;這時客戶端初始化一個socket,然後connect與服務端建立好雙向鏈接與accept對應。客戶端發送請求數據,服務端處理請求並給客戶端回應數據,這樣一個通信循環;最後關閉套接字,一次交互結束。

7、什麽是粘包? socket 中造成粘包的原因是什麽? 哪些情況會發生粘包現象?

如客戶端只recv(1024), 可結果比1024長那怎麽辦,只好在服務器端的IO緩沖區裏把客戶端還沒收走的暫時存下來,等客戶端下次再來收,所以當客戶端第2次調用recv(1024)就會首先把上次沒收完的數據先收下來,再收df命令的結果。

這個現象叫做粘包,就是指兩次結果粘到一起了。它的發生主要是因為socket緩沖區導致的。

所謂粘包問題原因:(1)主要還是因為接收方不知道消息之間的界限,不知道一次性提取多少字節的數據所造成的。(2)發送方引起的粘包是由TCP協議本身造成的,TCP為提高傳輸效率,發送方往往要收集到足夠多的數據後才發送一個TCP段。若連續幾次需要send的數據都很少,通常TCP會根據優化算法把這些數據合成一個TCP段後一次發送出去,這樣接收方就收到了粘包數據。

發生粘包的情況:(1)發送端需要等緩沖區滿才發送出去,造成粘包(發送數據時間間隔很短,數據了很小,會合到一起,產生粘包)(2)接收方不及時接收緩沖區的包,造成多個包接收(客戶端發送了一段數據,服務端只收了一小部分,服務端下次再收的時候還是從緩沖區拿上次遺留的數據,產生粘包)

8、基於socket開發一個聊天程序,實現兩端互相發送和接收消息

9、基於tcp socket,開發簡單的遠程命令執行程序,允許用戶執行命令,並返回結果

10、基於tcp協議編寫簡單FTP程序,實現上傳、下載文件功能,並解決粘包問題

11、基於udp協議編寫程序,實現功能

  1. 執行指定的命令,讓客戶端可以查看服務端的時間

  2. 執行指定的命令,讓客戶端可以與服務的的時間同步

練習題|網絡編程-socket開發