iso/osi(國際標準化組織/開放系統互聯)參考模型把資料通訊協議分為7層,自底向上分別是物理層,資料鏈路層,網路層,傳輸層,會話層,表示層,應用層。
ietf的tcp/ip的層次模型可以看作比osi少幾層的結構。一般分為4層,自底向上分別是網路訪問層,網際層,傳輸層,應用層。
不同層次對資料使用有不同的名稱。在應用層,tcp應用稱資料為stream。udp的應用程式稱資料為message。在傳輸層tcp把資料叫做segment,而udp稱為packet。在網際層,所有的資料視為datagram。在網路訪問層,資料稱為frame。
網路訪問層不是物理層,它定義和物理層的介面,可以認為是作業系統中的硬體驅動程式這一層。粗略可以認為和osi的資料鏈路層等價。
網路訪問層協議有ppp,ethernet等。ppp代表point-to-pointprotocol,用來直連兩個網路節點,多用來撥號訪問。有pppoe(pppover ethernet)和pppoa(pppover atm)。ethernet是lan技術中基於frame的協議族。ethernet由802.3定義。它定義了物理層和資料鏈路層的內容。
在網際層,包括ip,arp,rarp,icmp協議。arp協議用來把ip轉化為mac的。rarp反過來是通過mac位址來得到ip位址,為了配置ip的目的。rarp已被dhcp取代。icmp用來匯報錯誤,診斷,路由等。
傳輸層協議是主要是tcp/udp,比較新的有sctp。在建立socket的時候可以指定tcp/udp。sock_stream指示用tcp,sock_dgram指示用udp。還可以指定一種型別是sock_raw,相當於使用者可以直接收發ip層的報文,基於此,使用者可以實現自己的傳輸層協議。
應用層協議有http,ftp,dhcp,dns等。dhcp利用udp協議實現。dns既利用了udp,又利用了tcp。
tcp連線建立需三次握手。拆除是四次揮手。
1、建立連線協議(三次握手)
(1)客戶端傳送乙個帶syn標誌的tcp報文到伺服器。這是三次握手過程中的報文1。
(2)伺服器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ack標誌和syn標誌。因此它表示對剛才客戶端syn報文的回應;同時又標誌syn給客戶端,詢問客戶端是否準備好進行資料通訊。
(3)客戶必須再次回應服務段乙個ack報文,這是報文段3。
2、連線終止協議(四次揮手)
由於tcp連線是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向的連線。收到乙個fin只意味著這一方向上沒有資料流動,乙個tcp連線在收到乙個fin後仍能傳送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。
(1)tcp客戶端傳送乙個fin,用來關閉客戶到伺服器的資料傳送(報文段4)。
(2)伺服器收到這個fin,它發回乙個ack,確認序號為收到的序號加1(報文段5)。和syn一樣,乙個fin將占用乙個序號。
(3)伺服器關閉客戶端的連線,傳送乙個fin給客戶端(報文段6)。
(4)客戶段發回ack報文確認,並將確認序號設定為收到序號加1(報文段7)。
為什麼建立連線協議是三次握手,而關閉連線卻是四次握手呢?
這是因為服務端的listen狀態下的socket當收到syn報文的建連請求後,它可以把ack和syn(ack起應答作用,而syn起同步作用)放在乙個報文裡來傳送。但關閉連線時,當收到對方的fin報文通知時,它僅僅表示對方沒有資料傳送給你了;但未必你所有的資料都全部傳送給對方了,所以你可以未必會馬上會關閉socket,也即你可能還需要傳送一些資料給對方之後,再傳送fin報文給對方來表示你同意現在可以關閉連線了,所以它這裡的ack報文和fin報文多數情況下都是分開傳送的。
在tcp程式設計中,用close來關閉socketdescriptor,這時通過此sd既不能讀也不能寫;用shutdown來指定關閉讀、寫還是讀寫。
tcp傳輸是可靠傳輸,具有錯誤檢測,流控,擁塞控制。
tcp在傳送segment時會給segment編號,確保接收端能夠按序組裝收到的segment。tcp採用cumulativeacknowledgement,一條確認訊息代表被確認的序號之前的所有segment都已收到,不用一一確認。tcp傳送端檢測到segment丟失,會重傳。序號和確認確保了可以丟掉重複segment,重傳丟失的包。tcpcksum確保了正確性。
tcp採用滑窗(slidingwindow)的方法解決發端傳送快,收端接收慢的問題,此為流控。tcp還有擁塞控制演算法。
資料通訊網的交換方式有電路交換,報文交換和分組交換。電路交換電路接續時間長,線路利用率低。報文交換採用儲存**的方式,若報文較長,需要較大容量的儲存器,若將報文放到外儲存器中去時,會造成響應時間過長,增加了網路延遲時間。另一方面報文交換通訊線路的使用效率仍不高。分組交換與報文交換都是採用儲存**交換方式。分組交換首先把來自使用者的資訊文電暫存於儲存裝置中,並劃分為多個一定長度的分組,每個分組前邊都加上固定格式的分組標題,用於指明該分組的發端位址、收端位址及分組序號等。以報文分組作為儲存**的單位,分組在各交換節點之間傳送比較靈活,交換節點不必等待整個報文的其他分組到齊,乙個分組、乙個分組地**。這樣可以大大壓縮節點所需的儲存容量,也縮短了網路時延。另外,較短的報文分組比長的報文可大大減少差錯的產生,提高了傳輸的可靠性。每個分組可以分開選路。
路由器完成ip選路的功能。路由表可以用radix樹的方式儲存。radix樹是二叉樹,左孩子是0右孩子是1。這樣整個路由表可以儲存在深度最深32(對ipv4)的樹中。除了radix樹的方式,還有hashtable的方式。還有完全由硬體來儲存和查詢路由表的方式。
TCP IP協議學習筆記
最近正在上網路協議分析的課程,課程已經接近尾聲,因此做一些總結性的記錄。為什麼要進行分層呢 我們思考這樣乙個問題 我打算實現乙個qq,我需要解決哪些問題呢?假設qq伺服器現在已經知道了我要登入,然後他傳送給我乙個訊息告訴我說他就是qq的伺服器,那麼我可以相信他嗎?會不會是其他的搗蛋鬼冒充qq伺服器給...
TCP IP協議學習筆記
網際網路五層模型 1.應用層 規定應用程式的資料格式,必須有不同的協議規定電子郵件 網頁 ftp資料的格式,資料放在 udp或 tcp資料部門 http ftp等 2.傳輸層 建立埠到埠的通訊。確定主機和埠實現程式之間的交流。udp tcp協議 3.4.連線層 確定0 1分組。乙太網協議 5.實體層...
TCP IP 協議筆記四
一 tcp首部 t c p提供了一種可靠的面向連線的位元組流運輸層服務。t c p將使用者資料打包構成報文段 它傳送資料後啟動乙個定時器 另一端對收到的資料進行確認,對失序的資料重新排序,丟棄重複資料 t c p提供端到端的流量控制,並計算和驗證乙個強制性的端到端檢驗和。每個t c p段都包含源端和...