暗夜公爵 <ilkitty.bbs@cis.nctu.edu.tw> wrote in message
news:3cbAgg$Vnk@bbs.cis.nctu.edu.tw...
> ==> 在 "網中人" <netmanforever@yahoo.com> 的文章中提到:
> > 暗夜公爵 <ilkitty.bbs@cis.nctu.edu.tw> wrote in message
> > > 一路看下來,前面數篇介紹的很詳盡,不知是否有板主願意列入精華區中?
> > > 這篇的這一句不解,能否再進一步說明何謂sort by the value of mask bit?
> > > 是否為了longest match而設計? (因為光是first match會有問題)
> > > 煩請進一步說明。
> > 那好吧﹐繼續抄一篇(閣下的問題主要在最後部份)﹕
>
> 我用 netstat -nr 一看,一切都想通了。
> 如果先依照netmask中1的長度事先由長到短sort好,
> first match也就等於longest match。
> 唉...一些東西久沒碰都生疏了...
>
> > (引自﹕http://ccns.ncku.edu.tw/study-area/linux/linuxfr.htm)
> > > 每一個 frame 都不可以超過1518bytes﹐這樣就可以確保任何一個工作站都不會
佔用
> > 網^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > > 路太久。
>
> 補充說明,在 IEEE 802.1Q訂出來後,最大的Ethernet frame長度已經向上修正為
> 1522 bytes,多出來的4 bytes是VLAN tag,位於source address和Type/Length
> 之間。但一般沒有tag的frame最大長度還是1518 bytes。
>
> > > 當程式從上層協定建立好 socket﹐定好選項和埠口﹐切割好封包﹐再交到網路
層的
> > 時
> > > 候﹐網路層再建一個封包﹐其標頭除了各項選項外﹐一定會包含發送端的 IP 地

>         ^^^^^^^^^^^^^^^^^^
> 依據Richard Stevens在TCP/IP Illustrated: volume 2第一章所提的BSD
implementation
> ,(如果你有書的話,請參考 Figure 1.8),Stevens以UDP封包為例,說明如下:
>
> The UDP output routine then fills in the UDP header and as much of the IP
> header as possble. ....
>  ...
> The IP output routine fills in the remaining fields in the IP header
including
> the IP checksum, .....
>
> 這例子是說IP layer只是在原有的buffer之前在prepend屬於它的訊息。它並不需要"
再"
> 建一個封包。


非常感謝公爵的指教﹗

“再”建封包一詞或許不是最準確的﹐但要為 transport layer 封包再加一個
network layer header 應該是事實吧﹖閣下引證的書本弟沒有看過﹐但該文說的明明
說 UDP 和 IP﹐兩個都屬於 network layer (ICMP 也是)﹐不就是說“fills udp/ip
header”嗎﹖這相對於 transport layer 封包來說﹐可以說是“再”建一個封包﹐然
後把 TCP 封包塞進 IP 封包裡面。

繼續抄文章﹕

(引自 http://ccns.ncku.edu.tw/study-area/network/networkfr.htm)

網路層

網路層的主要功能是讓封包(packet)在不同的網路之間成功地進行傳遞。它規定了網路
的定址方式﹐及處理資料在不同網路之間的傳遞方式、處理子網路之間的傳遞、決定路
由路徑、網路環境、資料處理順序、等等工作。

發送端電腦在封包被傳送出去之前﹐都會先為其建立header﹐作為在網路或子網間進行
路由的依據。網路層在辨認和處理資料的時候﹐會忽略由高層協定制定的定義﹐只負責
為數據在一個或多個網路間建立、維護、和終止連接。

網路層通常都有如下的這些功能﹕

如果封包不是屬于同一個網路的時候﹐會將之交由router處理
控制數據流量﹐當router的緩衝區飽和的時候﹐會通知數據傳輸設備使用其它路徑或暫
停發送封包
當封包體積超過router的MTU(Maximum Transmission Unit)的數值的時候﹐允許router
對封包進行重組後再進行傳送。(一些所謂的增加modem上網速度的軟體﹐就是因為可以
對電腦的MTU數值進行最佳化﹐儘量減少router的封包重組﹐以達到最高的數據傳輸效
率。)
負責MAC地址和網路地址(如IP地址、IPX地址)之間的解釋和轉換

我們在“網路概論”裡面介紹的router就是工作於網路層的。

傳送層

我們在前面“網路概論”裡面已經知道OSI的最底三層屬於網路功能﹐而上面四層則屬
于使用者功能。也就是說﹐從傳送層起﹐協定所負責的可以說是純“資料處理”的功
能。

由於大多數網路﹐如Ethernet和Token Ring等﹐由於物理上面的限制﹐一次所通過的數
據流通常只有數千byte而已﹐然而許多需要在網路中傳輸的資料都會超過這個數值。傳
送層的主要功能是確保電腦資料正確的傳送到目的地。它的工作就是“打包”﹐也就是
將電腦資料變成封包的形態﹐再賦以一定的檢測手段﹐將資料正確的傳到目的電腦﹐然
後再將封包重組回資料。封包如果殘缺則進行重發﹐也能夠將重複的封包剔除。

傳送層可以等資料收集到足夠大的數量的時候才發送出去,並非應用程式每次產生一個
數據就進行一次傳送,也就能減少了不必要的傳輸次數﹐以保證高效率的傳輸﹔反之,
當應用程式產生大資料量數據時,則將之分拆成較小的封包再進行傳輸。

傳送層的主要功能有﹕

接管由上層協定傳來的資料﹐並進行“分拆”和“打包”等工作。
利用點對點的方式進行資料傳送和回應的確認。
在得到接收端之資料緩衝區飽和信息之後﹐暫時停止資料發送。
能在單一位址上處理不同的程式協定(如ftp、http、telnet等)﹐並分別進行追蹤及轉
換。


假如讀者對各 layer 之間的是如何接力傳遞感興趣的話﹐可以參考﹕
http://ccns.ncku.edu.tw/study-area/network/network_advtge.htm

或許我們可以用郵局系統來更形象的看看封包header是怎樣工作的﹕

當您有一份報價單(data)要寄給海外的客戶﹐將之交給秘書之後﹐秘書會幫你把信封
(header1)打好﹐然後貼好郵票投進郵筒﹐然後郵局將信件分好類﹐再把相同地區的郵
件放進更大的郵包(header2)附運﹐然後航空公司也會把郵件和其它貨物一起用飛機貨
櫃(hearder3)運達目的機場﹔好了﹐目的地機場只接管不同飛機所運來的貨物﹐然後把
郵包(header2)交給對方郵局﹐郵局把郵件分好類之後﹐把信封(header1)遞送到客戶那
裡﹐然後客戶打開信封就可以看到報價單(data)了。

由此可見﹐網路的層級分工﹐其實跟我們日常的生活模式也有許多相似的功能﹕

上例子中的飛機好比是“實體層”﹐我們當然也可以選擇使用輪船或汽車等運輸工具﹔
我們也可以把機場管理局﹐或碼頭、車站的管理機構看成是“資料連接層”﹐他們會規
定了不同的交通工具使用的不同規則﹐例如﹕班次、泊位、進場/出場時間間隔、接管/
分發貨物、等等﹔
郵局可以說是“網路層”﹐到底使用那個機場、港口、車站﹐或是貨物經由哪條路徑傳
遞最迅速﹐這些都由郵局來管好了﹔
要是您寄的資料有一本書那麼厚﹐但郵局一次最多只能幫你寄十頁﹐那麼您就得將資料
拆開﹐編好序號﹐分裝在好幾個信封裡﹐再進行郵寄﹐這和“傳送層”的“打包”功能
差不多。如果您同時還和好幾個客戶洽談好幾樣事務﹐您也得分辨出哪些資料是屬於哪
個客戶的﹐“傳送層”也有類似的追蹤功能﹔
“會談層”相信也不難理解﹐先假設您和客戶之間的溝通都必須使用郵件(沒有電話﹐
傳真﹐更沒有email)﹐您總不會茂茂然的就先把報價單寄出去吧﹖您會先征詢對方的同
意﹐才會開始寄出去﹐然後您可以告訴對方報價單全部寄送完畢﹐那麼得到對方確認之
後﹐就可以說完成一次“會談”了﹔
如果您的秘書聰明能幹﹐還能夠幫您翻譯各國語言和文件格式﹐那您以經有了“表現
層”了﹔
“應用層”更不用多說了﹐您和您的客戶不會只收發報價單吧﹖還有很多合同啦、預算
啦、策略啦、邀請啦、等一大堆東西﹐可能除了生意上的﹐間或還會聊聊男人和女人呢
!



>
> > > 將透過 ICMP (或其它協定﹐這裡不是很肯定)﹐告訴發送端路由不能到達。此
時﹐原
>                              ^^^^^^^^^^^^^^
> 就是ICMP沒錯...

多謝確認﹐我猜應該是 Type 3 Code 1 信息吧﹐不知對否﹖


p.s.弟一早說過對 TCP/IP 只知皮毛而已﹐知道什麼就說什麼(當然會有錯漏)﹐不知道
的就說不知道。假如您發現弟在這裡或 study-area 說說的東西有誤導之處﹐懇請指
正。當然﹐如果閣下願意到 study-area 寫寫文章﹐澤惠讀者﹐更是感激不盡﹗謝謝
﹗﹗