網路程式設計學習筆記,

2021-07-22 04:55:51 字數 2042 閱讀 3881

說起來很慚愧,我本科專業是網路工程,但是對網路方面的知識學習還是不怎麼樣。隨著工作的不斷深入,發現自己的這方面的知識異常缺乏,最近也開始惡補了起來,這篇就是我這個星期看tcp/ip協議詳解卷一的chapter1到10的簡要筆記。

tcp/ip協議棧有四個層次,分別是鏈路層,網路層,傳輸層,應用層。這四個層次把計算機網路裡面的功能進行了比較高度的抽象分類,每一層有自己的相應負責的功能。簡單的說就是鏈路層負責處理底層網路介面的通訊細節,網路層負責提供網路分組的服務,運輸層負責提**用程式埠到埠的通訊,應用層負責提供特定應用服務。

arp和rarp工作在鏈路層,arp提供查詢目的ip對應的目的網絡卡硬體位址,rarp則是乙個逆操作,主要是提供給無盤工作站啟動時由自己的網絡卡硬體位址查詢自身ip的功能。ip,icmp,igmp工作在網路層,ip協議相當於提供了通訊過程中到達目的介面的途徑,模擬生活中的門牌號碼,icmp則是乙個工作在網路層的負責傳遞網路狀態相關資訊的協議。tcp和udp則工作於運輸層,提供各種質量的網路傳輸服務。

第二張關於鏈路層的知識大多數是硬體層次的介紹,在此暫時略去。傳給環迴介面的資料還是會走tcp/ip協議棧,只是在傳輸層的時候如果檢測到是環迴位址就把要傳送的ip資料報直接返回給自己,不會進入網路。鏈路層的協議一般都對資料幀長度做出了限制,這個限制我們成為mtu。由於現實中網路的情況複雜,很可能在乙個通訊鏈路上的各處mtu不一樣,所以需要乙個發現路徑mtu的機制。

ip協議是整個tcp/ip協議棧的核心,tcp,udp,icmp,igmp都是走ip協議的。ip協議提供不可靠無連線的服務,簡單地說就他告訴了你怎樣尋路可以送到對方主機,但是僅此而已,不保證一定能送達,也不保證誰會先到。在ip層裡維護著乙個路由表,要傳送資料的時候,ip要做的是把目的ip位址跟路由表的表項進行匹配,找到能匹配的表目後,傳送給指定的下一跳位址;如果匹配失敗就生成主機不可達或網路不可達錯誤。子網定址是為了解決大量的ip主機號被浪費的問題,子網掩碼是用來告訴程式給定的ip位址有多少位用於子網號。

arp為ip位址到對應的硬體位址之間提供動態對映。在ip層找到下一跳的ip之後,鏈路層需要知道這個ip對應的硬體位址,這個時候鏈路層就需要查詢arp快取記憶體,如果不存在相應的表項的話,就會廣播乙個arp請求,向所有收到的主機詢問這個ip的硬體位址,如果接收到的主機發現這份arp請求詢問的是自身的arp位址的話,就會對這個請求進行應答。如果不存在對應主機可以應答這個請求,arp協議會重複嘗試請求,在一段時候後依然沒有應答的話才會放棄。arp**允許路由器代為應答某個對應網路的arp請求。免費arp是指系統啟動時,主機傳送乙個請求自身ip的arp請求,這樣做可以檢測當前網路中是否有與自己ip衝突的主機,並且主機會利用收到arp請求來更新舊的arp表項。

rarp是用於沒法在系統啟動的過程中從硬碟引導ip位址的協議,在引導的時候傳送乙個帶有自身介面硬體位址的rarp請求,從rarp伺服器上讀取自身的ip位址。

icmp是直接使用ip資料報傳輸的,icmp報文分查詢報文和差錯報文兩種。icmp位址掩碼請求用於無盤系統獲取自身的子網掩碼,類似於rarp獲取ip位址,通過廣播找到應答的伺服器。icmp時間戳請求用於向另外乙個系統查詢當前時間。icmp差錯報文有一種叫icmp埠不可達報文,它是icmp目的不可達報文的一種。在udp傳輸的過程中如果發現收到乙個資料報無法與乙個使用該埠的程式匹配的話,udp就會返回乙個icmp埠不可達報文。

ip選路其實就是搜尋路由表,而怎麼維護更新路由表則是最重要的問題,這稱之為選路策略。路由表可以由系統引導的時候從硬碟中初始化,同時在初始化介面的時候也會為介面建立乙個直接路由。icmp重定向差錯出現在路由器發現乙份資料報傳送和接收的介面一樣的時候,這個時候說明了在傳送到指定目的ip的鏈路中,該路由是可以跳過的,通知上一級新的路由選項。icmp路由器發現報文可以用於主機在引導時廣播請求路由器響應乙份通告報文。此外路由器也會定期廣播傳送通告報文,通告接收到的主機更新路由表。

上一段討論的是靜態選路,這一段我們討論動態選路。動態選路用於路由器之間的通訊,根據使用範圍不一樣可以分為igp和egp。igp用的比較多的是rip和ospf,rip在啟動時會向本地的所有介面傳送請求報文要求其他路由器把自己的完整路由表傳送過來,利用收到的應答更新路由表。完成這個過程之後,每過一段時間路由器會將其當前完整的路由表通告給相鄰路由器。ospf協議採取的是每個路由器主動地測試與相鄰路由的狀態。

網路程式設計學習筆記

伺服器端程式 1 建立套接字 socket 2 將套接字繫結到乙個本地位址和埠上 bind 3 將套接字設為監聽模式,準備接收客戶請求 listen 4 等待客戶請求到來 當請求到來後,接收連線請求,返回乙個新的對應於此次連線的套接字 accept 5 用返回的套接字和客戶端進行通訊 send re...

網路程式設計 學習筆記

tcp 傳輸控制協議 保障了兩個應用程式之間的可靠通訊 通常用於網際網路協議 udp 使用者資料報協議 提供了應用程式之間要傳送的資料的資料報 socket 程式設計 套接字使用了tcp提供了兩台計算機的通訊機制,客戶端程式建立乙個套接字,並嘗試連線伺服器的套接字 當連線建立時,伺服器會建立乙個so...

網路程式設計學習筆記 socket程式設計

本地的程序間通訊 ipc 有很多種方式,總結為4類 在本地可以通過程序pid來唯一標識乙個程序,但是在網路中這是不可以的。tcp ip協議族幫我們解決了這個問題,網路層的 ip位址 可以唯一標識網路中的主機,而傳輸層的 協議 埠 可以唯一標識主機中的應用程式 程序 這樣利用三元組 ip位址 協議 埠...