網絡基礎

一.IP和端口簡單介紹

????? IP:

????? 網絡中的設備的標示;

??? ? IP:127.0.0.1(本機回環地址)? localhost

??? 端口號:

????? 用于標示進程的邏輯地址,不同的進程的標示;

????? 有效端口:0 ~ 65535, 其中 0~1024為系統端口或保留端口



二.數據傳輸示意圖

OSI網絡模型(7層模型)

【1】物理層:主要定義物理設備標準,如網線的接口類型、光纖的接口類型、各種傳輸介質的傳輸速率等。它的主要作用是傳輸比特流(就是由1、0轉化為電流強弱來進行傳輸,到達目的地后在轉化為1、0,也就是我們常說的數模轉換與模數轉換),這一層的數據叫做比特。

【2】數據鏈路層:定義了如何讓格式化數據以進行傳輸,以及如何讓控制對物理介質的訪問,這一層通常還提供錯誤檢測和糾正,以確保數據的可靠傳輸。

【3】網絡層:在位于不同地理位置的網絡中的兩個主機系統之間提供連接和路徑選擇,Internet的發展使得從世界各站點訪問信息的用戶數大大增加,而網絡層正是管理這種連接的層。

【4】傳輸層:定義了一些傳輸數據的協議和端口號(WWW端口80等),如:TCP(傳輸控制協議,傳輸效率低,可靠性強,用于傳輸可靠性要求高,數據量大的數據),UDP(用戶數據報協議,與TCP特性恰恰相反,用于傳輸可靠性要求不高,數據量小的數據,如QQ聊天數據就是通過這種方式傳輸的), 主要是將從下層接收的數據進行分段和傳輸,到達目的地址后再進行重組,常常把這一層數據叫做段。

【5】會話層:通過傳輸層(端口號:傳輸端口與接收端口)建立數據傳輸的通路,主要在你的系統之間發起會話或者接受會話請求(設備之間需要互相認識可以是IP也可以是MAC或者是主機名)。

?【6】表示層:可確保一個系統的應用層所發送的信息可以被另一個系統的應用層讀取。例如,PC程序與另一臺計算機進行通信,其中一臺計算機使用擴展二一十進制交換碼(EBCDIC),而另一臺則使用美國信息交換標準碼(ASCII)來表示相同的字符。如有必要,表示層會通過使用一種通格式來實現多種數據格式之間的轉換。

【7】應用層: 是最靠 近用戶的OSI層,這一層為用戶的應用程序(例如電子郵件、文件傳輸和終端仿真)提供網絡服務。


與tcp/ip5層模型的轉換



三.傳輸層協議UDP/TCP

? ? 1.UDP(不可靠傳輸協議 /用戶數據報協議) <可以類比為:發短信>

? ?? 特點: 1).只管發送,不確認對方是否接收的到;

????????????? 2).將數據源和目標封裝成數據包中,不需要建立連接;

????????????? 3).每個數據包的大小限制在64k之內;

????????????? 4).因為不需要建立連接,所以數度快,同時也更容易丟包,不可靠;


??? 2.TCP(可靠傳輸協議 /傳輸控制協議) <可以類比為:打電話>

????? 特點:1).建立連接,形成傳輸數據通道;

???????????????? 2).在連接中進行大數據傳輸(數據大小不受限制);

???????????????? 3).通過三次握手完成連接,是可靠協議,安全送達;

???????????????? 4).因為必須建立連接,所以效率會稍低;


擴展:

TCP建立連接三次握手流程:

? ? ? ? ? (1) 建立連接時,客戶端發送syn包(syn=j)到服務器,并進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。(客戶端告訴服務端:我要連接你)。

? ? ? ? ? (2)? 第二次握手服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態。(服務端告訴客戶端:可以,你連接吧)。

? ? ? ???? (3)? 第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。? (客戶端告訴服務端:好的,那我開始連接你了)。

????????? 完成三次握手,客戶端與服務器開始傳送數據

TCP 3次握手示意圖

tcp為什么要三次握手?

注意: HTTP是基于TCP協議的,所以每次都是客戶端發送請求,服務器應答,但是TCP還可以給其他應用層提供服務,即可能A、B在建立鏈接之后,誰都可能先開始通信。

  1.如果兩次,那么B無法確定B的信息A是否能收到,所以如果B先說話,可能后面的A都收不到,會出現問題 。

  2.如果四次,那么就造成了浪費,因為在三次結束之后,就已經可以保證A可以給B發信息,A可以收到B的信息; B可以給A發信息,B可以收到A的信息。



TCP斷開連接四次揮手流程:

(1)客戶端A發送一個FIN,用來關閉客戶A到服務器B的數據傳送(報文段4)。(客戶端告訴服務端:沒有數據要發給你了)。

(2)服務器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。(服務端告訴客戶端: 你的請求我收到了,但是我還沒準備好,請繼續你等我的消息,服務端可能還有數據沒發完,所以這里不能夠直接關閉)。

(3)服務器B關閉與客戶端A的連接,發送一個FIN給客戶端A。(服務端告訴客戶端: 我的數據都發完了,準備好關閉連接了)。

(4)客戶端A發回ACK報文確認,并將確認序號設置為收到序號加1。(客戶端告訴服務端:我收到了,那我斷開了,拜拜)。


https://blog.csdn.net/qzcsu/article/details/72861891(4次揮手)

1.為什么建立連接協議是三次握手,而關閉連接卻是四次握手呢?

???????? 這是因為服務端的LISTEN狀態下的SOCKET當收到SYN報文的連接請求后,它可以把ACK和SYN(ACK起應答作用,而SYN起同步作用)放在一個報文里來發送。但關閉連接時,當收到對方的FIN報文通知時,它僅僅表示對方沒有數據發送給你了;但未必你所有的數據都全部發送給對方了,所以你可能未必會馬上會關閉SOCKET,也即你可能還需要發送一些數據給對方之后,再發送FIN報文給對方來表示你同意現在可以關閉連接了,所以它這里的ACK報文和FIN報文多數情況下都是分開發送的。


四.Socket(套接字層/插座)

??????? 官方解釋:網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。(什么鬼?不理解?)

????? ? 自己的理解:? 所謂套接字層,由于在OSI網絡7層模型中找不到scoket的位置,socket應該是居于應用層和傳輸層之間, socket就是兩個程序間的通訊管道( ip+ 端口 == socket)。



socket通訊示意圖


五.TCP/UDP ,HTTP, Socket區別

三者從本質上來說沒有可比性,只是很多人概念模糊,區分不開。

TPC/IP協議是傳輸層協議,主要解決數據如何在網絡中傳輸;

socket則是建立通訊管道,對TCP/IP協議的封裝和應用,有了通訊管道,我們才能使用TCP/IP協議;

HTTP是應用層協議,主要解決如何包裝數據,HTTP協議是建立在TCP協議之上的一種應用層協議。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容