16进制数用空格分开 tcp_面试时,你是否被问到过TCP/IP协议?
點(diǎn)擊藍(lán)字
關(guān)注我們
看到這句話,有沒有感到很熟悉呀?相信很多人在面試的時候都被要求,很多人會覺得我們在實(shí)際開發(fā)中一般用不到這些知識,所以對這些東西不屑一顧。
但是小編認(rèn)為想要成為一個完美的網(wǎng)工,那么對這些基礎(chǔ)知識必須要有一定的了解,這樣你才能考慮得更加全面和完善,下面就讓我們一起來了解一下,什么是 TCP/IP。
TCP/IP協(xié)議層
圖1-1展示了TCP/IP協(xié)議簇與OSI參考模型的相互關(guān)系。在TCP/IP協(xié)議簇中,網(wǎng)絡(luò)接口層對應(yīng)于OSI的物理和數(shù)據(jù)鏈路層,但實(shí)際上在規(guī)范中并不存在這一層。如圖1-1所示,作為對物理和數(shù)據(jù)鏈路層的表示,它已經(jīng)成為事實(shí)上的一個層次。在本節(jié)中,我們將使用OSI的術(shù)語——物理和數(shù)據(jù)鏈路層來描述它。
除了少數(shù)例外,OSI協(xié)議簇本身已經(jīng)成為Intemet歷史早期的遺留產(chǎn)物。當(dāng)前OSI協(xié)議對于網(wǎng)絡(luò)技術(shù)的貢獻(xiàn)看來主要是在對學(xué)習(xí)網(wǎng)絡(luò)的學(xué)生講述模塊化的協(xié)議族時,可以引用它的參考模型進(jìn)行說明等有限的用途。當(dāng)然。IS-IS 路由選擇協(xié)議依然廣泛地應(yīng)用在大型服務(wù)提供高和運(yùn)營商網(wǎng)絡(luò)中。
物理層包含了多種與物理介質(zhì)相關(guān)的協(xié)議,這些物理介質(zhì)用以支撐TCP/IP 通信。物理層的協(xié)議按照正式的分類可以分為4類,這4類涵蓋了物理介質(zhì)的所有方面:
電子/光學(xué)協(xié)議——描述了信號的各種特性。例如,電壓或光強(qiáng)度、位定時、編碼和信號波形。
機(jī)械協(xié)議——規(guī)定了連接器的尺寸或?qū)Ь€的金屬成分。
功能性協(xié)議——描述了做什么。例如,在EIA-232-D連接器第4管腳上的功能描述是“請求發(fā)送”。
程序性協(xié)議——描述了如何做。例如,在EIA-232-D導(dǎo)線上,二進(jìn)制I表示電壓小于-3V。
數(shù)據(jù)鏈路層包含了控制物理層的協(xié)議:如何訪問和共享介質(zhì)、怎樣標(biāo)識介質(zhì)上的設(shè)備,以及在介質(zhì)上發(fā)送數(shù)據(jù)之前如何完成數(shù)據(jù)成幀。典型的數(shù)據(jù)鏈路協(xié)議有IEEE 802.3/以太網(wǎng)、幀中繼、ATM以及SONET。
Internet層與OSI的網(wǎng)絡(luò)層相對應(yīng),主要負(fù)責(zé)定義數(shù)據(jù)包格式和地址格式,為經(jīng)過邏輯網(wǎng)絡(luò)路徑的數(shù)據(jù)進(jìn)行路由選擇。當(dāng)然,網(wǎng)絡(luò)層也是本書內(nèi)容涉及最多的一層。
與OSI傳輸層相對應(yīng)的是主機(jī)到主機(jī)層它指定了控制Intemnet層的協(xié)議,這就像數(shù)據(jù)鏈路層控制物理層一樣。主機(jī)到主機(jī)層和數(shù)據(jù)鏈路層都定義了流控和差錯控制機(jī)制。二者不同之處在于,數(shù)據(jù)鏈路層協(xié)議強(qiáng)調(diào)控制數(shù)據(jù)鏈路上的流量,即連接兩臺設(shè)備的物理介質(zhì)上的流量;而傳輸層控制邏輯鏈路上的流量,即兩臺設(shè)備的端到端連接,這種邏輯連接可能跨越一連串?dāng)?shù)據(jù)鏈路。
應(yīng)用層與OSI的會話層、表示層、應(yīng)用層相對應(yīng)。雖然一些路由選擇協(xié)議使用這一層,例如邊界網(wǎng)關(guān)協(xié)議(BGP)、路由選擇信息協(xié)議(RIP) 等,但是應(yīng)用層最常用的服務(wù)是向用戶應(yīng)用提供訪問網(wǎng)絡(luò)的接口。
對于圖1-1中所示的協(xié)議簇和其他協(xié)議簇來說,各層之間多路復(fù)用是一個通用功能。許多應(yīng)用可以使用主機(jī)到主機(jī)層的一個服務(wù),同樣許多主機(jī)到主機(jī)層的服務(wù)也可以使用Intenret層。多個協(xié)議簇(如IP、IPX、AppleTalk) 還可以通過數(shù)據(jù)鏈路協(xié)議共享一條物理鏈路。
BGP是一個應(yīng)用層的協(xié)議,因?yàn)樗褂肨CP端口傳送它的消息:面RIP協(xié)議也是應(yīng)用層協(xié)議的原因是因?yàn)槭褂肬DP接口傳遇它的消息。其他的路由選擇協(xié)議如OSPF,稱為Intemet層的協(xié)議是因?yàn)樗鼈冎苯釉贗P數(shù)據(jù)包中封裝它們的消息。
IP包頭
圖1-2給出了IP包頭(Packet Header)的格式,相應(yīng)標(biāo)準(zhǔn)見RFC791。數(shù)據(jù)包中的大多.數(shù)字段對路由選擇都很重要。
版本(Version) 一標(biāo)識了 數(shù)據(jù)包的IP版本號。這個4位字段的值設(shè)置為二進(jìn)制的0100表示IP版本4 (IPv4) ,設(shè)置為0110表示IP版本6 (IPv6)。本文主要涉及的是IPv4,下一篇小編主要講述IPv6。在表1-1中列出了所有已分配的現(xiàn)行版本號及相關(guān)RFC.除4和6(早期提出的簡單Internet協(xié)議一即SIP協(xié)議,也使用版本號6)之外,其他的所有版本號僅作為“歷史產(chǎn)物”而存在,感興趣的讀者可以閱讀相關(guān)的RFC。
●報(bào)頭長度(header length)——字段長度為4 位,正如字段名所示,它表示32位字長的IP報(bào)頭長度。設(shè)計(jì)報(bào)頭長度字段是因?yàn)閿?shù)據(jù)包的可選項(xiàng)字段(在本節(jié)后面部分將會討論)的大小會發(fā)生變化。IP 報(bào)頭最小長度為20個八位組,最大可以擴(kuò)展到60個八位組一通過這個字段也可以描述32位字的最大長度。
●服務(wù)類型(Type of Service, ToS)?——字段長度為8 位,它用來指定特殊的數(shù)據(jù)包處理方式。服務(wù)類型字段實(shí)際上被劃分為兩個子字段:優(yōu)先權(quán)和ToS。優(yōu)先權(quán)用來設(shè)置數(shù)據(jù)包的優(yōu)先級,這就像郵寄包裹一樣,可以是平信、隔日送到或兩日內(nèi)送到。ToS允許按照吞吐量、時延、可靠性和費(fèi)用方式選擇傳輸服務(wù)。雖然ToS字段通常不用(所有位均被設(shè)置為0),但是在開放式最短路徑優(yōu)先(OSPF) 協(xié)議的早期規(guī)范中還是稱為ToS路由選擇的。優(yōu)先權(quán)位偶爾在服務(wù)質(zhì)量(QoS)應(yīng)用中使用。圖1-3的a部分簡要地說明了8個ToS位,更詳細(xì)的信息可以參見RFC1340和RFC1349。
在最近幾年,ToS字段已經(jīng)作為區(qū)分服務(wù)(Diffserv) 架構(gòu)的一部分被重新定義了。區(qū)分服務(wù)架構(gòu)為IP數(shù)據(jù)包所創(chuàng)建的處理比通過相對嚴(yán)格的ToS定義所允許的處理靈活得多。在DifServ下,我們能夠在一臺路由器上定義服務(wù)分類,將數(shù)據(jù)包歸類到這些分類中去。路由器可以根據(jù)它們的分類使用不同的優(yōu)先級對數(shù)據(jù)包進(jìn)行排序和轉(zhuǎn)發(fā)。每一個排序和轉(zhuǎn)發(fā)的處理稱為一個Per-Hop Behavior (PHB)。雖然DiffServ定義了這個架構(gòu)或體系,但這個機(jī)制本身稱為區(qū)分服務(wù)類別或簡單地稱為服務(wù)類別(CoS)。
圖1-3中的(b)部分顯示了ToS字段是如何重新定義的,開始的6個位現(xiàn)在構(gòu)成了區(qū)分代碼點(diǎn)(DifServ Code Point, DSCP)。利用這6個位,我們可以使用任意數(shù)值或根據(jù)在區(qū)分服務(wù)體系結(jié)構(gòu)中預(yù)先定義的服務(wù)類別,最多可以定義64個不同的服務(wù)類別,并可整理到PHB中。請注意,在IP報(bào)頭中的這個字段保留了8位;區(qū)分服務(wù)體系結(jié)構(gòu)重新定義了路由器對這個字段中數(shù)值的解釋。
●顯式擁塞通知(Explicit Congestion Notification, ECN) ——在圖 1-3中的顯式擁塞通知是某些路由器用來支持顯式擁塞通知的,當(dāng)它支持該特性時,這些位可以用于擁塞信號(ECN=11)。
●總長度(Total Length)——數(shù)據(jù)包總 長度字段的長度為16位,以八位組為單位計(jì),其中包括IP報(bào)頭。接收者用 IP數(shù)據(jù)包總長度減去IP報(bào)頭長度,就可以確定數(shù)據(jù)包數(shù)據(jù)有效載荷的大小。16位長的二進(jìn)制數(shù)用十進(jìn)制表示最大可以為65535,所以IP數(shù)據(jù)包的最大長度是65 535。
●標(biāo)識符(ldentifier)——字段長度為I6位,通常與標(biāo)記字段和分段偏移字段一起用于數(shù)據(jù)包的分段。如果數(shù)據(jù)包原始長度超過數(shù)據(jù)包所要經(jīng)過的數(shù)據(jù)鏈路的最大傳輸單元(MTU),那么必須將數(shù)據(jù)包分段為更小的數(shù)據(jù)包。例如,一個大小為5000字節(jié)的數(shù)據(jù)包在穿過網(wǎng)絡(luò)時,如果遇到一條MTTU為1 500字節(jié)的數(shù)據(jù)鏈路,即數(shù)據(jù)幀最多容納大小為1 500字節(jié)的數(shù)據(jù)包。路由器需要在數(shù)據(jù)成幀之前將數(shù)據(jù)包分段成多個,數(shù)據(jù)包,其中每個數(shù)據(jù)包長度不得超過1 500字節(jié);然后路由器在每片數(shù)據(jù)包的標(biāo)識字段上打上相同的標(biāo)記,以便接收設(shè)備可以識別出屬于一個數(shù)據(jù)包的分段。
●標(biāo)記字段(Flag) ——長度為3位, 其中第1位沒有使用。第2位是不分段(DF)位。當(dāng)DF位被設(shè)置為1時,表示路由器不能對數(shù)據(jù)包進(jìn)行分段處理。如果數(shù)據(jù)包由于不能被分段而未能被轉(zhuǎn)發(fā),那么路由器將丟棄該數(shù)據(jù)包并向源點(diǎn)發(fā)送錯誤消息。這一功能可以在網(wǎng)絡(luò)上用于測試MTU值。參見示例1-1所示,在I0S軟件系統(tǒng)中,使用擴(kuò)展Ping工具可以對DF位進(jìn)行設(shè)置。
示例1-1為 了測試穿越網(wǎng)絡(luò)的MTU值,IOS 軟件中的擴(kuò)展Ping工具允許設(shè)置DF位。在ping的輸出信息中,到達(dá)目的地172.16.113.17的路徑的最大MTU為1478字節(jié)
第3位表示還有更多分段(MF)位,當(dāng)路由器對數(shù)據(jù)包進(jìn)行分段時,除了最后一個分段的MF位設(shè)置為0外,其他所有分段的MF位均設(shè)置為I,以便接收者直到收到MF位為0的分段為止。
●分段偏移(Fragment Offset)——字段長度為13位,以8個八位組為單位,用于指明分段起始點(diǎn)相對于報(bào)頭起始點(diǎn)的偏移量。由于分段到達(dá)時可能錯序,所以分段偏移字段可以使接收者按照正確的順序重組數(shù)據(jù)包。
請注意,如果一個分段在傳輸中丟失,那么必須在網(wǎng)絡(luò)中同一點(diǎn)對整個數(shù)據(jù)包重新分段并重新發(fā)送。因此,容易發(fā)生故障的數(shù)據(jù)鏈路會造成時延不成比例。另外,如果由于網(wǎng)絡(luò)擁塞而造成分段丟失,那么重傳整組分段會進(jìn)一步加重網(wǎng)絡(luò)擁塞。
●生存時間(Time To Live, TTL)——字段長度為8 位,在最初創(chuàng)建數(shù)據(jù)包時TTL即被設(shè)置為某個特定值。當(dāng)數(shù)據(jù)包逐個沿路由器被傳輸時,每臺路由器都會降低TTL的數(shù)值。當(dāng)TTL值減為0時,路由器將會丟棄該數(shù)據(jù)包并向源點(diǎn)發(fā)送錯誤信息。這種方法可以防止數(shù)據(jù)包在網(wǎng)絡(luò)上無休止地被傳輸。
按照最初構(gòu)想,TTL-值以s (秒)為單位。如果數(shù)據(jù)包在路由器上被延遲的時間超過1s,路由器將會相應(yīng)地調(diào)整TTL值。然而,這種方法實(shí)施起來十分困難,從來沒有被廣泛地支持。現(xiàn)代的路由器不管實(shí)際時延是多少,統(tǒng)統(tǒng)將TTL值減1,所以TTL實(shí)際上是表示跳數(shù)。雖然TTL常見的值為15和32,但是建議的缺省值是64。
像I0S軟件中的trace 命令這樣的一些追蹤工具使用的是TTL字段。如果路由器被告知需要追蹤到達(dá)主機(jī)地址為10.11.12.13 的路徑,路由器將發(fā)送3個數(shù)據(jù)包,其中TTL值被設(shè)置為1;第1臺路由器將會把TTL值減少到0,而且在丟棄數(shù)據(jù)包的同時向源點(diǎn)發(fā)送錯誤信息。源點(diǎn)路由器通過閱讀錯誤信息從而得知發(fā)送錯誤信息的路由器即為路徑上的第1臺路由器。再一次被路由器發(fā)送的3個數(shù)據(jù)包的TTL值被設(shè)置為2。
第1臺路由器將TTL值減1,第2臺路由器將TL值再減I后為0,此時源點(diǎn)路由器將會接收到第2臺路由器發(fā)送來的錯誤信息。第3次發(fā)送的數(shù)據(jù)包TTL值被設(shè)置為3,依此類推,直到目的地被發(fā)現(xiàn)。最終,沿著網(wǎng)絡(luò)路徑所有的路由器都會被標(biāo)識出來。示例1-2 中顯示了IOS軟件中路由追蹤的輸出結(jié)果。
為了使13位長的分段偏移字段可以表示的最大數(shù)據(jù)包長度為65 535字節(jié),所以使用8個八位組作為本字段的單位。
示例1-2追蹤工具使用 TTL字段來標(biāo)識沿途路由器。星號表示超時數(shù)據(jù)包
●協(xié)議(Protocol) ——字段長度為8位,它給出了主機(jī)到主機(jī)層或傳輸層協(xié)議的“地址”或協(xié)議號,協(xié)議字段指定了數(shù)據(jù)包中信息的類型。當(dāng)前已分配了100多個不同的協(xié)議號,表1-2給出了其中一些較常用的協(xié)議號。
在IPv6報(bào)頭中等價的字段己經(jīng)重新命名為HopLimit,以便更加確切地反映它的真正用途。
●報(bào)頭校驗(yàn)和(Header Checksum) ——是針對IP 報(bào)頭的糾錯字段。校驗(yàn)和不計(jì)算被封裝的數(shù)據(jù),UDP、TCP和ICMP都有各自的校驗(yàn)和。報(bào)頭校驗(yàn)和字段包含一個16 位二進(jìn)制補(bǔ)碼和,這是由數(shù)據(jù)包發(fā)送者計(jì)算得到的。接收者將連同原始校驗(yàn)和重新進(jìn)行16位二進(jìn)制補(bǔ)碼和計(jì)算。如果數(shù)據(jù)包傳輸中沒有發(fā)生錯誤,那么結(jié)果應(yīng)該16位全部為1。回憶前面所述內(nèi)容,由于每臺路由器都會降低數(shù)據(jù)包的TTL值,所以每臺路由器都必須重新計(jì)算校驗(yàn)和。RFCI141 討論了一些簡化計(jì)算的策略。
●源地址和目的地址(Source and Destination Address) ——字段長度為 32位,分別表示發(fā)送者數(shù)據(jù)包源點(diǎn)和目的地的IP地址。
●可選項(xiàng)(Options) ——是一個長度可變的字段, 并像其名字所表示的,它是可選的。可選項(xiàng)被添加在包頭中,包括源點(diǎn)產(chǎn)生的信息和其他路由器加入的信息;可選項(xiàng)字
段主要用于測試。常用的可選項(xiàng)如下:
?松散源路由選擇(Loose Source Routing) ——它給出了一連串路由器接口的IP地址序列。數(shù)據(jù)包必須沿著IP地址序列傳送,但是允許在相繼的兩個地址之間跳過多臺路由器。
?嚴(yán)格源路由選擇(StrictSourceRouting)——它也給出了一系列路由器接口的IP地址序列。不同于松散源路由選擇,數(shù)據(jù)包必要嚴(yán)格按照路由轉(zhuǎn)發(fā)。如果下一跳不再列表中,那么將會發(fā)生錯誤。
?記錄路由(RecordRoute)——當(dāng)數(shù)據(jù)包離開時為每臺路由器提供空間記錄數(shù)據(jù)包的出站接口地址,以便保存數(shù)據(jù)包經(jīng)過的所有路由器的記錄。記錄路由選項(xiàng)提供了類似于路由追蹤的功能,但是不同點(diǎn)在于這里記錄了雙向路徑上的出站接口信息。
?時間戳(Timestamp)——除了每臺路由器還會記錄一個時間戳之外,時間戳選項(xiàng)十分類似于記錄路由選項(xiàng),這樣數(shù)據(jù)包不僅可以知道自己到過哪里,而且還可以記錄到達(dá)的時間。
在Cisco路由器上使用擴(kuò)展的Ping工具可以調(diào)用所有這些選項(xiàng)。示例1-1中使用了記錄路由選項(xiàng),示例1-3使用了松散源路由選擇和時間戳選項(xiàng),嚴(yán)格源路由選擇選項(xiàng)在示例1-4中被使用。
示例1-3使用Cisco的擴(kuò)展Ping工具來設(shè)置IP報(bào)頭中的可選項(xiàng)字段的各項(xiàng)參數(shù)。在這個例子中,用到了松散源路由選擇選項(xiàng)和時間戳選項(xiàng)
示例1-4這里使用擴(kuò)展Ping在ping數(shù)據(jù)包中設(shè)置嚴(yán)格源路由選擇選項(xiàng)
●填充 (Padding) ——該字段通過 在可選項(xiàng)字段后面添加0來補(bǔ)足32位,這樣保證報(bào)頭長度是32位的倍數(shù)。
示例1-5顯示了協(xié)議分析器捕獲到的IP報(bào)頭的信息。請與圖1-2中的信息作一下比較。
示例1-5在協(xié)議分 析器的窗口中,可以看到IP包頭各字段及每個字段的值
點(diǎn)擊
即可免費(fèi)獲得3天實(shí)戰(zhàn)課程名額
帶你從0到1設(shè)計(jì)、搭建企業(yè)網(wǎng)絡(luò)
還不趕快動動你的小指頭
↓↓↓
點(diǎn)擊??即可免費(fèi)獲得實(shí)戰(zhàn)課程
總結(jié)
以上是生活随笔為你收集整理的16进制数用空格分开 tcp_面试时,你是否被问到过TCP/IP协议?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CVD和ALD薄膜沉积技术应用领域
- 下一篇: python的argsort函数_pyt