一層層瞭解網絡通訊協議

1、理論五層模型

互聯網的實現,分爲好幾層,每一層都有本身特有的功能,並且每一層都靠下一層支持。用戶接觸到的,只是最上面的一層,咱們稱爲應用層,要理解互聯網,必須從最下層開始,自下而上的理解每一層的功能。html

咱們常見的網絡模型,有如下三種:編程

  • OSI七層模型緩存

  • 理論五層模型安全

  • TCP/IP四層模型服務器

它們之間的關係以下圖所示 三種模型間的關係markdown

其中,理論五層模型是綜合OSI七層TCP/IP四層的優勢,採用的一種原理體系結構。咱們接下來的探討也是基於理論五層模型來展開的。網絡

理論五層模型的結構以下圖 理論五層模型架構

各層的做用以下:socket

  • 應用層
    • 直接爲用戶的應用進程提供服務
    • 常見的協議有HTTP、HTTPS、SMTP、TELNET
  • 傳輸層
    • 傳輸層任務是爲應用層進行通訊的兩個進程之間提供一個可靠的端到端服務,使它們看不到傳輸層如下的數據通訊的細節。
    • 端到端意思是數據來自某個端口,再傳送給指定的端口
    • 端口:一個0到65535間的整數,用來指定特定應用程序
    • 常見的協議有TCP、UDP
  • 網絡層
    • 網路層的任務是選擇合適的路由,使分組可以準確的按照地址找到目的地,並交付給目的地的傳輸層。
    • 網絡層協議爲IP協議
  • 數據鏈路層
    • 數據鏈路層是將數據組合爲一個個的,肯定電信號的數據包格式。
    • 數據鏈路層的協議爲以太網協議
  • 物理層
    • 物理層定義了把電腦之間鏈接起來所用設備的標準,在網絡中的網絡信號都是經過0和1的電信號進行傳輸的。

簡單說,越下面的層,越靠近硬件;越上面的層,越靠近用戶。oop

協議是什麼

每一層都是爲了完成某一種功能。爲了實現這些功能,須要遵照一些共同的規則,這些規則就是協議(protocol)

互聯網的每一層,都定義了不少協議。這些協議的總稱,叫作互聯網協議(Internet Protocol Suite),它們是互聯網的核心。

下面的內容中,咱們經過每一層的功能的介紹,對每一層中的主要協議所起做用進行講解。

2、物理層

電腦要進行聯網,須要把電腦經過各類設備鏈接進網絡,設備有光纜、電纜、雙絞線、無限電波等方式。 這就是物理層,它就是把電腦鏈接起來的物理手段,它主要規定了網絡的一些電氣特性,做用是傳輸0和1的電信號。

3、數據鏈路層

1.定義

物理層是用於傳輸信號的介質,它傳輸的是0和1的電信號。可是關於電信號如何分組,每一個信號位有何意義並無規定。

這就是數據鏈路層的功能,它在物理層的上方,肯定了0和1的分組方式,用於兩個設備(同一種數據鏈路結點)之間進行信息傳遞。

2.以太網協議

早期的時候,每家公司都有本身的電信號分組方式。逐漸地,一種叫作以太網(Ethernet)的協議,佔據了主導地位。

以太網規定,一組電信號構成一個數據包,叫作幀(frame),每一幀分爲兩個部分:標頭(Head)數據(Data)以太網協議幀結構

  • 標頭和數據
    • 標頭包含數據包的一些說明項,好比發送者、接收者、數據類型等;數據則是數據包具體內容。
  • 標頭和數據的限制
    • 標頭的長度,固定爲18字節數據的長度,最短爲46字節,最長爲1500字節。所以,整個最短爲64字節,最長爲1518字節。若是數據很長,就必須分割成多個幀發送。

MTU(最大傳輸單元)

MTU是鏈路層對物理層的限制。

  • 以太網幀數據段長度規定爲46-1500字節,這個最大值1500字節稱爲以太網的最大傳輸單元(MTU),不一樣的網絡類型有不一樣的MTU。
  • 若是一個數據包從以太網路由到撥號鏈路上,數據包長度大於撥號鏈路的MTU,則須要對數據包進行分片。

MTU對IP協議的影響

因爲鏈路層存在MTU的限制,致使網絡層的報文若是超過1500字節,就必要要對其進行分片發送。

  • 將較大的IP包分紅多個小包,並給每一個小包打上標籤,每一個小包IP協議頭的16位標識(id)都是相同的,這樣在重組的時候就知道這個小包來自於哪一個報文。
  • 每一個小包的IP協議頭3位標誌字段中, 第2位MF置爲0, 表示容許分片, 第3位DF來表示結束標記(當前是不是後一個小包, 是的話置爲1, 不然置爲0)。
  • 到達對端時再將這些小包按順序重組, 拼裝到一塊兒返回給傳輸層。一旦這些小包中任意一個小包丟失,接收端的重組就會失敗,可是IP層不會負責從新傳輸數據。

MTU對UDP協議的影響

  • 只要UDP報文中攜帶的數據超過過1472(1500 - 20(IP首部) - 8(UDP首部)),那麼就會在網絡層分紅多個IP數據報
  • 這些IP數據報有任意一個丟失,都會引發接收端網絡層重組失敗。那麼這就意味着,若是UDP數據報在網絡層被分片,整個數據被丟失的機率就大大增長。
  • 局域網環境下,建議UDP數據控制在1472字節如下;在Internet環境下,建議將UDP數據控制在548字節如下

MTU對TCP協議的影響

  • TCP報文的長度不能無限大,依然要受制於MTU, TCP的單個數據報的最大消息長度稱爲MSS(Max Segment Size)
  • TCP在創建鏈接時,首先會和對方協商MSS的大小(也只能在三次握手時協商,不然就是默認值536字節)。理想的狀況下,MSS的值正好是在IP不會被分片處理的大長度(這個長度仍然是受制於數據鏈路層的MTU)
  • 雙方在發送SYN的時候會在TCP頭部寫入本身能支持的MSS值。而後雙方得知對方的MSS值以後選擇較小的做爲最終的MSS。MSS的值就是在TCP首部的40字節變長選項中(kind=2)。
  • MSS = MTU - TCP首部 - IP首部,既TCP報文的數據長度。

3.MAC地址

上面咱們提到,以太網數據包的標頭,包含了發送者和接受者的信息。那麼,發送者和接受者是如何標識呢?

以太網規定,連入網絡的全部設備,都必須具備網卡接口。數據包必須是從一塊網卡,傳送到另外一塊網卡。網卡的地址,就是數據包的發送地址和接收地址,這叫作MAC地址

網卡

每塊網卡出廠的時候,都有一個全世界獨一無二的MAC地址,長度是48個二進制位,一般用12個十六進制數表示。

MAC地址

前6個十六進制數是廠商編號,後6個十六進制數是該廠商的網卡流水號。有了MAC地址,就能夠定位網卡和數據包的路徑了。

4.廣播

定義地址只是第一步,後面還有更多的步驟:

  • 1)首先:一塊網卡怎麼會知道另外一塊網卡的MAC地址?

    回答是有一種ARP協議,能夠解決這個問題。這個在本文網絡層中介紹,這裏只須要知道,以太網數據包必須知道接收方的MAC地址,而後才能發送。

  • 2)其次:就算有了MAC地址,系統怎樣才能把數據包準確送到接收方?

    回答是以太網採用了一種很原始的方式,它不是把數據包準確送到接收方,而是向本網絡內全部計算機發送,讓每臺計算機本身判斷,是否爲接收方。

廣播

上圖中,5號計算機向3號計算機發送一個數據包,同一個子網絡的1號、2號、3號、4號、6號計算機都會收到這個包。它們讀取這個包的標頭,找到接收方的MAC地址,而後與自身的MAC地址相比較,若是二者相同,就接收這個包,作進一步處理,不然就丟棄這個包。這種發送方式就叫作廣播(broadcasting)。

有了數據包的定義、網卡的MAC地址、廣播的發送方式,"連接層"就能夠在多臺計算機之間傳送數據了。

4、網絡層

1.網絡層的由來

以太網協議,依靠MAC地址發送數據。理論上,單單依靠MAC地址,成都的網卡就能夠找到休斯頓的網卡了,技術上是能夠實現的。

可是,這樣作有一個重大的缺點。以太網採用廣播方式發送數據包,全部成員人手一包,不只效率低,並且侷限在發送者所在的子網絡。也就是說,若是兩臺計算機不在同一個子網絡,廣播是傳不過去的。這種設計是合理的,不然互聯網上每一臺計算機都會收到全部包,那會引發災難。

互聯網是無數子網絡共同組成的一個巨型網絡,很像想象成都和休斯頓的電腦會在同一個子網絡,這幾乎是不可能的。

子網絡

所以,必須找到一種方法,可以區分哪些MAC地址屬於同一個子網絡,哪些不是。若是是同一個子網絡,就採用廣播方式發送,不然就採用路由方式發送。(路由的意思,就是指如何向不一樣的子網絡分發數據包,這是一個很大的主題,本文不涉及。)遺憾的是,MAC地址自己沒法作到這一點。它只與廠商有關,與所處網絡無關。

這就致使了網絡層的誕生。它的做用是引進一套新的地址,使得咱們可以區分不一樣的計算機是否屬於同一個子網絡。這套地址就叫作網絡地址,簡稱網址

因而,網絡層出現之後,每臺計算機有了兩種地址,一種是MAC地址,另外一種是網絡地址。兩種地址之間沒有任何聯繫,MAC地址是綁定在網卡上的,網絡地址則是管理員分配的,它們只是隨機組合在一塊兒。

網絡地址幫助咱們肯定計算機所在的子網絡,MAC地址則將數據包送到該子網絡中的目標網卡。所以,從邏輯上能夠推斷,一定是先處理網絡地址,而後再處理MAC地址。

2.IP協議

規定網絡地址的協議,叫作IP協議。它所定義的地址,就被稱爲IP地址。目前,普遍採用的是IP協議的第四版和第六版,分別稱爲IPv4和IPv6。

1) IPv4

IPv4地址

IPv4定義

  • IPv4規定,網絡地址由32個二進制位組成;
  • 習慣上,咱們用分紅四段的十進制數表示IP地址,從0.0.0.0一直到255.255.255.255。

子網掩碼

互聯網上的每一臺計算機,都會分配到一個IP地址。這個地址分紅兩個部分前一部分表明網絡,後一部分表明主機。好比,IP地址14.215.177.39,這是一個32位的地址,假定它的網絡部分是前24位(14.215.177),那麼主機部分就是後8位(最後的那個1)。處於同一個子網絡的電腦,它們IP地址的網絡部分一定是相同的,也就是說14.215.177.2應該與14.215.177.1處在同一個子網絡。
可是,問題在於單單從IP地址,咱們沒法判斷網絡部分。仍是以14.215.177.39爲例,它的網絡部分,究竟是前24位,仍是前16位,甚至前28位,從IP地址上是看不出來的。
那麼,怎樣才能從IP地址,判斷兩臺計算機是否屬於同一個子網絡呢?這就要用到另外一個參數子網掩碼(subnet mask)

子網掩碼

  • 所謂子網掩碼,就是表示子網絡特徵的一個參數。它在形式上等同於IP地址,也是一個32位二進制數字,它的網絡部分所有爲1,主機部分所有爲0。好比,IP地址172.16.254.1,若是已知網絡部分是前24位,主機部分是後8位,那麼子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。
  • 知道子網掩碼,咱們就能判斷,任意兩個IP地址是否處在同一個子網絡。方法是將兩個IP地址與子網掩碼分別進行按位與運算(兩個數位都爲1,運算結果爲1,不然爲0),而後比較結果是否相同,若是是的話,就代表它們在同一個子網絡中,不然就不是。

NAT

咱們知道,IPv4的地址只有32位,地球上網民數量已經遠遠超出這個數字,那麼,爲啥至今還沒出現地址枯竭呢?

由於咱們還有一些技術,能夠變相的緩解地址不足,好比NAT技術。

NAT(Network Address Translation,網絡地址轉換) NAT

  • 每個小的局域網,都會使用一個網段的私網地址,在與外界鏈接時,再變換成公網地址。這樣一來,幾十個或幾百個電腦,都只須要一個公網地址。
  • 甚至還能夠私網套私網,NAT套NAT,一層一層套。這樣一來,大大節約了公網IP地址數量。正由於如此,才讓咱們「續命」到了今天,不至於沒法上網。
  • 可是,NAT這種方式也有不少缺點,雖然私網地址訪問互聯網地址方便,但互聯網地址訪問私網地址就困難了。不少服務,都會受到限制,你只能經過複雜的設置才能解決,也會影響網絡的處理效率。

2) IPv6

IPv6地址

定義

  • IPv6地址由八組、每組四位16進制數字組成,每組之間由:分隔
  • IPv6地址支持壓縮前導零的表示方法,如圖中的地址可寫爲:2001:D12:0:0:2AA:987:FE29:9871
  • 當冒號十六進制格式中出現連續幾段數值0的位段時,這些段能夠壓縮爲雙冒號(::)的表示,因此咱們獲得了最終的簡化格式:2001:D12::2AA:987:FE29:9871
  • 注意:雙冒號只能出現一次

IPv6號段劃分和前綴表示法

IPv6擁有128位巨大的地址空間,對於那麼大的空間,也不是隨意的劃分,而是使用按照bit位進行號段劃分。

IPv6地址結構以下圖 IPv6地址結構

例如RFC4291中定義了n=48, m=16,也就是子網和接口ID與各佔64位。

IPv6沒有子網掩碼mask的概念,它支持的是子網前綴標識方法

使用IPv6地址/前綴長度表示方法,例如:

  • 2001:C3:0:2C6A::/64表示一個子網;
  • 而2001:C3:0:2C6A:C9B4:FF12:48BC:1A22/64表示該子網下的一個節點地址。

能夠看到,一個IPv6的地址有子網前綴+接口ID構成,子網前綴由地址分配和管理機構定義和分配,而接口ID能夠由各操做系統實現生成。

IPv6優勢

IPv6是用來解決IPv4地址枯竭問題的,IPv4地址爲32位,而IPv6地址爲128位 除了地址數量之外,IPv6還有不少優勢,例如:

  • IPv6使用更小的路由表。使得路由器轉發數據包的速度更快;
  • IPv6增長了加強的組播支持以及對流的控制,對多媒體應用頗有利,對服務質量(QoS)控制也頗有利;
  • IPv6加入了對自動配置的支持。這是對DHCP協議的改進和擴展,使得網絡(尤爲是局域網)的管理更加方便和快捷;
  • IPv6具備更高的安全性。用戶能夠對網絡層的數據進行加密並對IP報文進行校驗,極大地加強了網絡的安全性;
  • IPv6具備更好的擴容能力。若是新的技術或應用須要時,IPV6容許協議進行擴充;
  • IPv6具備更好的頭部格式。IPV6使用新的頭部格式,就簡化和加速了路由選擇過程,提升了效率;
  • ……

3) IPv4和IPv6的區別

  • 報文中,IPv6數據鏈路層的type字段標識爲0x86ddIPv4數據鏈路層的type字段標識爲:0x0800
  • IPv6報文頭部固定爲40字節IPv4報文頭部是20到60字節。這個意味着,寫代碼處理IPv6數據報文的效率會提升不少
  • IPv6的報文頭部取消了校驗和字段,提升了路由器的轉發效率。不過,值得一提的是,在IPv6協議下,傳輸層協議UDP、TCP是強制須要進行校驗和的(IPv4是可選的)
  • 當IPv6數據報文承載的是上層協議ICMPv六、TCP、UDP等的時候,Next Header的值分別爲5八、六、17,這個時候和IPv4報文頭部中的Protocol字段很相似
  • 當不是以上3種協議類型的時候,IPv6報文頭部緊接的是擴展頭部。擴展頭部是IPv6引入的一個新的概念,每一個IPv6的數據報文能夠承載0個或多個擴展頭部,擴展頭部經過鏈表的形式組織起來。當IPv6數據報文承載着擴展頭部的時候,Next Header的數值爲擴展頭部的類型值。爲何要引入擴展頭部這個概念,這裏也是IPv6對IPv4改進的一個方面,用擴展頭部取代了IPv4的可選項信息,精簡了IPv6的頭部,加強了IPv6的擴展性。當發送一個分片IPv6數據報文的時候,IPv6使用的是擴展頭部的形式組織各個分片的信息,如圖IPv6報文頭部Next Header字段值爲44表示存在擴展頭部,擴展頭部是IPv6分片數據信息。對比IPv4,分片信息是記錄在IPv4報文頭部分片字段中。

4) IP協議簡單總結

如上所述,IP協議的做用主要有兩個:

  • 爲每一臺計算機分配IP地址
  • 肯定哪些地址在同一個子網絡

3.IP數據包

根據IP協議發送的數據,就叫作IP數據包。咱們直接把IP數據包直接放進以太網數據包的"數據"部分,不用修改以太網的規格。這就是互聯網分層結構的好處:上層的變更徹底不涉及下層的結構

具體來講,IP數據包也分爲標頭數據兩個部分: 其中,標頭範圍爲20-60字節(IPv6固定爲40字節),整個數據包的總長度最大爲65535字節。所以,理論上,一個IP數據包的數據部分最長爲65515字節

IP數據報文格式

如圖所示,標頭中20字節是固定不變的,它包含了版本、長度、IP地址等信息,另外還有可變部分的標頭可選。而數據則是IP數據包的具體內容。

將它放入以太網數據包後,以太網數據包就變成了下面這樣:

在以太網協議中,以太網數據包的數據部分,最長只有1500字節。所以,若是IP數據包超過了1500字節,它就須要分割成幾個以太網數據包,分開發送了

4.ARP協議

關於網絡層,還有最後一點須要說明。由於IP數據包是放在以太網數據包裏發送的,因此咱們必須同時知道兩個地址,一個是對方的MAC地址,另外一個是對方的IP地址。一般狀況下,對方的IP地址是已知的,可是咱們不知道它的MAC地址

因此,咱們須要一種機制,可以從IP地址獲得MAC地址。

這裏又能夠分紅兩種狀況:

  • 1)第一種狀況:若是兩臺主機不在同一個子網絡,那麼事實上沒有辦法獲得對方的MAC地址,只能把數據包傳送到兩個子網絡鏈接處的網關(gateway),讓網關去處理;
  • 2)第二種狀況:若是兩臺主機在同一個子網絡,那麼咱們能夠用ARP協議,獲得對方的MAC地址。ARP協議也是發出一個數據包(包含在以太網數據包中),其中包含它所要查詢主機的IP地址,在對方的MAC地址這一欄,填的是FF:FF:FF:FF:FF:FF,表示這是一個廣播地址。它所在子網絡的每一臺主機,都會收到這個數據包,從中取出IP地址與自身的IP地址進行比較。若是二者相同,都作出回覆,向對方報告本身的MAC地址不然就丟棄這個包。

總之,有了ARP協議以後,咱們就能夠獲得同一個子網絡內的主機MAC地址,能夠把數據包發送到任意一臺主機之上了。

ARP攻擊

ARP攻擊是利用ARP協議設計時缺少安全驗證漏洞來實現的,經過僞造ARP數據包來竊取合法用戶的通訊數據,形成影響網絡傳輸速率和盜取用戶隱私信息等嚴重危害。

ARP攻擊主要是存在於局域網網絡中,局域網中如有一臺計算機感染ARP木馬,則感染該ARP木馬的系統將會試圖經過「ARP欺騙」手段截獲所在網絡內其它計算機的通訊信息,並所以形成網內其它計算機的通訊故障。

局域網中比較常見的ARP攻擊包括:上網時斷時續,拷貝文件沒法完成,局域網內的ARP包激增。出現不正常的MAC地址,MAC地址對應多個IP地址,網絡數據發不出去了,網上發送信息被竊取,我的PC中毒局域網內MAC地址泛洪使MAC地址緩存表溢出等問題。據包的協議地址不匹配,從而在網絡中產生大量的ARP。
在局域網環境中,ARP攻擊是主要的安全威脅,在傳統網絡中主要是經過靜態綁定的方式來解決,可是這種方式限制了網絡擴展的易用性。

5、傳輸層

1.傳輸層的由來

有了MAC地址和IP地址,咱們已經能夠在互聯網上任意兩臺主機上創建通訊。

接下來的問題是,同一臺主機上有許多程序都須要用到網絡,好比,你一邊瀏覽網頁,一邊與朋友在線聊天。當一個數據包從互聯網上發來的時候,你怎麼知道,它是表示網頁的內容,仍是表示在線聊天的內容?

也就是說,咱們還須要一個參數,表示這個數據包到底供哪一個程序(進程)使用。這個參數就叫作端口(port),它實際上是每個使用網卡的程序的編號。每一個數據包都發到主機的特定端口,因此不一樣的程序就能取到本身所須要的數據。

**端口是0到65535之間的一個整數,正好16個二進制位。0到1023的端口被系統佔用,用戶只能選用大於1023的端口。**無論是瀏覽網頁仍是在線聊天,應用程序會隨機選用一個端口,而後與服務器的相應端口聯繫。

傳輸層的功能,就是創建端口到端口的通訊。相比之下,網絡層的功能是創建主機到主機的通訊。只要肯定主機和端口,咱們就能實現程序之間的交流。所以,Unix系統就把主機+端口,叫作套接字(socket)。有了它,就能夠進行網絡應用程序開發了。

2.UDP協議:用戶數據報協議

如今,咱們必須在數據包中加入端口信息,這就須要新的協議。最簡單的實現叫作UDP協議,它的格式幾乎就是在數據前面,加上端口號。

UDP數據包,也是由標頭和數據兩部分組成: UDP結構 如圖所示,UDP的標頭固定爲8字節,包含了16位源端口和16位目的端口,以及16位的UDP長度和16位的UDP檢驗和。而後,把整個UDP數據包放入IP數據包的數據部分,而前面說過,IP數據包又是放在以太網數據包之中的,因此整個以太網數據包如今變成了下面這樣: 包含UDP數據包的以太網協議

UDP數據包很是簡單,標頭部分一共只有8個字節,總長度不超過65,535字節,正好放進一個IP數據包。

UDP中一個包的大小最大能多大

  • 局域網環境下,建議將UDP數據控制在1472字節如下

    • 以太網(Ethernet)數據幀的長度必須在46-1500字節之間,這是由以太網的物理特性決定的,這個1500字節被稱爲鏈路層的MTU(最大傳輸單元)。但這並非指鏈路層的長度被限制在1500字節,其實這這個MTU指的是鏈路層的數據區,並不包括鏈路層的首部和尾部的18個字節。

    • 因此,事實上這個1500字節就是網絡層IP數據報的長度限制。由於IP數據報的首部最小爲20字節,因此IP數據報的數據區長度最大爲1480字節。而這個1480字節就是用來放TCP傳來的TCP報文段或UDP傳來的UDP數據報的。

    • 又由於UDP數據報的首部8字節,因此UDP數據報的數據區最大長度爲1472字節。這個1472字節就是咱們可使用的字節數。

    • 當咱們發送的UDP數據大於1472的時候會怎樣呢? 這也就是說IP數據報大於1500字節,大於MTU,這個時候發送方IP層就須要分片(fragmentation)。把數據報分紅若干片,使每一片都小於MTU,而接收方IP層則須要進行數據報的重組。這樣就會多作許多事情,而更嚴重的是,因爲UDP的特性,當某一片數據傳送中丟失時,接收方沒法重組數據報,將致使丟棄整個UDP數據報。

    • 所以,在普通的局域網環境下,我建議將UDP的數據控制在1472字節如下爲好。

  • Internet編程時,建議將UDP數據控制在548字節如下

    • 進行Internet編程時則不一樣,由於Internet上的路由器可能會將MTU設爲不一樣的值。若是咱們假定MTU爲1500來發送數據,而途經的某個網絡的MTU值小於1500字節,那麼系統將會使用一系列的機制來調整MTU值,使數據報可以順利到達目的地,這樣就會作許多沒必要要的操做。

    • 鑑於Internet上的標準MTU值爲576字節,因此我建議在進行Internet的UDP編程時, 最好將UDP的數據長度控件在548字節(576-8-20)之內。

    • ps:這句話貌似有問題,unix網絡編程第一卷裏說:ipv4協議規定ip層的最小重組緩衝區大小爲576!因此,建議udp包不要超過這個大小,而不是由於internet的標準MTU是576!

3.TCP協議:傳輸控制協議

UDP協議的優勢是比較簡單,容易實現,可是缺點是可靠性較差,一旦數據包發出,沒法知道對方是否收到。爲了解決這個問題,提升網絡可靠性,TCP協議就誕生了。這個協議很是複雜,但能夠近似認爲,它就是有確認機制的UDP協議,每發出一個數據包都要求確認。若是有一個數據包遺失,就收不到確認,發出方就知道有必要重發這個數據包了。

所以,TCP協議可以確保數據不會遺失。它的缺點是過程複雜、實現困難、消耗較多的資源。 TCP協議標頭 如圖所示,TCP標頭在20-60字節之間,除了源端口號和目的端口號以外,還包含了序號、確認號等各類信息,用於保證可靠鏈接與數據重發。

TCP數據包和UDP數據包同樣,都是內嵌在IP數據包的數據部分。TCP數據包沒有長度限制,理論上能夠無限長,可是爲了保證網絡的效率,一般TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包沒必要再分割。

包含TCP數據的以太網幀結構

6、應用層

應用程序收到傳輸層的數據,接下來就要進行解讀。因爲互聯網是開放架構,數據來源五花八門,必須事先規定好格式,不然根本沒法解讀。應用層的做用,就是規定應用程序的數據格式。

舉例來講,TCP協議能夠爲各類各樣的程序傳遞數據,好比Email、WWW、FTP等等。那麼,必須有不一樣協議規定電子郵件、網頁、FTP數據的格式,這些應用程序協議就構成了應用層。這是最高的一層,直接面對用戶。它的數據就放在TCP數據包的數據部分。

所以,如今的以太網的數據包就變成下面這樣:

相關文章
相關標籤/搜索