網絡篇——七層協議、四層協議、TCP、HTTP、SOCKET、長短連接

OSI(Open System Interconnection)是一個開放性的通行系統互連參考模型,它是一個定義的非常好的協議規範,共包含七層協議。OSI七層協議是由ISO (International Standards Organization)在1978(maybe 1979)年爲網絡通信制定的。 OSI的7層從上到下分別是 7 應用層 6 表示層 5 會話層 4 傳輸層 3 網絡層 2 數據鏈路層 1 物理層;其中高層,既7、6、5、4層定義了應用程序的功能,下面3層,既3、2、1層主要面向通過網絡的端到端的數據流。但是,OSI七層模型是一個理論模型,實際應用則千變萬化,因此更多把它作爲分析、評判各種網絡技術的依據;對大多數應用來說,只將它的協議族(即協議堆棧)與七層模型作大致的對應,看看實際用到的特定協議是屬於七層中某個子層,還是包括了上下多層的功能。

TCP/IP是用於計算機通信的一組協議,我們通常稱它爲TCP/IP協議族。它是70年代中期美國國防部爲其ARPANET廣域網開發的網絡體系結構和協議標準,以它爲基礎組建的INTERNET是目前國際上規模最大的計算機網絡,正因爲INTERNET的廣泛使用,使得TCP/IP成了事實上的標準。這個協議是Internet國際互聯網絡的基礎。TCP/IP是網絡中使用的基本的通信協議。雖然從名字上看TCP/IP包括兩個協議,傳輸控制協議(TCP)和網際協議(IP),但TCP/IP實際上是一組協議,它包括上百個各種功能的協議,如:遠程登錄、文件傳輸和電子郵件等,而TCP協議和IP協議是保證數據完整傳輸的兩個基本的重要協議。通常說TCP/IP是Internet協議族,而不單單是TCP和IP。


OSI七個層次的功能

物理層爲數據鏈路層提供物理連接,在其上串行傳送比特流,即所傳送數據的單位是比特。此外,該層中還具有確定連接設備的電氣特性和物理特性等功能。

數據鏈路層負責在網絡節點間的線路上通過檢測、流量控制和重發等手段,無差錯地傳送以幀爲單位的數據。爲做到這一點,在每一幀中必須同時帶有同步、地址、差錯控制及流量控制等控制信息。

網絡層爲了將數據分組從源(源端系統)送到目的地(目標端系統),網絡層的任務就是選擇合適的路由和交換節點,使源的傳輸層傳下來的分組信息能夠正確無誤地按照地址找到目的地,並交付給相應的傳輸層,即完成網絡的尋址功能。

傳輸層是高低層之間銜接的接口層。數據傳輸的單位是報文,當報文較長時將它分割成若干分組,然後交給網絡層進行傳輸。傳輸層是計算機網絡協議分層中的最關鍵一層,該層以上各層將不再管理信息傳輸問題。

會話層該層對傳輸的報文提供同步管理服務。在兩個不同系統的互相通信的應用進程之間建立、組織和協調交互。例如,確定是雙工還是半雙工工作。

表示層的主要任務是把所傳送的數據的抽象語法變換爲傳送語法,即把不同計算機內部的不同表示形式轉換成網絡通信中的標準表示形式。此外,對傳送的數據加密(或解密)、正文壓縮(或還原)也是表示層的任務。

應用層該層直接面向用戶,是OSI中的最高層。它的主要任務是爲用戶提供應用的接口,即提供不同計算機間的文件傳送、訪問與管理,電子郵件的內容處理,不同計算機通過網絡交互訪問的虛擬終端功能等。

TCP/IP協議簡介

之所以說TCP/IP是一個協議族,是因爲TCP/IP協議包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等許多協議,這些協議一起稱爲TCP/IP協議。以下我們對協議族中一些常用協議英文名稱和用途作一介紹:

  • TCP(Transport Control Protocol)傳輸控制協議
  • IP(Internetworking Protocol)網間網協議
  • UDP(User Datagram Protocol)用戶數據報協議
  • ICMP(Internet Control Message Protocol)互聯網控制信息協議
  • SMTP(Simple Mail Transfer Protocol)簡單郵件傳輸協議
  • SNMP(Simple Network manage Protocol)簡單網絡管理協議
  • FTP(File Transfer Protocol)文件傳輸協議
  • ARP(Address Resolation Protocol)地址解析協議

從協議分層模型方面來講,TCP/IP由四個層次組成:網絡接口層、網間網層、傳輸層、應用層。其中:
網絡接口層 這是TCP/IP軟件的最低層,負責接收IP數據報並通過網絡發送之,或者從網絡上接收物理幀,抽出IP數據報,交給IP層。

網間網層 負責相鄰計算機之間的通信。其功能包括三方面。一、處理來自傳輸層的分組發送請求,收到請求後,將分組裝入IP數據報,填充報頭,選擇去往信宿機的路徑,然後將數據報發往適當的網絡接口。二、處理輸入數據報:首先檢查其合法性,然後進行尋徑--假如該數據報已到達信宿機,則去掉報頭,將剩下部分交給適當的傳輸協議;假如該數據報尚未到達信宿,則轉發該數據報。三、處理路徑、流控、擁塞等問題。

傳輸層 提供應用程序間的通信。其功能包括:一、格式化信息流;二、提供可靠傳輸。爲實現後者,傳輸層協議規定接收端必須發回確認,並且假如分組丟失,必須重新發送。

應用層 向用戶提供一組常用的應用程序,比如電子郵件、文件傳輸訪問、遠程登錄等。遠程登錄TELNET使用TELNET協議提供在網絡其它主機上註冊的接口。TELNET會話提供了基於字符的虛擬終端。文件傳輸訪問FTP使用FTP協議來提供網絡內機器間的文件拷貝功能。

前面我們已經學過關於OSI參考模型的相關概念,現在我們來看一看,相對於七層協議參考模型,TCP/IP協議是如何實現網絡模型的。

數據鏈路層包括了硬件接口和協議ARP,RARP,這兩個協議主要是用來建立送到物理層上的信息和接收從物理層上傳來的信息;

網絡層中的協議主要有IP,ICMP,IGMP等,由於它包含了IP協議模塊,所以它是所有機遇TCP/IP協議網絡的核心。在網絡層中,IP模塊完成大部分功能。ICMP和IGMP以及其他支持IP的協議幫助IP完成特定的任務,如傳輸差錯控制信息以及主機/路由器之間的控制電文等。網絡層掌管着網絡中主機間的信息傳輸。

傳輸層上的主要協議是TCP和UDP。正如網絡層控制着主機之間的數據傳遞,傳輸層控制着那些將要進入網絡層的數據。兩個協議就是它管理這些數據的兩種方式:TCP是一個基於連接的協議(還記得我們在網絡基礎中講到的關於面向連接的服務和麪向無連接服務的概念嗎?忘了的話,去看看);UDP則是面向無連接服務的管理方式的協議。

應用層位於協議棧的頂端,它的主要任務就是應用了。上面的協議當然也是爲了這些應用而設計的,具體說來一些常用的協議功能如下:

  • Telnet:提供遠程登錄(終端仿真)服務,好象比較古老的BBS就是用的這個登陸。
  • FTP :提供應用級的文件傳輸服務,說的簡單明瞭點就是遠程文件訪問等等服務;
  • SMTP:不用說拉,天天用到的電子郵件協議。
  • TFTP:提供小而簡單的文件傳輸服務,實際上從某個角度上來說是對FTP的一種替換(在文件特別小並且僅有傳輸需求的時候)。
  • SNTP:簡單網絡管理協議。看名字就不用說什麼含義了吧。
  • DNS:域名解析服務,也就是如何將域名映射城IP地址的協議。
  • HTTP:不知道各位對這個協議熟不熟悉啊?這是超文本傳輸協議,你之所以現在能看到網上的圖片,動畫,音頻,等等,都是仰仗這個協議在起作用啊!

Socket

Socket是一組編程接口(API)。介於傳輸層和應用層,嚮應用層提供統一的編程接口。應用層不必瞭解TCP/IP協議細節。直接通過對Socket接口函數的調用完成數據在IP網絡的傳輸。

基於傳輸層差異,4種類型的Socket:

  1. 基於TCP的Socket:提供給應用層可靠的流式數據服務,使用TCP的Socket應用程序協議:BGP,HTTP,FTP,TELNET等。優點:基於數據傳輸的可靠性。
  2. 基於UDP的Socket:適用於數據傳輸可靠性要求不高的場合。基於UDP的Socket應用程序或協議有:RIP,SNMP,L2TP等。
  3. 基於RawIp的Socket:非連接,不可靠的數據傳輸。特點:能使應用程序直接訪問網絡層。基於RawIp的Socket有ping ,tracert,ospf等。
  4. 基於鏈路層的Socket。爲IS-IS協議提供的Socket接口。使IS-IS協議可通過Socket直接訪問鏈路層。非連接,不可靠通信服務。

轉自:http://blog.sina.com.cn/s/blog_7f83f8890100xnsm.html


一、From:http://thisliy.javaeye.com/blog/710122

http://wenku.baidu.com/view/14a30d0102020740be1e9b84.html (TCP+HTTP工作機制)

相信不少初學手機聯網開發的朋友都想知道Http與Socket連接究竟有什麼區別,希望通過自己的淺顯理解能對初學者有所幫助。

1、TCP連接

手機能夠使用聯網功能是因爲手機底層實現了TCP/IP協議,可以使手機終端通過無線網絡建立TCP連接。TCP協議可以對上層網絡提供接口,使上層網絡數據的傳輸建立在“無差別”的網絡之上。

建立起一個TCP連接需要經過“三次握手”:

第一次握手:客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;

第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。

握手過程中傳送的包裏不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接都將被一直保持下去。斷開連接時服務器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過“四次握手”(過程就不細寫了,就是服務器和客戶端交互,最終確定斷開)。

2、HTTP連接

HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。

HTTP連接最顯著的特點是客戶端發送的每次請求都需要服務器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱爲“一次連接”。

1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求後,就自動釋放連接。

2)在HTTP 1.1中則可以在一次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。

由於HTTP在每次請求結束後都會主動釋放連接,因此HTTP連接是一種“短連接”,要保持客戶端程序的在線狀態,需要不斷地向服務器發起連接請求。通常的做法是即時不需要獲得任何數據,客戶端也保持每隔一段固定的時間向服務器發送一次“保持連接”的請求,服務器在收到該請求後對客戶端進行回覆,表明知道客戶端“在線”。若服務器長時間無法收到客戶端的請求,則認爲客戶端“下線”,若客戶端長時間無法收到服務器的回覆,則認爲網絡已經斷開。

3、SOCKET原理

3.1套接字(socket)概念

套接字(socket)是通信的基石,是支持TCP/IP協議的網絡通信的基本操作單元。它是網絡通信過程中端點的抽象表示,包含進行網絡通信必須的五種信息:連接使用的協議,本地主機的IP地址,本地進程的協議端口,遠地主機的IP地址,遠地進程的協議端口

應用層通過傳輸層進行數據通信時,TCP會遇到同時爲多個應用程序進程提供併發服務的問題。多個TCP連接或多個應用程序進程可能需要通過同一個 TCP協議端口傳輸數據。爲了區別不同的應用程序進程和連接,許多計算機操作系統爲應用程序與TCP/IP協議交互提供了套接字(Socket)接口。應用層可以和傳輸層通過Socket接口,區分來自不同應用程序進程或網絡連接的通信,實現數據傳輸的併發服務。

3.2 建立socket連接

建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱爲ClientSocket ,另一個運行於服務器端,稱爲ServerSocket

套接字之間的連接過程分爲三個步驟:服務器監聽,客戶端請求,連接確認

服務器監聽:服務器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網絡狀態,等待客戶端的連接請求。

客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。爲此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然後就向服務器端套接字提出連接請求。

連接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。而服務器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。

4、SOCKET連接與TCP連接

創建Socket連接時,可以指定使用的傳輸層協議,Socket可以支持不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連接時,該Socket連接就是一個TCP連接。

5、Socket連接與HTTP連接

由於通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發送數據內容,直到雙方連接斷開。但在實際網絡應用中,客戶端到服務器之間的通信往往需要穿越多箇中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的連接而導致 Socket 連接斷連,因此需要通過輪詢告訴網絡,該連接處於活躍狀態。

而HTTP連接使用的是“請求—響應”的方式,不僅在請求時需要先建立連接,而且需要客戶端向服務器發出請求後,服務器端才能回覆數據。

很多情況下,需要服務器端主動向客戶端推送數據,保持客戶端與服務器數據的實時與同步。此時若雙方建立的是Socket連接,服務器就可以直接將數據傳送給客戶端;若雙方建立的是HTTP連接,則服務器需要等到客戶端發送一次請求後才能將數據傳回給客戶端,因此,客戶端定時向服務器端發送連接請求,不僅可以保持在線,同時也是在“詢問”服務器是否有新的數據,如果有就將數據傳給客戶端。

二:首先,糾正一下我以前一直誤解的概念,我一直以爲Http和Tcp是兩種不同的,但是地位對等的協議,雖然知道TCP是傳輸層,而http是應用層今天學習了下,知道了http是要基於TCP連接基礎上的,簡單的說,TCP就是單純建立連接,不涉及任何我們需要請求的實際數據,簡單的傳輸。http是用來收發數據,即實際應用上來的。

第一:從傳輸層,先說下TCP連接,我們要和服務端連接TCP連接,需要通過三次連接,包括:請求,確認,建立連接。即傳說中的“三次握手協議”。

第一次:C發送一個請求連接的位碼SYN和一個隨機產生的序列號給Seq,然後S收到了這些數據。

第二次:S收到了這個請求連接的位碼,啊呀,有人向我發出請求了麼,那我要不要接受他的請求,得實現確認一下,於是,發送了一個確認碼 ACN(seq+1),和SYN,Seq給C,然後C收到了,這個是第二次連接。

第三次:C收到了確認的碼和之前發送的SYN一比較,偶喲,對上了麼,於是他又發送了一個ACN(SEQ+1)給S,S收到以後就確定建立連接,至此,TCP連接建立完成。

簡單就是:請求,確認,連接。

第二:從實際上的數據應用來說http:

在前面客戶端和應用服務器建立TCP連接之後,就需要用http協議來傳送數據了,HTTP協議簡單來說,還是請求,確認,連接。

總體就是C發送一個HTTP請求給S,S收到了這個http請求,然後返回給C http響應,然後C的中間件或者說瀏覽器把這些數據渲染成爲了網頁,展示在用戶面前。

第一:發送一個http請求給S,這個請求包括請求頭和請求內容:

request header:

包括了,1.請求的方法是POST/GET,請求的URL,http協議版本2.請求的數據,和編碼方式3是否有cookie和cooies,是否緩存等。

post和get請求方式的區別是,get把請求內容放在URL後面,但是URL長度有限制。而post是以表單的形勢,適合要輸入密碼之類的,因爲不在URL中顯示,所以比較安全。

request body:即請求的內容.

第二:S收到了http請求,然後根據請求頭,返回http響應。

response header:包括了

1.cookies或者sessions

2.狀態嗎

3.內容大小等

response body:

即響應的內容,包括,JS什麼的。

第三,C收到了以後,就由瀏覽器完成一系列的渲染,包括執行JS腳本等。這就是我所理解的webTCP,HTTP基礎知識,待續。。。。。

三、TCP是底層通訊協議,定義的是數據傳輸和連接方式的規範

  • HTTP是應用層協議,定義的是傳輸數據的內容的規範
  • HTTP協議中的數據是利用TCP協議傳輸的,所以支持HTTP也就一定支持TCP
  • HTTP支持的是www服務 
  • 而TCP/IP是協議 

它是Internet國際互聯網絡的基礎。TCP/IP是網絡中使用的基本的通信協議。 

TCP/IP實際上是一組協議,它包括上百個各種功能的協議,如:遠程登錄、文件傳輸和電子郵件等,而TCP協議和IP協議是保證數據完整傳輸的兩個基本的重要協議。通常說TCP/IP是Internet協議族,而不單單是TCP和IP。

轉自:http://hi.baidu.com/haierdeheart/item/3839dc5d54ebfea8adc8570e


長連接與短連接

所謂長連接,指在一個TCP連接上可以連續發送多個數據包,在TCP連接保持期間,如果沒有數據包發送,需要雙方發檢測包以維持此連接,一般需要自己做在線維持。 

短連接是指通信雙方有數據交互時,就建立一個TCP連接,數據發送完成後,則斷開此TCP連接,一般銀行都使用短連接。  

比如http的,只是連接、請求、關閉,過程時間較短,服務器若是一段時間內沒有收到請求即可關閉連接。 

其實長連接是相對於通常的短連接而說的,也就是長時間保持客戶端與服務端的連接狀態。 

長連接與短連接的操作過程:

通常的短連接操作步驟是: 
連接→數據傳輸→關閉連接; 

而長連接通常就是: 
連接→數據傳輸→保持連接(心跳)→數據傳輸→保持連接(心跳)→……→關閉連接; 
這就要求長連接在沒有數據通信時,定時發送數據包(心跳),以維持連接狀態,短連接在沒有數據傳輸時直接關閉就行了 

什麼時候用長連接,短連接? 

長連接多用於操作頻繁,點對點的通訊,而且連接數不能太多情況,。每個TCP連接都需要三步握手,這需要時間,如果每個操作都是先連接,再操作的話那麼處理速度會降低很多,所以每個操作完後都不斷開,次處理時直接發送數據包就OK了,不用建立TCP連接。例如:數據庫的連接用長連接, 如果用短連接頻繁的通信會造成socket錯誤,而且頻繁的socket 創建也是對資源的浪費。 

而像WEB網站的http服務一般都用短鏈接,因爲長連接對於服務端來說會耗費一定的資源,而像WEB網站這麼頻繁的成千上萬甚至上億客戶端的連接用短連接會更省一些資源,如果用長連接,而且同時有成千上萬的用戶,如果每個用戶都佔用一個連接的話,那可想而知吧。所以併發量大,但每個用戶無需頻繁操作情況下需用短連好。 

總之,長連接和短連接的選擇要視情況而定。 

發送接收方式 

1、異步 

報文發送和接收是分開的,相互獨立的,互不影響。這種方式又分兩種情況: 

(1)異步雙工:接收和發送在同一個程序中,由兩個不同的子進程分別負責發送和接收 

(2)異步單工:接收和發送是用兩個不同的程序來完成。 
2、同步 

報文發送和接收是同步進行,既報文發送後等待接收返回報文。 同步方式一般需要考慮超時問題,即報文發出去後不能無限等待,需要設定超時時間,超過該時間發送方不再等待讀返回報文,直接通知超時返回。 

在長連接中一般是沒有條件能夠判斷讀寫什麼時候結束,所以必須要加長度報文頭。讀函數先是讀取報文頭的長度,再根據這個長度去讀相應長度的報文。 

單工、半雙工和全雙工

根據通信雙方的分工和信號傳輸方向可將通信分爲三種方式:單工、半雙工與全雙工。在計算機網絡中主要採用雙工方式,其中:局域網採用半雙工方式,城域網和廣域網採用全雙工方式。  

 1. 單工(Simplex)方式:通信雙方設備中發送器與接收器分工明確,只能在由發送器向接收器的單一固定方向上傳送數據。採用單工通信的典型發送設備如早期計算機的讀卡器,典型的接收設備如打印機。  

 2. 半雙工(Half Duplex)方式:通信雙方設備既是發送器,也是接收器,兩臺設備可以相互傳送數據,但某一時刻則只能向一個方向傳送數據。例如,步話機是半雙工設備,因爲在一個時刻只能有一方說話。   

3. 全雙工(Full Duplex)方式:通信雙方設備既是發送器,也是接收器,兩臺設備可以同時在兩個方向上傳送數據。例如,電話是全雙工設備,因爲雙方可同時說話。 

 

 

 

 

 

發佈了572 篇原創文章 · 獲贊 273 · 訪問量 93萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章