天天看點

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

1、OSI參考模型:

       OSI(Open System Interconnect),即開放式系統互聯。一般都稱為OSI參考模型,是ISO(國際标準化組織)組織在1985年研究的網絡互聯模型。該體系結構标準定義了網絡互連的七層架構(實體層、資料鍊路層、網絡層、傳輸層、會話層、表示層和應用層),即ISO開放系統互連參考模型。第一層到第三層屬于OSI參考模型的低三層,負責建立網絡通信連接配接的鍊路;第四層到第七層為OSI參考模型的高四層,具體負責端到端的資料通信。在這一架構下進一步詳細規定了每一層的功能,以實作開放系統環境中的互連性、互操作性和應用的可移植性。 

OSI參考模型中,對等層協定之間交換的資訊單元統稱為協定資料單元(PDU,Protocol Data Unit)。   

傳輸層——資料段(Segment)   網絡層——分組(資料包)(Packet)   資料鍊路層——資料幀(Frame)   實體層——比特(Bit)

2、TCP/IP參考模型:

        TCP/IP參考模型是計算機網絡的祖父ARPANET和其後繼的網際網路使用的參考模型。ARPANET是由美國國防部DoD(U.S.Department of Defense)贊助的研究網絡。逐漸地它通過租用的電話線連結了數百所大學和政府部門。當無線網絡和衛星出現以後,現有的協定在和它們相連的時候出現了問題,是以需要一種新的參考體系結構。這個體系結構在它的兩個主要協定出現以後,被稱為TCP/IP參考模型(TCP/IP reference model)。

       TCP/IP是一組協定的代名詞,它還包括許多協定,組成了TCP/IP協定簇。TCP/IP協定簇分為四層(從下到上分為第一、二、三、四層的),IP位于協定簇的第二層(對應OSI的第三層:網絡層),TCP位于協定簇的第三層(對應OSI的第四層:傳輸層)。TCP/IP通訊協定采用了4層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。這4層分别為: 

應用層:應用程式間溝通的層,如簡單電子郵件傳輸(SMTP)、檔案傳輸協定(FTP)、網絡遠端通路協定(Telnet)等。 

傳輸層:在此層中,它提供了節點間的資料傳送服務,如傳輸控制協定(TCP)、使用者資料報協定(UDP)等,TCP和UDP給資料包加入傳輸資料并把它傳輸到下一層中,這一層負責傳送資料,并且确定資料已被送達并接收。 

互連網絡層:負責提供基本的資料封包傳送功能,讓每一塊資料包都能夠到達目的主機(但不檢查是否被正确接收),如網際協定(IP)。 

網絡接口層:對實際的網絡媒體的管理,定義如何使用實際網絡(如Ethernet、Serial Line等)來傳送資料。

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

       OSI七層模型結構的協定體系結構結構完整,概念明确,但其隻能算是理想的一種體系結構,在實際應用中顯得發雜,定義的層數越多,實作的難度也就随之越大,是以TCP/IP的四層模型結構成了至今被大量運用的網絡體系的模型結構,但這并不意味着OSI就被擱置一旁甚至棄而不用。

3、兩種模型結構的比較:

共同點:

1)、OSI參考模型和TCP/IP參考模型都采用了層次結構的概念。

2)、都能夠提供面向連接配接和無連接配接兩種通信服務機制。

不同點:

1)、OSI采用的七層模型,而TCP/IP是四層結構。

2)、TCP/IP參考模型的網絡接口層實際上并沒有真正的定義,隻是一些概念性的描述。而OSI參考模型不僅分了兩層,而且每一層的功能都很詳盡,            甚至在資料鍊路層又分出一個媒體通路子層,專門解決區域網路的共享媒體問題。

3)、OSI模型是在協定開發前設計的,具有通用性。TCP/IP是先有協定集然後建立模型,不适用于非TCP/IP網絡。

4)、OSI參考模型與TCP/IP參考模型的傳輸層功能基本相似,都是負責為使用者提供真正的端對端的通信服務,也對高層屏蔽了底層網絡的實作細節。            所不同的是TCP/IP參考模型的傳輸層是建立在網絡互聯層基礎之上的,而網絡互聯層隻提供無連接配接的網絡服務,是以面向連接配接的功能完全在TCP          協定中實作,當然TCP/IP的傳輸層還提供無連接配接的服務,如UDP;相反OSI參考模型的傳輸層是建立在網絡層基礎之上的,網絡層既提供面向連          接的服務,又提供無連接配接的服務,但傳輸層隻提供面向連接配接的服務。

5)、OSI參考模型的抽象能力高,适合與描述各種網絡;而TCP/IP是先有了協定,才制定TCP/IP模型的。

6)、OSI參考模型的概念劃厘清晰,但過于複雜;而TCP/IP參考模型在服務、接口和協定的 差別上不清楚,功能描述和實作細節混在一起。

7)、TCP/IP參考模型的網絡接口層并不是真正的一層;OSI參考模型的缺點是層次過多,劃分意義不大但增加了複雜性。

8)、OSI參考模型雖然被看好,由于技術不成熟,實作困難;相反,TCP/IP參考模型雖然有許多不盡人意的地方,但還是比較成功的。

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

       關于TCP/IP的四層模型結構,也可以是五層結構,即在最底層加上了實體層,因為實體層注重的是信号的傳遞以及具有某些電機特性,是以嚴格的來講,應該将其加上,放在網絡接口層的下層位置。

4、關于各層間的作用(基于TCP/IP):

1)、實體層:

        指的是電信号傳遞方式,比如現在以太網通用的網線(雙絞線)、早期以太網采用的同軸電纜(現在主要用于有線電視)、光纖等都屬于實體層的概念。 實體層的能力決定了最大傳輸速率、傳輸距離、抗幹擾性等。集線器(Hub)是工作在實體層的網絡裝置,用于雙絞線的連接配接和信号中繼(将已衰減的信号再次放大使之傳得更遠)。  

2)、鍊路層:

        鍊路層有以太網、令牌環網等标準。鍊路層負責網卡裝置的驅動、幀同步(就是說從網線上檢測到什麼信号算作新幀的開始)、沖突檢測(如果檢測到沖突就自動重發)、 資料差錯校驗等工作。交換機是工作在鍊路層的網絡裝置,可以在不同的鍊路層網絡之間轉發資料幀(比如十兆以太網和百兆以太網之間、以太網和令牌環網之間),由于不同鍊路層的幀格式不同,交換機要将進來的資料包拆掉鍊路層首部重新封裝之後再轉發。

       網絡層的IP協定是構成Internet的基礎。Internet上的主機通過IP位址來辨別,Internet上有大量路由器負責根據IP位址選擇合适的路徑轉發資料包,資料包從Internet上的源主機到目的主機往往要經過十多個路由器。路由器是工作在第三層的網絡裝置,同時兼有交換機的功能,可以在不同的鍊路層接口之間轉發資料包。是以路由器需要将進來的資料包拆掉網絡層和鍊路層兩層首部并重新封裝。IP 協定不保證傳輸的可靠性,資料包在傳輸過程中可能丢失,可靠性可以在上層協定或應用程式中提供支援。

3)、網絡層:

         負責點到點的傳輸(這裡的“點”指主機或路由器),而傳輸層負責端到端 (end-to-end)的傳輸(這裡的“端”指源主機和目的主機)。

4)、傳輸層:

       該層定義了兩個重要的協定,即傳輸控制協定(TCP)或使用者資料報協定(UDP)。TCP是一種面向連接配接的、可靠的協定。就像打電話,雙方拿起電話互通身份之後就建立了連接配接,然後說話就行了,這邊說的話那邊保證聽得到,并且是按說話的順序聽到的,說完話挂機斷開連接配接。也就是說TCP傳輸的雙方需要首先建立連接配接,之後由TCP協定保證資料收發的可靠性,丢失的資料包自動重發,上層應用程式收到的總是可靠的資料流,通訊之後關閉連接配接。UDP協定不面向連接配接,也不保證可靠性,有點像寄信,寫好信放到郵筒裡,既不能保證信件在郵遞過程中不會丢失,也不能保證信件是按順序寄到目的地的。使用UDP協定的應用程式需要自己完成丢包重發、消息排序等工作。

5)、應用層:

         為使用者提供各種所需的服務。比如:FTP,DNS,Telnet,SMTP等。

5、TCP/IP協定棧與資料封裝

       TCP/IP網絡協定棧分為應用層(Application)、傳輸層(Transport)、網絡層(Network)和鍊路層(Link)四層。

      關于兩台計算機通過TCP/IP協定通訊的過程(區域網路的兩個主機可以通信)見下圖:

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

      隻有應用層由使用者提供,傳輸層及其以下的機制由核心提供。應用程式對通訊資料的含義進行解釋,而傳輸層及其以下的機制處理通訊的細節,将資料從一台計算機通過一定的路徑發送到另一台計算機。

      應用層資料通過協定棧發到網絡上時,每層協定都要加上一個資料首部(header),稱為封裝(Encapsulation),如下圖所示:

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

                                                                            TCP/IP資料包的封裝

過程:

       應用層将資料通過TCP/IP協定棧逐層向下傳遞,其下的每層接到來自上層的資料時,根據每層的協定都要在其資料的前端添加首部資訊進行封裝。不同的協定層對資料包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做資料報(datagram),在鍊路層叫做幀(frame)。在經過鍊路層時,資料封裝成幀後發給實體層的傳輸媒體上,到達目标主機後,每層協定再逐層剝掉其首部,最後遞交給目标主機應用層,進行應用程式處理,資料與源主機發送的資料一緻。

       每層都将資料包分為:有效頭部資訊和有效載荷(資料)。對于有效資料稱之為“有效載荷”,添加的部分稱其為“報頭”。下層收到來自上層傳遞的資料時,對于下層來說并不關心其具體内容,因為站在目前層的角度來看,此時已添加上層報頭資訊的資料整個都被視為有效載荷,目前層要做的隻是繼續封裝該資料,即添加自己的報頭。而解包的過程亦是如此,每層隻負責剝離自己能識别的報頭資訊。任何資料報中的報頭資訊必須包含"上層協定",即要把目前的有效載荷傳遞給上層的誰。

上圖适應兩台計算機在同一網段的情況,如果是不同網段,從源主機到目标主機間的資料傳輸則須經過一個或多 個路由器,以實作資料的跨網絡傳輸。

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

        路由器是工作在第三層的網絡裝置,同時兼有交換機的功能,可以在不同的鍊路層接口之間轉發資料包。是以路由器需要将進來的資料包拆掉網絡層和鍊路層兩層首部并重新封裝。在此過程中,仍認為在同一層進行了網絡連接配接。

       目的主機收到資料包後,如何經過各層協定棧最後到達應用程式呢?整個過程如下圖所示

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

1、以太網驅動程式根據以太網首部中的“上層協定”字段确定該資料幀的有效載荷(指除去協定首部之外實際傳輸的資料)是IP、ARP還是RARP協定的資料報。

2、交給相應的協定處理。假如是IP資料報,IP協定再根據IP首部中的“上層協定”字段确定該資料報的有效載荷是TCP、UDP、ICMP還是IGMP ,然後交給相應的協定處理。假如是TCP段或UDP段,TCP或UDP協定再根據TCP首部或UDP首部的“端口号”字段确定應該将應用層資料交給哪個使用者程序。

     IP 位址是辨別網絡中特定主機的位址,而端口号就是同一台主機上辨別特定程序的位址,IP 位址和端口号合起來辨別網絡中唯一的程序。

注意:

       雖然IP、ARP和RARP資料報都需要以太網驅動程式來封裝成幀,但是從功能上劃分,ARP和RARP屬于鍊路層,IP屬于網絡層。雖然ICMP、IGMP、TCP、UDP的資料都需要IP協定來封裝成資料報,但是從功能上劃分,ICMP、IGMP與IP同屬于網絡層,TCP和UDP屬于傳輸層。

6、以太網幀格式

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

其中的源位址和目的位址是指網卡的硬體位址(也叫MAC位址),長度是48位(12個位元組),是在網卡出廠時固化的。

幀協定類型字段有三種值,分别對應IP、ARP、RARP,而後是有效載荷的大小(資料長度)。幀末尾是CRC校驗碼,用于差錯校驗的。

幀協定其類型值分别為0800的IP協定,0806的ARP協定,0835的RARP協定。

用ifconfig指令看一下MAC位址,“HWaddr 00:1C:29:6E:00:8F”部分就是硬體位址。

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

     以太網幀中的資料長度規定最小46位元組,最大1500位元組,ARP和RARP資料包的長度不夠46位元組,要在後面補填充位。

     最大值1500稱為以太網的最大傳輸單元(MTU),不同的網絡類型有不同的MTU,如果一個資料包從以太網路由到撥号鍊路上,資料包長度大于撥号鍊路的MTU了,則需要對資料包進行分片(fragmentation)。ifconfig指令的輸出中也有“MTU:1500”。注意,MTU這個概念指資料幀中有效載荷的最大長度,不包括幀首部的長度。

7、ARP協定

       概念:ARP協定原名為“位址解析協定”,是根據IP位址擷取實體位址的一個TCP/IP協定。主機發送資訊時将包含目标IP位址的ARP請求廣播到網絡上的所有主機,并接收傳回消息,以此确定目标的實體位址。收到傳回消息後将該IP位址和實體位址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節約資源。

        目的: 在網絡通訊時,源主機的應用程式知道目的主機的IP位址和端口号,卻不知道目的主機的硬體位址,而資料包首先 是被網卡接收到再去處理上層協定的,如果接收到的資料包的硬體位址與本機不符,則直接丢棄。是以在通訊前必須獲 得目的主機的硬體位址,ARP協定就起到這個作用。

       每台主機都維護一個ARP快取記錄,可以用arp -a指令檢視。緩存表中的表項有過期時間(一般為20分鐘),如果20分鐘内沒有再次使用某個表項,則該表項失效,下次還要發ARP請求來獲得目的主機的硬體位址。

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

      源MAC位址、目的MAC位址在以太網首部和ARP請求各出現一次,對于鍊路層為以太網的情況是多餘的,但如果鍊路層是其它類型的網絡則有可能是必要的。幀協定類型字段有三種值,分别對應IP、ARP、RARP。硬體類型指鍊路層網絡類型,1為以太網。協定類型指要轉換的位址類型,0x0800為IP位址。後面兩個位址長度對于以太網位址和IP位址分别為6和4(位元組),即0604。op字段:op字段為1表示ARP請求,op字段為2表示ARP應答。  

例如:A主機(源位址)向B主機(目的位址)進行ARP請求,A的MAC為:00:05:5d:61:58:a8;A的IP位址:c0 a8 00 37(192.168.0.55)。

          B的MAC為:00:05:5d:a1:b8:40;B的IP位址:c0 a8 00 02(192.168.0.2).

請求幀為 

以太網首部(14位元組)  ff ff ff ff ff 00 05 5d 61 58 a8 08 06           //廣播位址的目标位址是全1。08 06:ARP幀

APR幀(28位元組)     

00 01                          //硬體類型表示為以太網;硬體位址(MAC位址)長度為6,協定位址(IP位址)長度為4(0604)

08 00 06 04 00 01 00 05 5d 61 58 a8 c0 a8 00 37    //協定類型0800表示為IP位址;op為0x0001表示請求;

00 00 00 00 00 00 c0  a8 00 02   //此處目的以太網位址為全0,IP位址為B的。A主機ARP的目的就是獲得B主機硬體位址(MAC位址/實體位址)。

填充位(18位元組)

應答幀為:

以太網首部 (位元組) 00 05 5d 61 58 a8 00 05 5d a1 b8 40 08 06

APR幀(28位元組)     

00 01                      

08 00 06 04 00 02 00 05 5d a1 b8 40 c0 a8 00 02   //op為0x0002表示應答;

00 05 5d 61 58 a8 c0  a8 00 37  //目的以太網位址和IP位址為A的

填充位(18位元組)

8、RARP協定

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

RARP協定

       原名為“反向位址解析協定”,允許區域網路的實體機器從網關伺服器的ARP表或者緩存上請求其IP位址。網絡管理者在區域網路網關路由器裡建立一個表以映射實體位址(MAC)和與其對應的IP位址。當設定一台新的機器時,其RARP客戶機程式需要向路由器上的 RARP 伺服器請求相應的IP位址。假設在路由表中已經設定了一個記錄,RARP 伺服器将會傳回 IP 位址給機器,此機器就會存儲起來以便日後使用。

産生原因

     ARP(位址解析協定)是裝置通過自己知道的IP位址來獲得自己不知道的實體位址的協定。假如一個裝置不知道它自己的IP位址,但是知道自己的實體位址,裝置知道的隻是網絡接口卡上的實體位址時,又該怎麼辦呢? 為解決這種情況,就有了與ARP對應的RARP協定。

工作方式

      RARP以與ARP相反的方式工作。RARP發出要反向解析的實體位址并希望傳回其對應的IP位址,應答包括由能夠提供所需資訊的RARP伺服器發出的IP位址。雖然發送方發出的是廣播資訊,RARP規定隻有RARP伺服器能産生應答。許多網絡指定多個RARP伺服器,這樣做既是為了平衡負載也是為了作為出現問題時的備份。

9、IP協定(重點)

       IP資料報的格式,見下圖:

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

       IP資料報的首部長度和資料長度都是可變長的,但總是4位元組的整數倍。對于IPv4 ,4位版本字段是4。4位首部長度的數值是以4位元組為機關的,最小值為5,也就是首部長度最小是4x5=20位元組, 也就是不帶任何選項的IP首部,4位能表示的最大值是15,也就是首部長度最大是60位元組。8位TOS字段有3個位用來指定IP資料報的優先級(目前已經廢棄不用),還有4個位表示可選的服務類型(最小延遲、最大呑吐量、最大可靠性、最小成本),還有一個位總是0。 

       16位總長度是整個資料報(包括IP首部和IP層payload)的位元組數。16位辨別:每傳一個IP資料報,16位的辨別加1,可用于分片和重新組裝資料報。

       3位标志和13位片偏移用于分片。

       TTL(Time to live)是這樣用的:源主機為資料包設定一個生存時間,比如64,每過一個路由器就把該值減1,如果減到0就表示路由已經太長了仍然找不到目的主機的網絡,就丢棄該包,是以這個生存時間的機關不是秒,而是跳(hop)。協定字段訓示上層協定是TCP、UDP、ICMP還是IGMP。然後是校驗和,隻校驗IP首部,資料的校驗由更高層協定負責。IPv4的IP位址長度為32位。

下面主要進行說明IP分片和重組

3個标志位:

1)、最高位必須為0,該位必須複制到所有分組中。

2)、不分片位(no not fragment,DF位)。DF=0表示可以分片;DF=1表示接受主機對分組不能分片。如果長度超過MTU(最大傳輸單元)而又不可以分片的話,那麼隻能丢棄該組,并且用ICMP差錯封包向源主機報告。

3)、分片位(More fragment,MF位)。該位表示是否是最後一個分片,MF=1表示接收的分組不是最後一片,否則表示是最後一片。

IP如何分片:

1)、檢查DF标志位,檢查是否允許分片。如果設定了該位,則資料報将被丢棄,并将一個ICMP錯誤傳回給源主機。

2)、基于MTU,确定片長度,将資料長度分為若幹部分。(除了最後的資料部分,所有建立的資料選項的長度必須是8個位元組的整數倍。)

3)、每個資料部分被放入一個IP資料報,這些數的資料報的報頭略微修改了原來的封包頭。

4)、除了最後的資料報分片外,每個分片都設定了多個分片标志位。

5)、每個分片的偏移量字段設定為這個資料部分在原來的資料報所占的位置,這個位置相當于原來未分片的資料報的開頭處。

6)、如果在原來的資料報中包括了選項,則選項類型位元組的高位位元組決定了這個資訊是被複制到所有的分片資料段,還是隻複制到了第一個資料報。

7)、設定新資料報的封包頭字段及總長度字段。

8)、重新計算封包頭部校驗和。

IP的組裝:

        為了高效第組裝分片,用于儲存分片的資料結構必須做到:

1)、快速定位屬于某一資料報的一組分組。

2)、在屬于某一資料報的一組分片中快速插入新的分片。

3)、有效地判斷一個資料報的所有分片是否已經全部接收。

4)、具有組裝逾時機制,如果在重組完成之前定時器溢出,則删除該資料報的所有内容。

關于IP協定常見的問題:

1、為什麼IP不是可靠連接配接的協定

     IP層沒有逾時和重傳機制,沒有連接配接握手協定。

2、IP資料報經過路由器都做了哪些改動

     IP沒經過一個路由器,TTL數就會減一,如果最後TTL為0了,但是依然沒有到達目的地,這個IP包将會被丢棄。這樣做了目的是為了防止出現循環回路。并且最後一跳的路由器會發送一個ICMP不可達的資料包給源IP。

3、關于分片的問題

      IP資料包的長度為16,也就是說最大為65535個位元組。但是我們知道資料鍊路層規定MTU最大傳輸單元為1500個位元組。當IP資料包的大小超過了1500,IP資料包必須要進行分片處理。這還隻是初始發送端的分片,在網絡中如果某個路由器的MTU小于1500,那麼還需要在路由器端做分片,這就給IP包的完整接收照成了很大的不确定性(我們知道資料包達到終點不一定是按照順序的),因為萬一某一個分片丢失,可能會造成真個IP重傳,當然前提是高層協定支援重傳。對于TCP協定,不存在分片的問題,因為TCP報頭的選項字段有MSS字段,規定一個TCP包最大可傳輸的位元組數,一般是1500-20-20=1460位元組。也就是說到達IP封包的時候最大可承載資料隻有1460個位元組,這樣就可以避免分片的問題。但是對于UDP這一類的協定,分片操作還是交給IP完成,雖然這樣可以增加載荷的效率,但是穩定性會受到很大的影響。

IP位址與路由:

IP位址分為5類:(IPv4的IP位址長度為4位元組,通常采用點分〸十進制表示法)

A類 0.0.0.0到127.255.255.255 

B類 128.0.0.0到191.255.255.255

C類 192.0.0.0到223.255.255.255

D類 224.0.0.0到239.255.255.255 

E類 240.0.0.0到247.255.255.255

       IP位址與子網路遮罩做與運算可以得到網絡号,主機号從全0到全1就是子網的位址範圍。

       127.*的IP位址用于本機環回(loop back)測試,通常是127.0.0.1。loopback是系統中一種特殊的網絡裝置,如果發送資料包的目的位址是環回位址或者與本機其它網絡裝置的IP位址相同,則資料包不會發送到網絡媒體上,而是通過環回裝置再發回給上層協定和應用程式,主要用于測試。

一些不能用作主機IP 位址的特殊位址:

      目的位址為255.255.255.255 ,表示本網絡内部廣播,路由器不轉發這樣的廣播資料包。

      主機号全為0的位址隻表示網絡而不能表示某個主機,如192.168.10.0(假設子網路遮罩 為255.255.255.0)。

      目的位址的主機号為全1,表示廣播至某個網絡的所有主機,例如目的位址192.168.10.255表示廣播至192.168.10.0網絡(假設子網路遮罩為255.255.255.0)。

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

        路由表:由很多路由條目組成,每個條目都指明去往某個網絡的資料包應該經由哪個接口發送,其中最後一條是預設路由條目。路由條目路由表中的一行,每個條目主要由目的網絡位址、子網路遮罩、下一跳位址、發送接口四部分組成,如果要發送的資料包的目的網絡位址比對路由表中的某一行,就按規定的接口發送到下一跳位址。預設路由條目路由表中的最後一行,主要由下一跳位址和發送接口兩部分組成,當目的位址與路由表中其它行都不比對時,就按預設路由條目規定的接口發送到下一跳位址。

        路由是從尋找目标網絡開始的,對于路由來說其找尋目标網絡位址一般有三種可能:

        1、知道,但目前網段找不到(送至下一路由);2、不知道,也找不到。(送至預設網關);3、知道,也能在目前網段找到。

       路由如何确定要發送的網絡号?

       IP資料報中存有目标IP位址,是以當路由獲得該位址時,通過與子網路遮罩的“與”操作,便能得到一個網絡号,将其與路由表中的目标位址(Destination)條目進行逐一比對,如果比對成功則通過該網絡号對應的發送接口(Use Iface)發出;若未比對到,則說明不在該區域網路絡,須将其從eth0的發送接口發出,将其送至預設網關處,再由其路由表決定下一跳的位址。

10、UDP協定

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

       UDP協定全稱是使用者資料報協定,在網絡中它與TCP協定一樣用于處理資料包,是一種無連接配接的協定。在OSI模型中,在第四層的傳輸層,處于IP協定的上一層。UDP有不提供資料包分組、組裝和不能對資料包進行排序的缺點,也就是說,當封包發送之後,是無法得知其是否安全完整到達的。UDP用來支援那些需要在計算機之間傳輸資料的網絡應用。包括網絡視訊會議系統在内的衆多的客戶/伺服器模式的網絡應用都需要使用UDP協定。UDP協定從問世至今已經被使用了很多年,雖然其最初的光彩已經被一些類似協定所掩蓋,但是即使是在今天UDP仍然不失為一項非常實用和可行的網絡傳輸層協定。

      UDP協定不面向連接配接,也不保證傳輸的可靠性。例如: 發送端的UDP協定層隻管把應用層傳來的資料封裝成段交給IP協定層就算完成任務了,如果因為網絡故障該段無法發到對方,UDP協定層也不會給應用層傳回任何錯誤資訊。接收端的UDP協定層隻管把收到的資料根據端口号交給相應的應用程式就算完成任務了,如果發送端發來多個資料包并且在網絡上經過不同的路由,到達接收端時順序已經錯亂了,UDP協定層也不保證按發送時的順序交給應用層。通常接收端的UDP協定層将收到的資料放在一個固定大小的緩沖區中等待應用程式來提取和處理,如果應用程式提取和處理的速度很慢,而發送端發送的速度很快,就會丢失資料包,UDP協定層并不報告這種錯誤。是以,使用UDP協定的應用程式必須考慮到這些可能的問題并實作适當的解決方案,例如等待應答、逾時重發、為資料包編号、流量控制等。一般使用

UDP協定的應用程式實作都比較簡單,隻是發送一些對可靠性要求不高的消息,而不發送大量的資料。例如,基于UDP的TFTP協定一般隻用 trivial ftp TCP FTP于傳送小檔案,而基于TCP的協定适用于各種檔案的傳輸。

UDP協定的特點:UDP使用底層的網際網路協定來傳送封包,同IP一樣提供不可靠的無連接配接資料包傳輸服務。它不提供封包到達确認、排序、及流量控制等功能。

11、TCP協定(重點)

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

                                                                                                 TCP段格式

       這裡主要說一下六個标志位,URG、ACK、PSH、RST、SYN和FIN。

       SYN表示建立連接配接,FIN表示關閉連接配接;ACK表示響應;PSH表示有 DATA資料傳輸;RST表示連接配接重置;URG表示緊急指針字段有效。

       SYN、FIN、ACK位:其中ACK是可能與SYN,FIN等同時使用的,比如SYN和ACK可能同時為1,它表示的就是建立連接配接之後的響應。如果隻是單個的一個SYN,它表示的隻是建立連接配接。TCP的幾次握手就是通過這樣的ACK表現出來的。但SYN與FIN是不會同時為1的,因為前者表示的是建立連接配接,而後者表示的是斷開連接配接。

        RST位:RST一般是在FIN之後才會出現為1的情況,表示的是連接配接重置。一般地,當出現FIN包或RST包時,我們便認為用戶端與伺服器端斷開了連接配接;而當出現SYN和SYN+ACK包時,我們認為用戶端與伺服器建立了一個連接配接。

        PSH位(Push):PSH為1的情況,一般隻出現在 DATA内容不為0的包中,也就是說PSH為1表示的是有真正的TCP資料包内容被傳遞。TCP的連接配接建立和連接配接關閉,都是通過請求-響應的模式完成的。當兩個應用程序進行互動式的通信中,有時在一端的應用程式希望在鍵入一個指令後立即收到對應的響應。在這種情況下,TCP就可以使用推送操作。通常的資料中都會帶有PSH,但URG隻在緊急資料才設定,也稱“帶外資料”。

       URG位(URGent):當URG=1時,表示緊急指針字段有效。他告訴系統次封包段有緊急指針,應該盡快的處理(相當于高優先級的資料),而不要按照原來的排序序列來傳送。若不使用緊急指針,那麼這兩個字元将存儲在接收TCP的緩存末尾。隻有在所有資料段被處理完畢後這兩個字元才能被傳遞到接收方的網應用程序。URG是一個正偏移,與TCP首部中序号字段的值相加表示緊急資料後面的位元組,即緊急指針是指向緊急資料最後一個位元組的下一位元組。

TCP協定

 1)、應用層向TCP層發送用于網間傳輸的、用8位位元組表示的資料流,然後TCP把資料流分區成适當長度的封包段(通常受該計算機連接配接的網絡的資料鍊路層的最大傳輸單元(MTU)的限制)。

 2)、TCP把結果包傳給IP層,由它來通過網絡将包傳送給接收端實體的TCP層。TCP為了保證不發生丢包,就給每個包一個序号,同時序号也保證了傳送到接收端實體的包的按序接收。

 3)、接收端實體對已成功收到的包發回一個相應的确認(ACK)。如果發送端實體在合理的往返時延(RTT)内未收到确認,那麼對應的資料包就被假設為已丢失将會被進行重傳。TCP用一個校驗和函數來檢驗資料是否有錯誤,在發送和接收時都要計算校驗和。

       TCP(Transmission Control Protocol 傳輸控制協定)是一種面向連接配接的、可靠的、基于位元組流的傳輸層通信協定,由IETF的RFC793定義。在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能,使用者資料報協定(UDP)是同一層内另一個重要的傳輸協定。在網際網路協定族(Internet protocol suite)中,TCP層是位于IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接配接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。

提起TCP,就不得不提及TCP的三次握手和四次揮手,其過程見下圖用例:

【網絡】網絡的基礎知識--TCP/IP協定、IP分組、TCP傳輸

      三次握手可概括為:請求連接配接,收到應答,再次請求。                    SYN ----> SYN -------->  ACK

      四次揮手可概括為:主動請求釋放,主端收到應答,對端請求釋放,對端收到應答。    FIN--------->ACK-------->FIN--------->ACK

為何要三次握手呢?兩次可以嗎?

        三次握手完後的資料傳輸也是基于請求應答模式的,進而很好的解決了丢包問題。

1)TCP的三次握手最主要是防止已過期的連接配接再次傳到被連接配接的主機。如果采用兩次的話,會出現下面這種情況。

     比如是A機要連到B機,結果發送的連接配接資訊由于某種原因沒有到達B機;于是,A機又發了一次,結果這次B收到了,于是就發資訊回來,兩機就連接配接。傳完東西後,斷開。結果這時候,原先沒有到達的連接配接資訊突然又傳到了B機,于是B機發資訊給A,然後B機就以為和A連上了,這個時候B機就在等待A傳東西過去。

2)三次握手改成僅需要兩次握手,死鎖是可能發生

       考慮計算機A和B之間的通信,假定B給A發送一個連接配接請求分組,A收到了這個分組,并發送了确認應答分組。按照兩次握手的協定,A認為連接配接已經成功地建立了,可以開始發送資料分組。可是,B在A的應答分組在傳輸中被丢失的情況下,将不知道A是否已準備好,不知道A建議什麼樣的序列号,B甚至懷疑A是否收到自己的連接配接請求分組。在這種情況下,B認為連接配接還未建立成功,将忽略A發來的任何資料分組,隻等待連接配接确認應答分組。而A在發出的分組逾時後,重複發送同樣的分組,資源會大大浪費。這樣就形成了死鎖。

為何要四次揮手呢?

       四次揮手:連接配接釋放,確定資料能夠完成傳輸。在建立連接配接時,發送端和接收端分别建立連接配接并以相應的資料結構進行建立維護,在一定程度上兩端處于一個對等的關系。當一放釋放連接配接時,并不能保證對端資料是否發送完畢,是以需要進行釋放連接配接的請求,等待對端确認,是以一來一回,共四次。TCP協定是面向位元組流的,是一種流式服務,全雙工的。本端發送和接受資料兩不誤。 

        揮手需要雙發都同意才能結束。即關閉連接配接時,當收到對方的FIN封包通知時,它僅僅表示對方沒有資料發送給你了;但未必你所有的資料都全部發送給對方了,是以你可以未必會馬上會關閉SOCKET,也即你可能還需要發送一些資料給對方之後,再發送FIN封包給對方來表示你同意現在可以關閉連接配接了,是以它這裡的ACK封包和FIN封包多數情況下都是分開發送的。