網路通訊總結

2021-08-07 06:56:13 字數 2236 閱讀 4456

1 tcp/ip協議概念

傳輸控制協議(transport control protocol),應用程式通過tcp進行通訊時,源和目標之間會建立乙個虛擬連線。兩台計算機可以把資料當做乙個雙向位元組流進行交換。(ip協議是一種網路層協議,規定每個網際網路上的計算機只能有乙個唯一的ip位址)

2 tcp和udp的區別

(tcp連線就像打**,使用者撥打特定的號碼,對方拿起**,雙方進行通話。udp就像發簡訊,是否收到是否回答,都不知道)

a tcp是面向連線的傳輸控制協議,udp提供的是無連線的資料報服務。

b tcp具有高可靠性,確保傳輸資料的正確性,不出現丟失或亂序;udp在傳輸資料前不建立連線,不對資料進行檢查和修改,無需等待對方的應答,所以會出現分組丟失、重複、亂序的情況。

c tcp對系統資源要求較多,udp對系統資源要求較少。

d udp具有較好的實時性,工作效率較高。

e udp的段結構比tcp的段結構簡單,網路開銷小。

3 什麼叫三次握手?什麼叫四次斷開?

tcp/ip中,採用三次握手來建立一次連線。syn: 表示建立連線 fin: 表示關閉連線 ack: 表示響應

第一次握手:建立連線時,客戶端傳送syn包(假如序列號seq=100)給伺服器,並進入syn_send狀態,等待伺服器的確認。

第二次握手:伺服器收到syn包之後,必須確認客戶端,要傳送ack包(ack=101),同時伺服器還必須傳送syn包(序列號seq=300)等客戶端的確認,此時伺服器進入syn_recv狀態。

第三次握手:客戶端接收到syn+ack包,向伺服器傳送確認包(ack=301),該包傳送完畢,此時客戶端和服務端進入established,兩者就可以進行資料交換了。

關閉連線的四次斷開:

a 客戶端傳送資料完畢之後,傳送乙個fin,提出斷開連線請求。

b 服務端收到fin包後,對其做出響應,傳送乙個ack包,確認這一方向的連線將關閉

c 等伺服器的應用程式做好關閉準備時,伺服器反方向傳送乙個fin

包給客戶端,請求關閉連線。

d 客戶端對伺服器傳送的請求進行確認,並傳送ack包。

引申:

tcp為什麼需要3次握手,採用兩次握手可以嗎?

採用三次握手是為了防止失效的連線請求突然又傳送到伺服器端,因而產生錯誤。

為什麼建立連線需要三次,關閉連線卻需要4次?

因為服務端監聽狀態下的socket收到syn報文的建立連線請求後,可以把ack和syn放在乙個報文裡大宋。但關閉連線時,當接收到對方的fin報文通知時,它僅僅表示對方沒有資料給你了;但你的資料未必都傳送給對方了,所以也不會馬上關閉socket,所以還是要先傳送一些資料給對方後,再傳送fin報文給對方表示同意現在關閉連線,所以ack和fin報文多數情況下是分開傳送的。

4 如何使用socket程式設計

流程如下:

伺服器:建立socket()套接字->bind()將套接字與本地位址繫結->listen()開始監聽連線請求->accpet()接收到連線請求,等待客戶端連線->與客戶端建立連線->開始通訊recv()/send()->關閉套接字

客戶端:建立socket()套接字->connect()發出連線請求->與伺服器建立連線->開始通訊》關閉套接字

其中主線程有乙個socket繫結在乙個固定埠上,負責監聽客戶端的socket資訊,每當客戶端傳送乙個連線請求,伺服器端就開啟乙個執行緒,並在其中建立乙個socket與客戶端的socket通訊,直到客戶端關閉,結束該執行緒。主線程中的socket在應用程式退出時關閉。

5 阻塞與非阻塞模式的區別

預設套接字是阻塞的。

從傳送和接收兩方面來說明區別。

a 傳送(write)

對於乙個tcp套接字,核心將從應用程序的緩衝區向該套接字的傳送緩衝區複製資料,對於阻塞的套接字,如果其傳送緩衝區沒有空間,程序將被掛起,直到有空間為止;對於非阻塞的套接字,如果其傳送緩衝區根本沒有空間,傳送函式將立即返回ewouldblock錯誤。如果其傳送緩衝區有一些空間,返回值將是核心能夠複製到該緩衝區的位元組數。

b 接收(read)

如果某個程序對乙個阻塞的tcp套接字呼叫輸入函式,而且該套接字的接收緩衝區沒有資料可讀,該程序將被掛起,直到到達一些資料(只要到達一些資料,該程序就會被喚醒);對於非阻塞的套接字,如果接收操作不能滿足,相應的嗲用將會立即返回乙個ewouldblock錯誤。

C 網路通訊

c 網路通訊 一 伺服器端程式 10.17 1.建立伺服器端socket 1 使用socket類 建立伺服器socket物件 socket objs new socket 引數 使用ipendpoint類設定伺服器ip位址和埠號 或使用dns類 ipaddress serip ipaddress.p...

Winsock網路通訊

winsock網路通訊 這裡我希望和大家 一下winsock網上通訊的程式,由於網際網路的普及,越來越多的程式具有了在網上與其他程式通訊的功能.其實所有這些功能都建立在winsock介面之上,應用程式執行大多數網路通訊的基本物件稱為套介面或軟插口 socket 使用mfc winsocket類新增網...

Winsock網路通訊

winsock網路通訊 這裡我希望和大家 一下winsock網上通訊的程式,由於網際網路的普及,越來越多的程式具有了在網上與其他程式通訊的功能.其實所有這些功能都建立在winsock介面之上,應用程式執行大多數網路通訊的基本物件稱為套介面或軟插口 socket 使用mfc winsocket類新增網...