TCP/IP 基礎

tenor發表於2018-06-23

什麼是TCP?

計算機網路連結在一起,使得計算機能夠發揮出其本身最大的潛力。但是如果只是連線在一起,但是計算機之間卻無法交流資訊,因為他們沒有共通的語言,所以TCP/IP就誕生了。

  • TCP/IP不是一個協議,而是一個協議族的統稱。

裡面包括了IP協議,IMCP協議,TCP協議,以及我們更加熟悉的http、ftp、pop3協議等等。電腦有了這些,就好像學會了外語一樣,就可以和其他的計算機終端做自由的交流了。

這就好比我們現在都在使用的普通話,在沒有普通話之前,大家可能來自不同的地方,使用各地的方言來進行交流,這樣的話就沒有辦法進行溝通,誰也不知道對方說的話是什麼意思,而普通話,正好解決了這個問題。

TCP/IP協議族

今天我們們主要來了解資料鏈路層、網路層、傳輸層這三層OSI模型,而TCP/IP協議族主要集中在這三層。

  • TCP協議是IP協議的上層協議,是應用層協議的下層協議
  • OSI模型有七層,TCP在第4層傳輸層,IP在第3層網路層,而ARP在第2層資料鏈路層。
  • 高層對低層是有強依賴的,所以TCP的建立前要進行ARP的請求和應答。

IP協議

  • IP協議是TCP/IP協議的核心,所有的TCP,UDP,IMCP,IGCP的資料都以IP資料格式傳輸。

要注意的是,IP協議並不是可靠的協議,這是說,IP協議沒有提供一種資料未傳達以後的處理機制--這被認為是上層協議--TCP或UDP要做的事情。

所以這也就出現了TCP是一個可靠的協議,而UDP就沒有那麼可靠的區別。

TCP/IP 基礎

我們們仔細看看這張圖,這裡面有一個8位生存時間,這個欄位規定該資料包在穿過多少個路由之後才會被拋棄,其最大值為255,也就是說這個ip協議包在每穿過一個路由器,這個TTL生存欄位就會減1,超過255個路由器之後,該ip協議包丟失,這也證明了IP協議並並不是可靠的協議。

IP地址:

  • 網路上每一個節點都必須有一個獨立的Internet地址(也叫做IP地址)。

現在,通常使用的IP地址是一個32bit的數字,也就是我們常說的IPv4標準,這32bit的數字分成四組,也就是常見的255.255.255.255的樣式。

如何判斷兩個IP地址網路號是否相同?

  • 關鍵資訊:IP地址和子網掩碼

現在我們來看看我們電腦裡面對IP地址的配置:

TCP/IP 基礎

  • 首先將10進位制的IP地址和子網掩碼全部轉化成二進位制資料.

    子網掩碼是由32bit的二進位制數字序列,形式為是一連串的1和一連串的0。

    例如:255.255.255.0(二進位制就是11111111.11111111.11111111.00000000)

  • 將子網掩碼和IP地址進行"與"操作,這樣的話就能得到一個新的值.

  • "與"操作的運算規則:

      0&0=0;   0&1=0;    1&0=0;     1&1=1;
      即:兩位同時為"1",結果才為"1",否則為"0"
    複製程式碼
  • 將新值二進位制轉化成10進位制,即可得到網路號

IP路由選擇

當一個IP資料包準備好了的時候,IP資料包是如何將資料包送到目的地的呢?它是怎麼選擇一個合適的路徑來"送貨"的呢?

也就是說我要給你寫信,就必須要知道你的地址,不然郵局的快遞小哥怎麼給你送過去呢?
複製程式碼

最特殊的情況是目的主機和主機直連,那麼主機根本不用尋找路由,直接把資料傳遞過去就可以了。至於是怎麼直接傳遞的,這就要靠ARP協議了,後面會講到。

稍微一般一點的情況是,主機通過若干個路由器(router)和目的主機連線。

那麼路由器就要通過ip包的資訊來為ip包尋找到一個合適的目標來進行傳遞,比如合適的主機,或者合適的路由。路由器或者主機將會用如下的方式來處理某一個IP資料包。

如果IP資料包的TTL(生命週期)以到,則該IP資料包就被拋棄。

* 1.搜尋路由表,優先搜尋匹配主機,如果能找到和IP地址完全一致的目標主機,則將該包發向目標主機   
* 2.搜尋路由表,如果匹配主機失敗,則匹配同子網的路由器,這需要“子網掩碼”的協助。如果找到路由器,則將該包發向路由器。
* 3.搜尋路由表,如果匹配同子網路由器失敗,則匹配同網號路由器,如果找到路由器,則將該包發向路由器。
* 4.搜尋路由表,如果以上都失敗了,就搜尋預設路由,如果預設路由存在,則發包.
如果都失敗了,就丟掉這個包。
複製程式碼

這再一次證明了,ip包是不可靠的。因為它不保證送達。

ARP作用:

ARP叫做地址解析協議,是用IP地址換MAC地址的一種協議。

  • IP 地址,是一個32bit的數值,僅僅知道主機的ip地址是無法讓核心將資料幀傳送給主機

  • 網路介面硬體地址,48bit的值,用來表示乙太網網路介面。在硬體層次上,進行資料交換必須有正確的介面地址,核心必須知道目的端的硬體地址才能傳送資料。

簡言之,就是在乙太網中,一臺主機要把資料幀傳送到同一區域網上的另一臺主機時,裝置驅動程式必須知道乙太網地址才能傳送資料。而我們只知道IP地址,這時就需要採用ARP協議將IP地址對映為乙太網地址。

ARP(地址解析)協議是一種解析協議,本來主機是完全不知道這個IP對應的是哪個主機的哪個介面,當主機要傳送一個IP包的時候,會首先查一下自己的ARP快取記憶體(就是一個IP-MAC地址對應表快取),如果查詢的IP-MAC值對不存在,那麼主機就向網路傳送一個ARP協議廣播包,這個廣播包裡面就有待查詢的IP地址,而直接收到這份廣播的包的所有主機都會查詢自己的IP地址,如果收到廣播包的某一個主機發現自己符合條件,那麼就準備好一個包含自己的MAC地址的ARP包傳送給傳送ARP廣播的主機,而廣播主機拿到ARP包後會更新自己的ARP快取(就是存放IP-MAC對應表的地方)。傳送廣播的主機就會用新的ARP快取資料準備好資料鏈路層的的資料包傳送工作。

注意:一般認為ARP協議只使適用於區域網。
複製程式碼

一個典型的arp快取資訊如下:

TCP/IP 基礎

tcp三次握手

現在我們來用一張gif圖來說明再進行http傳送請求資料之前建立的連線:
複製程式碼

TCP/IP 基礎

  • 第一次握手:Client將標誌位SYN置為1,隨機產生一個值seq=X,並將該資料包傳送給Server,Client進入SYN_SENT狀態,等待Server確認。

  • 第二次握手:Server收到資料包後由標誌位SYN=1知道Client請求建立連線,Server將標誌位SYN和ACK都置為1,ack=X+1,隨機產生一個值seq=Y,並將該資料包傳送給Client以確認連線請求,Server進入SYN_RCVD狀態。

  • 第三次握手:Client收到確認後,檢查ack是否為X+1,ACK是否為1,如果正確則將標誌位ACK置為1,ack=Y+1,並將該資料包傳送給Server,Server檢查ack是否為Y+1,ACK是否為1,如果正確則連線建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸資料了。

好了,關於TCP/IP部分內容就先整理到這裡了

相關文章