TPC/IP協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。關於TCP/IP和HTTP協議的關係,網絡有一段比較容易理解的介紹:「咱們在傳輸數據時,能夠只使用(傳輸層)TCP/IP協議,可是那樣的話,若是沒有應用層,便沒法識別數據內容,若是想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有不少,好比HTTP、FTP、TELNET等,也能夠本身定義應用層協議。WEB使用HTTP協議做應用層協議,以封裝HTTP
文本信息,而後使用TCP/IP作傳輸層協議將它發到網絡上。」java
術語TCP/IP表明傳輸控制協議/網際協議,指的是一系列協議。「IP」表明網際協議,TCP和UDP使用該協議從一個網絡傳送數據包到另外一個網絡。把IP想像成一種高速公路,它容許其它協議在上面行駛並找到到其它電腦的出口。TCP和UDP是高速公路上的「卡車」,它們攜帶的貨物就是像HTTP,文件傳輸協議FTP這樣的協議等。 程序員
你應該能理解,TCP和UDP是FTP,HTTP和SMTP之類使用的傳輸層協議。雖然TCP和UDP都是用來傳輸其餘協議的,它們卻有一個顯著的不一樣:TCP提供有保證的數據傳輸,而UDP不提供。這意味着TCP有一個特殊的機制來確保數據安全的不出錯的從一個端點傳到另外一個端點,而UDP不提供任何這樣的保證。數據庫
HTTP(超文本傳輸協議)是利用TCP在兩臺電腦(一般是Web服務器和客戶端)之間傳輸信息的協議。客戶端使用Web瀏覽器發起HTTP請求給Web服務器,Web服務器發送被請求的信息給客戶端。編程
下面的圖表試圖顯示不一樣的TCP/IP和其餘的協議在最初OSI模型中的位置:瀏覽器
7緩存
應用層安全
例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP服務器
6網絡
表示層socket
例如XDR、ASN.一、SMB、AFP、NCP
5
會話層
例如ASAP、TLS、SSH、ISO
8327 / CCITT X.22五、RPC、NetBIOS、ASP、Winsock、BSD
sockets
4
傳輸層
例如TCP、UDP、RTP、SCTP、SPX、ATP、IL
3
網絡層
例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25
2
數據鏈路層
例如以太網、令牌環、HDLC、幀中繼、ISDN、ATM、IEEE
802.十一、FDDI、PPP
1
物理層
例如線路、無線電、光纖、信鴿
一、HTTP協議的幾個重要概念
1.鏈接(Connection):一個傳輸層的實際環流,它是創建在兩個相互通信的應用程序之間。
2.消息(Message):HTTP通信的基本單位,包括一個結構化的八元組序列並經過鏈接傳輸。
3.請求(Request):一個從客戶端到服務器的請求信息包括應用於資源的方法、資源的標識符和協議的版本號
4.響應(Response):一個從服務器返回的信息包括HTTP協議的版本號、請求的狀態(例如「成功」或「沒找到」)和文檔的MIME類型。
5.資源(Resource):由URI標識的網絡數據對象或服務。
6.實體(Entity):數據資源或來自服務資源的回映的一種特殊表示方法,它可能被包圍在一個請求或響應信息中。一個實體包括實體頭信息和實體的自己內容。
7.客戶機(Client):一個爲發送請求目的而創建鏈接的應用程序。
8.用戶代理(Useragent):初始化一個請求的客戶機。它們是瀏覽器、編輯器或其它用戶工具。
9.服務器(Server):一個接受鏈接並對請求返回信息的應用程序。
10.源服務器(Originserver):是一個給定資源能夠在其上駐留或被建立的服務器。
11.代理(Proxy):一箇中間程序,它能夠充當一個服務器,也能夠充當一個客戶機,爲其它客戶機創建請求。請求是經過可能的翻譯在內部或通過傳遞到其它的服務器中。一個代理在發送請求信息以前,必須解釋而且若是可能重寫它。
代理常常做爲經過防火牆的客戶機端的門戶,代理還能夠做爲一個幫助應用來經過協議處理沒有被用戶代理完成的請求。
12.網關(Gateway):一個做爲其它服務器中間媒介的服務器。與代理不一樣的是,網關接受請求就好象對被請求的資源來講它就是源服務器;發出請求的客戶機並無意識到它在同網關打交道。
網關常常做爲經過防火牆的服務器端的門戶,網關還能夠做爲一個協議翻譯器以便存取那些存儲在非HTTP系統中的資源。
13.通道(Tunnel):是做爲兩個鏈接中繼的中介程序。一旦激活,通道便被認爲不屬於HTTP通信,儘管通道多是被一個HTTP請求初始化的。當被中繼的鏈接兩端關閉時,通道便消失。當一個門戶(Portal)必須存在或中介(Intermediary)不能解釋中繼的通信時通道被常用。
14.緩存(Cache):反應信息的局域存儲。
2.發送請求
打開一個鏈接後,客戶機把請求消息送到服務器的停留端口上,完成提出請求動做。
HTTP/1.0 請求消息的格式爲:
請求消息=請求行(通用信息|請求頭|實體頭)CRLF[實體內容]
請求 行=方法 請求URL HTTP版本號 CRLF
方 法=GET|HEAD|POST|擴展方法
U R L=協議名稱+宿主名+目錄與文件名
請求行中的方法描述指定資源中應該執行的動做,經常使用的方法有GET、HEAD和POST。不一樣的請求對象對應GET的結果是不一樣的,對應關係以下:
對象 GET的結果
文件 文件的內容
程序 該程序的執行結果
數據庫查詢 查詢結果
HEAD??要求服務器查找某對象的元信息,而不是對象自己。
POST??從客戶機向服務器傳送數據,在要求服務器和CGI作進一步處理時會用到POST方法。POST主要用於發送HTML文本中FORM的內容,讓CGI程序處理。
一個請求的例子爲:
GEThttp://networking.zju.edu.cn/zju/index.htmHTTP/1.0 networking.zju.edu.cn/zju/index.htmHTTP/1.0 頭信息又稱爲元信息,即信息的信息,利用元信息能夠實現有條件的請求或應答。
請求頭??告訴服務器怎樣解釋本次請求,主要包括用戶能夠接受的數據類型、壓縮方法和語言等。
實體頭??實體信息類型、長度、壓縮方法、最後一次修改時間、數據有效期等。
實體??請求或應答對象自己。
3.發送響應
服務器在處理完客戶的請求以後,要向客戶機發送響應消息。
HTTP/1.0的響應消息格式以下:
響應消息=狀態行(通用信息頭|響應頭|實體頭) CRLF 〔實體內容〕
狀態行=HTTP版本號 狀態碼 緣由敘述
狀態碼錶示響應類型
1×× 保留
2×× 表示請求成功地接收
3×× 爲完成請求客戶需進一步細化請求
4×× 客戶錯誤
5×× 服務器錯誤
響應頭的信息包括:服務程序名,通知客戶請求的URL須要認證,請求的資源什麼時候能使用。
4.關閉鏈接
客戶和服務器雙方均可以經過關閉套接字來結束TCP/IP對話
計算機網絡是什麼?
簡單地理解,計算機網絡的任務就是傳輸數據。爲了完成這一複雜的任務,國際標準化組織ISO提供了OSI參考模型,這種模型把互聯網網絡氛圍7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。每一個曾有明確的分工,而且在層與層之間,下層爲上層提供服務。這種分層的思想簡化了網絡系統的設計過程,例如在設計應用層時候只須要考慮建立知足用戶實際需求的應用;在設計傳輸層時,只須要考慮如何在兩個主機之間傳輸數據;在設計網絡層時,只須要考慮如何在網絡上找到一條發送數據的路徑,即路由。
因爲OSI參考模型過於龐大和複雜,使它難以投入到實際運用中。與OSI參考模型類似的TCP/IP參考模型洗去了網絡分層的思想,可是對網絡的層次作了簡化,而且在網絡各層(除了主機-網絡層外)都提供了完善的協議,這些協議構成了TCP/IP協議集,簡稱TCP/IP協議。TCP/IP參考模型氛圍4個層:應用層、傳輸層、網絡互聯層和主機-網絡層。在每一層都有相應的協議,IP協議和TCP協議是協議集中最核心的兩個協議。
IP協議位於網絡互聯曾,用IP地址來標識網絡上的各個主機,IP協議把數據氛圍若干數據包,而後爲這些數據包肯定合適的路由。路由就是把數據包從源主機發送到目標主機的路徑。
TCP協議位於傳輸層,保證兩個進程之間可靠地傳輸數據。每當兩個進程之間進行通訊,就會創建一個TCP鏈接,TCP協議用端口來標識TCP鏈接的兩個端點。在傳輸層還有一個UDP協議,它與TCP協議的區別是,UDP不保證可靠地傳輸數據。
創建在TCP/IP協議基礎上的網絡程序通常都採用客戶端/服務器通訊模擬股市。服務器提供服務,客戶程序得到服務。服務器程序通常晝夜運行,時刻等待客戶的請求並及時做出響應。
Java網絡程序致力於實現應用層,傳輸層嚮應用層提供了套接字Socket接口,Socket封裝了下層的數據傳輸細節,應用層的程序經過Socket來創建與遠程主機的鏈接,以及進行數據傳輸。在Java中,有三種套接字類:java.net.Socket、java.net.ServerSocket和DatagramSocket。其中Socket和ServerSocket類創建在TCP協議基礎上;DatagramSocket類創建在UDP協議基礎上。socket鏈接和http鏈接的區別簡單說,你瀏覽的網頁(網址以http://開頭)都是http協議傳輸到你的瀏覽器的, 而http是基於socket之上的。socket是一套完成tcp,udp協議的接口。HTTP協議:簡單對象訪問協議,對應於應用層 ,HTTP協議是基於TCP鏈接的tcp協議: 對應於傳輸層ip協議: 對應於網絡層 TCP/IP是傳輸層協議,主要解決數據如何在網絡中傳輸;而HTTP是應用層協議,主要解決如何包裝數據。Socket是對TCP/IP協議的封裝,Socket自己並非協議,而是一個調用接口(API),經過Socket,咱們才能使用TCP/IP協議。http鏈接:http鏈接就是所謂的短鏈接,即客戶端向服務器端發送一次請求,服務器端響應後鏈接即會斷掉;socket鏈接:socket鏈接就是所謂的長鏈接,理論上客戶端和服務器端一旦創建起鏈接將不會主動斷掉;可是因爲各類環境因素可能會是鏈接斷開,好比說:服務器端或客戶端主機down了,網絡故障,或者二者之間長時間沒有數據傳輸,網絡防火牆可能會斷開該鏈接以釋放網絡資源。因此當一個socket鏈接中沒有數據的傳輸,那麼爲了維持鏈接須要發送心跳消息~~具體心跳消息格式是開發者本身定義的咱們已經知道網絡中的進程是經過socket來通訊的,那什麼是socket呢?socket起源於Unix,而Unix/Linux基本哲學之一就是「一切皆文件」,均可以用「打開open –> 讀寫write/read –> 關閉close」模式來操做。個人理解就是Socket就是該模式的一個實現,socket便是一種特殊的文件,一些socket函數就是對其進行的操做(讀/寫IO、打開、關閉),這些函數咱們在後面進行介紹。 Socket鏈接與HTTP鏈接咱們在傳輸數據時,能夠只使用(傳輸層)TCP/IP協議,可是那樣的話,若是沒有應用層,便沒法識別數據內容,若是想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有不少,好比HTTP、FTP、TELNET等,也能夠本身定義應用層協議。WEB使用HTTP協議做應用層協議,以封裝HTTP文本信息,而後使用TCP/IP作傳輸層協議將它發到網絡上。1)Socket是一個針對TCP和UDP編程的接口,你能夠藉助它創建TCP鏈接等等。而TCP和UDP協議屬於傳輸層 。 而http是個應用層的協議,它實際上也創建在TCP協議之上。 (HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通訊的能力。) 2)Socket是對TCP/IP協議的封裝,Socket自己並非協議,而是一個調用接口(API),經過Socket,咱們才能使用TCP/IP協議。Socket的出現只是使得程序員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而造成了咱們知道的一些最基本的函數接口。下面是一些的重要的概念,特在此作摘抄和總結。一。什麼是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鏈接的請求,斷開過程須要通過「四次握手」(過程就不細寫了,就是服務器和客戶端交互,最終肯定斷開)二。利用Socket創建網絡鏈接的步驟創建Socket鏈接至少須要一對套接字,其中一個運行於客戶端,稱爲ClientSocket ,另外一個運行於服務器端,稱爲ServerSocket 。套接字之間的鏈接過程分爲三個步驟:服務器監聽,客戶端請求,鏈接確認。1。服務器監聽:服務器端套接字並不定位具體的客戶端套接字,而是處於等待鏈接的狀態,實時監控網絡狀態,等待客戶端的鏈接請求。2。客戶端請求:指客戶端的套接字提出鏈接請求,要鏈接的目標是服務器端的套接字。爲此,客戶端的套接字必須首先描述它要鏈接的服務器的套接字,指出服務器端套接字的地址和端口號,而後就向服務器端套接字提出鏈接請求。3。鏈接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的鏈接請求時,就響應客戶端套接字的請求,創建一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式創建鏈接。而服務器端套接字繼續處於監聽狀態,繼續接收其餘客戶端套接字的鏈接請求。三。HTTP連接的特色HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網經常使用的協議之一,HTTP協議是創建在TCP協議之上的一種應用。HTTP鏈接最顯著的特色是客戶端發送的每次請求都須要服務器回送響應,在請求結束後,會主動釋放鏈接。從創建鏈接到關閉鏈接的過程稱爲「一次鏈接」。四。TCP和UDP的區別1。TCP是面向連接的,雖說網絡的不安全不穩定特性決定了多少次握手都不能保證鏈接的可靠性,但TCP的三次握手在最低限度上(實際上也很大程度上保證了)保證了鏈接的可靠性;而UDP不是面向鏈接的,UDP傳送數據前並不與對方創建鏈接,對接收到的數據也不發送確認信號,發送端不知道數據是否會正確接收,固然也不用重發,因此說UDP是無鏈接的、不可靠的一種數據傳輸協議。2。也正因爲1所說的特色,使得UDP的開銷更小數據傳輸速率更高,由於沒必要進行收發數據的確認,因此UDP的實時性更好。