OSI七層與TCP/IP四層(小結)

OSI 七層模型

咱們通常使用的網絡數據傳輸由下而上共有七層,分別爲物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層,也被依次稱爲 OSI 第一層、第二層、⋯⋯、 第七層。html

 

 

各層功能簡介

1.物理層(Physical Layer)程序員

  物理層位於 OSI 參考模型的最低層,它直接面向原始比特流的傳輸。爲了實現原始比特流的物理傳輸,物理層必須解決好包括傳輸介質、信道類型、數據與信號之間的轉換、信號傳輸中的衰減和噪聲等在內的一系列問題。另外,物理層標準要給出關於物理接口的機械、 電氣、功能和規程特性,以便於不一樣的製造廠家既可以根據公認的標準各自獨立地製造設備,又能使各個廠家的產品可以相互兼容。實質上就是提供鏈接網絡的硬件設備,將電腦鏈接起來的物理手段. 如光纜/電纜/無線電波。web

2.數據鏈路層(Data Link Layer)編程

  在物理層發送和接收數據的過程當中,會出現一些物理層本身不能解決的問題。例如, 當兩個節點同時試圖在一條線路上發送數據時該如何處理?節點如何知道它所接收的數據 是否正確?若是噪聲改變了一個分組的目標地址,節點如何察覺它丟失了本應收到的分組呢?這些都是數據鏈路層所必須負責的工做。數據鏈路層涉及相鄰節點之間的可靠數據傳輸,數據鏈路層經過增強物理層傳輸原始比特的功能,使之對網絡層表現爲一條無錯線路。爲了可以實現相鄰節點之間無差錯的數據傳送,數據鏈路層在數據傳輸過程當中提供了確認、差錯控制和流量控制等機制。瀏覽器

3.網絡層(Network Layer)安全

  網絡中的兩臺計算機進行通訊時,中間可能要通過許多中間結點甚至不一樣的通訊子網。網絡層的任務是:進行邏輯地址尋址,實現不一樣網絡之間的路徑選擇。網絡層創建了主機之間的通訊,它在網絡層引入了一套地址機制:網絡地址.簡稱網址(Ip地址),咱們能夠經過Ip地址,能夠找到惟一的一臺計算機,經過主機MAC地址來接收和發送信息。服務器

4.傳輸層(Transport Layer)網絡

  傳輸層是 OSI 七層模型中惟一負責端到端節點間數據傳輸和控制功能的層。傳輸層是 OSI 七層模型中承上啓下的層,它下面的三層主要面向網絡通訊,以確保信息被準確有效地傳輸;它上面的三層則面向用戶主機,爲用戶提供各類服務。傳輸層經過:定義傳輸數據的協議端口號,以及流控和差錯效驗,定義了端口和端口之間的通訊,幫助咱們使不一樣的應用程序可以接收到本身所須要的的數據。session

5.會話層(Session Layer)併發

  會話層的功能是:包括創建、管理、終止會話,用來創建和管理應用程序之間的通訊,實現自動尋址,自動收發數據。

6.表示層(Presentation Layer)

  表示層如下的各層只關心可靠的數據傳輸,而表示層關心的是所傳輸數據的語法和語義。它主要涉及處理在兩個通訊系統之間所交換信息的表示方式,包括數據格式變換、數據加密與解密、數據壓縮與恢復等功能。好比咱們要用基於Unix系統的mac電腦給pc機發送數據,表示層爲咱們解決了通訊間語法的問題。

7.應用層(Application Layer)

  應用層是 OSI 參考模型的最高層,負責爲用戶的應用程序提供網絡服務。與 OSI 其餘層不一樣的是,它不爲任何其餘OSI層提供服務,而只是爲OSI模型之外的應用程序提供服務。好比不一樣的文件類型要用不一樣的應用程序打開,應用層中就規定了不一樣應用程序的數據格式。

(其中,物理層、數據鏈路層和網絡層一般被稱做媒體層,是網絡工程師所研究的對象;

  傳輸層、會話層、表示層和應用層則被稱做主機層,是用戶所面向和關心的內容。)

 

OSI七層結構與TCP/IP四層結構對應關係:

OSI七層模型對應的協議:

七、應用層application——FTP、HTTP、DNS、SMTP、TELNET協議

六、表示層presentation——信息的語法定義以及它們的關聯,如加密、解密、轉換翻譯、壓縮解壓縮

五、會話層session——不一樣機器上的用戶之間創建及管理會話

四、傳輸層transport——TCP、UDP協議

三、網絡層Internet——IP、ICMP協議

二、數據鏈路層link——ARP協議、RARP協議

一、物理層physical——機械、電子、定時接口通訊道上的原始比特流傳輸

TCP/IP四層模型模型對應的協議:

四、應用層——FTP、HTTP、DNS、SMTP、TELNET協議

三、傳輸層——TCP、UDP協議

二、網絡層——IP、ICMP、ARP協議、RARP協議

一、網絡接口層——Ethernet 802.三、Token Ring 802.五、X.2五、Frame relay、HDLC、PPP ATM等

 

(轉)什麼是套接字(Socket)?

1)應用層經過傳輸層進行數據通訊時,TCP和UDP會遇到同時爲多個應用程序進程提供併發服務的問題。多個TCP鏈接或多個應用程序進程可能須要經過同一個TCP協議端口傳輸數據。爲了區分不一樣的應用程序進程間的網絡通訊和鏈接,許多計算機操做系統爲應用程序與TCP/IP協議交互提供了稱爲套接字 (Socket)的接口(socket是操做系統提供出來的接口),區分不一樣應用程序進程間的網絡通訊和鏈接。
生成Socket,主要有3個參數:通訊的目的IP地址、使用的傳輸層協議(TCP或UDP)和使用的端口號。Socket原意是「插座」。經過將這3個參數結合起來,與一個「插座」Socket綁定,應用層就能夠和傳輸層經過socket接口,區分來自不一樣應用程序進程間的網絡通訊和鏈接,實現數據傳輸的併發服務。
Socket能夠當作在兩個程序進行通信鏈接中的一個端點,一個程序將一段信息寫入Socket中,該Socket將這段信息發送給另一個Socket中,使這段信息能傳送到其餘程序中。

2)Host A上的程序A將一段信息寫入Socket中,Socket的內容被Host A的網絡管理軟件訪問,並將這段信息經過Host A的網絡接口卡發送到Host B,Host B的網絡接口卡接收到這段信息後,傳送給Host B的網絡管理軟件,網絡管理軟件將這段信息保存在Host B的Socket中,而後程序B才能在Socket中閱讀這段信息。
要經過互聯網進行通訊,至少須要一對Socket,一個運行於客戶機端,稱之爲ClientSocket,另外一個運行於服務器端,稱之爲serverSocket。 
根據鏈接啓動的方式以及本地套接字要鏈接的目標,Socket之間的鏈接過程能夠分爲三個步驟:服務器監聽,客戶端請求,鏈接確認。 

服務器監聽:是指serverSocket並不定位具體的ClientSocket,而是處於等待鏈接的狀態,實時監控網絡狀態。
客戶端請求:是指由ClientSocket提出鏈接請求,要鏈接的目標是serverSocket。爲此,ClientSocket必須首先描述它要鏈接的serverSocket,指出serverSocket的地址和端口號,而後就向serverSocket提出鏈接請求。
鏈接確認:是指當serverSocket監聽到或者說接收到ClientSocket的鏈接請求,它就響應ClientSocket的請求,創建一個新的線程,把serverSocket的描述發給客戶端,一旦客戶端確認了此描述,鏈接就創建好了。而serverSocket繼續處於監聽狀態,繼續接收其餘ClientSocket的鏈接請求。

3)而咱們平時說的最多的socket是什麼呢,實際上socket是對TCP/IP協議的封裝,Socket自己並非協議,而是一個調用接口(API)。經過Socket,咱們才能更好地使用TCP/IP協議。實際上,Socket跟TCP/IP協議沒有必然的聯繫。Socket編程接口在設計的時候,就但願也能適應其餘的網絡協議。因此說,Socket的出現只是使得程序員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而造成了咱們知道的一些最基本的函數接口,好比create、listen、connect、accept、send、read和write等等。網絡有一段關於socket和TCP/IP協議關係的說法比較容易理解:「TCP/IP只是一個協議棧,就像操做系統的運行機制同樣,必需要具體實現,同時還要提供對外的操做接口。這個就像操做系統會提供標準的編程接口,好比win32編程接口同樣,TCP/IP也要提供可供程序員作網絡開發所用的接口,這就是Socket編程接口。

 

IP TCP UDP HTTP

IP、TCP UDP、Http、Socket的區別?

IP協議對應於網絡層,TCP、UDP協議對應於傳輸層,而HTTP協議對應於應用層。

IP協議是網絡層協議,是一種不可靠的、無鏈接的傳送機制稱爲Internet協議,解決的是主機之間如何通訊的問題

TCP、UDP是傳輸層協議,解決的是數據如何傳輸的問題

HTTP是應用層協議,解決的是數據如何包裝的問題

Socket自己並非協議,而是一個針對TCP或者IP的調用接口(API),解決的是區分不一樣的應用程序進程間的網絡通訊和鏈接,從而實現數據傳輸併發服務的問題

「咱們在 傳輸數據時,能夠只使用TCP/IP協議 【TCP/IP位於傳輸層,是個協議組,它主要用來解決數據如何在網絡中傳輸,與IP協議要區分開】,可是那樣的話,若是 沒有應用層,便沒法識別數據內容。若是 想要使傳輸的數據有意義,則必須使用到應用層協議。應用層協議有不少,好比HTTP、FTP等,也能夠本身定義應用層協議。WEB使用HTTP協議做應用層協議,以封裝HTTP文本信息,而後使用TCP/IP協議將它發到網絡上。」

傳輸層的TCP是基於網絡層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的。而Socket自己不算是協議,就像上面所說,它只是提供了一個針對TCP協議或者IP協議的編程接口。

 

socket鏈接、TCP鏈接、UDP鏈接、HTTP鏈接?

建立Socket鏈接時,能夠指定使用的傳輸層協議,Socket能夠支持不一樣的傳輸層協議(TCP或UDP),當使用TCP/UDP協議進行鏈接時,該Socket鏈接就是一個TCP鏈接/UDP鏈接。

一般狀況下 Socket 鏈接就是TCP鏈接,所以 Socket 鏈接一旦創建,通訊雙方便可開始相互發送數據內容,直到雙方鏈接斷開但在實際網絡應用中,客戶端到服務器之間的通訊每每須要穿越多箇中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的鏈接而致使 Socket 鏈接斷連,所以須要經過輪流詢問告訴網絡,該鏈接處於活躍狀態。

 

而HTTP鏈接使用的是「請求—響應」的方式,不只在請求時須要先創建鏈接,並且須要客戶端向服務器發出請求後,服務器端才能回覆數據。

不少狀況下,須要服務器端主動向客戶端推送數據,保持客戶端與服務器數據的實時與同步,此時若雙方創建的是Socket鏈接,服務器就能夠直接將數據傳送給客戶端;若雙方創建的是HTTP鏈接,則服務器須要等到客戶端發送一次請求後才能將數據傳回給客戶端,所以,客戶端定時向服務器端發送鏈接請求,不只能夠保持在線,同時也是在「詢問」服務器是否有新的數據,若是有就將數據傳給客戶端。

 

TCP和UDP的區別?

一、TCP是面向鏈接,可靠、穩定的,缺點:慢,效率低,佔用系統資源高,容易被攻擊。雖說網絡的不安全不穩定特性決定了多少次握手都不能保證鏈接的可靠性,但TCP的三次握手在最低限度上(實際上也很大程度上)保證了鏈接的可靠性;

而UDP非面向鏈接,快,比TCP稍安全,缺點:不可靠、不穩定。UDP傳送數據前並不與對方創建鏈接,對接收到的數據也不發送確認信號,發送端不知道數據是否會正確接收,固然也不用重發,因此說UDP是無鏈接的、不可靠的一種數據傳輸協議。

二、也正因爲1所說的特色,使得UDP的開銷更小,數據傳輸速率更高,由於沒必要進行收發數據的確認,因此UDP的實時性更好。

知道了TCP和UDP的區別,就不難理解爲什麼採用TCP傳輸協議的MSN比採用UDP的QQ傳輸文件慢了,但並不能說QQ的通訊是不安全的,

由於程序員能夠手動對UDP的數據收發進行驗證,好比發送方對每一個數據包進行編號而後由接收方進行驗證啊什麼的,

即便是這樣,UDP由於在底層協議的封裝上沒有采用相似TCP的「三次握手」,而實現了TCP沒法達到的傳輸效率。

三、TCP應用場景  如:瀏覽器使用HTTP,QQ文件傳輸等

四、UDP應用場景 如:QQ語音、QQ視頻等

五、轉發

 

TCP三次握手和四次揮手?

tcp三次握手

所謂三次握手(Three-way Handshake),是指創建一個TCP鏈接時,須要客戶端和服務器總共發送3個包。

三次握手的目的是鏈接服務器指定端口,創建TCP鏈接,並同步鏈接雙方的序列號和確認號並交換 TCP 窗口大小信息.在 Socket 編程中,客戶端執行connect()時,將觸發三次握手。 

 首先了解一下幾個標誌,SYN(synchronous),同步標誌,ACK (Acknowledgement),即確認標誌,seq應該是Sequence Number,序列號的意思,另外還有四次握手的fin,應該是final,表示結束標誌。

  第一次握手:客戶端發送一個TCP的SYN標誌位置1的包指明客戶打算鏈接的服務器的端口,以及初始序號X,保存在包頭的序列號(Sequence Number)字段裏。

  第二次握手:服務器發回確認包(ACK)應答。即SYN標誌位和ACK標誌位均爲1同時,將確認序號(Acknowledgement Number)設置爲客戶的序列號加1以,即X+1。

  第三次握手:客戶端再次發送確認包(ACK) SYN標誌位爲0,ACK標誌位爲1。而且把服務器發來ACK的序號字段+1,放在肯定字段中發送給對方.而且在數據段放寫序列號的+1。

tcp四次揮手

  TCP鏈接的拆除須要發送四個包,所以稱爲四次揮手(four-way handshake)。客戶端或服務器都可主動發起揮手動做,在socket編程中,任何一方執行close()操做便可產生揮手操做。

其實有個問題,爲何鏈接的時候是三次握手,關閉的時候倒是四次揮手?

  由於當Server端收到Client端的SYN鏈接請求報文後,能夠直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。可是關閉鏈接時,當Server端收到FIN報文時,極可能並不會當即關閉SOCKET,因此只能先回復一個ACK報文,告訴Client端,」 你發的FIN報文我收到了」。只有等到我Server端全部的報文都發送完了,我才能發送FIN報文,所以不能一塊兒發送。故須要四步握手。

tcp socket和udp socket的具體實現

經常使用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數據報式Socket(SOCK_DGRAM)。流式是一種面向鏈接的 Socket,針對於面向鏈接的TCP服務應用;數據報式 Socket 是一種非面向鏈接的 Socket ,對應於非面向鏈接的UDP服務應用。

(The End)
相關文章
相關標籤/搜索