1. 程式人生 > >網路分層與TCP的三次握手與四次揮手

網路分層與TCP的三次握手與四次揮手

一、網路分層
網路分層就是將網路節點所要完成的資料的傳送、打包或者拆包,以及控制資訊的載入等工作,分別由不同的硬體或者軟體模組完成。
按照不同功能和硬軟體從下到上分成:1,物理層;2,資料鏈路層;3,網路層;4,傳輸層;5,應用層

1. 物理層
所謂的物理層,是指光纖、電纜或者電磁波等真實存在的物理媒介。及負責位元流在節點間的傳輸,即負責物理傳輸。

2. 資料鏈路層
該層負責網路層與物理層之間的通訊,其主要功能是如何在不可靠的物理線路上進行資料的可靠傳遞。而在鏈路層裡,為了保證傳輸,從網路層接受到的資料被分割成特定的可被物理層傳輸的幀。所謂的幀,是一段有限的0/1序列。連線層協議功能就是識別0/1序列中所包含的幀。是用來移動資料的結構包,它不僅包含原始資料,還包括髮送方和接受方的實體地址以及糾錯和控制資訊。

3. 網路層
該層決定如何將資料從傳送方路由到接受方。網路層通過綜合考慮傳送的優先權、網路堵塞程度、服務質量等來決定從一個網路中的節點A到另一個網路節點B的最佳路徑。好比路由器,完成主機與主機之間的通訊。主要的IP協議就在這裡,它負責對資料加上IP地址和其他的資料以確定傳輸的目標

4. 傳輸層
上面3層協議以及可以讓不同的主機之間通訊了,而每臺主機實際擁有多個程序,每個程序相當於不同程式,而要達到每個程式之間的通訊,而傳輸層就是為兩臺主機上的應用程式提供端到端的通訊。傳輸層有兩個傳輸協議:TCP(傳輸控制協議)和UDP(使用者資料報協議)。其中TCP是一個可靠的面相連線的協議,UDP是不可靠的協議。

5. 應用層
應用程式收到傳輸層的資料後,需要進行解讀,而解讀需要規定好格式。應用層就是規定應用程式的資料格式的。主要協議有:HTTP、FTP、Telnet、SMTP、POP3等。

二、TCP的三次握手與揮手

名詞解釋:seq為序列號; ACK為確認字元;FIN為結束;2MSL最大報文段生存時間

  • 三次握手
    第一次
    第一次握手:建立連線時,客戶端傳送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連線成功)狀態,完成三次握手。
  • 四次揮手
    第一次
    第一次揮手:客戶端設定seq和ACK,向伺服器傳送一個FIN報文段。此時客戶端進入FIN_WAIT_1狀態,表示客戶端沒有資料要傳送給服務端了。
    第二次
    第二次揮手:服務端收到客戶端傳送的FIN報文段,向客戶端回了個ACK確認報文段。
    第三次
    第三次揮手: 服務端向客戶端傳送FIN報文段,請求關閉連線,同時伺服器進入LAST_ACK狀態。
    第四次
    第四次揮手:客戶端收到服務端傳送的FIN報文段,向伺服器傳送ACK報文段,然後客戶端進入TIME_WAIT狀態。服務端收到客戶端的ACK報文段後,就關閉連線。
    此時,客戶端等待2MSL後依然沒有收到回覆,說明服務端已正常關閉,這樣客戶端也關閉連線。
    揮手和握手