![2022年TCPIP詳解學(xué)習(xí)筆記_第1頁](http://file4.renrendoc.com/view/1c30e96c927b7d577f2bdb83f63734ee/1c30e96c927b7d577f2bdb83f63734ee1.gif)
![2022年TCPIP詳解學(xué)習(xí)筆記_第2頁](http://file4.renrendoc.com/view/1c30e96c927b7d577f2bdb83f63734ee/1c30e96c927b7d577f2bdb83f63734ee2.gif)
![2022年TCPIP詳解學(xué)習(xí)筆記_第3頁](http://file4.renrendoc.com/view/1c30e96c927b7d577f2bdb83f63734ee/1c30e96c927b7d577f2bdb83f63734ee3.gif)
![2022年TCPIP詳解學(xué)習(xí)筆記_第4頁](http://file4.renrendoc.com/view/1c30e96c927b7d577f2bdb83f63734ee/1c30e96c927b7d577f2bdb83f63734ee4.gif)
![2022年TCPIP詳解學(xué)習(xí)筆記_第5頁](http://file4.renrendoc.com/view/1c30e96c927b7d577f2bdb83f63734ee/1c30e96c927b7d577f2bdb83f63734ee5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、TCP/IP 詳解學(xué)習(xí)筆記 1- 基本概念為什么會有 TCP/IP 協(xié)議在世界上各地, 各種各樣的電腦運行著各自不同的操作系統(tǒng)為大家服務(wù),這些電腦在表達同一種信息的時候所使用的方法是千差萬別;就似乎圣經(jīng)中上帝打亂 了各地人的腔調(diào),讓他們無法合作一樣;運算機使用者意識到,計算機只是單兵作戰(zhàn)并不會發(fā)揮太大的作用;只有把它們聯(lián)合起來,電腦才會發(fā)揮出它最大的潛力;于是人們就想方設(shè)法的用電線把電腦連接到了一起;但是簡潔的連到一起是遠遠不夠的,就似乎語言不同的兩個人相互見了面,完全不能溝通信息;因而他們需要定義一些共通的東西來進行溝通,TCP/IP 就是為此而生;TCP/IP 不是一個協(xié)議,而是一個協(xié)議族
2、的統(tǒng)稱;里面包括了 IP 協(xié)議, IMCP 協(xié)議, TCP 協(xié)議,以及我們更加熟識的 學(xué)會了外語一樣,就可以和其他的運算機終端做自由的溝通了;TCP/IP 協(xié)議分層http 、ftp 、 pop3 協(xié)議等等;電腦有了這些,就似乎提到協(xié)議分層,我們很簡潔聯(lián)想到ISO-OSI 的七層協(xié)議經(jīng)典架構(gòu),但是TCP/IP 協(xié)議族的結(jié)構(gòu)就稍有不同;如圖所示TCP/IP 協(xié)議族依據(jù)層次由上到下,層層包裝;最上面的就是應(yīng)用層了,這里面有 http ,ftp, 等等我們熟識的協(xié)議;而其次層就是傳輸層,聞名 的 TCP 和 UDP 協(xié)議就在這個層次(不要告知我你沒用過 udp 玩星際);第三層是網(wǎng)絡(luò)層, IP 協(xié)議
3、就在這里,它負責對數(shù)據(jù)加上 IP 地址和其他的數(shù)據(jù)(后面 會講到)以確定傳輸?shù)哪繕?;第四層是叫?shù)據(jù)鏈路層,這個層次為待傳送的數(shù)據(jù)加入一個以太網(wǎng)協(xié)議頭,并進行CRC 編碼, 為最終的數(shù)據(jù)傳輸做預(yù)備;再往下就是 硬件層次了, 負責網(wǎng)絡(luò)的傳輸,這個層次的定義包括網(wǎng)線的制式,網(wǎng)卡的定義等等 (這些我們就不用關(guān)懷了, 我們也不做網(wǎng)卡) ,所以有些書并不把這個層次放在 tcp/ip 協(xié)議族里面, 由于它幾乎和 tcp/ip 協(xié)議的編寫者沒1 有任何的關(guān)系; 發(fā)送協(xié)議的主機從上自下將數(shù)據(jù)依據(jù)協(xié)議封裝,而接收數(shù)據(jù)的主機就依據(jù)協(xié)議從得到的數(shù)據(jù)包解開,最終拿到需要的數(shù)據(jù);這種結(jié)構(gòu)特別有棧的味道,所以某些文章也把t
4、cp/ip協(xié)議族稱為tcp/ip協(xié)議棧;一些基本的常識在學(xué)習(xí)協(xié)議之前,我們應(yīng)當具備一些基本學(xué)問;互聯(lián)網(wǎng)地址 ip 地址 網(wǎng) 絡(luò)上每一個節(jié)點都必需有一個獨立的 Internet 地址(也叫做 IP 地址);現(xiàn)在,通常使用的 IP 地址是一個 32bit的數(shù)字,也就是我們常說的 IPv4 標準,這 32bit 的數(shù)字分成四組,也就是常見的 55 的樣式; IPv4 標準上,地址被分為五類,我們常用的是 B 類地址;具體的 分類請參考其他文檔;需要留意的是 IP 地址是網(wǎng)絡(luò)號 +主機號的組合,這特別重要;域名系統(tǒng)域名系統(tǒng)是一個分布的數(shù)據(jù)庫,它供應(yīng)將主機名(就是網(wǎng)址啦)轉(zhuǎn)換成RFC IP 地址的服務(wù);
5、RFC 是什么? RFC 就是 tcp/ip協(xié)議的標準文檔,在這里 我們可以看到RFC 那長長的定義列表,現(xiàn)在它一共有4000 多個協(xié)議的定義,當然,我們所要學(xué)習(xí)的,也就是那么十幾個協(xié)議而已;端口號 port 留意,這個號碼是用在 TCP,UDP 上的一個規(guī)律號碼,并不是一個硬件端口,我們平常說把某某端口封掉了,也只是在 IP 層次把帶有這個號碼的 IP 包給過濾掉了而已;應(yīng)用編程接口現(xiàn)在常用的編程接口有socket和 TLI;而前面的有時候也叫做“Berkeley socketBerkeley” ,可見 對于網(wǎng)絡(luò)的進展有多大的奉獻;TCP/IP 詳解學(xué)習(xí)筆記 2- 數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層有三個
6、目的:. 為 IP 模塊發(fā)送和 接收 IP 數(shù)據(jù)報;. 為 ARP 模塊發(fā)送 ARP 懇求和接收 ARP 應(yīng)答;. 為 RARP 發(fā)送 RARP 請 求和接收 RARP 應(yīng)答ip 大家都聽說過;至于 ARP 和 RARP ,ARP 叫做地址解析協(xié)議,是用 IP 地址換 MAC 地址的一種協(xié)議,而RARP 就叫做逆地址解析協(xié)議,在 tcp/ip 協(xié)議的后面章節(jié)會介紹它們(在局域網(wǎng)里面用 ARP 協(xié)議可以很簡潔的搞癱瘓網(wǎng)絡(luò)哦)數(shù)據(jù)鏈路層的協(xié)議仍是很多的,有我們最常用的以太網(wǎng)(就是平常我們用的網(wǎng)卡)協(xié)議,也有不太常見的令牌環(huán),仍有 FDDI ,當然,仍有國內(nèi)現(xiàn)在相當普及的PPP 協(xié)議(就是adsl
7、寬帶),以及一個loopback協(xié)議;聯(lián)系 linux里面的 ifconfig -a命令,這個命令通常會得到如下的結(jié)果2 eth0 Link encap:Ethernet HWaddr 00:01:4A:03:5B:ED inet addr: Bcast:55 Mask: inet6 addr: fe80:201:4aff:fe03:5bed/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2819 errors:0 dropped:0 overruns:0 frame:0 TX packets
8、:76 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:241609 235.9 KiB TX bytes:9596 9.3 KiB lo Link encap:Local Loopback inet addr: Mask: inet6 addr: :1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2713 errors:0 dropped:0 overruns:0 frame:0 TX packets
9、:2713 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3516032 3.3 MiB TX bytes:3516032 3.3 MiB 其中,eth0 就是以太網(wǎng)接口, 而 lo 就是 loopback接口;這也說明這個主機在網(wǎng)絡(luò)鏈路層上至少支持loopback協(xié)議和以太網(wǎng)協(xié)議;以太網(wǎng)(Ether-net)的定是指數(shù)字設(shè)備公司( Digital Equipment Corp.)、英特爾公司 (Intel Corp.)和 Xerox公司在 1982 年聯(lián)合公布的一個標準,這個標準里面使用了
10、一種稱作 CSMA/CD 的接入方法;而 IEEE802 供應(yīng)的標準集 802.3 仍有一部分定義到了 802.2 中也供應(yīng)了一個 CSMA/CD 的標準;這兩個標準稍有不同,TCP/IP 協(xié)議對這種情形的處理方式如下 : . 以太網(wǎng)的 IP 數(shù)據(jù)報封裝在 RFC894 中定義,而 IEEE802 網(wǎng)絡(luò)的 IP 數(shù)據(jù)報封裝在 RFC1042 中定義;. 一臺主機肯定要能發(fā)送和接收 RFC894 定義的數(shù)據(jù)報;. 一臺主機可以接收 RFC894 和 RFC1042 的封裝格式的混合數(shù)據(jù)報;. 一臺主機或許能夠發(fā)送 RFC1042 數(shù)據(jù)報;假如主機能同時發(fā)送兩種類型的分組數(shù) 據(jù),那么發(fā)送的分組必須
11、是可以設(shè)置的,而且默認條件下必需是 RFC 894 分組;可見, RFC1042 在 TCP/IP 里面處于一個配角的位置;這兩種不同的數(shù)據(jù)報格式請參考教材;ppp 點對點協(xié)議 是從 SLIP 的替代品;他們都供應(yīng)了一種低速接入的解決方案;而每一種數(shù)據(jù)鏈路層協(xié)議,都有一個 MTU (最大傳輸單元)定義,在這個定義下面,假如 IP 數(shù)據(jù)報過大,就要進行分片 fragmentation,使得每片都小于 MTU ,留意 PPP 的 MTU 并不是一個物理定義,而是 指一個規(guī)律定義(個人認為就是用程序掌握);可以用 netstat 來打印出 MTU 的結(jié)果,比如鍵入 netstat -in Kerne
12、l Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 1774 0 0 0 587 0 0 0 BMRU lo 16436 0 2667 0 0 0 2667 0 0 0 LRU 就可以觀看到 eth0 的 MTU 是 1500 ;而 lo (環(huán)回接口)的 MTU 就是 16436 ;最終說說那個環(huán)回接口(loopback);平常我們用 來嘗試自己的機器服務(wù)器好使不好使;走的就是這個loopback 接口;對于環(huán)回接口,有如下三點值得留意 : .
13、 傳給環(huán)回地址(一般是 )的任何數(shù)據(jù)均作為 I P 輸入;3 .傳給廣播地址或多播地址的數(shù)據(jù)報復(fù)制一份傳給環(huán)回接口,然后送到以太網(wǎng)上;這是由于廣播傳送和多播傳送的定義包含主機本身;.任何傳給該主機IP 地址的數(shù)據(jù)均送到環(huán)回接口;這一章仍是很簡潔的,一般作為明白學(xué)問也就足夠了,沒必要摳的那么具體;TCP/IP 詳解學(xué)習(xí)筆記 3-IP 協(xié)議, ARP 協(xié)議, RARP 協(xié)議把這三個協(xié)議放到一起學(xué)習(xí)是由于這三個協(xié)議處于同一層,ARP 協(xié)議用來找到目標主機的 Ethernet 網(wǎng)卡 Mac地址, IP 就承載要發(fā)送的消息;數(shù)據(jù)鏈路層可以從 ARP 得到數(shù)據(jù)的傳送信息,而從 IP 得到要傳輸?shù)臄?shù)據(jù)信息;
14、1. IP 協(xié)議IP 協(xié)議是 TCP/IP 協(xié)議的核心,全部的 TCP,UDP ,IMCP ,IGCP 的數(shù)據(jù)都以 IP 數(shù)據(jù)格式傳輸;要留意的是,IP 不是牢靠的協(xié)議,這是 說, IP 協(xié)議沒有供應(yīng)一種數(shù)據(jù)未傳達以后的處理機制這被認為是上層協(xié)議TCP或 UDP 要做的事情;所以這也就顯現(xiàn)了 TCP 是一個牢靠的協(xié)議,而 UDP 就沒有那么牢靠的區(qū)分;這是后話,暫且不提1.1. IP 協(xié)議頭如下列圖挨個說明它是教科書的活計,我感愛好的只是那八位的TTL 字段,仍記得這個字段是做什么的么?這個字段規(guī)定該數(shù)據(jù)包在穿過多少個路由之后才會被拋棄 這里就表達出來 IP 協(xié)議包的不行靠性,它不保證數(shù)據(jù)被送
15、達 ,某個 ip 數(shù)據(jù)包每穿過一個路由器,該數(shù)據(jù)包的 TTL 數(shù)值就會削減 1,當該數(shù)據(jù)包的 TTL 成 為零, 它就會被自動拋棄;這個字段的最大值也就是 255 ,也就是說一個協(xié)議包也就在路由器里面穿行 255 次就會被拋棄了,依據(jù)系統(tǒng)的不同,這個數(shù)字也不一 樣,一般是 32 或者是 64 ,Tracerouter 這個工具就是用這個原理工作的,tranceroute 的-m 選項要求最大值是 255 ,也就是由于這個 TTL 在 IP 協(xié)議里面只有 8bit ;現(xiàn)在的 ip 版本號是 4,所以也稱作 IPv4 ;現(xiàn)在仍有 IPv6 ,而且運用也越來越廣泛了;1.2. IP 路由挑選當一個
16、IP 數(shù)據(jù)包預(yù)備好了的時候,挑選一個合適的路徑來 送貨 的呢?IP 數(shù)據(jù)包(或者說是路由器)是如何將數(shù)據(jù)包送到目的地的呢?它是怎么最特殊的情形是目的主機和主機直連,那么主機根本不用查找路由,直接把數(shù)據(jù)傳遞過去就可以了;至于是怎么直接傳遞的,這就要靠 ARP 協(xié)議了,后面會講到;略微一般一點的情形是,主機通過如干個路由器 router 和目的主機連接; 那么路由器就要通過 ip 包的信息來為 ip 包查找到一個合適的目標來進行傳遞,比如合適的主機,或者合適的路由;路由器或者主機將會用如下的方式來處理某一個 IP 數(shù)據(jù)包假如 IP 數(shù)據(jù)包的 TTL(生命周期)以到,就該 IP 數(shù)據(jù)包就被拋棄;搜尋
17、路由表,優(yōu)先搜尋匹配主機,假如能找到和IP 地址完全一樣的目標主機,就將該包發(fā)向目標主機搜尋路由表,假如匹配主機失敗,就匹配同子網(wǎng)的路由器,這需要“ 子網(wǎng)掩碼 1.3. ” 的幫助;假如找到路由器,就將該包發(fā)向路由器;搜尋路由表,假如匹配同子網(wǎng)路由器失敗,就匹配同網(wǎng)號(第一章有講解)路由器,假如找到路由器,就將該包發(fā)向路由器;搜尋陸游表,假如以上都失敗了,就搜尋默認路由,假如默認路由存在,就發(fā)包假如都失敗了,就丟掉這個包;這再一次證明白,ip 包是不行靠的;由于它不保證送達;1.3. 子網(wǎng)尋址IP 地址的定義是網(wǎng)絡(luò)號 + 主機號;但是現(xiàn)在全部的主機都要求子網(wǎng)編址,也就是說,把主機號在細分成子網(wǎng)
18、號+ 主機號; 最終一個 IP 地址就成為 網(wǎng)絡(luò)號碼 + 子網(wǎng)號 + 主機號; 例如一個 B 類地址: 210 .30 .109 .134 ;一般情形下,這個 IP 地址的紅色部分就是網(wǎng)絡(luò)號,而藍色部分就是子網(wǎng)號,綠色部分就是主機號;至于有多少位代表子網(wǎng)號這個問題上, 這沒有一個硬性的規(guī)定,取而代之的就是 子網(wǎng)掩碼 , 校內(nèi)網(wǎng)信任大多數(shù)人都用過,在校內(nèi)網(wǎng)的設(shè)定里面有一個 的東西,這就是子網(wǎng)掩碼;子網(wǎng)掩碼是由 32bit 的二進制數(shù)字序列 ,形式 為是一連串的 1和一連串的 0,例如: 二進制就是 11111111.11111111.11111111.00000000 對于剛才的那個 B 類地址
19、,由于 210.30 是網(wǎng)絡(luò)號,那么后面的 109.134 就是子網(wǎng)號和主機號的組合,又由于子網(wǎng)掩碼只有后八 bit 為 0,所以主機號 就是 IP 地址的后八個 bit ,就是 134 ,而剩下的就是子網(wǎng)號碼109 ;2. ARP 協(xié)議仍記得數(shù)據(jù)鏈路層的以太網(wǎng)的協(xié)議中,每一個數(shù)據(jù)包都有一個MAC 地址頭么?我們知道每一塊以太網(wǎng)卡都有一個 MAC 地址,這個地址是唯獨的,那么IP 包是如何知道這個MAC 地址的?這就是ARP 協(xié)議的工作;ARP(地址解析)協(xié)議是一種解析協(xié)議,原來主機是完全不知道這個IP 對應(yīng)的是哪個主機的哪個接口,當主機要發(fā)送一個 IP 包的時候,會第一查一下自 己的 ARP
20、 高速緩存(就是一個 IP-MAC 地址對應(yīng)表緩存) ,假如查詢的 IPMAC 值對不存在,那么主機就向網(wǎng)絡(luò)發(fā)送一個 ARP 協(xié)議廣播包,這個廣播包 里面就有待查詢的 IP 地址,而直接收到這份廣播的包的全部主機都會查詢自己的 IP 地址, 假如收到廣播包的某一個主機發(fā)覺自己符合條件,那么就預(yù)備好一個包 含自己的 MAC 地址的 ARP 包傳送給發(fā)送 ARP 廣播的主機,而廣播主機拿到 ARP 包后會更新自己的 ARP 緩存(就是存放 IP-MAC 對應(yīng)表的地方) ;發(fā)送 廣播的主機就會用新的 ARP 緩存數(shù)據(jù)預(yù)備好數(shù)據(jù)鏈路層的的數(shù)據(jù)包發(fā)送工作;一個典型的arp 緩存信息如下,在任意一個系統(tǒng)里
21、面用“arp -a ” 命令 : Interface: - 0 x2 Internet Address Physical Address Type 00-0d-0b-43-a0-2f dynamic 5 00-01-4a-03-5b-ea dynamic 都會得到這樣的結(jié)果;這樣的高速緩存是有時限的,一般是20 分鐘(伯克利系統(tǒng)的衍生系統(tǒng));3.RARP 協(xié)議(略)TCP/IP 詳解學(xué)習(xí)筆記 4-ICMP協(xié)議, ping和 Traceroute 1. IMCP 協(xié)議介紹 前面講到了, IP 協(xié)議并不是一個牢靠的協(xié)議,它不保證數(shù)據(jù)被送達,那么,自然的,保證數(shù)據(jù)送達的工作應(yīng)當由其他的模塊來完成;其
22、中一個重要的模塊就是ICMP 網(wǎng)絡(luò)掌握報文 協(xié)議;當傳送 IP 數(shù)據(jù)包發(fā)生錯誤比如主機不行達,路由不行達等等,ICMP 協(xié)議將會把錯誤信息封包,然后傳送回給主機; 給主機一個處理錯誤的機會,這 也就是為什么說建立在 IP 層以上的協(xié)議是可能做到安全的緣由;ICMP數(shù)據(jù)包由 8bit 的錯誤類型和 8bit 的代碼和 16bit 的校驗和組成;而前 16bit 就組成了 ICMP 所要傳遞的信息;書上的圖 6 3清晰的給出了錯誤類型和代碼的組合代表的意思;盡管在大多數(shù)情形下,錯誤的包傳送應(yīng)當給出ICMP 報文,但是在特殊情形下,是不產(chǎn)生ICMP 錯誤報文的;如下:ICMP 差錯報文不會產(chǎn)生 IC
23、MP 差錯報文(出 IMCP 查詢報文)(防止 IMCP 的無限產(chǎn)生和傳送)目的地址是廣播地址或多播地址的 IP 數(shù)據(jù)報;作為鏈路層廣播的數(shù)據(jù)報;不是 IP 分片的第一片;源地址不是單個主機的數(shù)據(jù)報;這就是說,源地址不能為零地址、環(huán)回地址、廣播地 址或多播地址;雖然里面的一些規(guī)定現(xiàn)在仍不是很明白,但是全部的這一切規(guī)定,都是為了防止產(chǎn)生 ICMP 報文的無限傳播而定義的;ICMP 協(xié)議大致分為兩類,一種是查詢報文,一種是差錯報文;其中查詢報文有以下幾種用途 : ping 查詢(不要告知我你不知道 ping 程序)子網(wǎng)掩碼查詢(用于無盤工作站在初始化自身的時候初始化子網(wǎng)掩碼)時間戳查詢(可以用來同
24、步時間)而差錯報文就產(chǎn)生在數(shù)據(jù)傳送發(fā)生錯誤的時候;就不贅述了;2. ICMP的應(yīng)用 -ping ping一下這個網(wǎng)站;pingping可以說是ICMP 的最聞名的應(yīng)用,當我們某一個網(wǎng)站上不去的時候;通常會會回顯出一些有用的信息;一般的信息如下: Reply from : bytes=32 time1ms TTL=255 Reply from : bytes=32 time1ms TTL=255 Reply from : bytes=32 time1ms TTL=255 Reply from : bytes=32 time30000 真變態(tài) 的 UDP 報,所以到達目的主機的時候,目的 主機只能
25、發(fā)送一個端口不行達的 ICMP 數(shù)據(jù)報給主機;主機接到這個報告以后就知道,主機到了,所以,說 Traceroute 是一個騙子一點也不為過 : Traceroute 程序里面供應(yīng)了一些很有用的選項,甚至包含了 IP 選路的選項,請觀看 man 文檔來明白這些,這里就不贅述了;TCP/IP 詳解學(xué)習(xí)筆記 5-IP 1. 靜態(tài) IP 選路 1.1. 一個簡潔的路由表選路,動態(tài)選路,和一些細節(jié)選路是 IP 層最重要的一個功能之一;前面的部分已經(jīng)簡潔的講過路由器是通過何種規(guī)章來依據(jù)IP 數(shù)據(jù)包的 IP地址來挑選路由;這里就不重復(fù)了;第一來看看一個簡潔的系統(tǒng)路由表;Destination Gateway
26、 Genmask U Flags Metric Ref Use Iface * 0 0 0 eth0 * U 0 0 0 eth0 7 default UG 0 0 0 eth0 對于一個給定的路由器,可以打印出五種不同的flag ;U 說明該路由可用;G 說明該路由是到一個網(wǎng)關(guān);假如沒有這個標志,說明和 Destination 是直連的,而相應(yīng)的 Gateway 應(yīng)當直接給出 Destination 的地址;H 說明該路由是到一個主機,假如沒有該標志,說明 Destination 是一個網(wǎng)絡(luò), 換句話說 Destination 就應(yīng)該寫成一個網(wǎng)絡(luò)號和子網(wǎng)號的組合,而不包括主機號 主機號碼處為
27、 0 ,例如 D 說明該路由是為重定向報文創(chuàng)建的M 該路由已經(jīng)被重定向報文修改U 沒啥可說的, G 說明這是一個網(wǎng)關(guān),假如你要發(fā)數(shù)據(jù)給 Destination,IP 頭應(yīng)當寫 Destination 的 IP 地址,而數(shù)據(jù)鏈路層的 MAC 地址就應(yīng)當是 GateWay 的 Mac 地址了;反之,假如沒有 G 標志,那么數(shù)據(jù)鏈路層和 IP 層的地址應(yīng)當是對應(yīng)的;H 說明白 Destination 的 性質(zhì),假如是 H 的,就說明該地址是一個完整的地址,既有網(wǎng)絡(luò)號又有主機號,那么再匹配的時候就既要匹配網(wǎng)絡(luò)號,又要匹配主機號;反 之,Destination 就代表一個網(wǎng)絡(luò),在匹配的時候只要匹配一下網(wǎng)
28、絡(luò)號就可以了;這樣, IP 選路的方式就可以更加具體化了;如下第一用 IP 地址來匹配那些帶H 標志的 DestinationIP地址;假如 1失敗就匹配那些網(wǎng)絡(luò)地址;假如 2失敗就發(fā)送到 Default 網(wǎng)關(guān)順便提一下那個 GenMask (仍記得子網(wǎng)掩碼么) ,它指定了目的地址的子網(wǎng)號,例如第一條的子網(wǎng)就是 11 ;1.2. 其他有關(guān)路由表的學(xué)問一般,我們在配置好一個網(wǎng)絡(luò)接口的時候,一個路由就被直接創(chuàng)建好了;當然我們也可以手動添加路由;用 route add 命令就可以了;而當一個 IP 包在某一個路由器的時候發(fā)覺沒有路由可走,那么該路由器就會給源主機發(fā)送“ 主機不行達” 或者“ 網(wǎng)絡(luò)不行
29、達” 的 ICMP 包來報錯;留意,一般的操作系統(tǒng)默認是沒有路由功能的,這需要自己配置;這些歷史緣由就不細說了,1.3.ICMP 的 IP 重定向報文和路由發(fā)覺報文當 IP 包在某一個地方轉(zhuǎn)向的時候,都回給發(fā)送 IP 報的源主機一個 ICMP 重定向報文,而源主機就可以利用這個信息來更新自己的路由表,這樣,隨著網(wǎng)絡(luò)通信的逐步增多,路由表也就越來越完備,數(shù)據(jù)轉(zhuǎn)發(fā)的速度也會越來越快;我們需要留意的是:重定向報文只能由路由器發(fā)出;重定向報文為主機所用,而不是為路由器所用;在主機引導(dǎo)的時候,一般會發(fā)送在網(wǎng)內(nèi)廣播一個路由懇求的 ICMP 報文,而多個路由器就會回應(yīng)一個路由通告報文;而且,路由其本身不定期
30、的在網(wǎng)絡(luò)內(nèi)發(fā) 布路由通告報文,這樣,依據(jù)這些報文,每一個主機都會有機會建立自己的路由表而實現(xiàn)網(wǎng)絡(luò)通信;路由器在一份通告報文中可以通告多個地址,并且給出每一個地 址的優(yōu)先等級, 這個優(yōu)先等級是該 IP 作為默認路由的等級,至于怎么算的就不深究了;路由器一般會在 450-600 秒的時間間隔內(nèi)發(fā)布一次通告,而一個給定的通告報文的壽命是 30 分鐘;而主機在引8 導(dǎo)的時候會每三秒發(fā)送一次懇求報文,一旦接受到一個有效的通告報文,就停止發(fā)送懇求報文;在 TCP/IP 詳解編寫的時候, 只有 Solaris2.x支持這兩種報文,大多數(shù)系統(tǒng)仍不支持這兩種報文;(后面仍會講到一些有用的路由報文)動態(tài)選路協(xié)議
31、前面的選路方法叫做靜態(tài)選路,簡要地說就是在配置接口的時候,以默認的方式生成路由表項;并通過 route 來增加表項, 或者通過 ICMP 報文來更新表項 (通常在默認方式出錯的情形下); 而假如上訴三種方法都不能滿意,那么我們就使用動態(tài)選路;動態(tài)選路協(xié)議是用于動態(tài)選路的重要組成部分,但是他們只是使用在路由器之間,相鄰路由器之間相互通信;核心路由表中, 然后系統(tǒng)就可以依據(jù)這個核心路有表找到最合適的 系統(tǒng)(路有挑選程序) 挑選比較合適的路有放到 網(wǎng)路; 也就是說, 動態(tài)選路是在系統(tǒng)核心網(wǎng)絡(luò)外部進行的,它只是用一些選路的策略影響路由表,而不會影響到最后通過路由表挑選路由的那一部分;選路協(xié)議有一大類常
32、用的叫做內(nèi)部網(wǎng)關(guān)協(xié)議IGP ,而在 IGP 中,RIP 就是其中最重要的協(xié)議;一種新的 IGP 協(xié)議叫做 開放最短路經(jīng)優(yōu)先OSPF 協(xié)議 ,其意在取代RIP;另一種最早用在網(wǎng)路骨干網(wǎng)上的 IGP 協(xié)議 -HELLO ,現(xiàn)在已經(jīng)不用了;如今,任何支持動態(tài)選路的路由器都必需同時支持 OSPF 和 RIP,仍可以挑選性的支持其他的 IGP 協(xié)議;2.1.Unix 選路程序Unix 系統(tǒng)上面通常都有路由守護程序routed ;仍有一個叫做 gate ;gate 所支持的協(xié)議要比 routed 多,routed 只是支持 RIPv1 版本;而 gate 就支持 RIPv1 、v2,BGPv1 等等;2.
33、1.RIP :選路信息協(xié)議它的定義可以在 RFC1058 內(nèi)找到,這種協(xié)議使用 UDP 作為載體(也就是 UDP 的上層協(xié)議) ;我們最關(guān)懷的就是 RIP 其中的一個段,叫做度量的 段,這是一個以 hop 作為計數(shù)器(就是以走過多少路由為計數(shù)器)的段(IP協(xié)議里面也有一個 TTL 不是么);這個度量段將最終影響到路由表的建立;參考圖 : 9 一般說來 routed 要承擔如下的工作:給 每一個已知的路由器發(fā)送 rip 懇求報文,要求其他路由器給出完整的路由表;這種報文的命令字段為 1,地址字段為 0,度量地段為 16 (相當于無窮大) ;接 受懇求,假如接收到剛才的那個懇求,就把自己的完整的路
34、由表交給懇求者;假如沒有,就處理 IP 懇求表項,把表項中自己有的部分添上跳數(shù),沒有的部分添上16 ;然后發(fā)給懇求者;接 受回應(yīng);更新自己的路由表;使用 hop 數(shù)小的規(guī)章;定 期更新路由表,一般是 30s 真頻繁 給相鄰的路有啟示一次自己的路由表;這種形式可以使廣播形式的;這個協(xié)議看起來會工作的很好,但是,這里面其實有很多隱匿的憂慮,比如說 RIP 沒有子網(wǎng)的概念,比如說環(huán)路的危急;而且 hop 數(shù)的上限也限制了網(wǎng)絡(luò)的大?。灰虼?顯現(xiàn)了很多 RIPv1 的替代品,比如說 RIPv2, 比如說 OSPF;他們都是通過某種策略來影響路由表,所以就不說了;TCP/IP 詳解學(xué)習(xí)筆記 6-UDP 協(xié)
35、議1.UDP 簡要介紹UDP 是傳輸層協(xié)議,和TCP 協(xié)議處于一個分層中,但是與TCP 協(xié)議不同, UDP 協(xié)議并不供應(yīng)超時重傳,出錯重傳等功能,也就是說其是不行靠的協(xié)議;2.UDP 協(xié)議頭2.1.UDP 端口號由于很多軟件需要用到 UDP 協(xié)議,所以 UDP 協(xié)議必需通過某個標志用以區(qū)分不同的程序所需要的數(shù)據(jù)包;端口號的功能就在于此,例如某一個 UDP 程序 A 在系統(tǒng)中注冊了 3000 端口, 那么, 以后從外面?zhèn)鬟M來的目的端口號為 3000 的 UDP 包都會交給該程序;端口號理論上可以有 216 這么多;由于它的長 度是 16 個 bit 2.2.UDP 檢驗和這是一個可選的選項,并不
36、是全部的系統(tǒng)都對 UDP 數(shù)據(jù)包加以檢驗和數(shù)據(jù) 相對 TCP 協(xié)議的必需來說 ,但是RFC 中標準要求,發(fā)送端應(yīng)當運算檢驗和;UDP 檢驗和掩蓋 UDP 協(xié)議頭和數(shù)據(jù),這和 IP 的檢驗和是不同的,IP 協(xié)議的檢驗和只是掩蓋 IP 數(shù)據(jù)頭,并不掩蓋全部的數(shù)據(jù);UDP 和 TCP 都包含 一個偽首部,這是為了運算檢驗和而攝制的;偽首部甚至仍包含 IP 地址這樣的 IP 協(xié)議里面都有的信息,目的是讓 UDP 兩次檢查數(shù)據(jù)是否已經(jīng)正確到達目的地;假如發(fā)送端沒有打開檢驗和選項,而接收端運算檢驗和有差錯,那么 UDP 數(shù)據(jù)將會被靜靜的丟掉(不保證送達),而不產(chǎn)生任何差錯報文;2.3.UDP 長度UDP
37、可以很長很長,可以有 65535 字節(jié)那么長;但是一般網(wǎng)絡(luò)在傳送的時候,一次一般傳送不了那么長的協(xié)議(涉及到 MTU 的問題),就只好對數(shù)據(jù) 分片,當然,這些是對 UDP 等上級協(xié)議透亮的,UDP 不需要關(guān)懷 IP 協(xié)議層對數(shù)據(jù)如何分片,下一個章節(jié)將會略微爭論一些分片的策略;3. IP 分片IP 在從上層接到數(shù)據(jù)以后,要依據(jù) IP 地址來判定從那個接口發(fā)送數(shù)據(jù)(通過選路),并進行 MTU 的查詢,如果數(shù)據(jù)大小超過 MTU 就進行數(shù)據(jù)分片;數(shù) 據(jù)的分片是對上層和下層透亮,而數(shù)據(jù)也只是到達目的地仍會被重新組10 裝,不過不用擔憂,IP 層供應(yīng)了足夠的信息進行數(shù)據(jù)的再組裝;在 IP 頭里面, 16b
38、it 識別名唯獨記錄了一個 IP 包的 ID,具有同一個 ID 的 IP 片將會被重新組裝;而13 位片偏移就記錄了某 IP 片相對整個包的 位置;而這兩個表示中間的 3bit 標志就標示著該分片后面是否仍有新的分片;這三個標示就組成了 IP 分片的全部信息, 接受方就可以利用這些信息對 IP 數(shù)據(jù) 進行重新組織 (就算是后面的分片比前面的分片先到,這些信息也是足夠了);由于分片技術(shù)在網(wǎng)絡(luò)上被常常的使用,所以偽造IP 分片包進行流氓攻擊的軟件和人也就層出不窮;可以用 Trancdroute程序來進行簡潔的MTU 偵測;請參看教材;3.UDP 和 ARP 之間的交互式用這是不常被人留意到的一個細
39、節(jié),這是針對一些系統(tǒng)地實現(xiàn)來說的;當 ARP 緩存仍是空的時候;UDP 在被發(fā)送之前肯定要發(fā)送一個 ARP 懇求來獲得目的 主機的 MAC 地址,假如這個 UDP 的數(shù)據(jù)包足夠大,大到 IP 層肯定要對其進行分片的時候,想象中,該 UDP 數(shù)據(jù)包的第一個分片會發(fā)出一個 ARP 查詢懇求,全部的分片都輝等到這個查詢完成以后再發(fā)送;事實上是這樣嗎?結(jié)果是,某些系統(tǒng)會讓每一個分片都發(fā)送一個ARP 查詢,全部的分片都在等待,但是接受到第一個回應(yīng)的時候, 主機卻只發(fā)送了最終一個數(shù)據(jù)片而拋棄了其 他,這實在是讓人匪夷所思;這樣, 由于分片的數(shù)據(jù)不能被準時組裝,接受主機將會在一段時間內(nèi)將永久無法組裝的 IP
40、 數(shù)據(jù)包拋棄,并且發(fā)送組裝超時的 ICMP 報文(其實很多系統(tǒng)不產(chǎn)生這個差錯) ,以保證接受主機自己的接收端緩存不被那些永久得不到組裝的分片布滿;4.ICMP 源站抑制差錯當目標主機的處理速度趕不上數(shù)據(jù)接收的速度,由于接受主機的“ 我受不了” 的一個 ICMP 報文;5.UDP 服務(wù)器設(shè)計IP 層緩存會被占滿,所以主機就會發(fā)出一個UDP 協(xié)議的某些特性將會影響我們的服務(wù)器程序設(shè)計,大致總結(jié)如下:關(guān)于客戶 IP 和地址: 服務(wù)器必需有依據(jù)客戶IP 地址和端口號判定數(shù)據(jù)包是否合法的才能(這似乎要求每一個服務(wù)器都要具備)關(guān)于目的地址:服務(wù)器必需要有過濾廣播地址的才能;關(guān)于數(shù)據(jù)輸入: 通常服務(wù)器系統(tǒng)的
41、每一個端口號都會和一塊輸入緩沖區(qū)對應(yīng),進來的輸入依據(jù)先來后到的原就等待服務(wù)器的處理,所以難免會顯現(xiàn)緩沖區(qū)溢出的問題,這種情形下,程序本身并不知道這個問題;UDP 數(shù)據(jù)包可能會被丟棄,而應(yīng)用服務(wù)器服務(wù)器應(yīng)當限制本地 IP 地址,就是說它應(yīng)當可以把自己綁定到某一個網(wǎng)絡(luò)接口的某一個端口上;TCP/IP 詳解學(xué)習(xí)筆記 7- 廣播和多播, IGMP 協(xié)議 1. 單播,多播,廣播的介紹 1.1. 單播unicast 單播是說,對特定的主機進行數(shù)據(jù)傳送;例如給某一個主機發(fā)送IP 數(shù)據(jù)包;這時候,數(shù)據(jù)鏈路層給出的數(shù)據(jù)頭里面是特別具體的目的地址,對于以太網(wǎng)來 說,就是網(wǎng)卡的 MAC 地址(不是 FF-FF-FF
42、-FF-FF-FF 這樣的地址) ;現(xiàn)在的具有路由功能的主機應(yīng)當可以將單播數(shù)據(jù)定向轉(zhuǎn)發(fā),而目的主機的網(wǎng) 絡(luò)接口就可以過濾掉和自己 MAC 地址不一樣的數(shù)據(jù);11 1.2. 廣播unicast 廣播是主機針對某一個網(wǎng)絡(luò)上的全部主機發(fā)送數(shù)據(jù)包;這個網(wǎng)絡(luò)可能是網(wǎng)絡(luò),可能是子網(wǎng),仍可能是全部的子網(wǎng);假如是網(wǎng)絡(luò),例如 A 類網(wǎng)址的廣播就是 netid.255.255.255,假如是子網(wǎng),就是 id.subnetid.255;假如是全部的子網(wǎng)(B 類 IP)就是就是 id.255.255;廣播所用的 MAC 地址 FF-FF-FF-FF-FF-FF ;網(wǎng)絡(luò)內(nèi)全部的主機都會收到這個廣播數(shù)據(jù),網(wǎng)卡只要把 MA
43、C 地址為 FF-FF-FF-FF-FF-FF 的數(shù)據(jù)交給內(nèi)核就可以了;一般說來 ARP ,或者路由協(xié)議 RIP 應(yīng)當是以廣播的形式播發(fā)的;1.3. 多播multicast 可以說廣播是多播的特例,多播就是給一組特定的主機(多播組)發(fā)送數(shù)據(jù),這樣,數(shù)據(jù)的播發(fā)范疇會小一些實際上播發(fā)的范疇一點也沒有變小 ,多播的 MAC 地址是最高字節(jié)的低位為一,例 如01-00-00-00-00-00;多播組的地址是 D 類 IP,規(guī)定是 -55;雖然多播比較特殊,但是究其原理,多播的數(shù)據(jù)仍是要通過數(shù)據(jù)鏈路層進行 MAC 地址綁定然后進行發(fā)送;所以一個以太網(wǎng)卡在綁定了一個多播 IP 地址之 后,必 定仍要綁定一
44、個多播的 MAC 地址, 才能使得其可以像單播那樣工作;這個多播的 IP 和多播 MAC 地址有一個對應(yīng)的算法,在書的 p133 到 p134 之間;可以 看到 這個對應(yīng)不是一一對應(yīng)的,主機仍是要對多播數(shù)據(jù)進行過濾;個人的看法:廣播和多播的性質(zhì)是一樣的,路由器會把數(shù)據(jù)放到局域網(wǎng)里面,然后網(wǎng)卡對這些數(shù)據(jù)進行過濾,只拿到自己準備要的數(shù)據(jù),比如自己感愛好的多 播數(shù)據(jù), 自己感愛好的組播數(shù)據(jù);當一個主機運行了一個處理某一個多播 IP 的進程的時候,這個進程會給網(wǎng)卡綁定一個虛擬的多播 mac 地址,并做出來一個多播 ip ;這樣,網(wǎng)卡就會讓帶有這個多播 mac 地址的數(shù)據(jù)進來,從而實現(xiàn)通信,而那些沒有監(jiān)
45、聽這些數(shù)據(jù)的主機就會把這些數(shù)據(jù)過濾掉,換句話說,多播,是讓主機 的內(nèi)核輕松了,而網(wǎng)卡,對不起,您就累點吧;一些文章也印證了這種想法,最明顯的就是 2. 一些驗證性試驗局域網(wǎng)監(jiān)聽的原理、實現(xiàn)與防范這些試驗并不是很復(fù)雜,我們只是要ping 一下一般的ip 和一個廣播地址;第一我ping 一下自己所在的子網(wǎng)的某一臺主機 : Reply from : bytes=32 time1ms TTL=255 Reply from : bytes=32 time1ms TTL=255 Reply from : bytes=32 time1ms TTL=255 Reply from : bytes=32 time
46、=1ms TTL=255 可以看到,機器返回的是一臺主機的回應(yīng)結(jié)果,進而估量,假如我Reply from : bytes=32 time=1ms TTL=255 Reply from 74: bytes=32 time1ms TTL=64 Reply from 74: bytes=32 time1ms TTL=64 Reply from 74: bytes=32 time1ms TTL=64 Reply from 18: bytes=32 time1ms TTL=64 Reply from 74: bytes=32 time1ms TTL=64 ping 一個廣播地址呢?結(jié)果如下可以看到, p
47、ing返回了一些隨機的ip 的結(jié)果,這些ip 都是與主機在同一子網(wǎng)內(nèi)的ip ;我們可以看到,廣播實際上是給處于子網(wǎng)內(nèi)的全部ip 發(fā)信;12 再來一個多播的例子,但是要實現(xiàn)這個多播并不簡潔,由于我不知道網(wǎng)絡(luò)內(nèi)有多少個多播組,就只好利用幾個特殊的多播地址來驗證了;對于多播地址,有幾個特殊的多播地址被占用,他們是-該子網(wǎng)內(nèi)全部的系統(tǒng)組;ping ;-該子網(wǎng)內(nèi)全部的路由器;-網(wǎng)絡(luò)實現(xiàn)協(xié)議NTP 專用 IP;-RIPv2專用 IP 所以只要 ping這幾個 IP,就應(yīng)當能得到一些結(jié)果,比如說我Reply from : bytes=32 time1ms TTL=255 Reply from : bytes
48、=32 time1ms TTL=255 Reply from : bytes=32 time1ms TTL=255 Reply from : bytes=32 time1ms TTL=255 Reply from : bytes=32 time1ms TTL=255 Reply from : bytes=32 time1ms TTL=255 Reply from : bytes=32 timeSYN_SENT-ESTABLISHED-FIN_WAIT_1-FIN_WAIT_2-TIME_WAIT-CLOSED 以上流程是在程序正常的情形下應(yīng)當有的流程,從書中的圖中可以看到,在建立連接時,當客戶
49、端收到 SYN報文的 ACK 以后,客戶端就打開了數(shù)據(jù)交互地連接;而終止連接就通常是客戶端主動終止的,客戶端終止應(yīng)用程序以后,需要經(jīng)受FIN_WAIT_1 , FIN_WAIT_2 等狀態(tài),這些狀態(tài)的遷移就是前面提到的終止連接的四次握手;4.2. 服務(wù)器的狀態(tài)遷移圖 服務(wù)器的狀態(tài)可以用如下的流程來表示:CLOSED-LISTEN-SYN 收到 -ESTABLISHED-CLOSE_WAIT-LAST_ACK-CLOSED 在建立連接的時候,服務(wù)器端是在第三次握手之后才進入數(shù)據(jù)交互狀態(tài),而關(guān)閉連接就是在關(guān)閉連接的其次次 握手以后(留意不是第四次);而關(guān)閉以后仍要等待客戶端給出最終的 ACK 包才
50、能進入初始的狀態(tài);4.3. 其他狀態(tài)遷移 書中的圖仍有一些其他的狀態(tài)遷移,這些狀態(tài)遷移針對服務(wù)器和客戶端兩方面的總結(jié)如下 LISTEN-SYN_SENT,對于這個說明就很簡潔了,服務(wù)器有時候也要打開連接的嘛;16 SYN_SENT-SYN 收到,服務(wù)器和客戶端在 SYN_SENT 狀態(tài)下假如收到 SYN 數(shù)據(jù)報,就都需要發(fā)送 SYN的 ACK 數(shù)據(jù)報并把自己的狀態(tài)調(diào)整到 SYN 收到狀態(tài),預(yù)備進入 ESTABLISHED SYN_SENT-CLOSED,在發(fā)送超時的情形下,會返回到 CLOSED 狀態(tài);SYN_ 收到 -LISTEN ,假如受到 RST 包,會返回到 LISTEN 狀態(tài);SYN
51、_ 收到 -FIN_WAIT_1,這個遷移是說, 可以不用到 ESTABLISHED 狀態(tài),而可以直接跳轉(zhuǎn)到 FIN_WAIT_1狀態(tài)并等待關(guān)閉;4.4.2MSL 等待狀態(tài)書中給的圖里面,有一個 TIME_WAIT 等待狀態(tài), 這個狀態(tài)又叫做 2MSL 狀態(tài),說的是在 TIME_WAIT2 發(fā)送了最終一個 ACK 數(shù)據(jù)報以后,要進入 TIME_WAIT 狀態(tài),這個狀態(tài)是防止最終一次握手的數(shù)據(jù)報沒有傳送到對方那里而預(yù)備的(留意這不是四次握手,這是第四次握手的保險狀態(tài));這個 狀態(tài)在很大程度上保證了雙方都可以正常終止,但是,問題也來了;由于插口的 2MSL 狀態(tài)(插口是 IP 和端口對的意思,so
52、cket ),使得應(yīng)用程序在 2MSL 時間內(nèi)是無法再次使用同一個插口的,對于客戶程序仍好 一些,但是對于服務(wù)程序,例如 httpd ,它總是要使用同一個端口來進行服務(wù),而在 2MSL 時間內(nèi),啟動 httpd 就會顯現(xiàn)錯誤(插口被使用);為了防止 這個錯誤,服務(wù)器給出了一個安靜時間的概念,這是說在 2MSL 時間內(nèi),雖然可以重新啟動服務(wù)器,但是這個服務(wù)器仍是要 安靜 的等待 2MSL 時間的過去才能進行下一次連接;4.5.FIN_WAIT_2 狀態(tài)這就是聞名的半關(guān)閉的狀態(tài)了,這是在關(guān)閉連接時,客戶端和服務(wù)器兩次握手之后的狀態(tài);在這個狀態(tài)下,應(yīng)用程序仍有接受數(shù)據(jù)的才能,但是已經(jīng)無法發(fā)送 數(shù)據(jù),
53、但是也有一種可能是,客戶端始終處于 FIN_WAIT_2 狀態(tài),而服務(wù)器就始終處于 WAIT_CLOSE 狀態(tài),而直到應(yīng)用層來打算關(guān)閉這個狀態(tài);5.RST ,同時打開和同時關(guān)閉RST 是另一種關(guān)閉連接的方式,應(yīng)用程序應(yīng)當可以判定 同時關(guān)閉就是兩種特殊的 TCP 狀態(tài),發(fā)生的概率很?。?.TCP 服務(wù)器設(shè)計RST 包的真實性,即是否為反常中止;而同時打開和前面曾經(jīng)敘述過 UDP 的服務(wù)器設(shè)計,可以發(fā)覺 UDP 的服務(wù)器完全不需要所謂的并發(fā)機制,它只要建立一個數(shù)據(jù)輸入隊列就可以;但是 TCP 不同, TCP 服務(wù)器對于每一個連接都需要建立一個獨立的進程(或者是輕量級的,線程),來保證對話的獨立性;
54、所以 TCP 服務(wù)器是并發(fā)的;而且 TCP 仍需要配備一個呼入 連接懇求隊列(UDP 服務(wù)器也同樣不需要) ,來為每一個連接懇求建立對話進程,這也就是為什么各種TCP 服務(wù)器都有一個最大連接數(shù)的緣由;而依據(jù)源主機的 IP 和端口號碼,服務(wù)器可以很輕松的區(qū)分出不同的會話,來進行數(shù)據(jù)的分發(fā);把握本章的狀態(tài)遷移圖才是學(xué)習(xí)本章的關(guān)鍵;TCP/IP 詳解學(xué)習(xí)筆記 11-TCP交互數(shù)據(jù)流,成塊數(shù)據(jù)流目前建立在 TCP 協(xié)議上的網(wǎng)絡(luò)協(xié)議特殊多,有 telnet ,ssh ,有 ftp ,有 http 等等;這些協(xié)議又可以依據(jù)數(shù)據(jù)吞吐量來大致分成兩大類:1 交互數(shù)據(jù)類型,例如 telnet ,ssh ,這種類
55、型的協(xié)議在大多數(shù)情形下只是做小流量的數(shù)據(jù)交換,比如說按一下鍵盤,回顯一些文字等等;2數(shù)據(jù) 成塊類型,例如 ftp ,這種類型的協(xié)議要求 TCP 能盡量的運載數(shù)據(jù),把數(shù)據(jù)的吞吐量做到最大,并盡可能的提高效率;針對這兩種情形,TCP 給出了兩種不同 的策略17 來進行數(shù)據(jù)傳輸;1.TCP 的交互數(shù)據(jù)流對于交互性要求比較高的應(yīng)用,TCP 給出兩個策略來提高發(fā)送效率和減低網(wǎng)絡(luò)負擔:(1)捎帶 ACK;2Nagle算法(一次盡量多的發(fā)數(shù)據(jù));通常,在網(wǎng)絡(luò)速度很快的情形下,比如用 lo 接口進行 telnet 通信,當按下字母鍵并要求回顯的時候, 客戶端和服務(wù)器將經(jīng)受 發(fā)送按鍵數(shù)據(jù) - 服務(wù)器發(fā)送按鍵數(shù)據(jù)
56、的 ack - 服務(wù)器端發(fā)送回顯數(shù)據(jù)-客戶端發(fā)送回顯數(shù)據(jù)的 ACK 的過程, 而其中的數(shù)據(jù)流量將是 40bit + 41bit+41bit+40bit = 162bit,假如在廣域網(wǎng)里面,這種小分組的 TCP 流量將會造成很大的網(wǎng)絡(luò)負擔;1.1. 捎帶 ACK 的發(fā)送方式這個策略是說,當主機收到遠程主機的 TCP 數(shù)據(jù)報之后,通常不立刻發(fā)送 ACK 數(shù)據(jù)報,而是等上一個短暫的時間,假如這段時間里面主機仍有發(fā)送到遠程 主機的 TCP 數(shù)據(jù)報,那么就把這個 ACK 數(shù)據(jù)報“ 捎帶” 著發(fā)送出去,把原來兩個 TCP 數(shù)據(jù)報整合成一個發(fā)送;一般的,這個時間是 200ms ;可以明顯地看 到這個策略可以
57、把 TCP 數(shù)據(jù)報的利用率提高很多;1.2.Nagle 算法上過 bbs 的人應(yīng)當都會有感受,就是在網(wǎng)絡(luò)慢的時候發(fā)貼,有時鍵入一串字符串以后,經(jīng)過一段時間,客戶端“ 發(fā)瘋” 一樣突然回顯出很多內(nèi)容,就似乎數(shù)據(jù)一下子傳過來了一樣,這就是Nagle 算法的作用;Nagle 算法是說, 當主機 A 給主機 B 發(fā)送了一個 TCP 數(shù)據(jù)報并進入等待主機 B 的 ACK 數(shù)據(jù)報的狀態(tài)時, TCP的輸出緩沖區(qū)里面只能有一個 TCP 數(shù) 據(jù)報,并且,這個數(shù)據(jù)報不斷地收集后來的數(shù)據(jù),整合成一個大的數(shù)據(jù)報,等到 B 主機的 ACK 包一到,就把這些數(shù)據(jù)“ 一股腦” 的發(fā)送出去;雖然這樣的描述有些 不精確,但仍算
58、形象和易于懂得,我們同樣可以體會到這個策略對于低減網(wǎng)絡(luò)負擔的好處;在編寫插口程序的時候,可以通過TCP_NODELAY來關(guān)閉這個算法;并且,使用這個算法看情形的,比如基于 TCP 的 X 窗口協(xié)議,假如處理鼠標大事時仍是用這個算法,那么“ 推遲” 可就特別大了;2.TCP 的成塊數(shù)據(jù)流對于 FTP 這樣對于數(shù)據(jù)吞吐量有較高要求的要求,將總是期望每次盡量多的發(fā)送數(shù)據(jù)到對方主機,就算是有點“ 推遲” 也無所謂;TCP 也供應(yīng)了一整套的策略來支持這樣的需求;TCP 協(xié)議中有 16 個 bit 表示“ 窗口” 的大小,這是這些策略的核心;2.1. 傳輸數(shù)據(jù)時 ACK 的問題在說明滑動窗口前,需要看看A
59、CK 的應(yīng)答策略,一般來說,發(fā)送端發(fā)送一個TCP 數(shù)據(jù)報,那么接收端就應(yīng)當發(fā)送一個 ACK 數(shù)據(jù)報;但是事實上卻不是這樣,發(fā)送端將會連續(xù)發(fā)送數(shù)據(jù)盡量填滿接受方的緩沖區(qū),而接受方對這些數(shù)據(jù)只要發(fā)送一個ACK 報文來回應(yīng)就可以了,這就是 ACK 的累積特性, 這個特性大大減少了發(fā)送端和接收端的負擔;2.2. 滑動窗口滑動窗口本質(zhì)上是描述接受方的 TCP 數(shù)據(jù)報緩沖區(qū)大小的數(shù)據(jù),發(fā)送方依據(jù)這個數(shù)據(jù)來運算自己最多能發(fā)送多長的數(shù)據(jù); 假如發(fā)送方收到接受方的窗口大小 為0 的 TCP 數(shù)據(jù)報, 那么發(fā)送方將停止發(fā)送數(shù)據(jù),等到接受方發(fā)送窗口大小不為 0的數(shù)據(jù)報的到來;書中的P211 和 P212 很好的說明
60、白這一點;關(guān)于滑動窗口協(xié)議,書上仍介紹了三個術(shù)語,分別是:18 窗口合攏:當窗口從左邊向右邊靠近的時候,這種現(xiàn)象發(fā)生在數(shù)據(jù)被發(fā)送和確認的時候;窗口張開:當窗口的右邊沿向右邊移動的時候,這種現(xiàn)象發(fā)生在接受端處理了數(shù)據(jù)以后;窗口收縮:當窗口的右邊沿向左邊移動的時候,這種現(xiàn)象不常發(fā)生;TCP 就是用這個窗口, 漸漸的從數(shù)據(jù)的左邊移動到右邊,把處于窗口范疇內(nèi)的數(shù)據(jù)發(fā)送出去(但不用發(fā)送全部,只是處于窗口內(nèi)的數(shù)據(jù)可以發(fā)送;);這就 是窗口的意義;圖 20-6 說明白這一點;窗口的大小是可以通過 socket 來制定的, 4096 并不是最抱負的窗口大小,而 16384 就可以使吞吐量大大的 增加;2.3.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 統(tǒng)編六上《青山不老》教學(xué)設(shè)計
- 教學(xué)設(shè)計方案作業(yè)
- XX公司天花吊頂施工合作合同
- 個人貸款合同范文及格式
- 個人保證擔保借款合同書正式版
- 臨街門面租賃合同標準版
- 中鐵物資商城物流配送合同新范本
- 個人住房抵押借款合同模板
- 產(chǎn)品生產(chǎn)裝配標準化合同
- 采購預(yù)付款合同范本
- 甲狀腺的科普宣教
- 在線心理健康咨詢行業(yè)現(xiàn)狀分析及未來三至五年行業(yè)發(fā)展報告
- 電動三輪車購銷合同
- 淋巴瘤的免疫靶向治療
- 校園駐校教官培訓(xùn)
- 自然辯證法論述題146題帶答案(可打印版)
- 儲運部部長年終總結(jié)
- 物業(yè)管理裝修管理規(guī)定(5篇)
- (新版)工業(yè)機器人系統(tǒng)操作員(三級)職業(yè)鑒定理論考試題庫(含答案)
- 教育環(huán)境分析報告
- 人力資源服務(wù)公司章程
評論
0/150
提交評論