網絡編程常見問題

1、TCP和UDP的區別:
1)TCP提供面向連接的傳輸,通信前要先建立連接(三次握手機制);UDP提供無連接的傳輸,通信前不需要建立連接。
2)TCP提供可靠的傳輸(有序,無差錯,不丟失,不重複);UDP提供不可靠的傳輸。
3)TCP面向字節流的傳輸,因此它能將信息分割成組,並在接收端將其重組;UDP是面向數據報的傳輸,沒有分組開銷。

4)TCP提供擁塞控制和流量控制機制;UDP不提供擁塞控制和流量控制機制。


2、進程和線程的區別:
答:線程是指進程內的一個執行單元,也是進程內的可調度實體。與進程的區別:
(1)調度:線程作爲調度和分配的基本單位,進程作爲擁有資源的基本單位。
(2)併發性:不僅進程之間可以併發執行,同一個進程的多個線程之間也可併發執行。
(3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬於進程的資源.
(4)系統開銷:在創建或撤消進程時,由於系統都要爲之分配和回收資源,導致系統的開銷明顯大於創建或撤消線程時的開銷。


3、進程間通訊的方式有哪些,各有什麼優缺點:
1)管道:管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關係的進程之間使用。進程的親緣關係通常是指父子進程關係。
2)有名管道(FIFO):有名管道也是半雙工的通信方式,但是允許在沒有親緣關係的進程之間使用,管道是先進先出的通信方式。
3)信號量:信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作爲一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作爲進程間以及同一進程內不同線程之間的同步手段。
4)消息隊列:消息隊列是有消息的鏈表,存放在內核中並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。
5)信號 ( sinal ) :信號是一種比較複雜的通信方式,用於通知接收進程某個事件已經發生。
6)共享內存( shared memory ) :共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問。共享內存是最快的 IPC 方式,它是針對其他進程間通信方式運行效率低而專門設計的。它往往與其他通信機制,如信號量,配合使用,來實現進程間的同步和通信。
7)套接字( socket ) :套接字也是一種進程間通信機制,與其他通信機制不同的是,它可用於不同機器間的進程通信。


4、tcp連接建立的時候3次握手的具體過程,以及每一步原因:
(1)    第一步:源主機A的TCP向主機B發出連接請求報文段,其首部中的SYN(同步)標誌位應置爲1,表示想與目標主機B進行通信,併發送一個同步序列號X(例:SEQ=100)進行同步,表明在後面傳送數據時的第一個數據字節的序號是X+1(即101)。SYN同步報文會指明客戶端使用的端口以及TCP連接的初始序號。
(2)  第二步:目標主機B的TCP收到連接請求報文段後,如同意,則發回確認。在確認報中應將ACK位和SYN位置1,表示客戶端的請求被接受。確認號應爲X+1(圖中爲101),同時也爲自己選擇一個序號Y。
(3)  第三步:源主機A的TCP收到目標主機B的確認後要向目標主機B給出確認,其ACK置1,確認號爲Y+1,而自己的序號爲X+1。TCP的標準規定,SYN置1的報文段要消耗掉一個序號。
  運行客戶進程的源主機A的TCP通知上層應用進程,連接已經建立。當源主機A向目標主機B發送第一個數據報文段時,其序號仍爲X+1,因爲前一個確認報文段並不消耗序號。
  當運行服務進程的目標主機B的TCP收到源主機A的確認後,也通知其上層應用進程,連接已經建立。至此建立了一個全雙工的連接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章