Android網絡編程系列 一 TCP/IP協議族

    在學習和使用Android網路編程時,咱們接觸的僅僅是上層協議和接口如Apache的httpclient或者Android自帶的httpURlconnection等等。對於這些接口的底層實現咱們也有必要進一步的瞭解,這就要咱們瞭解網絡通訊層了,提到網絡通訊層不得不提及ISO-OSI的七層協議經典架構,如圖所示:html

    上圖的左邊部分就是osi架構模型了, ISO/OSI模型,即開放式通訊系統互聯參考模型(Open System Interconnection Reference Model),是國際標準化組織(ISO)提出的一個試圖使各類計算機在世界範圍內互連爲網絡的標準框架,簡稱OSI。圖最右邊則是TCP/IP協議模型了,TCP/IP協議模型(Transmission Control Protocol/Internet Protocol),包含了一系列構成互聯網基礎的網絡協議(對應上圖的中間部分),是Internet的核心協議,經過20多年的發展已日漸成熟,並被普遍應用於局域網和廣域網中,目前已成爲事實上的國際標準。TCP/IP協議簇是一組不一樣層次上的多個協議的組合,一般被認爲是一個四層協議系統,與OSI的七層模型相對應。因此日常咱們所提起的tcp/ip協議它並非指一個具體的協議而是一個網絡傳輸協議集合模型的統稱。對應於標準的osi模型它制定了本身的四層協議系統,每一層都包含了多個不一樣的通訊協議。數據庫

    那麼TCP/IP究竟是怎樣工做的又爲何須要它呢?在世界上各地,各類各樣的電腦運行着各自不一樣的操做系統爲你們服務,這些電腦在表達同一種信息的時候所使用的方法是千差萬別。就好像聖經中上帝打亂了各地人的口音,讓他們沒法合做同樣。計算機使用者意識到,計算機只是單兵做戰並不會發揮太大的做用。只有把它們聯合起來,電腦纔會發揮出它最大的潛力。因而人們就千方百計的用電線把電腦鏈接到了一塊兒。可是簡單的連到一塊兒是遠遠不夠的,就好像語言不一樣的兩我的互相見了面,徹底不能交流信息。於是他們須要定義一些共通的東西來進行交流,TCP/IP就是爲此而生。編程

    下面咱們就來看下具體的TCP/IP協議系統的分層,如圖:安全

    看到上面層次圖,若是你以前有了解過,可能會讀上面的Socket抽象層表示疑惑,不打緊後面會介紹。咱們能夠看到TCP/IP層共四層:鏈路層、網絡層、運輸層以及應用層,概念上是沒有上圖中的socket抽象層服務器

(1). 鏈路層網絡

        也稱做數據鏈路層或網絡接口層(在第一個圖中爲網絡接口層和硬件層),一般包括操做系統中的設備驅動程序和計算機中對應的網絡接口卡。它們一塊兒處理與電纜(或其餘任何傳輸媒介)的物理接口細節。ARP(地址解析協議)和RARP(逆地址解析協議)是某些網絡接口(如以太網和令牌環網)使用的特殊協議,用來轉換IP層和網絡接口層使用的地址。具體的細節能夠轉到這邊文章《Android網絡編程系列 一 TCP/IP協議族之鏈路層》架構

   (2). 網絡層框架

        也稱做互聯網層(在第一個圖中爲網際層),處理分組在網絡中的活動,例如分組的選路。在TCP/IP協議族中,網絡層協議包括IP協議(網際協議),ICMP協議(Internet互聯網控制報文協議),以及IGMP協議(Internet組管理協議)。socket

        IP是一種網絡層協議,提供的是一種不可靠的服務,它只是儘量快地把分組從源結點送到目的結點,可是並不提供任何可靠性保證。同時被TCP和UDP使用。TCP和UDP的每組數據都經過端系統和每一箇中間路由器中的IP層在互聯網中進行傳輸。tcp

        ICMP是IP協議的附屬協議。IP層用它來與其餘主機或路由器交換錯誤報文和其餘重要信息。

        IGMP是Internet組管理協議。它用來把一個UDP數據報多播到多個主機。

       具體的細節能夠轉到這邊文章《Android網絡編程系列 一 TCP/IP協議族之網際層》

    (3). 傳輸層

        主要爲兩臺主機上的應用程序提供端到端的通訊。在TCP/IP協議族中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。

        TCP爲兩臺主機提供高可靠性的數據通訊。它所作的工做包括把應用程序交給它的數據分紅合適的小塊交給下面的網絡層,確認接收到的分組,設置發送最後確認分組的超時時鐘等。因爲運輸層提供了高可靠性的端到端的通訊,所以應用層能夠忽略全部這些細節。爲了提供可靠的服務,TCP採用了超時重傳、發送和接收端到端的確認分組等機制。

        UDP則爲應用層提供一種很是簡單的服務。它只是把稱做數據報的分組從一臺主機發送到另外一臺主機,但並不保證該數據報能到達另外一端。一個數據報是指從發送方傳輸到接收方的一個信息單元(例如,發送方指定的必定字節數的信息)。UDP協議任何須需的可靠性必須由應用層來提供。

        具體的細節能夠轉到這邊文章《Android網絡編程系列 一 TCP/IP協議族之傳輸層》

   (4). 應用層

        應用層負責處理特定的應用程序細節。

   (5). socket抽象層

    對於上圖中顯示 socket抽象層 這是一個很重要的 層次,是直接負責應用層和傳輸層通訊的,它的做用就是使得上層(應用層)通訊更方便更安全。實則就是對傳輸層的封裝對應用層的接口提供,這裏現就不擴展了,下一篇文章將重點介紹 socket抽象層

    TCP/IP協議系統的每一層在數據傳輸工做中分工都很明確,咱們能夠看其數據通訊圖:

    首先,是最上層的應用層,用戶將應用數據經過應用層協議如http、ftp等封裝好必要的客戶端數據信息傳遞到下一層(傳輸層),這時候傳輸層的tcp或udp協議就會爲其攜帶上客戶端端口等信息。封裝好了接着傳遞到網際層,在這裏就會爲數據攜帶上客戶端的IP等信息。再接着講數據發送到鏈路層,這一層爲待傳送的數據加入一個以太網協議頭,並進行CRC編碼,爲最後的數據傳輸作準備同時還爲數據攜帶了目標主機的mac地址(每一個以太網卡mac地址都是惟一的)。再往下則是硬件層次了,負責網絡的傳輸,這個層次的定義包括網線的制式,網卡的定義等等.

   瞭解了數據發送,接下了看看目標主機對數據的接收過程,以下圖:

     上面提到了客戶機在傳輸數據在鏈路層會爲數據攜帶上目標主機的mac地址,全部就能夠根據這個數據攜帶的IP地址和mac地址在互聯網中尋找到當目的主機,接着當目標主機收到一個以太網數據幀時,數據就開始從協議棧中由底向上升,同時去掉各層協議加上的報文首部。每層協議盒都要去檢查報文首部中的協議標識,以肯定接收數據的上層協議。這個過程稱做分用(Demultiplexing)。協議是經過目的端口號、源I P地址和源端口號進行解包的。

    以上呢就是關於TCP/IP協議通訊的大體流程了,接下來爲了更好的吸取和理解這些知識點,你有必要了解如下基本概念:

  • ip地址

    網絡上每個節點都必須有一個獨立的Internet地址(也叫作IP地址)。如今,一般使用的IP地址是一個32bit的數字,也就是咱們常說的IPv4標準,這32bit的數字分紅四組,也就是常見的255.255.255.255的樣式。IPv4標準上,地址被分爲五類,咱們經常使用的是B類地址。具體的分類請參考其餘文檔。須要注意的是IP地址是網絡號+主機號的組合,這很是重要。

  • DNS

    域名系統是一個分佈的數據庫,它提供將主機名(就是網址啦)轉換成IP地址的服務。 DNS 是計算機域名系統 (Domain Name System 或Domain Name Service) 的縮寫,它是由解析器以及域名服務器組成的。域名服務器是指保存有該網絡中全部主機的域名和對應IP地址,並具備將域名轉換爲IP地址功能的服務器。

  • RFC

    RFC是什麼?RFC就是tcp/ip協議的標準文檔,在這裏咱們能夠看到RFC那長長的定義列表,如今它一共有4000多個協議的定義,固然,咱們所要學習的,也就是那麼十幾個協議而已。

  • 端口號(port)

    注意,這個號碼是用在TCP,UDP上的一個邏輯號碼,用於區別開主機上不一樣應用程序。服務器通常都是經過知名端口號來識別的。例如,對於每一個TCP/IP實現來講,FTP服務器的TCP端口號都是21,每一個Telnet服務器的TCP端口號都是23,每一個TFTP (簡單文件傳送協議)服務器的UDP端口號都是69。任何TCP/IP實現所提供的服務都用知名的1~1023之間的端口號。這些知名端口號由Internet號分配機構(Internet Assigned Numbers Authority, IANA)來管理。知名端口號介於1~255之間;256~1023之間的端口號一般都是由Unix系統佔用,以提供一些特定的Unix服務;1024~5000端口號用於客戶端分配臨時端口號;大於5000的端口號是爲其餘服務器預留的。

  • 應用編程接口

    如今經常使用的編程接口有socket和TLI。這就是上面所提到socket抽象層。

相關文章
相關標籤/搜索