天天看點

TCP/IP協定棧詳解

TCP/IP協定棧

TCP/IP協定是規範不同主機之間進行通信的一系列協定,其中涉及到資料的封裝,傳輸,尋址等一系列内容,是計算機領域非常重要的基礎知識,我們在Java中用到的Socket通信就是基于TCP/IP協定中的TCP協定,開發為一系列封裝好的API供使用者使用。為什麼要制定這些協定呢?這些協定為通信領域指定了唯一的标準,為不同的網絡供應商,裝置制造商的生産和服務提供了一個統一的标準。TCP/IP協定棧就是一個類似資料結構中的棧的模型,它有很多層,每層承擔着不同的功能,有不同的協定。我們一般可以把協定棧了解為一個四層的模型:應用層、傳輸層、網絡層、鍊路層。應用層中有一些面向使用者的與應用相關的協定,涉及到對資料的一些分析和處理,使得使用者資訊和資料流之間得到轉換;傳輸層是負責執行資料流和資料段之間的轉換,是資料資訊的管理層面;網絡層涉及到與其他主機的聯系,對資料封裝并找到合适的路徑把資訊發出去或者接收進來;鍊路層中主要是一系列為了實作相應功能的接口,是協定棧的最底層。一般來說,使用者資訊會從應用層開始,往下逐漸被包裝,當傳到另一個主機的時候,再從下到上一步步打開包裝,最終解析還原為使用者資訊。在這個過程中,各項協定確定了傳輸過程的實作以及資料的安全。

TCP/IP協定棧:

TCP/IP協定棧詳解

協定棧之應用層

應用層包括的協定有:

1、檔案傳輸類:HTTP(超文本傳輸協定)、FTP(檔案傳輸協定)、TFTP(簡單檔案傳輸協定)

2、遠端登入類:Telnet

3、電子郵件類:SMTP(簡單郵件傳輸協定)

4、網絡管理類:SNMP(簡單網絡管理協定)

5、域名解析類:DNS

接下來我們逐一介紹這些協定:

①HTTP協定:這是一種超文本連結協定,适用于分布式超媒體系統,它對應的用戶端的連接配接對象是web伺服器,也就是我們常見的“www”,我們在登入一個網頁的時候必然需要經過這個協定,它是我們在網頁設計以及網頁資料的傳輸中的規範。

②FTP協定:這是一種檔案傳輸協定,它是基于TCP協定(TCP協定位于傳輸層,我們之後會提到)實作的一種應用層的協定,使得使用者可以在FTF伺服器上下載下傳大資訊量的檔案,FTP協定保障了檔案的傳輸的可靠性。

③TFTP協定:簡單檔案傳輸協定,TFTP隻能獲得和寫入檔案,和前者不同之處是這種協定是基于UDP協定的,這是不是一種面向連接配接的協定。什麼是面向連接配接呢?面向連接配接就是協定的目的是保障通信雙方能夠保持連接配接并進行資料的互動。而TFTP協定是一種無連接配接協定,發檔案方隻管檔案發出去了而不會管對方是不是受到了檔案。QQ傳輸檔案使用的就是TFTP協定,那麼既然它不可靠,為什麼還要使用它呢?因為這種檔案傳輸方式成本低,在小檔案的傳輸中可以提高速度而不需要複雜的來回确認和驗證,我們要想保障檔案的傳輸,隻要在應用層對UDP傳輸的資料做一些處理,依然能達到可靠傳輸的效果。

④Telnet協定:遠端登入類協定,用戶端需要通過這個協定去登入到伺服器上。這裡我們可以舉個簡單的例子來說明:主機1提出申請希望登入到某主機2的伺服器上,這時TCP會為它配置設定一個源端口号(假設是1288),然後指定登入類的目标端口号為23(登入類的端口号在計算機上是确定且唯一的,這可以讓主機2知道這個消息發給登入類的),當資料到達主機2的時候,如果23号端口的伺服器是開啟的,用戶端便可以連接配接到伺服器,主機2會生成一個遠端端口1288号,如果主機1上的第二個Telnet使用者向TCP提出登入申請,這時TCP會為它配置設定另一個(如1289)的端口号去和伺服器連接配接。關于端口号的使用,小于255一般是公共應用,255 ~1023是特定應用商的特定端口号,我們一般使用大于1023的端口号。

⑤STMP協定:簡單郵件傳輸協定,這也是基于UDP的一項應用,其實作類似于簡單檔案傳輸協定但這項協定是針對郵件的傳輸的。

⑥SNMP協定:簡單網絡管理協定,它的作用是管理者可以通過網絡對那些位于不同實體空間的主機進行配置和管理。

⑦DNS協定:這是一系列關于網站域名和IP位址的映射,IP位址是由一系列數字組成,不便于記憶,而映射為域名去通路就會容易很多,在DNS中,這種映射也是唯一的。

協定棧之傳輸層

傳輸層我們的協定是TCP協定和UDP協定,這兩個協定在整個TCP/IP協定棧中十分重要,下面我們來詳細介紹這兩種協定的特點和差別:

①TCP協定(傳輸控制協定):

  • TCP協定是一種面向連接配接的可靠的協定,它會確定資料可以安全的從一方傳輸到另一方,TCP的可靠性是如何實作的呢?
  • 三次握手:基于TCP的通信在資料傳輸前需要先進行三次握手,然後建立連接配接,開始資料的傳輸,在傳輸結束的時候,會執行改進的三次握手實作斷開連接配接,由此可以看出這個過程的可靠性。在傳輸層,主機之間的通信是端到端的,兩主機之間互相發送資料。
  • 三次握手:主機1發送自己的序列号SYN:X給主機2,主機2收到後會發一個應答号ACK:X+1給主機1,同時會把自己的序列号SYN:Y也發給主機1,主機1收到後,會發應答号ACK:Y+1及序列号SYN:X+1給主機2,這樣三次握手就完成了,兩主機就可以進行通信。
  • 三次握手圖示:
    TCP/IP協定棧詳解
  • 在通信結束時,兩主機執行改進的三次握手來實作通信的結束。主機1先發一個FIN封包段包給主機2,主機2收到後先發一個應答号ACK,然後開始關閉相關應用,待主機2的程式告訴主機,要徹底關閉應用時,主機2向主機1發送FIN封包段給主機1,主機1收到後發一個應答号ACK給主機2,表示徹底關閉了連接配接,結束了通信。在這個過程我們可以發現,三次握手使得雙方可以可靠地實作對話,但這如果在小資訊量的通信中,似乎效率有些低。
  • 改進的三次握手圖示(四次揮手):
    TCP/IP協定棧詳解
  • 逾時與重傳:如果發送方在一定時間内沒有接受到發送的資料段的應答,就會重新發送此資料段,直到接受到該資料段的應答後就會釋放該資料段的緩存。另外,如果在資料段傳輸的過程中發生了網絡堵塞,發送方遲遲沒有收到應答,就會重傳資料段,網絡恢複後原先的資料段就會繼續發送到接收方,這時接收方收到了兩個相同的資料段,但它隻會擷取第一個接收到的資料包而丢棄第二個,這增加了TCP資料傳輸的可靠性。
  • 視窗技術:視窗是限制同時接收的最大資料量,如果發送方一次性發出的資料段數量大于它的視窗限制,就會隻接收最大限額的資料段而把剩下的資料段返還給發送方,并告訴發送方下次最大的同時發送的資料段數量,返還的資料段會在下一次發送的時候再次發出。視窗技術對資料的傳輸量提出了要求,可以防止網絡的堵塞。
  • 面向流:當發送方和接收方之間傳輸大量資料的時候,發送方的TCP會把資料流分段分組發送,接收方再根據分段上的資訊對其重新整合還原。
  • 多路複用技術:由端口号來實作。
  • 全雙工:在一條連接配接上可以同時傳輸兩條相反的資料流。
  • TCP資料域頭格式:
    TCP/IP協定棧詳解
    ②UDP協定(使用者資料包協定):
  • UDP協定是一種無連接配接的不可靠的協定,也被稱為一種輕權通信。如果說TCP是協定實作的是兩個人的電話的交流,UDP實作的給另一個發一封信,我隻管把東西發出去,而不用管對方有沒有收到。是以這是一種不可靠的協定,在資料的傳輸中是可能出現丢包的情況的,但它依然應用廣泛,因為它傳輸資料很友善,消耗的資源很少,我們需要用應用層協定來確定資料的可靠性,可能實作比TCP更優的效果。
  • 使用UDP的協定包括:TFTP、SNMP、NFS(網絡檔案系統)、DNS、DHCP(動态主機配置)等。
  • UDP資料域頭格式:
    TCP/IP協定棧詳解

協定棧之網絡層

網絡層包括的協定有:IP、ICMP、ARP、RARP、DHCP等。

①IP(網際協定):

  • IP協定是我們最常見的一種通信協定,它為每一台主機賦予了身份,使得不同主機之間可以通過IP進行通路,IP位址有32位和48位兩種,32位的是IPv4,目前這種IP将要被配置設定完,之後将逐漸過渡到IPv6,更長的位數意味着可以配置設定更多不同的IP。IP位址是網絡供應商為其網絡中的使用者配置設定的一系列位址,IPv4有A、B、C、D、E五類,IP位址的高位一般是網絡位址,低位是主機位址,不同的類别決定了其網絡位址的長度,比如A類的高八位是網絡位址,B類的高16位是網絡位址。
  • IP位址分類圖:
    TCP/IP協定棧詳解
  • 這裡我們介紹一下什麼是網絡位址,什麼是主機位址:我們知道,在不同主機之間除了有傳輸資料的線路,還有配置設定資料的路由器,路由器的作用就是通過其自身的網絡位址和接口的映射來決定把資料傳輸給誰。一般來說我們通過鍊路層發出的資料包括以下這些資訊:目标IP位址,源IP位址,目标MAC(媒體通路位址,此位址由裝置的制造商賦予,全球唯一)位址,自身MAC位址,資料,到達路由器後它會選擇一個合适的通道把資料傳送到下一個網絡位址,資料會從一個路由器跳到另外一個路由器(逐跳的方式),當資料從最後一個路由器發出後,通過ARP就可以把資料送到目标主機,ARP尋址用到的就是主機位址。IP位址是網絡位址和主機位址統一,我們區分他們的方法就是通過子網路遮罩,子網路遮罩是高位全為1,低位全為0的和IP等長的資料區域,把子網路遮罩和IP位址相與就可以得到高位的IP網絡位址。
  • 如果我們一個網絡中隻有少數幾台主機,這就意味着我們隻需要很少的幾種主機位址就可以區分這些主機,那麼我們的思路是把子網路遮罩的更多的位賦1,使得高位有更多位數來配置設定更多的子網絡,這是一種充分利用位數的思路。
  • 子網規劃示意圖:
    TCP/IP協定棧詳解
  • IP位址的特殊情況。全為0,一般預設情況是不支援這種情況的。
  • 公有位址和私有位址。為了節省位址的數量,我們把位址分為公有位址和私有位址,公有位址是對外的且其位址唯一,私有位址是對内的,在内部使用的時候用的是私有位址,我們用公有位址來接收資料,轉為私有位址再使用,我們要把資訊發出去時要先轉化為公有位址再發出去。
  • VLSM是一種可變長度子網路遮罩的協定,使得位址空間的配置設定更加靈活,得到優化。

    ②ICMP協定(控制消息協定):它主要用在對資訊的發送的判斷處理上。

  • 查詢封包。比如在cmd中的Ping指令,它可以去嘗試連接配接某個網,如果能夠尋找到就會有傳回資訊;在Ping自身IP時,指令經過一個回路會回到原處,此時不需要網絡。
  • 錯誤封包。錯誤封包可能出現在資訊傳輸的不同環節上,分為幾種不可達。網絡不可達:主機1把資訊發到路由器上之後,發現這個路由器上沒有到達指定位置的網絡位址的映射,會傳回一個網絡不可到達的指令;主機不可到達:在網絡可達的情況下,如果在與主機2連接配接的路由器發出資訊後,伺服器down機了,便會傳回主機不可達到;禁止分割:當資料的大小超過資料包最大傳輸單元(MTU)時,我們需要把資料包分割為兩個較小的機關才可以通過路由器,但如果路由器禁止分割,資料包就無法通過,便會傳回禁止分割;當資料包到達主機2但是主機2上沒有TCP/IP協定(這種情況一般不會發生),會傳回協定不可達;端口不可達:即使資料包通過了最後一步,連接配接上了伺服器,但相關端口的軟體沒有開,那麼資料仍然無法達到,此時傳回端口不可達。
  • ICMP逾時:每個資料包在發出後會在資料段辨別TTL這個值,初值大于0,每經過一個路由器就會減1,一旦減到0,這個資料包就會被丢棄,傳回ICMP逾時,丢棄這個資料包,這樣可以防止資料包在兩個路由器之間不斷回傳。
  • ICMP重定向:當主機1向主機2發送資料時,預設網關是發給路由器B,路由器B發現下一跳是發給路由器A,而路由器A的接口和之前的資料包接收的接口是同一個,那麼它會向主機發送一個ICMP重定向封包,告訴它以後把資料發給路由器A,這就是重定向。
  • ICMP重定向圖示:
    TCP/IP協定棧詳解
  • 在Ping指令中,ICMP還可以實作計算資料的往返時間,用接收到資料包的時間減去發送資料包的時間就可得到往返時間。

    ③ARP協定(位址解析協定):這也是一種映射,它是映射在主機中的,它存儲的資訊是IP位址到MAC的映射。IP和MAC的差別就是IP是由網絡服務供應商配置設定提供的位址,IP在大的範圍内是可能重複的,MAC是由計算機的制造商生産的時候賦予計算機的全球唯一的辨別。假設主機1和主機2在同一個網絡中,主機1有主機2的IP但不知道它的MAC位址,這時候資料是無法送達主機2的,這時需要用到廣播的形式。以太網中,主機之間都有一條公用的總線,主機1發送消息給總線,所有網絡内的主機都能收到,他們會比對目的IP位址,如果比對上就會應答,向主機發送自己的IP和MAC,同時把主機的IP和MAC映射到自己的ARP中,便于下次發消息,其他主機雖然不會去應答,但也會把主機1的資訊映射到自己的ARP中。

    ④RARP協定(反向位址解析協定):和ARP的差別的這類協定的主機自身無磁盤空間,它的資訊都存放在别的伺服器中,在發送資訊前需要回去需要的資料,比如它已知自己的MAC,需要擷取自己的IP,發出廣播後,其授權伺服器接收到資訊後就會産生應答,把它的IP位址傳回。

    ⑤DHCP協定(動态主機配置協定):它的作用是使得主機的配置可以在伺服器中完成,通過伺服器去配置其他主機的IP,子網路遮罩,預設網關等參數。這使得維護修改IP資料的成本大大降低了。

協定棧之鍊路層

鍊路層是各類資料傳輸的實體接口,這裡就不詳細展開了。

繼續閱讀