TCP/IP協議簡單小結

TCP/IP協議

起源:60年代末的美國政府資助的一個分組交換網絡研究項目。

作用:允許不同操作系統之間進行相互通信,被稱爲是Internet的基礎。

分層:TCP/IP,是一組不同層次上的多個協議的組合,TCP/IP通常被認爲是一個四層協議系統。

每一層負責不同的功能:

1) 鏈路層,有時也稱作數據鏈路層或網絡接口層,通常包括操作系統中的設備驅動程序和計算機中對應的網絡接口卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理接口細節。

2) 網絡層,有時也稱作互聯網層,處理分組在網絡中的活動,例如分組的選路。在TCP/IP協議族中,網絡層協議包括IP協議(網際協議),ICMP協議(Internet互聯網控制報文協議),以及IGMP協議(Internet組管理協議)。

3 ) 運輸層主要爲兩臺主機上的應用程序提供端到端的通信。在TCP/IP協議族中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。TCP爲兩臺主機提供高可靠性的數據通信。它所做的工作包括把應用程序交給它的數據分成合適的小塊交給下面的網絡層,確認接收到的分組,設置發送最後確認分組的超時時鐘等。由於運輸層提供了高可靠性的端到端的通信,因此應用層可以忽略所有這些細節。而另一方面,UDP則爲應用層提供一種非常簡單的服務。它只是把稱作數據報的分組從一臺主機發送到另一臺主機,但並不保證該數據報能到達另一端。任何必需的可靠性必須由應用層來提供。這兩種運輸層協議分別在不同的應用程序中有不同的用途,這一點將在後面看到。

4 ) 應用層負責處理特定的應用程序細節。幾乎各種不同的TCP/IP實現都會提供下面這些

通用的應用程序:

• Telnet 遠程登錄。

• FTP 文件傳輸協議。

• SMTP 簡單郵件傳送協議。

• SNMP 簡單網絡管理協議。

 

三次握手、四次揮手

Q1:爲什麼建立一個TCP連接需要三次握手而關閉一個TCP連接需要四次揮手?

建立一個TCP連接,需要三次握手。而關閉一個TCP連接,需要四次揮手,這是因爲TCP的半關閉(half-close)造成的。

Q2:詳細解釋三次揮手、四次握手。

三次握手的最主要目的是保證連接是雙工的,可靠更多的是通過重傳機制來保證的。

三次握手:指建立一個TCP連接時,需要客戶端服務端總共發送3 個包以確認連接的建立

    第一次握手:Client將標誌位SYN置爲1(表示要發起一個連接),隨機產生一個值seq=J,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。

    第二次握手:Server收到數據包後由標誌位SYN=1知道Client請求建立連接,Server將標誌位SYN和ACK都置爲1,ack=J+1,隨機產生一個值seq=K,並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。

    第三次握手:Client收到確認後,檢查ack是否爲J+1,ACK是否爲1,如果正確則將標誌位ACK置爲1,ack=K+1,並將該數據包發送給Server,Server檢查ack是否爲K+1,ACK是否爲1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸數據了。

四次揮手:終止TCP連接,就是指斷開一個TCP連接時,需要客戶端和服務端總共發送4個包以確認連接的斷開。

    第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態

    第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。

    第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。

    第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手。

Q3TCP爲什麼不是兩次握手?

防止已失效的連接請求又傳送到服務器端,因而產生錯誤。

假設改爲兩次握手,client端發送的一個連接請求在服務器滯留了,這個連接請求是無效的,client已經是closed的狀態了,而服務器認爲client想要建立一個新的連接,於是向client發送確認報文段,而client端是closed狀態,無論收到什麼報文都會丟棄。而如果是兩次握手的話,此時就已經建立連接了。服務器此時會一直等到client端發來數據,這樣就浪費掉很多server端的資源。

Q4TCPUDP的區別是什麼?(三類回答)

1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接

2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付。TCP通過校驗和,重傳控制,序號標識,滑動窗口、確認應答實現可靠傳輸。如丟包時的重發控制,還可以對次序亂掉的分包進行順序控制。

3、UDP具有較好的實時性,工作效率比TCP高,適用於對高速傳輸和實時性有較高的通信或廣播通信。

4.每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信

5、TCP對系統資源要求較多,UDP對系統資源要求較少。

tcp開銷大,udp開銷小
tcp有擁塞控制,可以慢開始,擁塞避免,快重傳和快恢復,udp沒有,不管網絡是否擁塞,udp客戶端都可以一直髮
tcp數據完整,按時,按序到達,udp盡力滿足
tcp延時高,適用於數據傳輸準確度要求高的場合,udp適用於數據傳輸量大,實時性要求高的場合

1.基於連接與無連接
2.TCP要求系統資源較多,UDP較少; 
3.UDP程序結構較簡單 
4.流模式(TCP)與數據報模式(UDP); 
5.TCP保證數據正確性,UDP可能丟包 
6.TCP保證數據順序,UDP不保證 

Q5:爲什麼UDP有時比TCP更有優勢?

UDP以其簡單、傳輸快的優勢,在越來越多場景下取代了TCP,如實時遊戲。

(1)網速的提升給UDP的穩定性提供可靠網絡保障,丟包率很低,如果使用應用層重傳,能夠確保傳輸的可靠性。

(2)TCP爲了實現網絡通信的可靠性,使用了複雜的擁塞控制算法,建立了繁瑣的握手過程,由於TCP內置的系統協議棧中,極難對其進行改進。

採用TCP,一旦發生丟包,TCP會將後續的包緩存起來,等前面的包重傳並接收到後再繼續發送,延時會越來越大,基於UDP對實時性要求較爲嚴格的情況下,採用自定義重傳機制,能夠把丟包產生的延遲降到最低,儘量減少網絡問題對遊戲性造成影響。

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