TCP/IP讀書筆記

 

第一章 概述
1 TCP/IP的分層
鏈路層:物理接口、ARP、RARP
網絡層:IP、ICMP、IGMP
運輸層:TCP和UDP
應用層:應用程序

2 五類IP地址
共32bit
A類地址 起始字段0----- 網絡號7bit---- 主機號24bit 範圍 0.0.0.0-127.255.255.255
B類地址 起始字段10---- 網絡號14bit--- 主機號16bit 範圍128.0.0.0-191.255.255.255
C類地址 起始字段110--- 網絡號21bit--- 主機號8bit 範圍192.0.0.0-223.255.255.255
D類地址 起始字段1110-- 多播組號28bit              範圍224.0.0.0-239.255.255.255
E類地址 起始字段11110- 留待後用27bit              範圍240.0.0.0-247.255.255.255

第二章 鏈路層
1 鏈路層的三個目的
1)爲IP模塊發送和接收IP數據報;
2)爲ARP模塊發送ARP請求和接收ARP應答;
3)爲RARP發送RARP請求和接收RARP應答。

2 CSMA/CD
帶衝突檢測的載波偵聽多路接入
Carrier Sense, Multiple Acess with Collision Detection

3 以太網幀格式(頭部14byte)
目的地址(6byte)-源地址(6byte)-類型(2byte)-數據(46-1500byte)-CRC(4byte)
IP                                類型(0800) -IP數據(46-1500byte)
ARP                               類型(0806) -ARP數據(28)-PAD(18)
RARP                              類型(0835) -RARP數據(28)-PAD(18)

4 SLIP(Serial Line IP)
鏈路層協議,是一種對IP的簡單封裝(和以太網幀無關),和IP包的不同之處有
1)以END(0xc0)開頭和結束
2)用(0xdb 0xdc)取代報文中的(0xc0)
3)用(0xdb 0xdd)取代報文中的(0xdb)
缺點
1)每一端必須知道對方IP
2)數據幀沒有類型字段(比如線路只能用於SLIP)
3)沒有CRC
CSLIP 壓縮的SLIP

5 PPP點對點協議
PPP修正了SLIP的缺陷,其包括:
1)串行鏈路IP封包,支持校驗,異步和同步模式;
2)建立、配置及測試數據鏈路控制協議(LCP:Link Control Protocol);
3)針對不同網絡的網絡控制協議(NCP:Network Control Protocol)

PPP幀格式
標誌(7E)-地址(FF)-控制(03)-協議(2byte)-信息(小於1500byte)-CRC(2byte)-標誌(7E)
IP                              -協議(0021)-IP數據報文
LCP                             -協議(C021)-LCP內容
NCP                             -協議(8021)-NCP內容

6 PPP比SLIP的優點
1)單鏈路多協議
2)有CRC校驗
3)使用NCP可以進行動態IP協商
4)支持壓縮
5)可以用ICP對多個鏈路進行配置

7 環回接口
localhost 127.0.0.1
1)環回地址任何數據均作爲IP輸入
2)傳給廣播地址或多播地址複製一份給迴環
3)任何傳給該地址的IP數據均送到迴環接口(指本機發送IP給本機)

第三章 IP:網際協議
1 IP首部共20byte (大印第安序)
4byte 版本(4bit)-首部長度(4bit)-服務類型TOS(8bit)-總長度字節數(16bit)
8byte 標識(16bit)-標誌(3bit)-偏移(13bit)
12byte 生存時間TTL(8bit)-協議(8bit)-首部校驗和(16bit)
16byte 源IP的地址(32bit)
20byte 目的IP地址(32bit)
後面是可選內容,依然以32bit對齊,首部最長60byte

2 IP首部部分內容解釋
TOS 現在基本不用
長度 最大爲65535
標識 通常每發送一次報文加1
TTL 經過多少路由器後被丟棄
首部校驗和 僅計算首部的校驗和信息

3 路由表包含信息
1)目的IP地址
2)下一跳路由IP地址,或直連機器的IP
3)標誌,標明目的IP是機器或網絡,下一跳是路由還是直連機器
4)數據包的網絡接口

4 IP路由選擇的功能
1)搜索路由表,找完全匹配目的IP的表項,發給下一跳
2)搜索路由表,找網絡號匹配的表項,發給下一跳
3)搜索路由表,尋找默認表項,發給下一跳

5 子網尋址的好處:縮小Internet路由表的規模

6 子網掩碼,32bit,1留給網絡和子網號,0留給主機號
根據IP地址和子網掩碼,可以確定IP數據包的目的:
1)本子網的主機
2)本網絡中其他子網的主機
3)其他網絡的主機

第四章 ARP:地址解析協議
1 ARP協議格式(28byte)
硬件類型(2)-協議類型(2)-硬件地址長度(1)-協議地址長度(1)-操作(2)-發送方硬件地址(6)-發送方IP地址(4)-目的硬件地址(6)-目的IP地址(4)

操作:ARP請求(1)、ARP應答(2)、RARP請求(3)、RARP應答(4)

2 ARP請求的應答過程(ARP是廣播的)
ARP請求將除了目的端硬件地址外所有字段填充完整。系統受到ARP請求後,填入自己硬件地址,將操作字段改爲2(ARP應答),再交換目的和發送地址,將其發送回去。

第六章 ICMP:internet控制報文協議
1 ICMP報文格式
類型(8bit)-代碼(8bit)-校驗和(16bit)-其他主要內容

2 ICMP分類
查詢報文 可能會導致產生差錯報文
差錯報文 永遠不會再產生新的差錯報文

3 不會產生ICMP差錯報文的情況(防止廣播風暴)
1)ICMP差錯報文
2)目的地址爲廣播地址
3)鏈路層廣播數據報
4)不是IP的第一片
5)源地址不是單個主機的數據報

4 ICMP的主要功能
1)獲取子網掩碼
2)獲取時間戳
3)端口不可達差錯
4)

5 ICMP差錯的規定
必須包含生成該差錯報文的數據報IP首部,還必須包含至少IP首部後面的前8個字節


第九章 IP選路
1 ICMP重定向
接受者必須查看三個地址:
1)導致重定向的IP
2)發送重定向報文的路由器的IP
3)應採用的路由器的IP
其他規則
1)重定向報文只能由路由器產生,不能由主機產生
2)重定向報文是爲主機而不是爲路由器使用的
3)路由器發送的是針對主機的重定向報文,不是針對網絡的報文

2 IP路由表項內容
5bit標誌
目的IP地址(主機、網絡或默認)
下一站路由表的IP地址(間接路由)或者本地接口的IP地址(直接路由)
指向本地接口的指針

第十章 動態選路協議
1 一些名詞
IGP 內部網關協議(Interior Gateway Protocol)
RIP 選路信息協議(Routing Information Protocol)
OSPF 開發最短路徑優先(Open Shortest Path First)
BFP 邊界網關協議(Board Gateway Protocol)
CIDR 無類型域間選路(Classless Inter Domain Routing)

2 RIP
RIP包含在UDP數據報中
RIP主要用來報告網絡上的路由及對應的跳數
距離狀態協議

3 OSPF
直接使用IP
鏈路狀態協議
比RIP收斂快(網絡改變後穩定快)
相對RIP優點有多個。。省略

4 BGP
使用TCP作爲載體,需要建立TCP鏈接。
不同自治系統的路由器之間進行通訊的外部網關協議。和IGP相對。

第11章 UDP:用戶數據報協議
1 UDP首部格式
源端口號(16bit)-目的端口號(16bit)-UDP長度(16bit)-UDP檢驗和(16bit)-數據

2 UDP檢驗和
UDP檢驗包含UDP首部和UDP數據
IP首部檢驗和僅覆蓋IP首部

UDP和TCP在計算檢驗和時都包含一個僞首部(12byte)
源IP地址(32bit)-目的IP地址(32bit)-0(8bit)-協議(8bit)-長度(16bit)
UDP長度可以是奇數,計算檢驗和時需要用0補充到16bit對齊

如果UDP校驗和出錯,UDP數據報被丟棄,不產生任何差錯報文。IP層檢測首部校驗和也這樣做。

3 IP分片
未分片IP,標識符唯一。分配後IP具有相同標識符。
標誌位除了最後一片,其他將“更多的片”位置位。
偏移字段記錄偏移位置。
分片過程中,協議名被複制到IP首部,每片都可以獲取,但端口號只存在於第一片IP數據報中。

4 最大報文長度
IP數據報最大長度65535,由16bit IP首部長度字段所限
UDP去掉IP首部和UDP首部,數據最多65507字節


第12章 廣播和多播
1
廣播和多播僅應用於UDP
廣播:主機向網上所有的主機發送幀
多播:幀僅傳送給屬於多播的多個主機
多播地址:以太網地址最高字節的最低位被設置爲1(01:00:00:00:00:00)

2 廣播
受限的廣播:255.255.255.255 用於主機配置,路由器不轉發,通常在系統啓動時纔會用
指向網絡的廣播:主機號全爲1的地址 netid.255.255.255 是一個指向A網絡的廣播地址
指向子網的廣播:主機號全爲1,有特定的子網號(要根據子網掩碼判斷)
指向所有子網的廣播:子網號和網絡號全爲1的地址(有點過時)

3 多播(D類地址)
多播提供兩類服務
1)向多個目的地址傳送數據
2)客戶對服務器的請求
多播組是需要主機加入的

4 多播地址到以太網地址的轉換
只需將IP多播地址的低位23bit放到多播地址01:00:5E:00:00:00的低23bit上。


第13章 IGMP:internet組管理協
1 IGMP報文
版本(4bit)-類型(4bit)-未用(8bit)-校驗和(16bit)-D類多播地址(32bit)
IGMP包括查詢和報告兩類

2 IGMP規則
1)第一個進程加入一個組時,主機發送一個IGMP報告
2)進程離開組時,主機不發送IGMP報告
3)多播路由器定時發送IGMP查詢來了解是否還有主機包含有屬於多播的進程
4)主機通過IGMP報告來響應一個IGMP查詢
使用這些查詢和報告報文,多播路由器對每個接口保持一個表,表中記錄接口上至少還包含一個主機的多播組。當路由器收到需要轉發的多播數據報時,只將其轉發到屬於那個組主機的接口上。

第14章 DNS:域名系統
1 DNS域名三部分
1)頂級域(特殊域)
2)普通域
3)國家域

2 DNS查詢的返回結果
1)返回結果中包含查詢的問題
2)返回結果中包含重複的內容,採用壓縮方式。

3 DNS的優化方法
1)指向域名的指針(減少報文的長度)
2)查詢結果的高速緩存
3)in-addr.arpa域(查詢IP地址對應的域名)
4)放回的附加資源記錄(防止主機重發同一查詢請求)

第15章 TFTP:簡單文件傳輸協議
1 TFTP的端口
TFTP協議基於UDP
TFTP服務器進程在69端口同時對多個客戶程序進行文件傳輸。當服務器進行收到新的傳輸請求後,改用一個新的端口,與特定客戶進程進行數據交換。

第16章 BOOTP:引導程序協議
1 BOOTP的端口
BOOTP協議基於UDP
BOOT服務器端口67 客戶端端口68
使用兩個端口的原因:服務器的應答可以進行廣播

2 BOOTP服務可以過路由器
RARP的缺點是一個鏈路層協議,一般不可以被路由器轉發。
BOOTP可以被路由器轉發,過路由器時,路由器填充網關IP地址,同時將TTL加1。


第17章 TCP:傳輸控制協議
1 TCP提供一種面向連接的可靠的字節流服務。
TCP保證可靠性的方法
1)應用數據被分割成TCP認爲最適合發送的數據塊。
TCP傳遞給IP的信息單位稱爲報文段(segment)。
2)TCP發出一個段後,啓動一個定時器,等待目的端確認收到這個報文段。如果收不到則重發。
3)TCP收到數據後將發送一個確認。
4)TCP將保持它首部的數據校驗和。
如果校驗和有錯,將丟棄數據包
5)TCP數據包可能到達失序,TCP可將數據重新排序。
6)TCP接收端必須丟棄重複的數據
7)TCP提供流量控制

2 TCP數據首部(20byte)
4byte 源端口號(16bit)-目的端口號(16bit)
8byte 序號(32bit)
12byte 確認序號(32bit)
16byte 首部長度(4bit)-保留(6bit)-URG/ACK/PSH/RST/SYN/FIN -窗口大小(16bit)
20byte 檢驗和(16bit)-緊急指針(16bit)
選項

英文版本
4byte source port(16bit)-dest port(16bit)
8byte sequence(32bit)
12byte ack_seq(32bit)
16byte HLen(4bit)-reserved(6bit)-URG/ACK/PSH/RST/SYN/FIN -window size(16bit)
20byte checksum(16bit)-urgent ptr(16bit)
others and padding

3 TCP的標誌位
URG 緊急指針有效
ACK 確認序號有效
PSH 接收方應儘快將這個報文交給應用層
RST 重建連接
SYN 同步序號,用來發起一個連接
FIN 發端完成發送任務標記
第18章 TCP連接的建立與終止
1 建立連接三次握手(3-way handshake)
1)請求端(客戶)發送一個SYN段指明打算連接的端口,以及起始序號(ISN)。
2)服務器發回包含服務器的初始序號的SYN報文段作爲應答。同時將應答序號設置爲客戶的序號+1。還有置位ACK。
3)客戶將確認需要設置爲服務器應答序號+1進行確認(ACK)。

2 關於序號ISN
ISN隨時間而變,每一個連接都有不同的ISN

3 終止連接的四次握手
1)客戶端發送FIN
2)服務器ACK,確認序號爲收到序號+1
3)服務器發送FIN
4)客戶確認ACK,序號爲收到FIN的序號+1

4 最長報文段長度(MSS)
表示TCP傳往另一端的最大塊數據的長度。
MSS選項只能出現在SYN報文中。
MSS默認值是536字節。

5 報文最大生存時間(Maximum Segment Lifetime MSL)
任何報文段被丟棄前在網絡內的最長時間。
當TCP執行一個主動關閉,併發回最後一個ACK,該連接必須在TME_WAIT狀態停留時間2MSL。這樣可以讓TCP再次發送罪的ACK以防止這個ACK丟失。

6 產生復位報文段的條件
1)到不存在的端口的連接請求
2)異常終止一個連接
3)檢測半打開連接
第19章 TCP的交互數據流
1 Nagle算法
交互式TCP數據報包含的內容非常少
Nagle算法要求TCP連接上最多隻有一個未被確認的未完成的小分組,在該分組的確認到達之前不能發送其他的小分組。
TCP收集這些小分組,並在確認到達時以一個分組的方式發出去。
優點:自適應,確認到達越快,數據發送越快。
第20章 TCP的成塊數據流
1 使用TCP滑動窗口協議時,接收方不必確認每一個收到的分組。常使用“隔一個報文確認"策略。

2 滑動窗口
1)窗口的左邊沿向右邊沿靠近爲窗口合攏。發生在數據被髮送和確認時。
2)窗口右邊沿向右移動時將允許發送更多的數據,稱爲窗口張開。發生在另一端的接收進程讀取已經確認的數據並釋放TCP接收緩存時。
3)右邊沿向左移動,稱爲窗口收縮,不建議這樣做。
4)窗口不可能向左移動。
5)窗口左沿到達右沿,稱之爲零窗口,此時發送方不能發送任何數據。
總結:
1)發送方不必發送一個全窗口大小的數據。
2)來自接收方的一個報文段確認數據並把窗口向右移動。
3)窗口可以減小,右沿不能向左移動。
4)接收方在發送ACK前不必等到窗口都被填滿。

3 慢啓動算法
通過觀察到新分組進入網絡的速率應該與另一端相同返回確認的速率相同而進行工作。
慢啓動爲發送方TCP增加了一個窗口:擁塞窗口(congestion windows)。
擁塞窗口:
1)初始化時擁塞窗口被初始化爲1個報文段
2)每收到一個ACK,擁塞窗口就增加一個報文段
3)發送方取擁塞窗口與通告窗口的最小值作爲發送上限

4 通道容量
capacity(bit)=bandwidth(b/s)*round-trip time
一般稱爲帶寬延時積
增加帶寬和增加RTT均可以增加通道容量

5 緊急方式
1)TCP URG比特置位
2)16bit緊急指針被置爲一個正的偏移量,該偏移量與TCP首部序號相加,得出緊急數據的最後一個字節序號
緊急方式常被用來傳送帶外數據,如FTP的中斷傳輸,Telnet的中斷等。
第21章 TCP的超時與重傳
1 每個連接TCP管理的定時器
1)重傳定時器,使用與當希望收到另一端的確認。
2)堅持(persist)定時器,使窗口大小信息保持不斷流動。
3)保活(keeplive)定時器可以檢測一個到一個空閒連接的另一端何時崩潰或重啓。
4)2MSL定時器檢測一個連接處於TIME_WAIT狀態的時間。

2 往返時間(RTT)測量
TCP超時和重傳中最重要的一個部分就是對一個給定連接RTT的測量
1)平滑RTT估算器 R = αR+(1-α)M
α是一個90%的推薦平滑因子,M是新測量值
每次更新時,90%的數據來自前一個估計
RFC推薦的超時時間RTO(Retransmission TimeOut)爲Rβ,β的推薦值爲2。
2)jacobson的均值估計器
RTO = A + 4D
A = A + gErr 被平滑的RTT
D = D + h(|Err|-D) 被平滑的均值偏差
Err = M - A 測量值與當前值之差
h = 0.25
g = 0.125

如果多次出現超時,依然按照兩倍速度進行指數退避
同時第一次計算RTO = A + 2D,以後均取4
A被初始化爲0 ,D被初始化爲3

Karn算法:重傳後收到的ACK是對應哪個報文?當一個超時和重傳發生時,在重傳數據的確認最後到達之前,不能更新RTT估算器。

3 擁塞避免算法(不同於慢啓動算法)
兩種分組丟失的指示:發生超時和接收到重複的確認
擁塞窗口cwnd
慢啓動門限ssthresh
擁塞避免算法和慢啓動算法:
1)給定連接,初始化cwnd=1報文段,ssthresh=65536字節
2)TCP輸出不能超過cwnd和接收方通告大小。
3)擁塞發生時(超時或收到重複確認),ssthresh被設置爲當前窗口的一半(cwnd和接收方通告窗口的最小值,最少爲2個報文段)。如果超時引起阻塞,cwnd設置爲1,這就是慢啓動。
4)新的數據被對方確認後,增加cwnd。
如果cwnd小於或等於ssthresh,則處於慢啓動,cwnd成倍遞增。
如果cwnd大於ssthresh,則處於擁塞避免,每次cwnd增加1(線性增長)

4 收到失序報文段的處理
TCP立即需要產生一個ACK(重複的ACK),這個重複的不應被遲延,目的在於告訴對方收到一個失序的報文段,並告訴對方自己希望收到的報文段。

5 快速重傳與快速恢復算法
快速重傳:接收到超過三個重複ACK,重傳丟失數據包,無需等待超時定時器。接下來執行快速恢復算法。
快速恢復算法:
1)收到第三個重複ACK時,將ssthresh設置爲當前cwnd的一半。重傳報文段,設置cwnd爲ssthresh加上三倍的報文段大小。
2)每次收到另一個重複的ACK,cwnd+1,併發送一個分組。
3)當下一個確認新數據,設置cwnd爲ssthresh。
第22章 TCP的堅定定時器
1 概述
TCP不對ACK報文進行確認,只確認含有數據的ACK報文段
爲了防止通告窗口擴大的ACK丟失,發送方使用一個堅定定時器週期性向接收方查詢(窗口探查),以發現窗口是否增大。

2 堅定定時器
1)堅定定時器採用普通TCP退讓,總在5-60秒之間。
2)堅定定時器與超時重傳不同,TCP從不放棄發送窗口探查,知道窗口被打開或者或者進程終止。

3 糊塗窗口綜合症(Silly Window Syndrome)
少量數據進行交換,而不是滿長度的報文段。接收方可能通告小窗口,發送方可能發送短報文。
避免出現糊塗窗口綜合症的方法:
1)接收方不通告小窗口(當剩餘小窗口時不通告,積累到一定再通告),除非窗口可以增加超過一個MSS或接收方緩存空間的一半
2)發送方
(a)可以發送一個滿長報文段
(b)可以發送至少是接收方窗口一半的報文段
(c)可以發送任何數據且不希望接收ACK

第23章 TCP的保活定時器
1 TCP鏈路的情況和保活定時器的作用
1)對端完全正常
2)對端已經崩潰,重試10伺候退出
3)對端已經崩潰並重啓,對端對探尋報文返回RST信號
4)對端無法到達,和2相同
第24章 TCP的未來
1 路徑MTU發現: 利用DF不要分片和ICMP的錯誤返回來探測路徑的最大MTU

2 長肥管道 (Long Fat Network)
具有大的帶寬時延乘積的網絡帶來多種問題:
1)需要更大的窗口提供吞吐量
2)出現分組丟包會使吞吐量急劇減少
3)TCP僅測量一次RTT,需要更好的RTT測量機制
4)TCP序號重複問題

3 千兆網絡
時延限制(光速限制)佔據主要地位,帶寬不再成爲瓶頸

4 窗口擴大選項 將窗口由16bit擴大到32bit

5 時間戳選項
發送方在報文中放置一個時間戳,接收方在報文中確認這個數值。可以更好的計算RTT,不需要兩個主機進行時鐘同步。

6 PAWS 防止序號迴繞 使用時間戳

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章