TCP/IP原理、基礎以及在Linux上的實現(轉)
導言:本篇作為理論基礎,將向我們講述TCP/IP的基本原理以及重要的協議細節,並在此基礎上介紹了TCP/IP在LINUX上的實現。
OSI參考模型及TCP/IP參考模型
OSI模型(open system interconnection reference model)是基於國際標準化組織(ISO)的建議而發展起來的,它分為如圖3-1所示的七層。當衛星和無線網路出現以後,現有的協議在和這些網路互聯時出現了問題,所以需要一種新的參考體系結構,能無縫地連線多個網路。這個體系結構就是TCP/IP參考模型。
TCP 協議因特網在傳輸層有兩種主要的協議:一種是面向連線的協議,一種是無連線的協議。傳輸控制協議
傳送和接收方TCP實體以資料報的形式交換資料。一個數據報包含一個固定的20位元組的頭、一個可選部分以及0或多位元組的資料。對資料報的大小有兩個限制條件:首先,每個資料報(包括TCP頭在內)必須適合IP的載荷能力,不能超過65535位元組;其次,每個網路都存在最大傳輸單元MTU(maximum transfer unit),要求每個資料報必須適合MTU
TCP實體所採用的基本協議是滑動視窗協議。當傳送方傳送一個數據報時,它將啟動計時器。當該資料報到達目的地後,接收方的TCP實體向回傳送一個數據報,其中包含有一個確認序號,它等於希望收到的下一個資料報的順序號。如果傳送方的定時器在確認資訊到達之前超時,那麼傳送方會重發該資料報。
2.1 TCP資料報頭圖2給出了TCP資料報頭的格式。
源埠、目的埠:16位長。標識出遠端和本地的埠號。
順序號:32位長。表明了傳送的資料報的順序。
確認號:32位長。希望收到的下一個資料報的序列號。
TCP頭長:4位長。表明TCP頭中包含多少個32位字。
接下來的6位未用。
ACK:ACK位置1表明確認號是合法的。如果ACK為0,那麼資料報不包含確認資訊,確認欄位被省略。
PSH:表示是帶有PUSH標誌的資料。接收方因此請求資料報一到便可送往應用程式而不必等到緩衝區裝滿時才傳送。
RST:用於復位由於主機崩潰或其它原因而出現的錯誤的連線。還可以用於拒絕非法的資料報或拒絕連線請求。
SYN:用於建立連線。
FIN:用於釋放連線。
視窗大小:16位長。視窗大小欄位表示在確認了位元組之後還可以傳送多少個位元組。
校驗和:16位長。是為了確保高可靠性而設定的。它校驗頭部、資料和偽TCP頭部之和。
可選項:0個或多個32位字。包括最大TCP載荷,視窗比例、選擇重發資料報等選項。
1.最大TCP載荷:允許每臺主機設定其能夠接受的最大的TCP載荷能力。在建立連線期間,雙方均宣告其最大載荷能力,並選取其中較小的作為標準。如果一臺主機未使用該選項,那麼其載荷能力預設設定為536位元組。
2.視窗比例:允許傳送方和接收方商定一個合適的視窗比例因子。這一因子使滑動視窗最大能夠達到232位元組。
3.選擇重發資料報:這個選項允許接收方請求傳送指定的一個或多個數據報。
4.2.2 連線管理在TCP中建立連線採用三次握手的方法。為了建立連線,其中一方,如伺服器,通過執行LISTEN和ACCEPT原語被動地等待一個到達的連線請求。
5.另一方,如客戶方,執行CONNECT原語,同時要指明它想連線到的IP地址和埠號,設定它能夠接受的TCP資料報的最大值,以及一些可選的使用者資料。CONNECT原語傳送一個SYN=1,ACK=0的資料報到目的端,並等待對方響應。
6.該資料報到達目的端後,那裡的TCP實體將察看是否有程序在偵聽目的埠欄位指定的埠。如果沒有,它將傳送一個RST=1的應答,拒絕建立該連線。
7.如果某個程序正在對該埠進行偵聽,於是便將到達的TCP資料報交給該程序,它可以接受或拒絕建立連線。如果接受,便發回一個確認資料報。一般情況下,TCP的連線建立過程如圖3所示。
8.
9.
10.
11.為了釋放連線,每方均可傳送一個FIN=1的TCP資料報,表明本方已無資料傳送。當FIN資料報被確認後,那個方向的連線即告關閉。當兩個方向上的連線均關閉後,該連線就被完全釋放了。一般情況下,釋放一個連線需要4個TCP資料報:每個方向均有一個FIN資料報和一個ACK資料報。
12.2.3 傳輸策略
TCP中採用滑動視窗來進行傳輸控制,滑動視窗的大小意味著接收方還有多大的緩衝區可以用於接收資料。傳送方可以通過滑動視窗的大小來確定應該傳送多少位元組的資料。當滑動視窗為0時,傳送方一般不能再發送資料報,但有兩種情況除外,一種情況是可以傳送緊急資料,例如,允許使用者終止在遠端機上的執行程序。另一種情況是傳送方可以傳送一個1位元組的資料報來通知接收方重新宣告它希望接收的下一位元組及傳送方的滑動視窗大小。
13.2.4 擁塞控制當載入到某個網路上的載荷能力超過其處理能力時,便會出現擁塞現象。對於因特網來說有兩個潛在的問題--網路的容量和接收方的容量,應該分別進行處理。傳送方始終保持兩個視窗:接收方承認的視窗和擁塞視窗。取兩個視窗的最小值作為可以傳送的位元組數。
14.當建立連線時,傳送方將擁塞視窗大小初始化為該連線所用的最大資料報的長度值,並隨後傳送一個最大長度的資料報。如果該資料報在定時器超時之前得到了確認,那麼傳送方會在原擁塞視窗的基礎上再增加一個數據報的位元組值,使其為兩倍最大資料報的大小,然後傳送兩個資料報。當這些資料報中的每一個都被確認後,擁塞視窗大小就再增加一個最大資料報的長度。當擁塞視窗是N個數據報的大小時,如果傳送的所有N個數據報都被及時確認,那麼將擁塞視窗大小增加N個數據報對應的位元組數目。擁塞視窗保持指數規律增大,直到資料傳輸超時或者達到接收方設定的視窗大小。擁塞視窗便設定為恰好不造成超時或達到接收方的視窗大小的位元組數。
15.2.5 定時器管理
TCP使用多個定時器,如重發定時器、持續定時器、"keep alive"定時器等。最重要的是重發定時器。在傳送一個數據報的同時,啟動一個數據重發定時器。如果在定時器超時前該資料報被確認,則關閉該定時器;相反,如果在確認到達之前定時器超時,則需要重發該資料報。
16.持續定時器用於防止出現死鎖情況。當一個連線長時間閒置時,"keep alive"定時器會超時而使一方去檢測另一方是否仍然存在。如果它未得到響應,便終止該連線。
17.UDP協議因特網協議組也支援無連線的傳輸協議UDP(user data protocol)。 UDP使用底層的因特網協議來傳送報文,提供與IP一樣的不可靠的、無連線的資料報傳輸服務。它不使用確認資訊對報文的到達進行確認,不對收到的資料報進行排序,也不提供反饋資訊來控制機器之間傳輸的資訊流量。UDP通訊的可靠性方面的工作,包括報文的丟失、重複、亂序等現象,由使用UDP的應用程式來承擔。
18.一個UDP資料報包括一個8位元組的頭和資料部分。報頭的格式如下圖4所示,它包括四個長為16位元組的欄位。源埠和目的埠的作用與TCP中的相同,是用來標明源端和目的端的埠號。UDP長度欄位指明包括
資料倉庫系列——01.拉鍊表(原理、設計以及在Hive中的實現)
0x00 前言 過了半年時間,對資料倉庫的理解又有了一些不同的認識,翻出來之前寫的關於拉鍊表的內容,稍作修改重新發出來。本篇將會談一談在資料倉庫中拉鍊表相關的內容,包括它的原理、設計、以及在我們大資料場景下的實現方式。 內容 全文由下面幾個部分組成: 先分享一下拉
Linux下的TCP/IP程式設計多播和廣播的實現
【轉載】 【轉載】Linux下的TCP/IP程式設計----多播和廣播的實現 2016年06月05日 13:54:10 兜裡有糖心裡不慌 閱
傅立葉變換的原理、意義以及如何用Matlab實現快速傅立葉變換
本帖最後由 xiaoliu 於 2011-7-28 21:00 編輯一、傅立葉變換的由來關於傅立葉變換,無論是書本還是在網上可以很容易找到關於傅立葉變換的描述,但是大都是些故弄玄虛的文章,太過抽象,盡是一些讓人看了就望而生畏的公式的羅列,讓人很難能夠從感性上得到理解,最近,
tcp/ip網路協議基礎知識總結
1,TCP/IP模型: 有些地方把接入層也稱為介面層。 2,TCP協議 TCP是一種可靠的,面向連線的服務協議。 TCP頭: 其中的長度為頭部的長度,單位是4位元組。通常為5, 即TCP頭長度為20. 3,UDP協議 UDP 是一種不可靠,無連線的,盡力轉發的資料服務協議。 優點: 不需
js繼承的原理、方式以及優缺點
之前看js繼承問題,自己查閱資料,看到有一篇文章整理還可以,便在文章的基礎上又細化了一些。 JS作為面向物件的弱型別語言,繼承也是其非常強大的特性之一。那麼如何在JS中實現繼承呢?讓我們拭目以待。 JS繼承的實現方式 js繼承的實現方法:原型鏈繼承、構造繼承、例項繼
TCP/IP network connectivity problems in Linux
The Linux traceroute utility identifies the path that is taken from a client node to a specified destination node and the time in milliseconds
TCP/IP協議、Http協議、ftp協議
TCP/IP起源於20世紀60年代末美國政府資助的一個網路分組交換研究專案,TCP/IP是發展至今最成功的通訊協議,它被用於當今所構築的最大的開放式網路系統Internet之上。 TCP和IP是兩個獨立且緊密結合的協議,負責管理和引導資料報文在Interne