計算機網絡之TCP/IP

一.三次握手
第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。
二.四次揮手
第一次揮手:
Client (可以使客戶端,也可以是服務器端),設置Sequence Number和Acknowledgment Number,向 Server發送一個FIN報文段;此時,Client 進入FIN_WAIT_1狀態;這表示 Client 沒有數據要發送給 Server了;
客戶端發送第一次揮手後,就不能在向 服務端發送數據了。
第二次揮手:
Server 收到了 Client 發送的FIN報文段,向 Client 回一個ACK報文段,Acknowledgment Number 爲 Sequence Number 加 1;Client 進入 FIN_WAIT_2 狀態;Server 告訴 Client ,我“同意”你的關閉請求;
Server 第一次響應後,還可以繼續向 Client 發送數據,這裏只是告訴 Client ,我收到你發送的關閉請求。
第三次揮手
Server 向 Client 發送 FIN 報文段,請求關閉連接,同時 Server 進入 CLOSE_WAIT 狀態;
當 Server 的數據響應完成後,再告訴 Client,我這邊也可以關閉請求了, 這時
Server 就不能再向 Client 發送數據了
第四次揮手
Client 收到 Server 發送的 FIN 報文段,向 Server 發送 ACK 報文段,然後 Client 進入
TIME_WAIT 狀態;Server 收到 Client 的 ACK 報文段以後,就關閉連接;此時,Client
等待2MSL後依然沒有收到回覆,則證明 Server 端已正常關閉,那好,Client 也可以關閉連接了。
三.爲什麼要等待2MSL?
雖然按道理,四個報文都發送完畢,我們可以直接進入CLOSE狀態了,但是我們必須假象網絡是不可靠的,有可以最後一個ACK丟失。所以TIME_WAIT狀態就是用來重發可能丟失的ACK報文。在Client發送出最後的ACK回覆,但該ACK可能丟失。Server如果沒有收到ACK,將不斷重複發送FIN片段。所以Client不能立即關閉,它必須確認Server接收到了該ACK。Client會在發送出ACK之後進入到TIME_WAIT狀態。Client會設置一個計時器,等待2MSL的時間。如果在該時間內再次收到FIN,那麼Client會重發ACK並再次等待2MSL。所謂的2MSL是兩倍的MSL(Maximum Segment Lifetime)。MSL指一個片段在網絡中最大的存活時間,2MSL就是一個發送和一個回覆所需的最大時間。如果直到2MSL,Client都沒有再次收到FIN,那麼Client推斷ACK已經被成功接收,則結束TCP連接。
四.爲什麼不能用兩次握手進行連接?
爲了實現可靠數據傳輸, TCP 協議的通信雙方, 都必須維護一個序列號, 以標識發送出去的數據包中, 哪些是已經被對方收到的。 三次握手的過程即是通信雙方相互告知序列號起始值, 並確認對方已經收到了序列號起始值的必經步驟。
如果只是兩次握手, 至多隻有連接發起方的起始序列號能被確認, 另一方選擇的序列號則得不到確認。
五.說一下TCP擁塞控制
1.擁塞:在某段時間,如果對網絡中的某一資源的需求超過了該資源所能提供的可用部分,網絡的性能就要發生變化,這種情況叫阻塞
2.擁塞控制:擁塞控制是防止過多的數據注入到網絡中,可以使網絡中的路由器或鏈路不致過載,是一個全局性的過程。
3.慢開始:設置擁塞窗口=1,不要一開始就發送大量的數據,先探測一下網絡的擁塞程度,也就是說由小到大逐漸增加擁塞窗口的大小。
4.擁塞避免:將擁塞窗口控制爲按線性規律增長,使網絡比較不容易出現擁塞。讓擁塞窗口cwnd緩慢地增大,即每經過一個往返時間RTT就把發送方的擁塞控制窗口加一
5.快重傳:快重傳要求接收方在收到一個失序的報文段後就立即發出重複確認(爲的是使發送方及早知道有報文段沒有到達對方)而不要等到自己發送數據時捎帶確認。快重傳算法規定,發送方只要一連收到三個重複確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待設置的重傳計時器時間到期。
6.快恢復:當發送方連續收到三個重複確認,執行乘法減小,ssthresh減半。由於發送方可能認爲網絡現在沒有擁塞,因此與慢開始不同,把cwnd值設置爲ssthresh減半之後的值,然後執行擁塞避免算法,線性增大cwnd
六.說一下TCP滑動窗口
1.概述:滑動窗口通俗來講就是一種流量控制技術。 它本質上是描述接收方的TCP數據報緩衝區大小的數據,發送方根據這個數據來計算自己最多能發送多長的數據,如果發送方收到接收方的窗口大小爲0的TCP數據報,那麼發送方將停止發送數據,等到接收方發送窗口大小不爲0的數據報的到來
七.TCP和UDP的區別
TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接。
TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付。
Tcp通過校驗和,重傳控制,序號標識,滑動窗口、確認應答實現可靠傳輸。如丟包時的重發控制,還可以對次序亂掉的分包進行順序控制。
UDP具有較好的實時性,工作效率比TCP高,適用於對高速傳輸和實時性有較高的通信或廣播通信。
每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信。
TCP對系統資源要求較多,UDP對系統資源要求較少。

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