網絡基礎-OSI模型/封裝解封裝/三次握手四次斷開

一:端口

1:什麼是端口?端口的做用

 

 

在網絡技術中,端口(Port)有好幾種意思。集線器、交換機、路由 器的端口指的是鏈接其餘網絡設備的接口,如RJ-45端口Serial端口等。咱們 這裏所指的端口不是指物理意義上的端口,而是特指TCP/IP協議中的端口,是邏 輯意義上的端口。 服務器

 

那麼TCP/IP協議中的端口指的是什麼呢?若是把IP地址比做一間房子 ,端口就是出入這間房子的門。真正的房子只有幾個門,可是一個IP地址的端口 能夠有65536個之多!端口是經過端口號來標記的,端口號只有整數,範圍是從0 65535網絡

 

端口有什麼用呢?咱們知道,一臺擁有IP地址的主機能夠提供許多服 務,好比Web服務FTP服務、SMTP服務等,這些服務徹底能夠經過1IP地址來 實現。那麼,主機是怎樣區分不一樣的網絡服務呢?顯然不能只靠IP地址,由於IP 地址與網絡服務的關係是一對多的關係。其實是經過「IP地址+端口號來區 分不一樣的服務的。框架

簡言之:socket

  ---端口是爲了將同一個電腦上的不一樣程序進行隔離。ide

  ---端口是找電腦上的程序網站

  ---IP是找電腦spa

端口的範圍:1-65535orm

      系統經常使用1-1024視頻

      開發人員經常使用:8000/8001....blog

二:OSI七層模型

  簡單介紹OSI的分層、做用、封裝

開發人員視角:本身代碼+框架

應用層

使用軟件。        

  打開軟件或網站

表示層

看到數據,如圖片和視頻。

   生產數據:szwwd

 

會話層

保持登陸或連接狀態。

  應用偷偷攜帶一點其餘數據:令牌 19rRNAwf8GVe6xyT9kJPIu5SlQc

 

socket模塊:

傳輸層

TCP/UDP

  [TCP][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc]

網絡層

IP                         

  IP】【[TCP][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc]

數據鏈路層

MAC        

[MAC][IP】【[TCP][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc]]

 

物理層

 

將數據轉換成電信號發送

 

   

 三:TCP協議的三次握手/四次斷開

  簡單形象的介紹:

  

SYN_SENT:狀態

 

1:socket客戶端向服務端發起鏈接請求:三次握手

client.connect((....))

客戶端

 服務端

我能打你嗎

 

 

來呀來呀

好的,我這就來

 

        client.send('發送數據')

        收發數據                 收發數據

                                                                

2客戶端和服務端斷開鏈接:四次揮手

client.close() 或 conn.close()

 

我要斷開鏈接

 

 

斷開就斷開,等我處理一些手頭的事情

 

...

 

我處理完了,斷開吧。

拜拜

 

 

 

 三次握手:

  

 TCP服務器進程先建立傳輸控制塊TCB,時刻準備接受客戶進程的鏈接請求,此時服務器就進入了LISTEN(監聽)狀態;
TCP客戶進程也是先建立傳輸控制塊TCB,而後向服務器發出鏈接請求報文,這是報文首部中的同部位SYN=1,同時選擇一個初始序列號 seq=x ,此時,TCP客戶端進程進入了 SYN-SENT(同步已發送狀態)狀態。TCP規定,SYN報文段(SYN=1的報文段)不能攜帶數據,但須要消耗掉一個序號。
TCP服務器收到請求報文後,若是贊成鏈接,則發出確認報文。確認報文中應該 ACK=1,SYN=1,確認號是ack=x+1,同時也要爲本身初始化一個序列號 seq=y,此時,TCP服務器進程進入了SYN-RCVD(同步收到)狀態。這個報文也不能攜帶數據,可是一樣要消耗一個序號。
TCP客戶進程收到確認後,還要向服務器給出確認。確認報文的ACK=1,ack=y+1,本身的序列號seq=x+1,此時,TCP鏈接創建,客戶端進入ESTABLISHED(已創建鏈接)狀態。TCP規定,ACK報文段能夠攜帶數據,可是若是不攜帶數據則不消耗序號。
當服務器收到客戶端的確認後也進入ESTABLISHED狀態,此後雙方就能夠開始通訊了。 
 
四次揮手:
 

數據傳輸完畢後,雙方均可釋放鏈接。最開始的時候,客戶端和服務器都是處於ESTABLISHED狀態,而後客戶端主動關閉,服務器被動關閉。服務端也能夠主動關閉,一個流程。

客戶端進程發出鏈接釋放報文,而且中止發送數據。釋放數據報文首部,FIN=1,其序列號爲seq=u(等於前面已經傳送過來的數據的最後一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即便不攜帶數據,也要消耗一個序號。服務器收到鏈接釋放報文,發出確認報文,ACK=1,ack=u+1,而且帶上本身的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處於半關閉狀態,即客戶端已經沒有數據要發送了,可是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。客戶端收到服務器的確認請求後,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送鏈接釋放報文(在這以前還須要接受服務器發送的最後的數據)。服務器將最後的數據發送完畢後,就向客戶端發送鏈接釋放報文,FIN=1,ack=u+1,因爲在半關閉狀態,服務器極可能又發送了一些數據,假定此時的序列號爲seq=w,此時,服務器就進入了LAST-ACK(最後確認)狀態,等待客戶端的確認。客戶端收到服務器的鏈接釋放報文後,必須發出確認,ACK=1,ack=w+1,而本身的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP鏈接尚未釋放,必須通過2∗∗MSL(最長報文段壽命)的時間後,當客戶端撤銷相應的TCB後,才進入CLOSED狀態。服務器只要收到了客戶端發出的確認,當即進入CLOSED狀態。一樣,撤銷TCB後,就結束了此次的TCP鏈接。能夠看到,服務器結束TCP鏈接的時間要比客戶端早一些。

相關文章
相關標籤/搜索