什麼是協議
web
從應用的角度出發,協議可理解爲「規則」,是數據傳輸和數據的解釋的規則。 假設,A、B雙方欲傳輸文件。規定:
第一次,傳輸文件名,接收方接收到文件名,應答OK給傳輸方; 第二次,發送文件的尺寸,接收方接收到該數據再次應答一個OK;
第三次,傳輸文件內容。一樣,接收方接收數據完成後應答OK表示文件內容接收成功。
由此,不管A、B之間傳遞何種文件,都是經過三次數據傳輸來完成。A、B之間造成了一個最簡單的數據傳輸規則。雙方都按此規則發送、接收數據。A、B之間達成的這個相互遵照的規則即爲協議。
這種僅在A、B之間被遵照的協議稱之爲原始協議。當此協議被更多的人採用,不斷的增長、改進、維護、完善。最終造成一個穩定的、完整的文件傳輸協議,被普遍應用於各類文件傳輸過程當中。該協議就成爲一個標準協議。最先的ftp協議就是由此衍生而來。shell
TCP協議注重數據的傳輸。http協議着重於數據的解釋。
設計模式
傳輸層 常見協議有TCP/UDP協議。
應用層 常見的協議有HTTP協議,FTP協議。
網絡層 常見協議有IP協議、ICMP協議、IGMP協議。
網絡接口層 常見協議有ARP協議、RARP協議。瀏覽器
優缺點:
1. cs優缺點:
優勢: 1. 協議選用靈活。 2. 能夠緩存數據。
缺點: 1. 對用戶的安全構成威脅 2. 開發工做量較大,調試困難
2. bs優缺點:
優勢:1. 安全不會侵犯用戶隱私 2.開發工做量小 3. 跨平臺性好
缺點: 1. 協議選擇 必需完整支持HTTP協議 2. 不能緩存數據
緩存
對於C/S模式來講,其優勢明顯。客戶端位於目標主機上能夠保證性能,將數據緩存至客戶端本地,從而提升數據傳輸效率。且,通常來講客戶端和服務器程序由一個開發團隊創做,因此他們之間所採用的協議相對靈活。能夠在標準協議的基礎上根據需求裁剪及定製。例如,騰訊公司所採用的通訊協議,即爲ftp協議的修改剪裁版。
所以,傳統的網絡應用程序及較大型的網絡應用程序都首選C/S模式進行開發。如,知名的網絡遊戲魔獸世界。3D畫面,數據量龐大,使用C/S模式能夠提早在本地進行大量數據的緩存處理,從而提升觀感。
C/S模式的缺點也較突出。因爲客戶端和服務器都須要有一個開發團隊來完成開發。工做量將成倍提高,開發週期較長。另外,從用戶角度出發,須要將客戶端安插至用戶主機上,對用戶主機的安全性構成威脅。這也是不少用戶不肯使用C/S模式應用程序的重要緣由。安全B/S模式相比C/S模式而言,因爲它沒有獨立的客戶端,使用標準瀏覽器做爲客戶端,其工做開發量較小。只需開發服務器端便可。另外因爲其採用瀏覽器顯示數據,所以移植性很是好,不受平臺限制。如早期的偷菜遊戲,在各個平臺上均可以完美運行。
B/S模式的缺點也較明顯。因爲使用第三方瀏覽器,所以網絡應用支持受限。另外,沒有客戶端放到對方主機上,緩存數據不盡如人意,從而傳輸數據量受到限制。應用的觀感大打折扣。第三,必須與瀏覽器同樣,採用標準http協議進行通訊,協議選擇不靈活。
所以在開發過程當中,模式的選擇由上述各自的特色決定。根據實際需求選擇應用程序設計模式。服務器
TCP/IP網絡協議棧分爲應用層(Application)、傳輸層(Transport)、網絡層(Network)和鏈路層(Link)四層。以下圖所示:
網絡
兩臺計算機經過TCP/IP協議通信的過程以下所示:
傳輸到主機2後再先去除幀頭幀尾,再依次去除段首包頭,將數據還原tcp
上圖對應兩臺計算機在同一網段中的狀況,若是兩臺計算機在不一樣的網段中,那麼數據從一臺計算機到另外一臺計算機傳輸過程當中要通過一個或多個路由器,以下圖所示:
路由表的路由信息:會記錄當前路由器鏈接了那些路由器,數據包裏會封裝上目標的MAC地址
TCP協議尋路通常只發生一次,發送成功一次以後,每次不用再從新尋路,直接按照原來到達目的地的通路發送。
UDP協議每次都要從新尋路。svg
以太網的幀格式以下所示:
用類型爲0806的ARP請求探路,獲得目的地址的MAC而後再傳回來。
其中的源地址和目的地址是指網卡的硬件地址(也叫MAC地址),長度是48位,是在網卡出廠時固化的。可在shell中使用ifconfig命令查看,「HWaddr
00:15:F2:14:9E:3F」部分就是硬件地址。協議字段有三種值,分別對應IP、ARP、RARP。幀尾是CRC校驗碼。
以太網幀中的數據長度規定最小46字節,最大1500字節,ARP和RARP數據包的長度不夠46字節,要在後面補填充位。最大值1500稱爲以太網的最大傳輸單元(MTU),不一樣的網絡類型有不一樣的MTU,若是一個數據包從以太網路由到撥號鏈路上,數據包長度大於撥號鏈路的MTU,則須要對數據包進行分片(fragmentation)。ifconfig命令輸出中也有「MTU:1500」。注意,MTU這個概念指數據幀中有效載荷的最大長度,不包括幀頭長度。
在網絡通信時,源主機的應用程序知道目的主機的IP地址和端口號,殊不知道目的主機的硬件地址,而數據包首先是被網卡接收到再去處理上層協議的,若是接收到的數據包的硬件地址與本機不符,則直接丟棄。所以在通信前必須得到目的主機的硬件地址。ARP協議就起到這個做用。源主機發出ARP請求,詢問「IP地址是192.168.0.1的主機的硬件地址是多少」,並將這個請求廣播到本地網段(以太網幀首部的硬件地址填FF:FF:FF:FF:FF:FF表示廣播),目的主機接收到廣播的ARP請求,發現其中的IP地址與本機相符,則發送一個ARP應答數據包給源主機,將本身的硬件地址填寫在應答包中。
每臺主機都維護一個ARP緩存表,能夠用arp -a命令查看。緩存表中的表項有過時時間(通常爲20分鐘),若是20分鐘內沒有再次使用某個表項,則該表項失效,下次還要發ARP請求來得到目的主機的硬件地址。想想,爲何表項要有過時時間而不是一直有效?
ARP數據報的格式以下所示:
目的以太網地址和目的IP地址都是下一跳的地址,最終的目的地址封裝在網絡層的IP協議中
用類型爲0806的ARP請求廣播探路,獲得下一跳目的地址的MAC而後再傳回來。
尋路:
IP數據報的首部長度和數據長度都是可變長的,但老是4字節的整數倍。對於IPv4,4位版本字段是4。4位首部長度的數值是以4字節爲單位的,最小值爲5,也就是說首部長度最小是4x5=20字節,也就是不帶任何選項的IP首部,4位能表示的最大值是15,也就是說首部長度最大是60字節。8位TOS字段有3個位用來指定IP數據報的優先級(目前已經廢棄不用),還有4個位表示可選的服務類型(最小延遲、最大?吐量、最大可靠性、最小成本),還有一個位老是0。總長度是整個數據報(包括IP首部和IP層payload)的字節數。每傳一個IP數據報,16位的標識加1,可用於分片和從新組裝數據報。3位標誌和13位片偏移用於分片。TTL(Time to live)是這樣用的:源主機爲數據包設定一個生存時間,好比64,每過一個路由器就把該值減1,若是減到0就表示路由已經太長了仍然找不到目的主機的網絡,就丟棄該包,所以這個生存時間的單位不是秒,而是跳(hop)。協議字段指示上層協議是TCP、UDP、ICMP仍是IGMP。而後是校驗和,只校驗IP首部,數據的校驗由更高層協議負責。IPv4的IP地址長度爲32位。