一些其他知識學習

最近忙於交換機的學習,所以沒能分享一些新的東西。不過我已經準備好了一些交換機的學習筆記,有助於剛學交換機的童鞋們學習,這個燈月底時再發布,有些內容還待完善!

下面所講的都是一些小知識.

1、中斷與輪詢的區別:對於中斷密集型的事件一般都是採用輪詢機制的,比如網卡(應該說是網卡最主要的實現還是輪詢,雖然有中斷參與)。具體怎麼實現呢?這就得自己去看驅動代碼了。

對於中斷不密集型的事件就採用中斷機制,因爲這樣效率就提高了!

2、內存池的概念:http://blog.csdn.net/rabbit729/article/details/3927979,看一下這篇!

3、靜態變量,臨時變量,局部臨時變量在編譯(還未運行)時放在哪個區?BSS、TEXT、DATA等區?參考我轉載的博文《C++內存到底分幾個區》。另外再附加幾點:

一般工程編譯完成後會生成.o 文件 然後通過link 成一個完整的鏡像

ELF 文件一般包含 一下幾個代碼段 :

file header字段裏存放了描述整個文件的基本屬性信息的內容,如程序入口地址,其他各段信息(偏移量和範圍)

.text section:主要是編譯後的源碼指令,是隻讀字段。

.data section :初始化後的非const的全局變量變量或者局部static變量。

.bss:未初始化後的非const全局變量和局部static變量。

rodata字段 是存放只讀數據

common 存放註釋的

堆(heap):堆是用於存放進程運行中被動態分配的內存段,它的大小並不固定,可動態擴張或縮減。當進程調用malloc等函數分配內存時,新分配的內存就被動態添加到堆上(堆被擴張);當利用free等函數釋放內存時,被釋放的內存從堆中被剔除(堆被縮減)

棧(stack):棧又稱堆棧, 是用戶存放程序臨時創建的局部變量,也就是說我們函數括弧“{}”中定義的變量(但不包括static聲明的變量,static意味着在數據段中存放變量)。除此以外,在函數被調用時,其參數也會被壓入發起調用的進程棧中,並且待到調用結束後,函數的返回值也會被存放回棧中。由於棧的先進先出特點,所以棧特別方便用來保存/恢復調用現場。從這個意義上講,我們可以把堆棧看成一個寄存、交換臨時數據的內存區。

4、在TCP/IP協議中分段機制與分片機制的區別?

1,MTU(Maximum Transmission Unit,MTU),最大傳輸單元

(1)以太網和802.3對數據幀的長度都有一個限制,其最大值分別是1500和1492個字節。鏈路層的這個特性稱作MTU。不同類型的網絡大多數都有一個上限。如果IP層有一個數據要傳,且數據的長度比鏈路層的MTU還大,那麼IP層就要進行分片(fragmentation),把數據報分成若干片,這樣每一個分片都小於MTU。

(2)把一份IP數據報進行分片以後,由到達目的端的IP層來進行重新組裝,其目的是使分片和重新組裝過程對運輸層(TCP/UDP)是透明的。由於每一分片都是一個獨立的包,當這些數據報的片到達目的端時有可能會失序,但是在IP首部中有足夠的信息讓接收端能正確組裝這些數據報片。

(3)儘管IP分片過程看起來透明的,但有一點讓人不想使用它:即使只丟失一片數據也要重新傳整個數據報。why?因爲IP層本身沒有超時重傳機制------由更高層(比如TCP)來負責超時和重傳。當來自TCP報文段的某一片丟失後,TCP在超時後會重發整個TCP報文段,該報文段對應於一份IP數據報(而不是一個分片),沒有辦法只重傳數據報中的一個數據分片。

(4)使用UDP很容易導致IP分片,TCP試圖避免IP分片。那麼TCP是如何試圖避免IP分片的呢?其實說白了,採用TCP協議進行數據傳輸是不會造成IP分片的,因爲一旦TCP數據過大,超過了MSS,則在傳輸層會對TCP包進行分段(如何分,見下文!),自然到了IP層的數據報肯定不會超過MTU,當然也就不用分片了。而對於UDP數據報,如果UDP組成的IP數據報長度超過了1500,那麼IP數據報顯然就要進行分片,因爲UDP不能像TCP一樣自己進行分段。總結:UDP不會分段,就由我IP來分。TCP會分段,當然也就不用我IP來分了!

2,MSS(Maxitum Segment Size)最大分段大小的縮寫,是TCP協議裏面的一個概念

(1)MSS就是TCP數據包每次能夠傳輸的最大數據分段。爲了達到最佳的傳輸效能TCP協議在建立連接的時候通常要協商雙方的MSS值,這個值TCP協議在實現的時候往往用MTU值代替(需要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes)所以往往MSS爲1460。通訊雙方會根據雙方提供的MSS值得最小值確定爲這次連接的最大MSS值。

(2)相信看到這裏,還有最後一個問題:TCP是如何實現分段的呢?其實TCP無所謂分段,因爲每個TCP數據報在組成前其大小就已經被MSS限制了,所以TCP數據報的長度是不可能大於MSS的,當然由它形成的IP包的長度也就不會大於MTU,自然也就不用IP分片了
本段來自CSDN博客:
http://blog.csdn.net/keyouan2008/archive/2010/08/27/5843388.aspx

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