筆試 網路通訊的問題

2021-07-15 12:38:08 字數 2202 閱讀 2539

一、tcp/ip三次握手?

1.首先客戶端通過向伺服器端傳送乙個syn來建立乙個主動開啟,作為三路握手的一部分。(同步位為1)

2. 然後伺服器端應當為乙個合法的syn回送乙個syn/ack。(同步位和確認位都為1)

3. 最後,客戶端再傳送乙個ack。這樣就完成了三路握手,並進入了連線建立狀態。(確認位位1)

二、tcp/ip通訊阻塞和非阻塞?

阻塞:當socket的接收緩衝區中沒有資料時,read呼叫會一直阻塞住,直到有資料到來才返回。當socket緩衝區中的資料量小於期望讀取的資料量時,返回實際讀取的位元組數。當socket的接收緩衝區中的資料大於期望讀取的位元組數時,讀取期望讀取的位元組數,返回實際讀取的長度。

非阻塞:socket的接收緩衝區中有沒有資料,read呼叫都會立刻返回。接收緩衝區中有資料時,與阻塞socket有資料的情況是一樣的,如果接收緩衝區中沒有資料,則返回錯誤號為ewouldblock,表示該操作本來應該阻塞的,但是由於本socket為非阻塞的socket,因此立刻返回,遇到這樣的情況,可以在下次接著去嘗試讀取。如果返回值是其它負值,則表明讀取錯誤。

因此,非阻塞的rea呼叫一般這樣寫:

if ((nread =read(sock_fd, buffer, len)) < 0)

if (errno ==ewouldblock)

return 0; //表示沒有讀到資料

else

return -1; //表示讀取失敗

}else returnnread;  //讀到資料長度

三、tcp/udp區別?

tcp---傳輸控制協議,提供的是面向連線、可靠的位元組流服務。當客戶和伺服器彼此交換資料前,必須先在雙方之間建立乙個tcp連線,之後才能傳輸資料。tcp提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。

udp---使用者資料報協議,是乙個簡單的面向資料報的運輸層協議。udp不提供可靠性,它只是把應用程式傳給ip層的資料報傳送出去,但是並不能保證它們能到達目的地。由於udp在傳輸資料報前不用在客戶和伺服器之間建立乙個連線,且沒有超時重發等機制,故而傳輸速度很快。

四、osi模型分哪幾層?

物理層、資料鏈路層、網路層、傳輸層、應用層、表示層、會話層

集線器hub工作在osi參考模型的(物理)層;跟路由器差不多,唯一不同是路由器可以撥號上網,而集線器不可以。

網絡卡工作在osi參考模型的(物理)層;

路由器router工作在osi參考模型的(網路)層,通過一根網線上網,共用乙個寬頻賬號。

交換機switch工作在osi參考模型的(資料鏈路)層,多根網線上網,用不同的寬頻賬號。

五:什麼是mtu?如何檢測mtu?

通訊術語 最大傳輸單元(maximum transmission unit,mtu)是指一種通訊協議的某一層上面所能通過的最大資料報大小(以位元組為單位)。最大傳輸單元這個引數通常與通訊介面有關(網路介面卡、串列埠等)。

本機開啟dos視窗,執行: ping -f -l 1472 192.168.0.1 其中192.168.0.1是閘道器ip位址,1472是資料報的長度。請注意,上面的引數是「-l」(小寫的l),而不是「-1」。 如果能ping通,表示資料報不需要拆包,可以通過閘道器傳送出去。 如果出現: packet needs to be fragmented but df set. 表示資料報需要拆開來傳送。此時,減少資料報長度,再執行上面的ping命令。從1400到1472之間多試幾次,就能找到合適的資料報長度了。把資料報長度加上資料報頭28位元組,就得到mtu的值。 如果檢測到閘道器的mtu值是1500,不需要修改。 如果閘道器有防火牆ping不通,可以試試直接把mtu設為1400。

基本知識:

現在的ipv4網路使用32位位址,以點分十進位制表示,如172.16.0.0。位址格式為:ip位址=網路位址+主機位址 或 ip位址=主機位址+子網位址+主機位址。

ip位址型別 

最初設計網際網路絡時,為了便於定址以及層次化構造網路,每個ip位址包括兩個標識碼(id),即網路id和主機id。同乙個物理網路上的所有主機都使用同乙個網路id,網路上的乙個主機(包括網路上工作站,伺服器和路由器等)有乙個主機id與其對應。ip位址根據網路id的不同分為5種型別,a類位址、b類位址、c類位址、d類位址和e類位址。 

1. a類ip位址 

乙個a類ip位址由1位元組的網路位址和3位元組主機位址組成,網路位址的最高位必須是「0」, 位址範圍從1.0.0.0 到126.0.0.0。可用的a類網路有126個,每個網路能容納1億多個主機。

網路通訊的屬性

clientsocket的控制項屬性 socket 此屬性引數是應用程式之間通訊的端點。address 此屬性引數為字串型別,客戶端確定伺服器端的ip位址。host 伺服器端的主機名稱。post 伺服器端的監視埠。servce 用來識別伺服器端口。active 確定socket是否可用 true表示...

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類新增網...