關于昨天的“網(wǎng)絡層”,還有最后一點說明,由于IP數(shù)據(jù)包是放在以太網(wǎng)數(shù)據(jù)包里發(fā)送的,所以我們必須同時知道兩個地址,一個是對方的MAC地址,另一個是對方的IP地址。但是在通常情況下,對方的IP地址是已知的,但是我們不知道他的MAC地址。而這又分為兩種情況,第一種情況,如果兩臺主機不在同一個子網(wǎng)絡,那么事實上沒有辦法得到對方的MAC地址,只能把數(shù)據(jù)包傳送到兩個子網(wǎng)絡連接處的“網(wǎng)關”,讓網(wǎng)關去處理。
第二種情況,如果兩臺主機在一個子網(wǎng)絡,那么我們可以使用ARP協(xié)議,得到對方的MAC地址。ARP協(xié)議也是發(fā)出一個數(shù)據(jù)包,其中包含他要查詢的的主機的IP地址,在對方IP一欄,填的是FF:FF:FF:fFF:FF,表示這是一個“廣播”地址,他所在的子網(wǎng)絡的每一臺主機,都會收到這個數(shù)據(jù)包,從中取出IP地址,與自己的IP地址進行比較。如果兩者相同,都做出回復,向對方報告自己的MAC地址,否則就丟棄這個包。有了ARP協(xié)議之后,我們就可以得到同一個子網(wǎng)絡中的主機MAC地址,可以把數(shù)據(jù)包發(fā)送到任意一個主機之上。
IP協(xié)議是TCP/IP的核心,所有的TCP,UDP,IMCP,IGCP的數(shù)據(jù)都是以IP數(shù)據(jù)格式。但是IP不是可靠的協(xié)議,這就是說,IP協(xié)議沒有提供一種數(shù)據(jù)未傳達以后的處理機制。而這被認為是上層協(xié)議要做的事,所以這也就是出現(xiàn)了TCP是一個可靠的協(xié)議,而UDP就沒有那么可靠。
其中有一個8位生存時間(TTL)字段,該字段規(guī)定了該數(shù)據(jù)包在穿過多少個路由之后才會被拋棄,而這就證明IP協(xié)議是不可靠的,他不能保證數(shù)據(jù)被送達,某個IP數(shù)據(jù)包每穿過,該數(shù)據(jù)包的TTL數(shù)值就會減少1,當這個數(shù)據(jù)包的TTL成為0時,它就會被拋棄。這個數(shù)段的最大值就是255,也就是說一個協(xié)議包也就是在路由器中穿行了255次之后就會被拋棄,根據(jù)系統(tǒng)的不同,這個數(shù)據(jù)也不太一樣。
如果IP數(shù)據(jù)包的TTL(生命周期)以到,則該IP數(shù)據(jù)包就被拋棄。
搜索路由表,優(yōu)先搜索匹配主機,如果能找到和IP地址完全一致的目標主機,則將該包發(fā)向目標主機
搜索路由表,如果匹配主機失敗,則匹配同子網(wǎng)的路由器,這需要“子網(wǎng)掩碼(1.3.)”的協(xié)助。如果找到路由器,則將該包發(fā)向路由器。
搜索路由表,如果匹配同子網(wǎng)路由器失敗,則匹配同網(wǎng)號(第一章有講解)路由器,如果找到路由器,則將該包發(fā)向路由器。
搜索陸游表,如果以上都失敗了,就搜索默認路由,如果默認路由存在,則發(fā)包
如果都失敗了,就丟掉這個包。
由于IP協(xié)議不是一個可靠的協(xié)議,他不能保證數(shù)據(jù)被送達,而保證數(shù)據(jù)送達的工作應該由其他的模塊來完成。其中一個很重要的模塊就是ICMP(網(wǎng)絡控制報文)協(xié)議。當傳送IP數(shù)據(jù)包發(fā)生錯誤時,比如主機不可達,路由不可達等等,ICMP會把錯誤信息封包,然后傳回給主機。給主機一個處理錯誤的機會,這正是建立在IP層以上的協(xié)議就是可以做到安全的原因。ICMP數(shù)據(jù)包由8bit的錯誤類型和16bit的校驗位組成。
盡管在大多數(shù)情況下,錯誤的包傳送應該給出ICMP報文,但是在特殊情況下,是不產生ICMP錯誤報文的。如下
ICMP差錯報文不會產生ICMP差錯報文(出IMCP查詢報文)(防止IMCP的無限產生和傳送)
目的地址是廣播地址或多播地址的IP數(shù)據(jù)報。
作為鏈路層廣播的數(shù)據(jù)報。
不是IP分片的第一片。
源地址不是單個主機的數(shù)據(jù)報。這就是說,源地址不能為零地址、環(huán)回地址、廣播地 址或多播地址。
雖然里面的一些規(guī)定現(xiàn)在還不是很明白,但是所有的這一切規(guī)定,都是為了防止產生ICMP報文的無限傳播而定義的。
七.傳輸層
1.由來:有了MAC地址和IP地址,我們已經(jīng)可以在互聯(lián)網(wǎng)上任意兩臺主機上建立通信。而你在多個進程的時候,許多程序都要使用網(wǎng)絡,如一邊瀏覽網(wǎng)絡,一邊與朋友聊天。當一個數(shù)據(jù)包從互聯(lián)網(wǎng)上發(fā)過來的時候,你怎么知道他是網(wǎng)絡的內容還是在線聊天的內容。因此我們還需要一個參數(shù),表示這個數(shù)據(jù)包到底供哪個程序使用,這個參數(shù)就叫做“端口”,他其實就是每一個使用網(wǎng)卡程序的編號。每個數(shù)據(jù)發(fā)送到主機指定端口,所以不同的程序就能取到自己所需要的數(shù)據(jù)。“端口”是0到65535之間的一個整數(shù),正好是16個二進制位。而0到1023的端口被系統(tǒng)占用,用戶只能選取大于1023的端口。不管是瀏覽網(wǎng)頁還是在線聊天,應用程序會隨機選用一個端口,然后與服務器的相應端口聯(lián)系。
“傳輸層”的功能,就是建立“端口到端口”的通信。相比之下,網(wǎng)絡層只能“主機到主機”的通信。只要能確定主機和端口,我們就能實現(xiàn)程序之間的交流。
因此,Unix系統(tǒng)就把主機+端口,叫做“套接字”。有了它,就可以進行網(wǎng)絡應用的開發(fā)了
2.UDP協(xié)議
我們現(xiàn)在必須在數(shù)據(jù)包中加入端口信息,這就需要新的協(xié)議,最簡單的實現(xiàn)就是UDP協(xié)議,他的格式幾乎就是在數(shù)據(jù)前邊加上端口號。
UDP數(shù)據(jù)包,也是由“標頭”和“數(shù)據(jù)”兩部分構成。標頭部分主要定義了發(fā)出端口和接收端口,“數(shù)據(jù)”部分就是具體的內容。然后把整個UDP數(shù)據(jù)包放入IP數(shù)據(jù)包的數(shù)據(jù)部分,而IP數(shù)據(jù)包在以太網(wǎng)的數(shù)據(jù)包中,所以整個以太網(wǎng)數(shù)據(jù)包現(xiàn)在就變成了這個樣子:
具體的協(xié)議信息我們明天再續(xù)
學海無涯...
-
以太網(wǎng)
+關注
關注
41文章
5635瀏覽量
175956 -
TCP
+關注
關注
8文章
1402瀏覽量
81048 -
大數(shù)據(jù)
+關注
關注
64文章
8960瀏覽量
140234
發(fā)布評論請先 登錄
全硬件TCP/IP協(xié)議棧學習筆記(第一天:TCP/IP協(xié)議學習一)

全硬件TCP/IP協(xié)議棧學習筆記(第三天:TCP/IP協(xié)議學習三)

為什么會有TCP/IP協(xié)議
剖析:WIZnet以太網(wǎng)核心技術–全硬件TCP/IP協(xié)議棧
tcp ip協(xié)議_什么是tcp ip協(xié)議

Microchip TCP/IP協(xié)議棧

Microchip的TCP和IP協(xié)議棧的詳細中文資料免費下載

Microchip TCP/IP精簡協(xié)議棧

Microchip TCP/IP協(xié)議棧

TCP-IP協(xié)議講解

評論