接著筆記一:今天心情不好……我覺得我就是乙個悲劇;
1.7 網路實現概述
net/3通過對多種網路協議支援來提供通用底層服務;bsd支援四種不同的通訊協議族:
1)tcp/ip 網際網路協議族
2)xns 今天已經很少人在使用了
3)osi協議
4)unix域協議;在unix域中提供倆種不同協議;1種是可靠的,面向連線的;第二種是不可靠的無連線的;
1.8 描述符
udp插口是internet協議族和資料報插口(sock_dgram)組成;
socket返回的是乙個描述符,他是乙個核心描述符,具有與其他unix相同的特性;
接下來看一下在程式中呼叫socket後的核心資料結構
首先當我們呼叫socket函式時就會訪問程序表proc()當中的p_fd指向filedesc()中的fd_ofiles指向乙個file()陣列其中f_type類行為dtype_socket就會指向socket結構了,socket結構中還有乙個internet協議塊(pcb),要說一下就是當乙個udp資料到達乙個網路介面是,核心搜尋所有udp協議控制塊,尋找乙個合適的,至少要根據udp的埠號,可能還有目標的ip位址、源ip位址、源埠號,就會找到相應的socket結構了;
1.9 mbuf與輸出處理
儲存器快取:mbuf
書上是用了乙個例子描述的:sendto第五個引數就會被複製到這個mbuf中,mbuf結構是前20個位元組包括4個4位元組的和2個2位元組的字段,mbuf一共128個位元組;
m_next和m_nextpkt會指向下乙個mbuf,m_len是m_data的長度,m_type位m_data的資料型別。
下面我們說一下包含資料的mbuf鍊錶
先看圖:我們按圖來解釋,首先前面說了1個mbuf總長位128,去掉20位元組的首部,還要去掉另外8個位元組分別是:m_pkthdr.len\m_okthdr.rcvif,這倆個一共佔了8位元組,所以乙個mbuf最多能儲存100位元組的資料。m_pkthdr.len的意思是總位元組長度就像先前的例子sendto長度為150個字,m_okthdr.len=150,m_len = 100;這樣就可以算出第二個mbuf的長度了,mbuf分組首部的位址就是m_pkthdr.rcvif,如果更多的話就需要更多,但是會有新的技術來替代叫做簇。
m_pkthdr.len他的長度為總長度的原因是當要用到總長度時候不用遍歷加;
還有就是剛才一直沒有提過的sendto最後乙個引數m_flag的作用,當要用到分組的時候m_flag為m_pkthdr。
新增ip和udp首部
先上一張圖osi網路參考模型方便我們更好的理解
在插口層我們將資料複製到mbuf中以後,就會到協議層,明確的說是udp輸出例程被呼叫,mbuf指標作為乙個引數被傳遞。這個例程要在mbuf前面新增乙個ip首部和udp首部,然後將心mbuf傳遞給ip輸出例程;
接下來我們在看一張圖
新mbuf佔了28個位元組的首部(20個位元組ip首部和8個位元組udp首部),28個位元組放在最下面是為了留給以後的首部,總長度變為178;
乙太網輸出
乙太網輸出第乙個要做的就是把本地32位ip轉化成相應的48位乙太網位址。在使用arp時會使用這個功能,並會等待新的應答。然後乙太網輸出例程把乙個14位元組的乙太網首部新增到鍊錶的第乙個mbuf中,其中包括6個位元組乙太網目標位址和6個位元組乙太網源位址和倆個位元組乙太網幀型別。
好了今天就到這吧,安了
TCP IP詳解 卷一(第一章 概述)
很多不同的廠家生產各種型號的計算機,它們執行完全不同的作業系統,但tcp ip協議族允許它們相互進行通訊。1.分層 tcp ip不是乙個協議,而是乙個協議族,通常它被認為是乙個四層的協議系統,下面展示了tcp ip協議族中不同層次的協議 2.網際網路的位址 網際網路上每個介面必須有乙個唯一的inte...
TCP IP詳解卷1筆記 第一章 概述
1.tcp ip協議族分為四個層次,從上往下分別為 應用層 運輸層 傳輸層 網路層 鏈路層。英語 internet 又稱 網際網路 或音譯 網際網路 internet 英特網,是網路與網路之間所串連成的龐大網路,這些網路以一組通用的協議相連,形成邏輯上的單一巨大國際網路。3.閘道器 gateway ...
TCP IP卷一(第一章學習)
tcp ip通常被認為是乙個四層協議系統 1 鏈路層 資料鏈路層或網路介面層 通常包括作業系統中的裝置驅動程式和計算機中對應的網路介面卡。2 網路層 網際網路層 處理分組在網路中的活動。網路層協議包括 ip協議,icmp協議,igmp協議。3 運輸成 主要為兩台主機上的應用程式提供端到端的通訊。兩個...