1. 程式人生 > >OSI七層模型,講解tcp/ip五層涉及的網路協議,網路通訊實現,結合協議來看網路通訊流程

OSI七層模型,講解tcp/ip五層涉及的網路協議,網路通訊實現,結合協議來看網路通訊流程

當我們通過自己電腦的瀏覽器訪問京東的時候,

覽器上輸入了一個網址,但是我們都知道,網際網路連線的電腦互相通訊的是電訊號,我們的電腦是怎麼將我們輸入的網址變成了電訊號然後傳送出去了呢,並且我們傳送出去的訊息是不是應該讓京東的伺服器能夠知道,我們是在請求它的網站呢,也就是說京東是不是應該知道我傳送的訊息是什麼意思呢。是不是傳送的訊息應該有一些固定的格式呢?讓所有電腦都能識別的訊息格式,他就像英語成為世界上所有人通訊的統一標準一樣,如果把計算機看成分佈於世界各地的人,那麼連線兩臺計算機之間的internet實際上就是一系列統一的標準,這些標準稱之為網際網路協議,網際網路的本質就是一系列的協議,總稱為‘網際網路協議’(Internet Protocol Suite)。

網際網路協議的功能:定義計算機如何接入internet,以及接入internet的計算機通訊的標準。

先看一下網路通訊的整個流程,下面是圖解,關於網路通訊流程的大致介紹

一.osi七層協議

網際網路協議按照功能不同分為osi七層或tcp/ip五層或tcp/ip四層

下面這些協議簡單知道一些常用的就行。

各層的功能簡述:
    【1】物理層:主要定義物理裝置標準,如網線的介面型別、光纖的介面型別、各種傳輸介質的傳輸速率等。它的主要作用是傳輸位元流
(就是由1、0轉化為電流強弱來進行傳輸,到達目的地後在轉化為1、0,也就是我們常說的數模轉換與模數轉換),這一層的資料叫做位元。   【2】資料鏈路層:定義瞭如何讓格式化資料以進行傳輸,以及如何讓控制對物理介質的訪問,這一層通常還提供錯誤檢測和糾正,
以確保資料的可靠傳輸。   【3】網路層:在位於不同地理位置的網路中的兩個主機系統之間提供連線和路徑選擇,Internet的發展使得從世界各站點訪問資訊的使用者數
大大增加,而網路層正是管理這種連線的層。   【4】傳輸層:定義了一些傳輸資料的協議和埠號(WWW埠80等),如:TCP(傳輸控制協議,傳輸效率低,可靠性強,用於傳輸可靠性要求
高,資料量大的資料),UDP(使用者資料報協議,與TCP特性恰恰相反,用於傳輸可靠性要求不高,資料量小的資料,如QQ聊天資料就是通過這種方式
傳輸的), 主要是將從下層接收的資料進行分段和傳輸,到達目的地址後再進行重組,常常把這一層資料叫做段。   【5】會話層:通過傳輸層(埠號:傳輸埠與接收埠)建立資料傳輸的通路,主要在你的系統之間發起會話或者接受會話請求
(裝置之間需要互相認識可以是IP也可以是MAC或者是主機名)。   【6】表示層:可確保一個系統的應用層所傳送的資訊可以被另一個系統的應用層讀取。例如,PC程式與另一臺計算機進行通訊,
其中一臺計算機使用擴充套件二一十進位制交換碼(EBCDIC),而另一臺則使用美國資訊交換標準碼(ASCII)來表示相同的字元。如有必要,
表示層會通過使用一種通格式來實現多種資料格式之間的轉換。   【7】應用層: 是最靠近使用者的OSI層,這一層為使用者的應用程式(例如電子郵件、檔案傳輸和終端模擬)提供網路服務。 各層中涉及的協議的簡單解釋: 應用層   ·DHCP(動態主機分配協議)   · DNS (域名解析)   · FTP(File Transfer Protocol)檔案傳輸協議   · Gopher (英文原義:The Internet Gopher Protocol 中文釋義:(RFC-1436)網際Gopher協議)   · HTTP (Hypertext Transfer Protocol)超文字傳輸協議   · IMAP4 (Internet Message Access Protocol 4) 即 Internet資訊訪問協議的第4版本   · IRC (Internet Relay Chat )網路聊天協議   · NNTP (Network News Transport Protocol)RFC-977)網路新聞傳輸協議   · XMPP 可擴充套件訊息處理現場協議   · POP3 (Post Office Protocol 3)即郵局協議的第3個版本   · SIP 信令控制協議   · SMTP (Simple Mail Transfer Protocol)即簡單郵件傳輸協議   · SNMP (Simple Network Management Protocol,簡單網路管理協議)   · SSH (Secure Shell)安全外殼協議   · TELNET 遠端登入協議   · RPC (Remote Procedure Call Protocol)(RFC-1831)遠端過程呼叫協議   · RTCP (RTP Control Protocol)RTP 控制協議   · RTSP (Real Time Streaming Protocol)實時流傳輸協議   · TLS (Transport Layer Security Protocol)安全傳輸層協議   · SDP( Session Description Protocol)會話描述協議   · SOAP (Simple Object Access Protocol)簡單物件訪問協議   · GTP 通用資料傳輸平臺   · STUN (Simple Traversal of UDP over NATs,NAT 的UDP簡單穿越)是一種網路協議   · NTP (Network Time Protocol)網路校時協議 傳輸層   ·TCP(Transmission Control Protocol)傳輸控制協議   · UDP (User Datagram Protocol)使用者資料報協議   · DCCP (Datagram Congestion Control Protocol)資料報擁塞控制協議   · SCTP(STREAM CONTROL TRANSMISSION PROTOCOL)流控制傳輸協議   · RTP(Real-time Transport Protocol或簡寫RTP)實時傳送協議   · RSVP (Resource ReSer Vation Protocol)資源預留協議   · PPTP ( Point to Point Tunneling Protocol)點對點隧道協議 網路層 IP(IPv4 · IPv6) Internet Protocol(網路之間互連的協議) ARP : Address Resolution Protocol即地址解析協議,實現通過IP地址得知其實體地址。 RARP :Reverse Address Resolution Protocol 反向地址轉換協議允許區域網的物理機器從閘道器伺服器的 ARP 表或者快取上請求其 IP 地址。 ICMP :(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、
路由器之間傳遞控制訊息。 ICMPv6: IGMP :Internet 組管理協議(IGMP)是因特網協議家族中的一個組播協議,用於IP 主機向任一個直接相鄰的路由器報告他們的組成員情況。 RIP : 路由資訊協議(RIP)是一種在閘道器與主機之間交換路由選擇資訊的標準。 OSPF : (Open Shortest Path First開放式最短路徑優先). BGP :(Border Gateway Protocol )邊界閘道器協議,用來連線Internet上獨立系統的路由選擇協議 IS-IS:(Intermediate System to Intermediate System Routing Protocol)中間系統到中間系統的路由選擇協議. IPsec:“Internet 協議安全性”是一種開放標準的框架結構,通過使用加密的安全服務以確保在 Internet 協議 (IP)
網路上進行保密而安全的通訊。 資料鏈路層   802.11 · 802.16 · Wi-Fi · WiMAX · ATM · DTM · 令牌環 · 乙太網 · FDDI · 幀中繼 · GPRS · EVDO · HSPA ·
HDLC · PPP · L2TP · ISDN 物理層   乙太網物理層 · 調變解調器 · PLC · SONET/SDH · G.709 · 光導纖維 · 同軸電纜 · 雙絞線

 我們現在只需要瞭解五層的協議就好了,ok嗎?我們寫的程式屬於哪一層呢,屬於應用層。

    每層執行常見物理裝置

二.tcp/ip五層模型講解

我們將應用層,表示層,會話層並作應用層,從tcp/ip五層協議的角度來闡述每層的由來與功能,搞清楚了每層的主要協議

    就理解了整個網際網路通訊的原理。

    首先,使用者感知到的只是最上面一層應用層,自上而下每層都依賴於下一層,所以我們從最下一層開始切入,比較好理解

    每層都執行特定的協議,越往上越靠近使用者,越往下越靠近硬體

2.1 物理層

    物理層由來:上面提到,孤立的計算機之間要想一起玩,就必須接入internet,言外之意就是計算機之間必須完成組網

  

物理層功能:主要是基於電器特性發送高低電壓(電訊號),高電壓對應數字1,低電壓對應數字0

2.2 資料鏈路層

資料鏈路層由來:單純的電訊號0和1沒有任何意義,必須規定電訊號多少位一組,每組什麼意思

    資料鏈路層的功能:定義了電訊號的分組方式

    乙太網協議:

    早期的時候各個公司都有自己的分組方式,後來形成了統一的標準,即乙太網協議ethernet

    ethernet規定

  • 一組電訊號構成一個數據包,叫做‘幀’
  • 每一資料幀分成:報頭head和資料data兩部分
  • head data

    head包含:(固定18個位元組)

    • 傳送者/源地址,6個位元組
    • 接收者/目標地址,6個位元組
    • 資料型別,6個位元組

      data包含:(最短46位元組,最長1500位元組)

    • 資料包的具體內容

        head長度+data長度=最短64位元組,最長1518位元組,超過最大限制就分片傳送

      mac地址:

        head中包含的源和目標地址由來:ethernet規定接入internet的裝置都必須具備網絡卡,傳送端和接收端的地址便是指網絡卡的地址,即mac地址

        mac地址:每塊網絡卡出廠時都被燒製上一個世界唯一的mac地址,長度為48位2進位制,通常由12位16進位制數表示(前六位是廠商編號,後六位是流水線號)

          

廣播:

    有了mac地址,同一網路內的兩臺主機就可以通訊了(一臺主機通過arp協議獲取另外一臺主機的mac地址)

    ethernet(乙太網)採用最原始的方式,廣播的方式進行通訊,即計算機通訊基本靠吼

2.3 網路層

    網路層由來:有了ethernet、mac地址、廣播的傳送方式,世界上的計算機就可以彼此通訊了,問題是世界範圍的網際網路是由

    一個個彼此隔離的小的區域網組成的,那麼如果所有的通訊都採用乙太網的廣播方式,那麼一臺機器傳送的包全世界都會收到,

    這就不僅僅是效率低的問題了,這會是一種災難

上圖結論:必須找出一種方法來區分哪些計算機屬於同一廣播域,哪些不是。如果是就採用廣播的方式傳送,如果不是,

    就採用路由的方式(向不同廣播域/子網分發資料包),mac地址是無法區分的,它只跟廠商有關

    網路層功能:引入一套新的地址用來區分不同的廣播域/子網,這套地址即網路地址

  IP協議:

  • 規定網路地址的協議叫ip協議,它定義的地址稱之為ip地址,廣泛採用的v4版本即ipv4,它規定網路地址由32位2進製表示
  • 範圍0.0.0.0-255.255.255.255 (4個點分十進位制,也就是4個8位二進位制數)
  • 一個ip地址通常寫成四段十進位制數,例:172.16.10.1

  ipv6,通過上面可以看出,ip緊缺,所以為了滿足更多ip需要,出現了ipv6協議:6個冒號分割的16進位制數表示,這個應該是將來的趨勢,但是ipv4還是用的最多的,因為我們一般一個公司就一個對外的IP地址,我們所有的機器上網都走這一個IP出口。

每個乙太網裝置在出廠時都有一個唯一的MAC地址,為什麼還需要為每臺主機再分配一個IP地址?每臺主機都分配唯一的IP地址,為什麼還要在網路裝置(如網絡卡,集線器,路由器等)生產時內嵌一個唯一的MAC地址呢?

唯一的MAC地址

    MAC(Media Access Control或者Medium Access Control)地址,意譯為媒體訪問控制,或稱為實體地址、硬體地址,用來定義網路裝置的位置。在OSI模型中,第三層網路層負責 IP地址,第二層資料鏈路層則負責 MAC地址。因此一個主機會有一個MAC地址,而每個網路位置會有一個專屬於它的IP地址。 MAC地址是網絡卡決定的,是固定的。

    MAC地址,長度是48位元(6位元組),由16進位制的數字組成,分為前24位和後24位:

    前24位叫做組織唯一標誌符(Organizationally Unique Identifier,即    OUI),是由IEEE的註冊管理機構給不同廠家分配的程式碼,區分了不同的廠家。

    後24位是由廠家自己分配的,稱為擴充套件識別符號。同一個廠家生產的網絡卡中MAC地址後24位是不同的。

    每個乙太網裝置在出廠時都有一個唯一的MAC地址。

一個區域網內唯一的IP地址

    IP地址是指網際網路協議地址(英語:Internet Protocol Address,又譯為網際協議地址),是IP Address的縮寫。IP地址是IP協議提供的一種統一的地址格式,它為網際網路上的每一個網路和每一臺主機分配一個邏輯地址,以此來遮蔽實體地址的差異。

    IP地址被用來給Internet上的電腦一個編號。日常見到的情況是每臺聯網的PC上都需要有IP地址,才能正常通訊。

    我們可以把“個人電腦”比作“一臺電話”,那麼“IP地址”就相當於“電話號碼”,而Internet中的路由器,就相當於電信局的“程控式交換機”。

    IP地址是一個32位的二進位制數,通常被分割為4個“8位二進位制數”(也就是4個位元組)。IP地址通常用“點分十進位制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之間的十進位制整數。例:點分十進IP地址(100.4.5.6),實際上是32位二進位制數(01100100.00000100.00000101.00000110)。

每臺主機都分配唯一的IP地址,為什麼還要一個唯一的MAC地址呢


    建立osi七層模型的主要目的是為解決異種網路互連時所遇到的相容性問題。它的最大優點是將服務、介面和協議這三個概念明確地區分開來:服務說明某一層為上一層提供一些什麼功能,介面說明上一層如何使用下層的服務,而協議涉及如何實現本層的服務;這樣各層之間具有很強的獨立性,互連網路中各實體採用什麼樣的協議是沒有限制的,只要向上提供相同的服務並且不改變相鄰層的介面就可以了。網路七層的劃分也是為了使網路的不同功能模組(不同層次)分擔起不同的職責,從而帶來如下好處:

    減輕問題的複雜程度,一旦網路發生故障,可迅速定位故障所處層次,便於查詢和糾錯;在各層分別定義標準介面,使具備相同對等層的不同網路裝置能實現互操作,各層之間則相對獨立,一種高層協議可放在多種低層協議上執行;能有效刺激網路技術革新,因為每次更新都可以在小範圍內進行,不需對整個網路動大手術。

從上可知:

    MAC用於第二層傳輸,IP用於第三層傳輸。分為兩層,用兩個地址,一個原因就是為了相容性,能讓異構網互聯,即讓兩個不同架構之間的網路也能通訊,傳輸過程中Mac會變,IP不變。

    IP地址的作用很重要的一部分就是遮蔽底下鏈路層的差異,因為它是一個邏輯地址,所以可以適應於多種鏈路;乙太網這種鏈路層組網方式中,要通過mac地址來通訊,其實ip協議完全可以運行於串列埠(通常執行slip或ppp等鏈路層協議)等其他形式的鏈路之上,這時並不需要一個mac地址;在區域網中兩臺電腦之間傳輸資料包用MAC地址即可識別,而通過路由器訪問網際網路 ,傳輸資料包中的MAC地址就轉成路由器的MAC地址。此時就要靠IP來識別,當我要換了一臺路由器時候,只要我的IP地址不變,要跟我們傳輸資料的物件只要記住IP地址即可與我們通訊而不需記住我們的mac地址。

IP地址和mac地址

ip地址分成兩部分

  • 網路部分:標識子網
  • 主機部分:標識主機

  注意:單純的ip地址段只是標識了ip地址的種類,從網路部分或主機部分都無法辨識一個ip所處的子網

  例:172.16.10.1與172.16.10.2並不能確定二者處於同一子網

  子網掩碼

    所謂”子網掩碼”,就是表示子網路特徵的一個引數。它在形式上等同於IP地址,也是一個32位二進位制數字,它的網路部分全部為1,主機部分全部為0。比如,IP地址172.16.10.1,如果已知網路部分是前24位,主機部分是後8位,那麼子網路掩碼就是11111111.11111111.11111111.00000000,寫成十進位制就是255.255.255.0。

 

  知道”子網掩碼”,我們就能判斷,任意兩個IP地址是否處在同一個子網路。方法是將兩個IP地址與子網掩碼分別進行AND運算(兩個數位都為1,運算結果為1,否則為0),然後比較結果是否相同,如果是的話,就表明它們在同一個子網路中,否則就不是。

 

  比如,已知IP地址172.16.10.1和172.16.10.2的子網掩碼都是255.255.255.0,請問它們是否在同一個子網路?兩者與子網掩碼分別進行AND運算,

  172.16.10.1:10101100.00010000.00001010.000000001

  255255.255.255.0:11111111.11111111.11111111.00000000

  AND運算得網路地址結果:10101100.00010000.00001010.000000001->172.16.10.0

 

  172.16.10.2:10101100.00010000.00001010.000000010

  255.255.255.0:11111111.11111111.11111111.00000000

  AND運算得網路地址結果:10101100.00010000.00001010.000000001->172.16.10.0

  結果都是172.16.10.0,因此它們在同一個子網路。

  ip地址與子網掩碼 按位與 得到網段地址

總結一下,IP協議的作用主要有兩個,一個是為每一臺計算機分配IP地址,另一個是確定哪些地址在同一個子網路。

  ip資料包

  ip資料包也分為head和data部分,無須為ip包定義單獨的欄位,直接放入乙太網包的data部分

 

  head:長度為20到60位元組

  data:最長為65,515位元組。

  而乙太網資料包的”資料”部分,最長只有1500位元組。因此,如果IP資料包超過了1500位元組,它就需要分割成幾個乙太網資料包,分開發送了。

乙太網頭 ip 頭   ip資料

ARP協議

    arp協議由來:計算機通訊基本靠吼,即廣播的方式,所有上層的包到最後都要封裝上乙太網頭,然後通過乙太網協議傳送,在談及乙太網協議時候,我門瞭解到

    通訊是基於mac的廣播方式實現,計算機在發包時,獲取自身的mac是容易的,如何獲取目標主機的mac,就需要通過arp協議

    arp協議功能:廣播的方式傳送資料包,獲取目標主機的mac地址

 

地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取實體地址的一個TCP/IP協議。
  主機發送資訊時將包含目標IP地址的ARP請求廣播到網路上的所有主機,並接收返回訊息,以此確定目標的實體地址。
  收到返回訊息後將該IP地址和實體地址存入本機ARP快取中並保留一定時間,下次請求時直接查詢ARP快取以節約資源。
  地址解析協議是建立在網路中各個主機互相信任的基礎上的,網路上的主機可以自主傳送ARP應答訊息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP快取;由此攻擊者就可以向某一主機發送偽ARP應答報文,使其傳送的資訊無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙。ARP命令可用於查詢本機ARP快取中IP地址和MAC地址的對應關係、新增或刪除靜態對應關係等。相關協議有RARP、代理ARP。NDP用於在IPv6中代替地址解析協議。 

協議工作方式:每臺主機ip都是已知的(我只知道我的區域網ip地址,要給一個非同一網路的我不知道ip地址的電腦發訊息,怎麼辦:NET穿透)

    例如:主機172.16.10.10/24訪問172.16.10.11/24

一:首先通過ip地址和子網掩碼區分出自己所處的子網

場景 資料包地址
同一子網 目標主機mac,目標主機ip
不同子網 閘道器mac,目標主機ip

二:分析172.16.10.10/24與172.16.10.11/24處於同一網路(如果不是同一網路,那麼下表中目標ip為172.16.10.1,通過arp獲取的是閘道器的mac)

 

源mac 目標mac 源ip 目標ip 資料部分
傳送端主機 傳送端mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 資料

 

 

 

 

三:這個包會以廣播的方式在傳送端所處的子網內傳輸,所有主機接收後拆開包,發現目標ip為自己的,就響應,返回自己的mac

2.4 傳輸層

    傳輸層的由來:網路層的ip幫我們區分子網,乙太網層的mac幫我們找到主機嗎,但是隻找到主機有用嗎,是不是程式之間進行的溝通啊像QQ、瀏覽器和京東伺服器,然後大家使用的都是應用程式,你的電腦上可能同時開啟qq,暴風影音,等多個應用程式,

    那麼我們通過ip和mac找到了一臺特定的主機,如何標識這臺主機上的應用程式,答案就是埠,埠即應用程式與網絡卡關聯的編號。

    傳輸層功能:建立埠到埠的通訊(端對端通訊)

    補充:埠範圍0-65535,0-1023為系統佔用埠

127.0.0.1就是你本機程式之間進行通訊的地址,就是自己玩自己,不和別人玩,這叫做本機的迴環地址,我們測試的時候自己模擬客戶端和服務端。

根據用途和安全性級別的不同,IP地址還可以大致分為兩類:公共地址和私有地址。公用地址在Internet中使用,可以在Internet中隨意訪問。私有地址只能在內部網路中使用,只有通過代理伺服器才能與Internet通訊。 

一個機構網路要連入Internet,必須申請公用IP地址。但是考慮到網路安全和內部實驗等特殊情況,在IP地址中專門保留了三個區域作為私有地址,其地址範圍如下: 

網路類別

ip地址範圍

網路數

a類網  10.0.0.0~10.255.255.255   1

b類網  172.16.0.0~172.31.255.255   16

c類網  192.168.0.0~192.168.255.255   255


    使用保留地址的網路只能在內部進行通訊,而不能與其他網路互連。因為本網路中的保留地址同樣也可能被其它網路使用,如果進行網路互連,那麼尋找路由時就會因為地址的不唯一而出現問題。但是這些使用保留地址的網路可以通過將本網路內的保留地址翻譯轉換成公共地址的方式實現與外部網路的互連。這也是保證網路安全的重要方法之一。 

特殊IP地址(保留IP地址)介紹 

    就像我們每個人都有一個身份證號碼一樣,網路裡的每臺電腦(更確切地說,是每一個裝置的網路介面)都有一個IP地址用於標示自己。我們可能都知道這些地址由四個位元組組成,用點分十進位制表示以及它們的A,B,C分類等,然而,在總數大約為四十多億個可用IP 地址裡,你知道下面一些常見的有特殊意義地址嗎?我們一起來看看吧: 

一、0.0.0.0 

    嚴格說來,0.0.0.0已經不是一個真正意義上的IP地址了。它表示的是這樣一個集合:所有不清楚的主機和目的網路。這裡的“不清楚”是指在本機的路由表裡沒有特定條目指明如何到達。對本機來說,它就是一個“收容所”,所有不認識的“三無”人員,一 律送進去。如果你在網路設定中設定了預設閘道器,那麼Windows系統會自動產生一個目的地址為0.0.0.0的預設路由。 

二、255.255.255.255 

    限制廣播地址。對本機來說,這個地址指本網段內(同一廣播域)的所有主機。如果翻譯成人類的語言,應該是這樣:“這個房間裡的所有人都注意了!”這個地址不能被路由器轉發。 

三、127.0.0.1 

    本機地址,主要用於測試。用漢語表示,就是“我自己”。在Windows系統中,這個地址有一個別名“Localhost”。定址這樣一個地址,是不能把它發到網路介面的。除非出錯,否則在傳輸介質上永遠不應該出現目的地址為“127.0.0.1”的 資料包。 

四、224.0.0.1 

    組播地址,注意它和廣播的區別。從224.0.0.0到239.255.255.255都是這樣的地址。224.0.0.1特指所有主機,224.0.0.2特指所有路由器。這樣的地址多用於一些特定的程式以及多媒體程式。如果你的主機開啟了IRDP (Internet路由發現協議,使用組播功能)功能,那麼你的主機路由表中應該有這樣一條路由。 

五、169.254.x.x 

    如果你的主機使用了DHCP功能自動獲得一個IP地址,那麼當你的DHCP伺服器發生故障,或響應時間太長而超出了一個系統規定的時間,Wingdows系統會為你分配這樣一個地址。如果你發現你的主機IP地址是一個諸如此類的地址,很不幸,十有八九 是你的網路不能正常運行了。 

六、10.x.x.x、172.16。x。x~172.31。x。x、192.168。x。x 

    私有地址,這些地址被大量用於企業內部網路中。一些寬頻路由器,也往往使用192.168.1.1作為預設地址。私有網路由於不與外部互連,因而可能使用隨意的IP地址。保留這樣的地址供其使用是為了避免以後接入公網時引起地址混亂。使用私有地址的私 有網路在接入Internet時,要使用地址翻譯(NAT),將私有地址翻譯成公用合法地址。在Internet上,這類地址是不能出現的。 

    對一臺網路上的主機來說,它可以正常接收的合法目的網路地址有三種:本機的IP地址、廣播地址以及組播地址。

 

 

tcp協議:(TCP把連線作為最基本的物件,每一條TCP連線都有兩個端點,這種端點我們叫作套接字(socket),它的定義為埠號拼接到IP地址即構成了套接字,例如,若IP地址為192.3.4.16 而埠號為80,那麼得到的套接字為192.3.4.16:80。)

  當應用程式希望通過 TCP 與另一個應用程式通訊時,它會發送一個通訊請求。這個請求必須被送到一個確切的地址。在雙方“握手”之後,TCP 將在兩個應用程式之間建立一個全雙工 (full-duplex,雙方都可以收發訊息) 的通訊。

  這個全雙工的通訊將佔用兩個計算機之間的通訊線路,直到它被一方或雙方關閉為止。

  它是可靠傳輸,TCP資料包沒有長度限制,理論上可以無限長,但是為了保證網路的效率,通常TCP資料包的長度不會超過IP資料包的長度,以確保單個TCP資料包不必再分割。

乙太網頭 ip 頭               tcp頭               資料                                                    

 

  udp協議:不可靠傳輸,”報頭”部分一共只有8個位元組,總長度不超過65,535位元組,正好放進一個IP資料包。

乙太網頭 ip頭                      udp頭                            資料                                           

 

 

TCP---傳輸控制協議,提供的是面向連線、可靠的位元組流服務。當客戶和伺服器彼此交換資料前,必須先在雙方之間建立一個TCP連線,之後才能傳輸資料。TCP提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。 
UDP---使用者資料報協議,是一個簡單的面向資料報的運輸層協議。UDP不提供可靠性,它只是把應用程式傳給IP層的資料報傳送出去,但是並不能保證它們能到達目的地。由於UDP在傳輸資料報前不用在客戶和伺服器之間建立一個連線,且沒有超時重發等機制,故而傳輸速度很快

現在Internet上流行的協議是TCP/IP協議,該協議中對低於1024的埠都有確切的定義,他們對應著Internet上一些常見的服務。這些常見的服務可以分為使用TCP埠(面向連線)和使用UDP埠(面向無連線)兩種。 
說到TCP和UDP,首先要明白“連線”和“無連線”的含義,他們的關係可以用一個形象地比喻來說明,就是打電話和寫信。兩個人如果要通話,首先要建立連線——即打電話時的撥號,等待響應後——即接聽電話後,才能相互傳遞資訊,最後還要斷開連線——即掛電話。寫信就比較簡單了,填寫好收信人的地址後將信投入郵筒,收信人就可以收到了。從這個分析可以看出,建立連線可以在需要痛心地雙方建立一個傳遞資訊的通道,在傳送方傳送請求連線資訊接收方響應後,由於是在接受方響應後才開始傳遞資訊,而且是在一個通道中傳送,因此接受方能比較完整地收到傳送方發出的資訊,即資訊傳遞的可靠性比較高。但也正因為需要建立連線,使資源開銷加大(在建立連線前必須等待接受方響應,傳輸資訊過程中必須確認資訊是否傳到及斷開連線時發出相應的訊號等),獨佔一個通道,在斷開連線錢不能建立另一個連線,即兩人在通話過程中第三方不能打入電話。而無連線是一開始就傳送資訊(嚴格說來,這是沒有開始、結束的),只是一次性的傳遞,是先不需要接受方的響應,因而在一定程度上也無法保證資訊傳遞的可靠性了,就像寫信一樣,我們只是將信寄出去,卻不能保證收信人一定可以收到。 
TCP是面向連線的,有比較高的可靠性, 一些要求比較高的服務一般使用這個協議,如FTP、Telnet、SMTP、HTTP、POP3等。
而UDP是面向無連線的,使用這個協議的常見服務有DNS、SNMP、QQ等。對於QQ必須另外說明一下,QQ2003以前是隻使用UDP協議的,其伺服器使用8000埠,偵聽是否有資訊傳來,客戶端使用4000埠,向外傳送資訊(這也就不難理解在一般的顯IP的QQ版本中顯示好友的IP地址資訊中埠常為4000或其後續埠的原因了),即QQ程式既接受服務又提供服務,在以後的QQ版本中也支援使用TCP協議了。

tcp報文

TCP報文首部

1 源埠和目的埠,各佔2個位元組,分別寫入源埠和目的埠;
2 序號,佔4個位元組,TCP連線中傳送的位元組流中的每個位元組都按順序編號。例如,一段報文的序號欄位值是 301 ,而攜帶的資料共有100欄位,顯然下一個報文段(如果還有的話)的資料序號應該從401開始;
3 確認號,佔4個位元組,是期望收到對方下一個報文的第一個資料位元組的序號。例如,B收到了A傳送過來的報文,其序列號欄位是501,而資料長度是200位元組,這表明B正確的收到了A傳送的到序號700為止的資料。因此,B期望收到A的下一個資料序號是701,於是B在傳送給A的確認報文段中把確認號置為701;
4 資料偏移,佔4位,它指出TCP報文的資料距離TCP報文段的起始處有多遠;
5 保留,佔6位,保留今後使用,但目前應都位0;
6 緊急URG,當URG=1,表明緊急指標欄位有效。告訴系統此報文段中有緊急資料;
7 確認ACK,僅當ACK=1時,確認號欄位才有效。TCP規定,在連線建立後所有報文的傳輸都必須把ACK置1;
8 推送PSH,當兩個應用程序進行互動式通訊時,有時在一端的應用程序希望在鍵入一個命令後立即就能收到對方的響應,這時候就將PSH=1;
9 復位RST,當RST=1,表明TCP連線中出現嚴重差錯,必須釋放連線,然後再重新建立連線;
10 同步SYN,在連線建立時用來同步序號。當SYN=1,ACK=0,表明是連線請求報文,若同意連線,則響應報文中應該使SYN=1,ACK=1;
11 終止FIN,用來釋放連線。當FIN=1,表明此報文的傳送方的資料已經發送完畢,並且要求釋放;
12 視窗,佔2位元組,指的是通知接收方,傳送本報文你需要有多大的空間來接受;
13 檢驗和,佔2位元組,校驗首部和資料這兩部分;
14 緊急指標,佔2位元組,指出本報文段中的緊急資料的位元組數;
15 選項,長度可變,定義一些其他的可選的引數。

tcp三次握手和四次揮手

    我們知道網路層,可以實現兩個主機之間的通訊。但是這並不具體,因為,真正進行通訊的實體是在主機中的程序,是一個主機中的一個程序與另外一個主機中的一個程序在交換資料。IP協議雖然能把資料報文送到目的主機,但是並沒有交付給主機的具體應用程序。而端到端的通訊才應該是應用程序之間的通訊。

    UDP,在傳送資料前不需要先建立連線,遠地的主機在收到UDP報文後也不需要給出任何確認。雖然UDP不提供可靠交付,但是正是因為這樣,省去和很多的開銷,使得它的速度比較快,比如一些對實時性要求較高的服務,就常常使用的是UDP。對應的應用層的協議主要有 DNS,TFTP,DHCP,SNMP,NFS 等。

    TCP,提供面向連線的服務,在傳送資料之前必須先建立連線,資料傳送完成後要釋放連線。因此TCP是一種可靠的的運輸服務,但是正因為這樣,不可避免的增加了許多的開銷,比如確認,流量控制等。對應的應用層的協議主要有 SMTP,TELNET,HTTP,FTP 等。

常用的埠號:

應用程式 FTP TFTP TELNET SMTP DNS HTTP SSH MYSQL
熟知埠 21,20 69 23 25 53 80 22 3306
傳輸層協議 TCP UDP TCP TCP UDP TCP  

  三次握手:

  1. TCP伺服器程序先建立傳輸控制塊TCB,時刻準備接受客戶程序的連線請求,此時伺服器就進入了LISTEN(監聽)狀態;
  2. TCP客戶程序也是先建立傳輸控制塊TCB,然後向伺服器發出連線請求報文,這是報文首部中的同部位SYN=1,同時選擇一個初始序列號 seq=x ,此時,TCP客戶端程序進入了 SYN-SENT(同步已傳送狀態)狀態。TCP規定,SYN報文段(SYN=1的報文段)不能攜帶資料,但需要消耗掉一個序號。
  3. TCP伺服器收到請求報文後,如果同意連線,則發出確認報文。確認報文中應該 ACK=1,SYN=1,確認號是ack=x+1,同時也要為自己初始化一個序列號 seq=y,此時,TCP伺服器程序進入了SYN-RCVD(同步收到)狀態。這個報文也不能攜帶資料,但是同樣要消耗一個序號。
  4. TCP客戶程序收到確認後,還要向伺服器給出確認。確認報文的ACK=1,ack=y+1,自己的序列號seq=x+1,此時,TCP連線建立,客戶端進入ESTABLISHED(已建立連線)狀態。TCP規定,ACK報文段可以攜帶資料,但是如果不攜帶資料則不消耗序號。
  5. 當伺服器收到客戶端的確認後也進入ESTABLISHED狀態,此後雙方就可以開始通訊了。 

  為什麼TCP客戶端最後還要傳送一次確認呢?

一句話,主要防止已經失效的連線請求報文突然又傳送到了伺服器,從而產生錯誤。

如果使用的是兩次握手建立連線,假設有這樣一種場景,客戶端傳送了第一個請求連線並且沒有丟失,只是因為在網路結點中滯留的時間太長了,由於TCP的客戶端遲遲沒有收到確認報文,以為伺服器沒有收到,此時重新向伺服器傳送這條報文,此後客戶端和伺服器經過兩次握手完成連線,傳輸資料,然後關閉連線。此時此前滯留的那一次請求連線,網路通暢了到達了伺服器,這個報文字該是失效的,但是,兩次握手的機制將會讓客戶端和伺服器再次建立連線,這將導致不必要的錯誤和資源的浪費。

如果採用的是三次握手,就算是那一次失效的報文傳送過來了,服務端接受到了那條失效報文並且回覆了確認報文,但是客戶端不會再次發出確認。由於伺服器收不到確認,就知道客戶端並沒有請求連線。

四次揮手:

  資料傳輸完畢後,雙方都可釋放連線。最開始的時候,客戶端和伺服器都是處於ESTABLISHED狀態,然後客戶端主動關閉,伺服器被動關閉。服務端也可以主動關閉,一個流程。

  1. 客戶端程序發出連線釋放報文,並且停止傳送資料。釋放資料報文首部,FIN=1,其序列號為seq=u(等於前面已經傳送過來的資料的最後一個位元組的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即使不攜帶資料,也要消耗一個序號。
  2. 伺服器收到連線釋放報文,發出確認報文,ACK=1,ack=u+1,並且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP伺服器通知高層的應用程序,客戶端向伺服器的方向就釋放了,這時候處於半關閉狀態,即客戶端已經沒有資料要傳送了,但是伺服器若傳送資料,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。
  3. 客戶端收到伺服器的確認請求後,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待伺服器傳送連線釋放報文(在這之前還需要接受伺服器傳送的最後的資料)。
  4. 伺服器將最後的資料傳送完畢後,就向客戶端傳送連線釋放報文,FIN=1,ack=u+1,由於在半關閉狀態,伺服器很可能又傳送了一些資料,假定此時的序列號為seq=w,此時,伺服器就進入了LAST-ACK(最後確認)狀態,等待客戶端的確認。
  5. 客戶端收到伺服器的連線釋放報文後,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連線還沒有釋放,必須經過2∗MSL(最長報文段壽命)的時間後,當客戶端撤銷相應的TCB後,才進入CLOSED狀態。
  6. 伺服器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB後,就結束了這次的TCP連線。可以看到,伺服器結束TCP連線的時間要比客戶端早一些。

  為什麼客戶端最後還要等待2MSL?

MSL(Maximum Segment Lifetime),TCP允許不同的實現可以設定不同的MSL值。

第一,保證客戶端傳送的最後一個ACK報文能夠到達伺服器,因為這個ACK報文可能丟失,站在伺服器的角度看來,我已經發送了FIN+ACK報文請求斷開了,客戶端還沒有給我回應,應該是我傳送的請求斷開報文它沒有收到,於是伺服器又會重新發送一次,而客戶端就能在這個2MSL時間段內收到這個重傳的報文,接著給出迴應報文,並且會重啟2MSL計時器。

第二,防止類似與“三次握手”中提到了的“已經失效的連線請求報文段”出現在本連線中。客戶端傳送完最後一個確認報文後,在這個2MSL時間中,就可以使本連線持續的時間內所產生的所有報文段都從網路中消失。這樣新的連線中不會出現舊連線的請求報文。

為什麼建立連線是三次握手,關閉連線確是四次揮手呢?

建立連線的時候, 伺服器在LISTEN狀態下,收到建立連線請求的SYN報文後,把ACK和SYN放在一個報文裡傳送給客戶端。 
而關閉連線時,伺服器收到對方的FIN報文時,僅僅表示對方不再發送資料了但是還能接收資料,而自己也未必全部資料都發送給對方了,所以己方可以立即關閉,也可以傳送一些資料給對方後,再發送FIN報文給對方來表示同意現在關閉連線,因此,己方ACK和FIN一般都會分開發送,從而導致多了一次。

如果已經建立了連線,但是客戶端突然出現故障了怎麼辦?

    TCP還設有一個保活計時器,顯然,客戶端如果出現故障,伺服器不能一直等下去,白白浪費資源。伺服器每收到一次客戶端的請求後都會重新復位這個計時器,時間通常是設定為2小時,若兩小時還沒有收到客戶端的任何資料,伺服器就會發送一個探測報文段,以後每隔75分鐘傳送一次。若一連發送10個探測報文仍然沒反應,伺服器就認為客戶端出了故障,接著就關閉連線。 

三次握手:
TCP是因特網中的傳輸層協議,使用三次握手協議建立連線。當主動方發出SYN連線請求後,等待對方回答SYN+ACK[1],並最終對對方的 SYN 執行 ACK 確認。這種建立連線的方法可以防止產生錯誤的連線。[1] 
TCP三次握手的過程如下:
客戶端傳送SYN(SEQ=x)報文給伺服器端,進入SYN_SEND狀態。
伺服器端收到SYN報文,迴應一個SYN (SEQ=y)ACK(ACK=x+1)報文,進入SYN_RECV狀態。
客戶端收到伺服器端的SYN報文,迴應一個ACK(ACK=y+1)報文,進入Established狀態。
三次握手完成,TCP客戶端和伺服器端成功地建立連線,可以開始傳輸資料了。

四次揮手:
建立一個連線需要三次握手,而終止一個連線要經過四次握手,這是由TCP的半關閉(half-close)造成的。
(1) 某個應用程序首先呼叫close,稱該端執行“主動關閉”(active close)。該端的TCP於是傳送一個FIN分節,表示資料傳送完畢。
(2) 接收到這個FIN的對端執行 “被動關閉”(passive close),這個FIN由TCP確認。
注意:FIN的接收也作為一個檔案結束符(end-of-file)傳遞給接收端應用程序,放在已排隊等候該應用程序接收的任何其他資料之後,因為,FIN的接收意味著接收端應用程序在相應連線上再無額外資料可接收。
(3) 一段時間後,接收到這個檔案結束符的應用程序將呼叫close關閉它的套接字。這導致它的TCP也傳送一個FIN。
(4) 接收這個最終FIN的原發送端TCP(即執行主動關閉的那一端)確認這個FIN。[1] 
既然每個方向都需要一個FIN和一個ACK,因此通常需要4個分節。
注意:
(1) “通常”是指,某些情況下,步驟1的FIN隨資料一起傳送,另外,步驟2和步驟3傳送的分節都出自執行被動關閉那一端,有可能被合併成一個分節。[2] 
(2) 在步驟2與步驟3之間,從執行被動關閉一端到執行主動關閉一端流動資料是可能的,這稱為“半關閉”(half-close)。
(3) 當一個Unix程序無論自願地(呼叫exit或從main函式返回)還是非自願地(收到一個終止本程序的訊號)終止時,所有開啟的描述符都被關閉,這也導致仍然開啟的任何TCP連線上也發出一個FIN。
無論是客戶還是伺服器,任何一端都可以執行主動關閉。通常情況是,客戶執行主動關閉,但是某些協議,例如,HTTP/1.0卻由伺服器執行主動關閉。[2] 

為什麼是四次揮手,是因為TCP建立的是全雙工通道,你和我斷了,我還是可以給你發訊息的,所以你斷了之後,也需要我進行斷開連結,所以要進行四次揮手確認。

為什麼三次握手但是四次揮手

2.5 應用層

    應用層由來:使用者使用的都是應用程式,均工作於應用層,網際網路是開發的,大家都可以開發自己的應用程式,資料多種多樣,必須規定好資料的組織形式 

    應用層功能:規定應用程式的資料格式。

    例:TCP協議可以為各種各樣的程式傳遞資料,比如Email、WWW、FTP等等。那麼,必須有不同協議規定電子郵件、網頁、FTP資料的格式,這些應用程式協議就構成了”應用層

 

2.6 socket

    我們知道兩個程序如果需要進行通訊最基本的一個前提能能夠唯一的標示一個程序,在本地程序通訊中我們可以使用PID來唯一標示一個程序,但PID只在本地唯一,網路中的兩個程序PID衝突機率很大,這時候我們需要另闢它徑了,我們知道IP層的ip地址可以唯一標示主機,而TCP層協議和埠號可以唯一標示主機的一個程序,這樣我們可以利用ip地址+協議+埠號唯一標示網路中的一個程序。

    能夠唯一標示網路中的程序後,它們就可以利用socket進行通訊了,什麼是socket呢?我們經常把socket翻譯為套接字,socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操作抽象為幾個簡單的介面供應用層呼叫已實現程序在網路中通訊。

    

    socket起源於UNIX,在Unix一切皆檔案哲學的思想下,socket是一種"開啟—讀/寫—關閉"模式的實現,伺服器和客戶端各自維護一個"檔案",在建立連線開啟後,可以向自己檔案寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉檔案。

 

三.網路通訊實現

  想實現網路通訊,每臺主機需具備四要素

  • 本機的IP地址
  • 子網掩碼
  • 閘道器的IP地址
  • DNS的IP地址

  獲取這四要素分兩種方式

    1.靜態獲取:即手動配置

    2.動態獲取:通過dhcp獲取

乙太網頭 ip頭 udp頭 dhcp資料包

 

  (1)最前面的”乙太網標頭”,設定發出方(本機)的MAC地址和接收方(DHCP伺服器)的MAC地址。前者就是本機網絡卡的MAC地址,後者這時不知道,就填入一個廣播地址:FF-FF-FF-FF-FF-FF。

  (2)後面的”IP標頭”,設定發出方的IP地址和接收方的IP地址。這時,對於這兩者,本機都不知道。於是,發出方的IP地址就設為0.0.0.0,接收方的IP地址設為255.255.255.255。

  (3)最後的”UDP標頭”,設定發出方的埠和接收方的埠。這一部分是DHCP協議規定好的,發出方是68埠,接收方是67埠。

 

    這個資料包構造完成後,就可以發出了。乙太網是廣播發送,同一個子網路的每臺計算機都收到了這個包。因為接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是發給誰的,所以每臺收到這個包的計算機,還必須分析這個包的IP地址,才能確定是不是發給自己的。當看到發出方IP地址是0.0.0.0,接收方是255.255.255.255,於是DHCP伺服器知道”這個包是發給我的”,而其他計算機就可以丟棄這個包。

 

    接下來,DHCP伺服器讀出這個包的資料內容,分配好IP地址,傳送回去一個”DHCP響應”資料包。這個響應包的結構也是類似的,乙太網標頭的MAC地址是雙方的網絡卡地址,IP標頭的IP地址是DHCP伺服器的IP地址(發出方)和255.255.255.255(接收方),UDP標頭的埠是67(發出方)和68(接收方),分配給請求端的IP地址和本網路的具體引數則包含在Data部分。

 

    新加入的計算機收到這個響應包,於是就知道了自己的IP地址、子網掩碼、閘道器地址、DNS伺服器等等引數

四.結合協議來看網路通訊流程

  1.本機獲取

  • 本機的IP地址:192.168.1.100
  • 子網掩碼:255.255.255.0
  • 閘道器的IP地址:192.168.1.1
  • DNS的IP地址:8.8.8.8

  2.開啟瀏覽器,想要訪問Google,在位址列輸入了網址:www.google.com。

  3.dns協議(基於udp協議)

    

 

  13臺根dns:

    A.root-servers.net198.41.0.4美國
    B.root-servers.net192.228.79.201美國(另支援IPv6
    C.root-servers.net192.33.4.12法國
    D.root-servers.net128.8.10.90美國
    E.root-servers.net192.203.230.10美國
    F.root-servers.net192.5.5.241美國(另支援IPv6
    G.root-servers.net192.112.36.4美國
    H.root-servers.net128.63.2.53美國(另支援IPv6
    I.root-servers.net192.36.148.17瑞典
    J.root-servers.net192.58.128.30美國
    K.root-servers.net193.0.14.129英國(另支援IPv6)
    L.root-servers.net198.32.64.12美國
    M.root-servers.net202.12.27.33日本(另支援IPv6)

 

  域名定義:http://jingyan.baidu.com/article/1974b289a649daf4b1f774cb.html

  頂級域名:以.com,.net,.org,.cn等等屬於國際頂級域名,根據目前的國際網際網路域名體系,國際頂級域名分為兩類:類別頂級域名(gTLD)和地理頂級域名(ccTLD)兩種。類別頂級域名是                    以"COM"、"NET"、"ORG"、"BIZ"、"INFO"等結尾的域名,均由國外公司負責管理。地理頂級域名是以國家或地區程式碼為結尾的域名,如"CN"代表中國,"UK"代表英國。地理頂級域名一般由各個國家或地區負責管理。

  二級域名:二級域名是以頂級域名為基礎的地理域名,比喻中國的二級域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.
  一般來說,二級域名是域名的一條記錄,比如alidiedie.com是一個域名,www.alidiedie.com是其中比較常用的記錄,一般預設是用這個,但是類似*.alidiedie.com的域名全部稱作是alidiedie.com的二級

 

  4.HTTP部分的內容,類似於下面這樣:

 

GET / HTTP/1.1
Host: www.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) ……
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: … …

 

  我們假定這個部分的長度為4960位元組,它會被嵌在TCP資料包之中。

 

  5 TCP協議

    TCP資料包需要設定埠,接收方(Google)的HTTP埠預設是80,傳送方(本機)的埠是一個隨機生成的1024-65535之間的整數,假定為51775。

    TCP資料包的標頭長度為20位元組,加上嵌入HTTP的資料包,總長度變為4980位元組。

 

  6 IP協議

    然後,TCP資料包再嵌入IP資料包。IP資料包需要設定雙方的IP地址,這是已知的,傳送方是192.168.1.100(本機),接收方是172.194.72.105(Google)。

    IP資料包的標頭長度為20位元組,加上嵌入的TCP資料包,總長度變為5000位元組。

 

  7 乙太網協議

    最後,IP資料包嵌入乙太網資料包。乙太網資料包需要設定雙方的MAC地址,傳送方為本機的網絡卡MAC地址,接收方為閘道器192.168.1.1的MAC地址(通過ARP協議得到)。

    乙太網資料包的資料部分,最大長度為1500位元組,而現在的IP資料包長度為5000位元組。因此,IP資料包必須分割成四個包。因為每個包都有自己的IP標頭(20位元組),所以四個包的IP資料包的長度分別為1500、1500、1500、560。

 

  8 伺服器端響應

 

    經過多個閘道器的轉發,Google的伺服器172.194.72.105,收到了這四個乙太網資料包。

    根據IP標頭的序號,Google將四個包拼起來,取出完整的TCP資料包,然後讀出裡面的”HTTP請求”,接著做出”HTTP響應”,再用TCP協議發回來。

    本機收到HTTP響應以後,就可以將網頁顯示出來,完成一次網路通訊。