1. 程式人生 > >(轉)計算機網絡基礎知識總結

(轉)計算機網絡基礎知識總結

實現 傳輸控制協議 端到端 依然 但是 測試 數據流 還需要 osi

原文:https://i.cnblogs.com/EditPosts.aspx?opt=1

http://blog.csdn.net/scenlyf/article/details/52127296

http://blog.csdn.net/shaozhenged/article/details/52047277

說到網絡相關知識,首先先說說計算機網絡體系結構中兩種最為重要的參考模型,OSI參考模型和TCP/IP參考模型。

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等)來傳送數據。

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

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的四層模型結構,也可以是五層結構,即在最底層加上了物理層,因為物理層註重的是信號的傳遞以及具有某些電機特性,所以嚴格的來講,應該將其加上,放在網絡接口層的下層位置。

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

1)、物理層:

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

2)、鏈路層:

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

網絡層的IP協議是構成Internet的基礎。Internet上的主機通過IP地址來標識,Internet上有大量路由器負責根據IP地址選擇合適的路徑轉發數據包,數據包從Internet上的源主機到目的主機往往要經過十多個路由器。路由器是工作在第三層的網絡設備,同時兼有交換機的功能,可以在不同的鏈路層接口之間轉發數據包。因此路由器需要將進來的數據包拆掉網絡層和鏈路層兩層首部並重新封裝。IP 協議不保證傳輸的可靠性,數據包在傳輸過程中可能丟失,可靠性可以在上層協議或應用程序中提供支持。

技術分享圖片

3)、網絡層:

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

網絡層的主要作用就是路由和尋址,主要接觸到的是IP協議即為IP地址

Layer3網絡層:對應設備有路由器

路由器的作用:

廣播、組播控制

對數據做尋址、選擇到達目的的網絡的最佳路徑

流量管理

連接廣域網(WAN)

IP地址概念的說明:

技術分享圖片

根據地址的概念,來舉例介紹網絡號和主機號的概念,以及路由尋址和路由的概念。

技術分享圖片

4)、傳輸層:

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

技術分享圖片

5)、應用層:

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

技術分享圖片

技術分享圖片

技術分享圖片

5、TCP/IP協議棧與數據封裝

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

關於兩臺計算機通過TCP/IP協議通訊的過程(局域網的兩個主機可以通信)見下圖:

技術分享圖片

只有應用層由用戶提供,傳輸層及其以下的機制由內核提供。應用程序對通訊數據的含義進行解釋,而傳輸層及其以下的機制處理通訊的細節,將數據從一臺計算機通過一定的路徑發送到另一臺計算機。

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

技術分享圖片

TCP/IP數據包的封裝

過程:

應用層將數據通過TCP/IP協議棧逐層向下傳遞,其下的每層接到來自上層的數據時,根據每層的協議都要在其數據的前端添加首部信息進行封裝。不同的協議層對數據包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做數據報(datagram),在鏈路層叫做幀(frame)。在經過鏈路層時,數據封裝成幀後發給物理層的傳輸介質上,到達目標主機後,每層協議再逐層剝掉其首部,最後遞交給目標主機應用層,進行應用程序處理,數據與源主機發送的數據一致。

每層都將數據包分為:有效頭部信息和有效載荷(數據)。對於有效數據稱之為“有效載荷”,添加的部分稱其為“報頭”。下層收到來自上層交付的數據時,對於下層來說並不關心其具體內容,因為站在當前層的角度來看,此時已添加上層報頭信息的數據整個都被視為有效載荷,當前層要做的只是繼續封裝該數據,即添加自己的報頭。而解包的過程亦是如此,每層只負責剝離自己能識別的報頭信息。任何數據報中的報頭信息必須包含"上層協議",即要把當前的有效載荷交付給上層的誰。

上圖適應兩臺計算機在同一網段的情況,如果是不同網段,從源主機到目標主機間的數據傳輸則須經過一個或多個路由器,以實現數據的跨網絡傳輸。

技術分享圖片

路由器是工作在第三層的網絡設備,同時兼有交換機的功能,可以在不同的鏈路層接口之間轉發數據包。因此路由器需要將進來的數據包拆掉網絡層和鏈路層兩層首部並重新封裝。在此過程中,仍認為在同一層進行了網絡連接。

目的主機收到數據包後,如何經過各層協議棧最後到達應用程序呢?整個過程如下圖所示

技術分享圖片

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、以太網幀格式

技術分享圖片

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

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

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

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

技術分享圖片

以太網幀中的數據長度規定最小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請求來獲得目的主機的硬件地址。

技術分享圖片

源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 0006 04 00 01 00 05 5d 61 58 a8 c0 a8 00 37 //協議類型0800表示為IP地址;op為0x0001表示請求;

00 00 00 00 00 00c0 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協議

技術分享圖片

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數據報的格式,見下圖:

技術分享圖片

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)。

技術分享圖片

路由表:由很多路由條目組成,每個條目都指明去往某個網絡的數據包應該經由哪個接口發送,其中最後一條是缺省路由條目。路由條目路由表中的一行,每個條目主要由目的網絡地址、子網掩碼、下一跳地址、發送接口四部分組成,如果要發送的數據包的目的網絡地址匹配路由表中的某一行,就按規定的接口發送到下一跳地址。缺省路由條目路由表中的最後一行,主要由下一跳地址和發送接口兩部分組成,當目的地址與路由表中其它行都不匹配時,就按缺省路由條目規定的接口發送到下一跳地址。

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

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

路由如何確定要發送的網絡號?

IP數據報中存有目標IP地址,所以當路由獲得該地址時,通過與子網掩碼的“與”操作,便能得到一個網絡號,將其與路由表中的目標地址(Destination)條目進行逐一比對,如果比對成功則通過該網絡號對應的發送接口(Use Iface)發出;若未匹配到,則說明不在該局域網絡,須將其從eth0的發送接口發出,將其送至默認網關處,再由其路由表決定下一跳的地址。

10、UDP協議

技術分享圖片

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段格式

這裏主要說一下六個標誌位,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的三次握手和四次揮手,其過程見下圖用例:

技術分享圖片

三次握手可概括為:請求連接,收到應答,再次請求。 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報文多數情況下都是分開發送的。

(轉)計算機網絡基礎知識總結