1、計算機網絡的發展歷程
一、計算機網絡發展
與其說計算機改變了世界,倒不如說是計算機網絡改變了世界。彼時彼刻,你我都因網絡而有了交集,豈非一種緣分?程序員
計算機與網絡發展大體經歷以下過程:算法
二、計算機的模式變化
起初的計算機主要以「單機」形式存在,計算機之間沒有通訊可言,而網絡的出現才真正讓計算機變得與以往的工具不一樣,信息的共享和交流讓計算機成爲劃時代的產物。網絡按照規模可劃分爲:編程
- 局域網(LAN):局域網是某一區域內由多臺計算機互聯成的計算機組。通常在幾千米範圍內。
- 廣域網(WAN):廣域網的範圍很大,幾十千米到幾千千米,能夠是一個區域的計算機網也多是整個國家的計算機網。
注:咱們常見的WLAN是LAN的一種,稱爲無線局域網。在無線局域網WLAN發明以前,人們要想經過網絡進行聯絡和通訊,必須使用物理線纜-銅絞線或光纖進行物理線路鏈接,但這樣的局域網轉載和拆卸都很麻煩。隨着網絡的發展,人民利用射頻(Radio Frequency; RF)的技術,使用電磁波進行網絡架構,實現了無線局域網互聯,讓信息隨身化。瀏覽器
2、各類協議
一、協議的重要性
計算機之間要實現通訊,除了技術支持還須要一些規則來進行信息匹配,方能進行交流。不一樣的廠商生產不一樣的計算機,其CPU等內部構造不盡相同,就比如兩個外國人,那麼計算機或者說外國人之間須要實現通訊或交流,那麼二者之間就須要學會同一種交流規則,對於兩個外國人來講,這種交流規則就是語言,而對於計算機來講,這種交流規則就是各類協議。協議的出現讓不一樣廠商之間生產的計算機只要可以支持同一種協議就能實現正常通訊,進行交流。緩存
下面是一些之前經常使用的協議(由於如今基本都是TCP/IP協議):安全
二、協議的標準:OSI七層模型
計算機通訊誕生之初,系統化與標準化未收到重視,不一樣廠商只出產各自的網絡來實現通訊,這樣就形成了對用戶使用計算機網絡形成了很大障礙,缺少靈活性和可擴展性服務器
爲解決該問題,ISO(國際標準化組織)制定了一個國際標準OSI(開放式通訊系統互聯參考模型)。網絡
注:TCP/IP並不是ISO指定,是由IETF(國際互聯網工程任務組)建議、致力推動標準化的一種協議,其中,大學等研究機構和計算機行業是推進標準化的核心力量,現已成爲業界標準協議。協議的標準化也推進了計算機網絡的普及。架構
ISO對協議進行分層,每一個分層能夠獨立使用,其實系統中某些分層發生變化,也不會影響整個系統,所以能夠構造一個擴展性和靈活性都比較強的系統;此外,經過分層能夠細分通訊功能,更易於單獨實現每一個分層的協議,界定各個分層的具體責任和義務。併發
但過度模塊化,處理變得更加沉重,以及每一個模塊都不得不事先類似的處理邏輯等。
如下是各層功能描述:
- 物理層協議:
負責0、1 比特流(0/1序列)與電壓的高低、逛的閃滅之間的轉換。規定了激活、維持、關閉通訊端點之間的機械特性、電氣特性、功能特性以及過程特性;該層爲上層協議提供了一個傳輸數據的物理媒體,只是說明標準。
在這一層,數據的單位稱爲比特(bit)(注:bit和字節Byte,咱們常說的1字節8位2進制即:1B=8bit)。屬於物理層定義的典型規範表明包括:EIA/TIA RS-23二、EIA/TIA RS-44九、V.3五、RJ-4五、fddi令牌環網。
- 數據鏈路層協議:
負責物理層面上的互聯的、節點間的通訊傳輸(例如一個以太網項鍊的2個節點之間的通訊);該層的做用包括:物理地址尋址、數據的成幀、流量控制、數據的檢錯、重發等。
在這一層,數據的單位稱爲幀(frame)。數據鏈路層協議的表明包括:ARP、RARP、SDLC、HDLC、PPP、STP、幀中繼等。
- 網絡層協議:
將數據傳輸到目標地址;目標地址能夠使多個網絡經過路由器鏈接而成的某一個地址,主要負責尋找地址和路由選擇,網絡層還能夠實現擁塞控制、網際互連等功能。
在這一層,數據的單位稱爲數據包(packet)。網絡層協議的表明包括:IP、IPX、RIP、OSPF等。
- 傳輸層協議(核心層):
傳輸層是OSI中最重要、最關鍵的一層,是惟一負責整體的數據傳輸和數據控制的一層;
傳輸層提供端到端的交換數據的機制,檢查分組編號與次序,傳輸層對其上三層如會話層等,提供可靠的傳輸服務,對網絡層提供可靠的目的地站點信息主要功能。在這一層,數據的單位稱爲數據段(segment)。主要功能: ①:爲端到端鏈接提供傳輸服務。
②:這種傳輸服務分爲可靠和不可靠的,其中Tcp是典型的可靠傳輸,而Udp則是不可靠傳輸。
③:爲端到端鏈接提供流量控制,差錯控制,服務質量(Quality of Service,QoS)等管理服務。
包括的協議以下:
TCP:傳輸控制協議,傳輸效率低,可靠性強。
UDP:用戶數據報協議,適用於傳輸可靠性要求不高,數據量小的數據。
DCCP、SCTP、RTP、RSVP、PPTP等協議。
- 會話層協議:
負責創建和斷開通訊鏈接(數據流動的邏輯通路),記憶數據的分隔等數據傳輸相關的管理。
- 表示層協議:將數據格式轉換爲標準格式
將應用處理的信息轉換爲適合網絡傳輸的格式,或未來自下一層的數據轉換爲上層可以處理的格式;主要負責數據格式的轉換,確保一個系統的應用層信息可被另外一個系統應用層讀取。具體來講,就是將設備固有的數據格式轉換爲網絡標準傳輸格式,不一樣設備對同一比特流解釋的結果可能會不一樣;所以,主要負責使它們保持一致。
- 應用層協議:
①:超文本傳輸協議HTTP:這是一種最基本的客戶機/服務器的訪問協議;瀏覽器向服務器發送請求,而服務器迴應相應的網頁。
②:文件傳送協議FTP:提供交互式的訪問,基於客戶服務器模式,面向鏈接 使用TCP可靠的運輸服務。主要功能:減小/消除不一樣操做系統下文件的不兼容性。
③:遠程登陸協議TELNET:客戶服務器模式,能適應許多計算機和操做系統的差別,網絡虛擬終端NVT的意義。
④:簡單郵件傳送協議SMTP:Client/Server模式,面向鏈接。基本功能:寫信、傳送、報告傳送狀況、顯示信件、接收方處理信件。
⑤:DNS域名解析協議:DNS是一種用以將域名轉換爲IP地址的Internet服務。
⑥:簡單文件傳送協議TFTP:客戶服務器模式,使用UDP數據報,只支持文件傳輸,不支持交互,TFTP代碼佔內存小。
⑦:簡單網絡管理協議(SNMP): SNMP模型的4個組件:被管理結點、管理站、管理信息、管理協議。SNMP代理:運行SNMP管理進程的被管理結點。
⑧DHCP動態主機配置協議: 發現協議中的引導文件名、空終止符、屬名或者空,DHCP供應協議中的受限目錄路徑名 Options –可選參數字段,參考定義選擇列表中的選擇文件。
PS:其實協議分層只是爲了更好地理解我運用協議的做用,而不是絕對的分層,有的層之間協議也是能夠共用的,特別是會話層、表示層和應用層這三層。
3、TCP/IP協議
一、介紹
Transmission Control Protocol/Internet Protocol的簡寫,中譯名爲傳輸控制協議/因特網互聯協議,又名網絡通信協議,是Internet最基本的協議、Internet國際互聯網絡的基礎,由網絡層的IP協議和傳輸層的TCP協議等組成(固然還有其餘後來發展起來的網絡協議,還包括 ARP,ICMP,IGMP,UDP,以及讓域名訪問成爲可能的DNS,以及電腦/手機能夠自動獲取IP地址的DHCP。固然還有形形色色的應用層的協議如 HTTP / SMTP / FTP 等。)。TCP/IP 定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標準。協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成本身的需求。通俗而言:TCP負責發現傳輸的問題,一有問題就發出信號,要求從新傳輸,直到全部數據安全正確地傳輸到目的地。而IP是給因特網的每一臺聯網設備規定一個地址。
二、TCP/IP協議的發展歷程
(如下內容來自百度百科):
爲了減小網絡設計的複雜性,大多數網絡都採用分層結構。而TCP/IP協議採用了4層的層級結構。
在阿帕網(ARPA)產生運做之初,經過接口信號處理機實現互聯的電腦並很少,大部分電腦相互之間不兼容。在一臺電腦上完成的工做,很難拿到另外一臺電腦上去用,想讓硬件和軟件都不同的電腦聯網,也有不少困難。當時美國的情況是,陸軍用的電腦是DEC系列產品,海軍用的電腦是Honeywell中標機器,空軍用的是IBM公司中標的電腦,每個軍種的電腦在各自的系裏都運行良好,但卻有一個大弊病:不能共享資源。
當時科學家們提出這樣一個理念:「全部電腦生來都是平等的。」爲了讓這些「生來平等」的電腦可以實現「資源共享」就得在這些系統的標準之上,創建一種你們共同都必須遵照的標準,這樣才能讓不一樣的電腦按照必定的規則進行「談判」,而且在談判以後能「握手」。
在肯定今天因特網各個電腦之間「談判規則」過程當中,最重要的人物當數瑟夫(Vinton G.Cerf)。正是他的努力,才使今天各類不一樣的電腦能按照協議上網互聯。瑟夫也所以得到了與克萊因羅克(「因特網之父」)同樣的美稱「互聯網之父」。
瑟夫從小喜歡標新立異,堅強而又熱情。中學讀書時,就被容許使用加州大學洛杉磯分校的電腦,他認爲「爲電腦編程序是個很是激動人心的事,......只要把程序編好,就可讓電腦作任何事情。」1965年,瑟夫從斯坦福大學畢業到IBM的一家公司當系統工程師,工做沒多久,瑟夫就以爲知識不夠用,因而到加州大學洛杉磯分校攻讀博士,那時,正逢阿帕網的創建,「接口信號處理機」(IMP)的研試及網絡測評中心的創建,瑟夫也成了著名科學家克萊因羅克手下的一位學生。瑟夫與另外三位年輕人(溫菲爾德、克羅克、佈雷登)參與了阿帕網的第一個節點的聯接。此後不久,BBN公司對工做中各類狀況發展有很強判斷能力、被公認阿帕網建成做出巨大貢獻的鮑伯·卡恩(Bob Kahn)也來到了加州大學洛杉磯分校。在那段日子裏,每每是卡恩提出須要什麼軟件,而瑟夫則通宵達旦地把符合要求的軟件給編出來,而後他們一塊兒測試這些軟件,直至能正常運行。
當時的主要格局是這樣的,羅伯茨提出網絡思想設計網絡佈局,卡恩設計阿帕網整體結構,克萊因羅克負責網絡測評系統,還有衆多的科學家、研究生參與研究、試驗。69年9月阿帕網誕生、運行後,才發現各個IMP鏈接的時候,須要考慮用各類電腦都承認的信號來打開通訊管道,數據經過後還要關閉通道。不然這些IMP不會知道何時應該接收信號,何時該結束,這就是咱們所說的通訊「協議」的概念。1970年12月制定出來了最初的通訊協議由卡恩開發、瑟夫參與的「網絡控制協議」(NCP),但要真正創建一個共同的標準很不容易,72年10月國際電腦通訊大會結束後,科學家們都在爲此而努力。
「包切換」理論爲網絡之間的聯接方式提供了理論基礎。卡恩在本身研究的基礎上,認識到只有深刻理解各類操做系統的細節才能創建一種對各類操做系統普適的協議,73年卡恩請瑟夫一塊兒考慮這個協議的各個細節,他們此次合做的結果產生了在開放系統下的全部網民和網管人員都在使用的「傳輸控制協議」(TCP,Transmission-Control Protocol)和「因特網協議」(IP,Internet Protocol)即TCP/IP協議。
通俗而言:TCP負責發現傳輸的問題,一有問題就發出信號,要求從新傳輸,直到全部數據安全正確地傳輸到目的地。而IP是給因特網的每一臺電腦規定一個地址。1974年12月,卡恩、瑟夫的第一份TCP協議詳細說明正式發表。當時美國國防部與三個科學家小組簽訂了完成TCP/IP的協議,結果由瑟夫領銜的小組捷足先登,首先制定出了經過詳細定義的TCP/IP協議標準。當時做了一個試驗,將信息包經過點對點的衛星網絡,再經過陸地電纜,再經過衛星網絡,再由地面傳輸,貫串歐洲和美國,通過各類電腦系統,全程9.4萬千米居然沒有丟失一個數據位,遠距離的可靠數據傳輸證實了TCP/IP協議的成功。
1983年1月1日,運行較長時期曾被人們習慣了的NCP被中止使用,TCP/IP協議做爲因特網上全部主機間的共同協議,今後之後被做爲一種必須遵照的規則被確定和應用。2005年9月9日卡恩和瑟夫因爲他們對於美國文化作出的卓越貢獻被授予總統自由勳章。
三、TCP/IP四層模型
4、IP協議
一、介紹
IP協議(Internet Protocol)是將多個包交換網絡鏈接起來,它在源地址和目的地址之間傳送一種稱之爲數據包的東西,它還提供對數據大小的從新組裝功能,以適應不一樣網絡對包大小的要求。IP協議在OSI參考模型中應用於網絡層,以「數據包(Package)」爲單位。其中,IP地址的定義是確認惟一端口號和路由選擇的關鍵,IP地址至關於每臺電話的電話號碼,惟一且是咱們互相聯繫的關鍵,所以IP協議也是網絡互連的關鍵。
二、IP協議特色
- ①IP協議是一種無鏈接、不可靠的分組傳送服務的協議。
- ②IP協議是點-點線路的網絡層通訊協議。IP協議是針對原主機-路由器、路由器-路由器、路由器-目的主機之間的數據傳輸的點-點線路的網絡層通訊協議。
- ③IP協議屏蔽了網絡在數據鏈路層、物理層協議與實現技術上的差別。:經過IP協議,網絡層向傳輸層提供的是統一的IP分組,傳輸層不須要考慮互聯網在數據鏈路層、物理層協議與實現技術上的差別,IP協議使得異構網絡的互聯變得容易了。
三、IPV4和IPV6
目前,主流IP是基於IPv4的,但IPV4網絡難以實現網絡實名制,一個重要緣由就是由於IP資源的共用,由於IP資源不夠(IPV4爲32位),因此不一樣的人在不一樣的時間段共用一個IP,IP和上網用戶沒法實現一一對應。而IPv6(128位,足夠長)的普及將改變現狀,由於IPv6一個重要的應用將是實現網絡實名制下的互聯網身份證/VIeID,在IPv4下,如今根據IP查人也比較麻煩,電信局要保留一段時間的上網日誌才行,一般由於數據量很大,運營商只保留三個月左右的上網日誌,好比查前年某個IP發帖子的用戶就不能實現。IPv6的出現能夠從技術上一勞永逸地解決實名制這個問題,由於那時IP資源將再也不緊張,運營商有足夠多的IP資源,那時候,運營商在受理入網申請的時候,能夠直接給該用戶分配一個固定IP地址,這樣實際就實現了實名制,也就是一個真實用戶和一個IP地址的一一對應。當一個上網用戶的IP固定了以後,你任什麼時候間作的任何事情都和一個惟一IP綁定,你在網絡上作的任何事情在任什麼時候間段內都有據可查,而且沒法否定。所以你可能昨晚剛瀏覽過非法網站後,次日早上就會有人上門給你開罰款單(嘖嘖)。
IPv4,是互聯網協議(Internet Protocol,IP)的第四版,也是第一個被普遍使用,構成現今互聯網技術的基礎的協議。1981年 Jon Postel 在RFC791中定義了IP,Ipv4能夠運行在各類各樣的底層網絡上,好比端對端的串行數據鏈路(PPP協議和SLIP協議) ,衛星鏈路等等。局域網中最經常使用的是以太網。目前的全球因特網所採用的協議族是TCP/IP協議族。IP是TCP/IP協議族中網絡層的協議,是TCP/IP協議族的核心協議之一。目前IP協議的版本號是4(簡稱爲IPv4,v,version版本),它的下一個版本就是IPv6。
數據報格式以下:首部的長度是以4個字節爲單位,長度能夠是20-60字節,這跟首部的HLEN字段有關。
- 首部長度:這個4位字段定義了數據報首部的長度,以4字節的字爲單位。當首部沒有選項時,首部長度位20字節;當這個字段值位最大值F時,首部長度最大爲60字節。
- 服務類型:在最初這個字段有一部分用於定義數據報的優先級,剩下的一部分定義了服務類型。IETF已經改變了這個8位字段的解釋,如今定義了一組區分服務。在這種解釋種,前6位構成了碼點(codepoint),最後兩位未使用。當碼點字段最右邊的3位不全爲0時,這6位定義了54種服務,低延時,高吞吐量等等。
- 總長度:這個16位字段定義了數據報總長度,其以字節爲單位。故IPv4數據報總長度上限值位65536字節。注:爲何須要這個字段?在許多狀況下,咱們確實不須要這個字段值。可是有些狀況下,封裝在一個幀裏的並不只僅是數據報,還可能附加了一些填充。好比,以太網協議對幀的數據有最大值(1500字節)和最小值(46字節)的限制,當數據小於46字節時,數據將含有填充數據。
- 標識(identification): 這個16位字段標誌了從源主機發出的一個數據報,這樣就肯定了數據報的惟一性。這樣使得數據報被分片後,在到達終點時終點能根據標識號將同一個數據報的分片從新組裝成一個數據報。
- 標誌(flag):第一位保留(未用),第二位爲「不分片(do not fragment)」,第三位位「還有分片(more fragment)」。
- 分片偏移:這個13位字段表示的是分片在整個數據報中的相對位置。這是數據在原始數據報中的偏移量,以8字節位單位。
- 生存時間:這個8位字段用來控制數據報所通過的最大跳數(路由器),每通過一個路由器,這個字段數值都減1,減1後變位0時,路由器就丟棄這個數據報。
- 協議:這個8位字段定義了使用IPv4服務的高層協議,如TCP,UDP,ICMP,IGMP,OSPF等的數據都將被封裝到IP數據報中。這個字段指明數據報必須交付給哪一個最終目的協議。
- 檢驗和:檢驗IP數據報首部。
- 源地址:定義了源點的IP地址,這個字段始終保持不變。
- 目的地址:定義了終點的IP地址,這個字段始終保持不變。
IPV4地址格式:
IPv4中規定IP地址長度爲32(按TCP/IP參考模型劃分) ,即有2^32-1個地址。 ipv4所存在的問題 通常的書寫法爲4個用小數點分開的十進制數。也有人把4位數字化成一個十進制長整數,但這種標示法並不常見。另外一方面,IPv6使用的128位地址所採用的位址記數法,在IPv4也有人用,但使用範圍更少。 過去IANAIP地址分爲A,B,C,D 4類,把32位的地址分爲兩個部分:前面的部分表明網絡地址,由IANA分配,後面部分表明局域網地址。如在C類網絡中,前24位爲網絡地址,後8位爲局域網地址,可提供254個設備地址(由於有兩個地址不能爲網絡設備使用: 255爲廣播地址,0表明此網絡自己) 。網絡掩碼(Netmask) 限制了網絡的範圍,1表明網絡部分,0表明設備地址部分,例如C類地址經常使用的網絡掩碼爲255.255.255.0。
IPV6:
因爲IPv4最大的問題在於網絡地址資源有限,嚴重製約了互聯網的應用和發展。IPv6的使用,不只能解決網絡地址資源數量的問題,並且也解決了多種接入設備連入互聯網的障礙。IPV6號稱能夠爲全世界的每一粒沙子編上一個網址。
發展歷史:2003年1月22日,IETF發佈了IPv6測試性網絡。最初開始於虛擬網絡,它使用IPv6-over-IPv4隧道過渡技術。所以,它是一個基於IPv4互聯網且支持IPv6傳輸的網絡,後來逐漸創建了純IPv6連接。從2011年開始,主要用在我的計算機和服務器系統上的操做系統基本上都支持高質量IPv6配置產品。例如,Microsoft Windows從Windows 2000起就開始支持IPv6,到Windows XP時已經進入了產品完備階段。一些應用基於IPv6實現.如BitTorrent點到點文件傳輸協議等,避免了使用NAT的IPv4私有網絡沒法正常使用的廣泛問題。2012年6月6日,國際互聯網協會舉行了世界IPv6啓動記念日,這一天,全球IPv6網絡正式啓動。多家知名網站,如Google、Facebook和Yahoo等,於當天全球標準時間0點(北京時間8點整)開始永久性支持IPv6訪問。
IPV6地址格式:
IPv6的地址長度爲128b,是IPv4地址長度的4倍。因而IPv4點分十進制格式再也不適用,採用十六進制表示。IPv6有3種表示方法。
- 冒分十六進制表示法:
格式爲X:X:X:X:X:X:X:X,其中每一個X表示地址中的16b,以十六進制表示,例如:ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,這種表示法中,每一個X的前導0是能夠省略的,例如:2001:0DB8:0000:0023:0008:0800:200C:417A→ 2001:DB8:0:23:8:800:200C:417A。
- 0位壓縮表示法:
在某些狀況下,一個IPv6地址中問可能包含很長的一段0,能夠把連續的一段0壓縮爲「::」。但爲保證地址解析的惟一性,地址中」::」只能出現一次,例如:
FF01:0:0:0:0:0:0:1101 → FF01::1101
0:0:0:0:0:0:0:1 → ::1
0:0:0:0:0:0:0:0 → ::
- 內嵌IPv4地址表示法:
爲了實現IPv4-IPv6互通,IPv4地址會嵌入IPv6地址中,此時地址常表示爲:X:X:X:X:X:X:d.d.d.d,前96b採用冒分十六進制表示,而最後32b地址則使用IPv4的點分十進制表示,例如::192.168.0.1與::FFFF:192.168.0.1就是兩個典型的例子,注意在前96b中,壓縮0位的方法依舊適用。
IPV6報文格式:
5、TCP協議
一、介紹
TCP(Transmission Control Protocol 傳輸控制協議)是一種面向鏈接的、可靠的, 基於IP的傳輸層協議。TCP在IP報文的協議號是6。TCP是一個超級麻煩的協議,而它又是互聯網的基礎。下面是OSI七層模型圖:
TCP工做在網絡OSI的七層模型中的第四層——Transport層(傳輸層),IP在第三層——Network層,ARP 在第二層——Data Link層。在第二層的數據,咱們把它叫Frame(數據幀),在第三層的數據叫Packet(數據包),第四層的數據叫Segment(數據段)。 同時,咱們須要簡單的知道,數據從應用層發下來,會在每一層都會加上頭部信息,進行封裝,而後再發送到數據接收端。因此數據的發送和接收其實就是數據的封裝和解封裝的過程。
二、TCP報文格式
如上圖所示,TCP數據格式是由若干具備特殊含義字段組成的。其中,
- Source Port和Destination Port:分別佔用16位,表示源端口號和目的端口號;用於區別主機中的不一樣進程, 而IP地址是用來區分不一樣的主機的,源端口號和目的端口號配合上IP首部中的源IP地址和目的IP地址就能惟一 的肯定一個TCP鏈接;
- Sequence Number:用來標識從TCP發端向TCP收端發送的數據字節流,它表示在這個報文段中的的第一個數據 字節在數據流中的序號;主要用來解決網絡報亂序的問題;
- Acknowledgment Number:32位確認序列號包含發送確認的一端所指望收到的下一個序號,所以,確認序號應 當是上次已成功收到數據字節序號加1。不過,只有當標誌位中的ACK標誌(下面介紹)爲1時該確認序列號的字 段纔有效。主要用來解決不丟包的問題;
- Offset:給出首部中32 bit字的數目,須要這個值是由於任選字段的長度是可變的。這個字段佔4bit(最多能 表示15個32bit的的字,即4*15=60個字節的首部長度),所以TCP最多有60字節的首部。然而,沒有任選字段, 正常的長度是20字節;
- TCP Flags:TCP首部中有6個標誌比特,它們中的多個可同時被設置爲1,主要是用於操控TCP的狀態機的,依次 爲URG,ACK,PSH,RST,SYN,FIN。
URG:此標誌表示TCP包的緊急指針域(後面立刻就要說到)有效,用來保證TCP鏈接不被中斷,而且督促 中間層設備要儘快處理這些數據;
ACK:此標誌表示應答域有效,就是說前面所說的TCP應答號將會包含在TCP數據包中;有兩個取值:0和1, 爲1的時候表示應答域有效,反之爲0;
PSH:這個標誌位表示Push操做。所謂Push操做就是指在數據包到達接收端之後,當即傳送給應用程序, 而不是在緩衝區中排隊;
RST:這個標誌表示鏈接復位請求。用來複位那些產生錯誤的鏈接,也被用來拒絕錯誤和非法的數據包;
SYN:表示同步序號,用來創建鏈接。SYN標誌位和ACK標誌位搭配使用,當鏈接請求的時候,SYN=1, ACK=0;鏈接被響應的時候,SYN=1,ACK=1;這個標誌的數據包常常被用來進行端口掃描。掃描者發送 一個只有SYN的數據包,若是對方主機響應了一個數據包回來 ,就代表這臺主機存在這個端口;可是因爲這 種掃描方式只是進行TCP三次握手的第一次握手,所以這種掃描的成功表示被掃描的機器不很安全,一臺安全 的主機將會強制要求一個鏈接嚴格的進行TCP的三次握手;
- Window:窗口大小,也就是有名的滑動窗口,用來進行流量控制。這是一個複雜的問題,本文再也不論述。
二、TCP協議的三次握手
TCP是面向鏈接的,不管哪一方向另外一方發送數據以前,都必須先在雙方之間創建一條鏈接。在TCP/IP協議中,TCP 協議提供可靠的鏈接服務,鏈接是經過三次握手進行初始化的。三次握手的目的是同步鏈接雙方的序列號和確認號並交換 TCP窗口大小信息。以下圖TCP的通訊過程所示:
三次握手具體過程(狀態)以下(其實能夠類比打電話的過程:甲打電話,並等待接聽→乙收到來電顯示,「並表示能夠接聽」→「甲收到乙能夠接聽的信息」,甲接聽電話。注:引號部分是打電話過程當中沒有的,但在TCP三次握手中存在):
-
第一次握手:創建鏈接。客戶端發送鏈接請求報文段,將SYN位置爲1,Sequence Number爲x;而後,客戶端進入SYN_SEND狀態,等待服務器的確認。(客戶的創建鏈接並等待確認)
-
第二次握手:服務器收到SYN報文段。服務器收到客戶端的SYN報文段,須要對這個SYN報文段進行確認,設置Acknowledgment Number爲x+1(Sequence Number+1);同時,本身本身還要發送SYN請求信息,將SYN位置爲1,Sequence Number爲y;服務器端將上述全部信息放到一個報文段(即SYN+ACK報文段)中,一併發送給客戶端,此時服務器進入SYN_RECV狀態。(服務器端發送相關報文段信息並等待鏈接)
-
第三次握手:客戶端收到服務器的SYN+ACK報文段。而後將Acknowledgment Number設置爲y+1,向服務器發送ACK報文段,這個報文段發送完畢之後,客戶端和服務器端都進入ESTABLISHED狀態,完成TCP三次握手。(客戶的接收到服務端信息並實現鏈接)
而後,客戶端和服務端就能實現正常的數據傳輸啦!
三、TCP協議的四次分手
既然握手都須要頻繁確認,那麼「分手」又怎能馬虎呢?具體過程(狀態)以下(一樣也能夠看作掛電話的過程:我說完了,掛?→我也說完了,掛吧?→好,拜拜→bye。簡言之就是確認通訊雙方都交流完畢再確認斷開鏈接):
- 第一次分手:主機1(能夠使客戶端,也能夠是服務器端),設置Sequence Number和Acknowledgment Number,向主機2發送一個FIN報文段;此時,主機1進入FIN_WAIT_1狀態;這表示主機1沒有數據要發送給主機2了。(一方數據發送完成)
- 第二次分手:主機2收到了主機1發送的FIN報文段,向主機1回一個ACK報文段,Acknowledgment Number爲Sequence Number加1;主機1進入FIN_WAIT_2狀態;主機2告訴主機1,我也沒有數據要發送了,能夠進行關閉鏈接了。(另外一方數據發送完成)
- 第三次分手:主機2向主機1發送FIN報文段,請求關閉鏈接,同時主機2進入CLOSE_WAIT狀態。(請求關閉鏈接並等待)
- 第四次分手:主機1收到主機2發送的FIN報文段,向主機2發送ACK報文段,而後主機1進入TIME_WAIT狀態;主機2收到主機1的ACK報文段之後,就關閉鏈接;此時,主機1等待2MSL後依然沒有收到回覆,則證實Server端已正常關閉,那好,主機1也能夠關閉鏈接了。(關閉鏈接)
如今,咱們也應該理解爲何TCP協議是面向鏈接的、可靠的、基於IP協議的「通訊控制協議」了。TCP的三次握手保證了數據的可靠性,保證資源不被浪費,而四次分手保證鏈接的可靠性而不至於隨意斷開鏈接,但TCP協議也由其可靠性,數據傳輸效率變得較低,而不像UDP那樣進行實時快速傳輸,下面咱們就來學習什麼是UDP協議。
6、UDP協議
一、介紹
UDP 是User Datagram Protocol的簡稱, 中文名是用戶數據報協議,是OSI(Open System Interconnection,開放式系統互聯) 參考模型中一種無鏈接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務,IETF RFC 768是UDP的正式規範。UDP在IP報文的協議號是17。
與所熟知的TCP(傳輸控制協議)協議同樣,UDP協議直接位於IP(網際協議)協議的頂層。根據OSI(開放系統互連)參考模型,UDP和TCP都屬於傳輸層協議。UDP協議的主要做用是將網絡數據流量壓縮成數據包的形式。一個典型的數據包就是一個二進制數據的傳輸單位。每個數據包的前8個字節(16*4位)用來包含報頭信息,剩餘字節則用來包含具體的傳輸數據。
二、UDP報文格式
與TCP協議不一樣,UDP協議是非面向鏈接的不可靠協議,所以沒有了SYN等處理兩端等待或鏈接的報文段,相比之下,UDP的報文格式更爲簡單,主要由報文頭(由均16位的源端口號、目的端口號、UDP長度和UDP校驗和組成)和具體傳輸數據組成。如圖所示:
- UDP長度:UDP報文的整個大小,最小爲8個字節(16*4位)(僅爲首部)。
- UDP檢驗和:在進行檢驗和計算時,會添加一個僞首部一塊兒進行運算。僞首部(佔用12個字節)爲:4個字節的源IP地址、4個字節的目的IP地址、1個字節的0、一個字節的數字1七、以及佔用2個字節UDP長度。這個僞首部不是報文的真正首部,只是引入爲了計算校驗和。相對於IP協議的只計算首部,UDP檢驗和會把首部和數據一塊兒進行校驗。接收端進行的校驗和與UDP報文中的校驗和相與,若是無差錯應該全爲1。若是有誤,則將報文丟棄或者發給應用層、並附上差錯警告。
三、UDP特性
- (1) UDP是一個無鏈接協議,傳輸數據以前源端和終端不創建鏈接,當 UDP想傳送時就簡單地去抓取來自應用程序的數據,並儘量快地把它扔到網絡上。在發送端,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、計算機的能力和傳輸帶寬的限制;在接收端,UDP把每一個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。
- (2) 因爲傳輸數據不創建鏈接,所以也就不須要維護鏈接狀態,包括收發狀態等,所以一臺服務機可同時向多個客戶機傳輸相同的消息。
- (3) UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
- (4) 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
- (5)UDP使用盡最大努力交付,即不保證可靠交付,所以主機不須要維持複雜的連接狀態表(這裏面有許多參數)。
- (6)UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部後就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,所以,應用程序須要選擇合適的報文大小。 雖然UDP是一個不可靠的協議,但它是分發信息的一個理想協議。例如,在屏幕上報告股票市場、在屏幕上顯示航空信息等等。UDP也用在路由信息協議RIP(Routing Information Protocol)中修改路由表。在這些應用場合下,若是有一個消息丟失,在幾秒以後另外一個新的消息就會替換它。UDP普遍用在多媒體應用中,例如,Progressive Networks公司開發的RealAudio軟件,它是在因特網上把預先錄製的或者現場音樂實時傳送給客戶機的一種軟件,該軟件使用的RealAudio audio-on-demand protocol協議就是運行在UDP之上的協議,大多數因特網電話軟件產品也都運行在UDP之上。
在選擇使用協議的時候,選擇UDP必需要謹慎。在網絡質量使人十分不滿意的環境下,UDP協議數據包丟失會比較嚴重。但是因爲UDP的特性:它不屬於鏈接型協議,於是具備資源消耗小,處理速度快的優勢,因此一般音頻、視頻和普通數據在傳送時使用UDP較多,由於它們即便偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。好比咱們聊天用的ICQ和QQ就是使用的UDP協議。
7、TCP協議和UDP協議的區別
一、通常區別
- TCP是面向鏈接的,傳輸數據保證可靠性和安全性;TCP協議是非面向鏈接的,是不可靠但高效率的協議。
- TCP佔用資源多而UDP佔用少。
- TCP是流模式而TCP是數據報模式。(能夠這樣理解:TCP是面向鏈接的,用打電話的過程來類比,就是通訊雙方是互相明確的,因此進行的是「你一句我一句」的交流,TCP整個通訊過程間有一個緩存區,因爲通訊主體明確,所以能夠斷斷續續地進行交流,數據比如水流,知道源頭和目的地,所以稱爲流模式。反過來,UDP是非面向鏈接的,比如寫信的過程,假設咱們只要知道佩奇的地址,咱們就能寫信給佩奇,而佩奇卻不認識咱們。這樣發起通訊方的身份是不明確的,每一個發送端的信息都不能和別的發送端混淆,否則會形成數據失效,因此UDP要對數據進行「打包」發送,是面向報文的,就像寫信須要用信封套起來,否則只發送數據甚至數據混合會變得毫無心義,就像qq羣的匿名聊天,這不扯皮嗎?)
- TCP和UDP的應用場景和編程方式也有很大差異,此處再也不贅述。
二、TCP的粘包和UDP的丟包
TCP粘包現象:TCP粘包是指發送方發送的若干包數據到接收方接收時粘成一包,從接收緩衝區看,後一包數據的頭緊接着前一包數據的尾。
粘包緣由:
- 發送端:TCP默認會使用Nagle算法。而Nagle算法主要作兩件事:1)只有上一個分組獲得確認,纔會發送下一個分組;2)收集多個小分組,在一個確認到來時一塊兒發送。因此,正是Nagle算法形成了發送方有可能形成粘包現象。
- 接收端:TCP接收到分組時,並不會馬上送至應用層處理,或者說,應用層並不必定會當即處理;實際上,TCP將收到的分組保存至接收緩存裏,而後應用程序主動從緩存裏讀收到的分組。這樣一來,若是TCP接收分組的速度大於應用程序讀分組的速度,多個包就會被存至緩存,應用程序讀時,就會讀到多個首尾相接粘到一塊兒的包。
粘包處理:若是黏在一塊兒的包是同一個總體,即贊成部分數據分割而來的,那麼就不用進行處理。若是是不一樣部分的數據粘到一塊兒,就須要進行粘包解決:
- 發送端致使:使用TCP_NODELAY選項來關閉Nagle算法。
- 接收端致使:暫無。
- 統一解決(應用層):能夠解決接收方形成的粘包問題,還能解決發送方形成的粘包問題。
解決方法就是循環處理:應用程序在處理從緩存讀來的分組時,讀完一條數據時,就應該循環讀下一條數據,直到全部的數據都被處理;可是如何判斷每條數據的長度呢?
兩種途徑:
1)格式化數據:每條數據有固定的格式(開始符、結束符),這種方法簡單易行,但選擇開始符和結束符的時候必定要注意每條數據的內部必定不能出現開始符或結束符;
2)發送長度(推薦):發送每條數據的時候,將數據的長度一併發送,好比能夠選擇每條數據的前4位是數據的長度,應用層處理時能夠根據長度來判斷每條數據的開始和結束。
UDP丟包現象:丟包現象即便用UDP發送時,因爲不可靠鏈接方式,收到各類因素影響,數據包可能會在接受過程當中丟失一部分,從而致使數據不完整。
UDP丟包緣由:
- 發送端:發送的包太大致使send方法沒法正常切割爲小包致使丟包、發送的包太大超過緩存設置也會出現對包、發送頻率太快致使接收端未接受或溢出緩衝區而丟包。
- 接收端:處理時間過長致使丟包。
- 其餘:網絡等問題。
UDP丟包處理:
- UDP的缺陷在於丟包和亂序問題,通常視狀況進行處理,而發送的時候也須要注意上述致使丟包的問題。
8、HTTP協議
一、介紹
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲普遍的一種網絡協議。全部的萬維網WWW(World Wide Web)文件都必須遵照這個標準。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。1960年美國人Ted Nelson構思了一種經過計算機處理文本信息的方法,並稱之爲超文本(hypertext),這成爲了HTTP超文本傳輸協議標準架構的發展根基。
HTTP是一個基於TCP/IP通訊協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。HTTP是一個屬於應用層的面向對象的協議,因爲其簡捷、快速的方式,適用於分佈式超媒體信息系統。它於1990年提出,通過幾年的使用與發展,獲得不斷地完善和擴展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規範化工做正在進行之中,並且HTTP-NG(Next Generation of HTTP)的建議已經提出。
HTTP協議工做於客戶端-服務端架構爲上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。
二、HTTP特色
HTTP是一個客戶端和服務器端請求和應答的標準,一般,由HTTP客戶端發起一個請求,創建一個到服務器指定端口(默認是80端口)的TCP鏈接。HTTP服務器則在那個端口監聽客戶端發送過來的請求。一旦收到請求,服務器(向客戶端)發回一個狀態行。 HTTP協議的網頁 HTTP協議的網頁 HTTP使用TCP而不是UDP的緣由在於(打開)一個網頁必須傳送不少數據,而TCP協議提供傳輸控制,按順序組織數據,和錯誤糾正。
經過HTTP或者HTTPS協議(HTTP協議+SSL協議)請求的資源由統一資源標示符(Uniform Resource Identifiers)(或者,更準確一些,URLs)來標識。HTTP有如下特色:
三、HTTP的URL地址
URL是一種特殊類型的URI,包含了用於查找某個資源的足夠的信息,URL,全稱是UniformResourceLocator, 中文叫統一資源定位符,是互聯網上用來標識某一處資源的地址。如下面這個URL爲例,介紹下普通URL的各部分組成:
http://www.cnblogs.com:8080/fzz9/index.jsp?id=30303&page=2#name
四、HTTP請求之request
客戶端經過HTTP協議進行請求時遵循必定的格式,請看下面的請求報文格式(由請求行、請求頭、空行、請求體組成):
而各部分組成以下所示:
而請求主要分爲post提交方法和get提交方法,每種選擇各有優缺點,此處再也不贅述。目前大多數網站多采用post提交。
五、Http響應之response
在客戶端發送請求後服務端進行響應,將信息發送給客戶端,以實現功能服務,報文格式以下(包含狀態行、響應頭、空行、消息體):
響應組成此處也再也不贅述,值得注意的是狀態碼,它以清晰明確的數字告訴客戶端本次請求的處理結果。 常見的狀態碼有:
9、Socket編程簡述
Socket的英文原義是「孔」或「插座」。網絡上的兩個程序經過一個雙向的通訊鏈接實現數據的交換,這個鏈接的一端稱爲一個socket。
創建網絡通訊鏈接至少要一對端口號(socket)。socket本質是編程接口(API),對TCP/IP的封裝,TCP/IP也要提供可供程序員作網絡開發所用的接口,這就是Socket編程接口。
HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通訊的能力。
網絡層的ip地址能夠惟一標識網絡中的主機,而傳輸層的「協議+端口」能夠惟一標識主機中的應用程序(進程)。這樣利用三元組(ip地址,協議,端口)就能夠標識網絡的進程了,網絡中的進程通訊就能夠利用這個標誌與其它進程進行交互。 使用TCP/IP協議的應用程序一般採用應用編程接口,即Socket(UNIX BSD的套接字(socket)和UNIX System V的TLI,已經被淘汰),來實現網絡進程之間的通訊。
這裏只是簡單瞭解,有興趣的可自行搜索,或參考這篇博文:http://www.javashuo.com/article/p-drqmpbyr-gs.html。
10、碎碎念
通過本文的學習,咱們已經大概瞭解了網絡到底如何改變世界,網絡協議又是多麼重要。但網絡協議的發展不止於此,且本文僅是淺顯的總結,之後會繼續補充完善,除此以外還有諸多內容須要咱們深刻學習,要想加深對網絡協議的認知,還須要咱們在運用中進行實踐總結。