背景:沒想到本專業並不開設這門課程,感覺過於逆天,之前開發的時候瞭解過相關知識
但是從來沒有系統地學過,就自己看了書,總結一下
參考:《TCP/IP詳解 卷1:協定》
大多數網路應用程式被設計成客戶——伺服器的模式
域名系統(DNS)是一個分佈資料庫,它可以提供IP地址和主機名的對映
當應用程式通過TCP傳入資料時,資料通過協定棧封裝(TCP首部,IP首部,乙太網首部和尾部)
分用:
TCP伺服器是並行型的,UDP伺服器是重複型(非並行)
又被稱為地址解析協定,它為IP地址到對應的硬體地址之間提供動態對映
首先它會傳送一份「廣播」(以太資料框)給乙太網上的每個主機
資料框中包含目標主機的地址,如果是目標主機,則會回答硬體地址
那麼使用ARP進行請求-回答交換的IP資料現在就可以傳送了
註明:對等鏈路不使用ARP
ARP快取記憶體能有效提高ARP的效率
RARP功能與ARP相反,請求以廣播的形式傳送,應答以單播的形式傳送
ICMP經常被認為是IP層的一個組成部分,它傳輸報錯的資訊和其他需要注意的資訊
ICMP報文通常被IP層或更高協定層呼叫
ICMP時間戳可以用於計算應答的時間
提供不可靠,無連線的資料包傳送服務
不可靠指的是他不能保證IP資料成功到達目的地,只提供最好的傳輸服務
無連線指的是他不處理後續資料包的狀態資訊,每個資料包的處理是相互獨立的
同時也是不按順序處理資料包的
IP從TCP或ICMP或網路介面等接受到資料包之後,其在記憶體中有一個記憶體表
當來自網路介面時,會首先檢查是否是本機的IP地址之一或廣播地址
路由表中包含
主要是為了測試一臺主機是否可達,具有時間戳
可以看到IP資料包從一個主機傳到另一個主機所經過的路由
用Traceroute的理由(為什麼不用(RR)IP記錄路由)
主要利用的是ICMP和IP首部中的TTL欄位
TTL作為一個跳站的計數器,所經過的每個路由都將其值-1
TTL也可以防止資料無休止地流動,當TTL為0或1時,會丟棄該資料,並給信源傳送一份ICMP超時資訊
Traceroute的關鍵在於包含這份ICMP報文的資訊裡也有該路由的資訊
所以其工作原理是:先傳送一份TTL為1的報文從而得到第一個路由的地址,然後傳送TTL為2的報文,這樣持續到主機
IP層工作流程如圖所示:
IP層進行選路只是決定把哪些路由放進路由表的規則。
IP執行選路機制,而路由守護程式一般提供選路策略
IP搜尋路由表時先搜尋匹配項,再搜尋預設項
如果要到達不直接相連的主機或網路必須用某種方式新增到路由表中
比如:
主機產生——返回報錯資訊給主機
轉發產生——向原始傳送端傳送ICMP不可達報錯資訊
ICMP重定向差錯
當發現IP資料包應該傳送給另一個路由時,收到資料包的路由器會向資料包的傳送端傳送ICMP重定向差錯
重定向操作一般用來幫助主機建立完善的路由表
剛開始路由表有一個預設表項,一旦預設路由發生差錯,預設路由器將通知其進行重定向,並允許主機對對應的路由表進行改動
需要注意的是
重定向報文只能由路由器生成,而不能由主機生成
重定向報文是為主機而不是路由器使用的
路由器傳送的應該是對主機的重定向,而不是對網路的重定向
動態選路並不改變核心在IP層的執行方式
路由器之間採用通訊協定互動,而路由守護程式執行通訊協定
僅僅是放置在路由表中的資訊改變了——當路由隨時間變化時
路由是由路由守護動態增加或刪除,而不是來源於程式檔案中的route命令
具體協定有:
UDP並不可靠,它把應用程式傳給IP層的資料傳送出去,但是並不保證能到達目的地
廣播是將資料傳送到網路中的所有主機(一般指的是本地相連的網路),多播是傳送到主機組
廣播和多播都僅用於UDP
使用廣播的問題主要是會增加對該資料包不感興趣的主機的負荷
子網:網路小島
多播的基礎是一個程序的概念,而多播組中的成員是動態的
多播路由器用IGMP來記錄與該路由器相連的網路中組成成員的變化情況
使用規則:
使用這些報文,多播路由器對每個介面保持一個表,表上記錄至少一個包含主機的多播組
路由器只將報文轉發到還擁有屬於那個組主機的介面上
DNS主要提供IP地址與主機名之間的轉換以及電子郵件的選路資訊
一般用來查詢域名資訊等
主名字伺服器-------從磁碟檔案排程資訊
輔名字伺服器-------從主名字伺服器調入資訊
主,輔名字伺服器之間是獨立的
應用程式通過名字解析器將主機名轉化為IP地址,也可以將IP地址轉化為主機名
名字解析器將向名字伺服器傳送查詢請求
所有的DNS查詢都有相同的報文形式,它包含查詢請求和可能的回答資源記錄,授權資源和附加資源記錄
TFTP使用不可靠的UDP,安全性沒有保證
TFTP使用停止等待協定,資料傳送方在傳送下一個資料塊之前需要等待對方的接收和確認
指的是傳輸控制協定,它是一種可靠的,面向連線的位元組流服務
可靠性體現在:
每個TCP段包含源端和目的端埠號,它和IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP連線
TCP為應用層提供雙工服務,說明資料能在兩個方向上獨立地進行運輸
建立一個連線需要3次握手,而終止一個連線需要4次握手
SYN:同步序列編號,它是TCP/IP建立連線時使用的握手訊號,SYN=1,ACK=0時表示這是一個連線請求報文段
若對方同意連線,則響應報文段中SYN=1,ACK=1
ACK:確認號欄位,TCP規定在連線建立後的所有傳送報文段中ACK都置為1
FIN:FIN為1時表示該報文段的傳送方已經結束向對方傳送資料,並要求斷開連線
ISN:初始序列號
一個TCP連線由一個四元組構成
分別是傳送端的IP地址和埠號,接收端的IP地址和埠號
一個TCP的建立需要以下步驟
終止需要4次揮手
TCP使用的被稱為滑動視窗協定的另一種流量控制方法
該協定允許傳送方在停止並等待確認前可以連續傳送多少個分組
由於傳送方不必每傳送一個資料就等待確認,所以這可以加速資料的傳輸
用三個術語來描述視窗左右兩邊的運動
超時重傳是TCP保證安全的一個重要的機制
原理是在傳送一個資料過後就開啟一個定時器,如果在一定的時間內沒有接收到ACK報文,那麼就重新傳送資料,直到傳送成功為止
重傳超時時間(RTO):RTO的設定會影響到超時傳輸協定的效率,其值的設定是一個關鍵的引數
傳輸往返時間(RTT):固定的超時值
一般會認為RTO的取值會略大於RTT
使用低通過濾器來更新一個被平滑的RTT估計器
新的SRTT=α×(舊的SRTT)+(1-α)×(新的RTT樣本)
Karn演演算法:在一個超時和重傳發生時,在重傳資料到達確認前,不能更新RTT估計器,因為不知道ACK對應哪次傳輸
有關演演算法還有擁塞避免演演算法,快速重傳和快速回復演演算法等等
如果一個確認丟失了,那麼傳送方和接收方之間可能會因為持續等待而發生死鎖
為了防止死鎖的產生,所以有了堅持定時器。以週期性地向接收方查詢
如果TCP連線的雙方都沒有向對方傳送資料,則在兩個TCP模組之間不交換任何資訊
如果一個給定的TCP連線在兩個小時都沒有任何動作,則伺服器向客戶傳送一個探查報文片段
則客戶主機必須處於以下4種情況之一
包括4個請求:
get和post區別:
安全:僅用於獲取資訊而不是修改資訊
冪等:對同一URL的多個請求應返回相同的結果
在瀏覽器中輸入 http://www.baidu.com/ 所執行的全過程
Baidu.com是我們想要存取的伺服器,執行以下操作
200:請求成功,一般用於get和post
500:伺服器內部錯誤,無法完成請求
401:請求需要使用者身份驗證
403:伺服器拒絕請求
404:伺服器無法根據使用者端請求找到網頁資源
HTTP協定本身是無狀態的——指無法辨認使用者的身份
cookie實際上是一小段文字訊息
使用者端向伺服器發起請求,如果伺服器需要記錄該使用者狀態,就需要向客戶瀏覽器發一個cookie。
而使用者端瀏覽器會把cookie儲存起來。當瀏覽器再次請求時,會把cookie一起提交給伺服器,伺服器會檢查該使用者的狀態