(轉)從瀏覽器訪問一個地址的過程

1.若DNS緩存中沒有相關數據,則IE瀏覽器先向DNS服務器發出DNS請求:html

  這一過程的目的是獲取www.sina.com這個域名所對應的IP地址;linux

  IE瀏覽器向本機DNS模塊發出DNS請求,DNS模塊生成相關的DNS報文;windows

  DNS模塊將生成的DNS報文傳遞給傳輸層的UDP協議單元;瀏覽器

  UDP協議單元將該數據封裝成UDP數據報,傳遞給網絡層的IP協議單元;緩存

  IP協議單元將該數據封裝成IP數據包,其中目的IP地址爲DNS服務器的IP地址;服務器

  封裝好的IP數據包將傳遞給數據鏈路層的協議單元進行發送;網絡

  發送時若是ARP緩存中沒有相關數據,則發送ARP廣播請求,等待ARP迴應;server

  獲得ARP迴應後,將IP地址與路由下一跳MAC地址對應的信息寫入ARP緩存表;htm

  寫入緩存後,以路由下一跳地址填充目的MAC地址,並以數據幀形式轉發;ip

  這個轉發過程可能會進行屢次,這取決於DNS服務器在校園網中的位置;

  DNS請求被髮送到DNS服務器的數據鏈路層協議單元;

  DNS服務器的數據鏈路層協議單元解析收到的數據幀,將其內部所含有的IP數據包傳遞給網絡層IP協議單元;

  DNS服務器的IP協議單元解析收到的IP數據包,將其內部所含有的UDP數據報傳遞給傳輸層的UDP協議單元;

  DNS服務器的UDP協議單元解析收到的UDP數據包,將其內部所含有的DNS報文傳遞給該服務器上的DNS服務單元;

  DNS服務單元收到DNS請求,將域名解析爲對應的IP地址,產生DNS迴應報文;

  (全部應用層報文必須經過傳輸層、網絡層和數據鏈路層,所以在下面的敘述中,我將簡化這一過程的敘述,簡化形式以下面的樣子,其中單箭頭爲本機內部傳遞,雙箭頭爲網絡上的發送)

  DNS迴應報文→UDP→IP→MAC→→請求域名解析的主機;

  請求域名解析的主機收到數據幀,該數據幀→IP→UDP→DNS→IE瀏覽器;

  將域名解析的結果以域名和IP地址對應的形式寫入DNS緩存表。

  2.IE瀏覽器與www.sina.com.cn創建TCP鏈接:

  IE瀏覽器向www.sina.com.cn發出TCP鏈接請求報文;

  該請求TCP報文中的SYN標誌位被設置爲1,表示鏈接請求;

  該TCP請求報文→IP(DNS)→MAC(ARP)→→校園網關→→www.sina.com.cn主機;

  該TCP請求報文通過IP層時,填入的目的IP地址就是上面DNS過程得到的IP地址;

  通過數據鏈路層時,若MAC地址不明,還要進行上面所敘述的ARP過程;

  www.sina.com.cn收到的數據幀→IP→TCP,TCP協議單元會迴應請求應答報文;

  該請求應答TCP報文中的SYN和ACK標誌位均被設置爲1,表示鏈接請求應答;

  該TCP請求應答報文→IP→MAC(ARP)→→校園網關→→請求主機;

  請求主機收到數據幀→IP→TCP,TCP協議單元會迴應請求確認報文;

  該請求應答TCP報文中的ACK標誌位被設置爲1,表示鏈接請求確認;

  該TCP請求確認報文→IP→MAC(ARP)→→校園網關→→www.sina.com.cn主機;

  www.sina.com.cn收到的數據幀→IP→TCP,鏈接創建完成;

  在這個過程當中,任何一個報文出錯或超時,都要進行重傳;

  這個過程被稱爲TCP創建鏈接的三次握手。

  3.IE瀏覽器開始HTTP訪問過程

  IE瀏覽器向www.sina.com.cn發出HTTP-GET方法報文;

  該HTTP-GET方法報文→TCP→IP→MAC→→校園網關→→www.sina.com.cn主機;

  www.sina.com.cn收到的數據幀→IP→TCP→HTTP,HTTP協議單元會迴應HTTP協議格式封裝好的HTML超文本形式數據;

  HTTP-HTML數據→TCP→IP→MAC(ARP)→→校園網關→→請求主機;

  請求主機收到的數據幀→IP→TCP→HTTP→IE瀏覽器,瀏覽器會以網頁形式顯示HTML超文本,就是咱們所看到的網頁。

        4.斷開TCP鏈接

  IE瀏覽器向www.sina.com.cn發出TCP鏈接結束請求報文;

  該請求TCP報文中的FIN標誌位被設置爲1,表示結束請求;

  該TCP結束請求報文→IP→MAC(ARP)→→校園網關→→www.sina.com.cn主機;

  www.sina.com.cn收到的數據幀→IP→TCP,TCP協議單元會迴應結束應答報文;

  該結束應答TCP報文中的FIN和ACK標誌位均被設置爲1,表示結束應答;

  該TCP結束應答報文→IP→MAC(ARP)→→校園網關→→請求主機;

  這個過程須要雙向進行,所以www.sina.com.cn主機也會按上述流程再作一次;

  整個過程被稱爲TCP斷開鏈接的四次握手。

  呵呵,好麻煩的一個過程對不對?我也寫了好長時間誒,但願對你有所幫助!

  -------------------------------------------------------------

  這我的很耐心,已經解釋得很詳細了。不過我是個吹毛求疵的人,非得把每一個細節都弄得很清楚。其中最讓我糾結的是ip地址轉換到mac地址的過程。或許你說那不就是arp協議嗎?那你就想的簡單了點。

  首先ip地址是網絡層(layer 3)的概念,mac地址是數據鏈路層(layer 2)的概念。

  網絡層主要任務是路由,而數據鏈路層是提供相鄰兩個網絡實體間端到端的數據傳輸,能夠理解成爲局域網內兩臺機器間的數據傳輸。

  數據鏈路層的做用範圍是局域網,那麼其mac地址確定是局域網內某臺機器的mac地址。而且arp協議的做用範圍也是局域網。可是ip數據包的目的地址未必都是局域網內的,若是不是,在局域網內進行arp廣播查詢該ip地址對應的mac地址,確定沒有人迴應,由於你們誰都不擁有這個ip地址。

  因而先要知道ip地址是否是同一個局域網裏的,這個不難,使用子網掩碼就能夠肯定。若是是同一個局域網,那麼就能夠arp了。那若是不是呢??

  這就要靠網絡層了。到這時候我才驚訝地發現,路由表不是隻在路由器上纔有的(之前我可都是這麼覺得的),本機上照樣有,並且也有路由過程。在 windows下CMD下輸入命令「route print」,就能夠看到本機上的路由表(linux下是"route")。部分路由表項以下(我機器的ip是10.77.100.113,子網掩碼是 255.255.255.0 ):

  ----------------------

  Network Destination        Netmask          Gateway        Interface             Metric

  0.0.0.0               0.0.0.0      10.77.100.1       10.77.100.113         10

  10.77.100.0         255.255.255.0    10.77.100.113     10.77.100.113         10

  ----------------------

  最後一條其實意思就是,若是ip地址是同一個局域網中的地址,則直接發送到該ip地址就能夠了(表中看起來是路由給本身,我估計是這個意思,linux下就是一個星號表示的,更能理解)。

  中間那條其實就是默認路由路徑(由於任何一個ip地址 AND 0.0.0.0 後確定都是 0.0.0.0 的),其意思就是,若是其餘路由項都不符合,則發送到默認網關。

  扯遠一點。默認狀況下,windows機器不會充當路由器的功能,它不會轉發(forward)本身接受到的可是目的地址不是本身的包。可是這是能夠設置的,經過開啓路由轉發功能,就能充當一個路由器了。這樣,局域網中另外一臺機器就能夠把默認網關設置爲你的ip,而後他的全部到外網的包都先交給你,而後你再路由轉發出去。貌似屢次一舉,可是這樣你的機器能夠控制別人的上網功能。譬如一個家裏,老爸把他兒子的機器的默認網關設置爲本身的機器的,當這個狡猾的老爸不想讓兒子上網的時候,就關閉本身機器的路由轉發功能,可憐的兒子就上不了網了,並且不知道爲何。-_-!!

  譬如XP下能夠修改註冊表項:HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Services\Tcpip \Parameters 中的 IPEnableRouter=1。

  順便說說命令「route -f」,它能夠刪除路由表中涉及默認網關的項。我曾經使用該命令刪除掉中間那條,結果訪問外網就不行了,實際錯誤就是找不到路由項。

  和同宿舍一個哥們討論該問題,當他發現「route -f」可讓機器不能上外網時,立馬說能夠用這個搞惡做劇啊,讓人上不了網,估計沒幾我的能找出問題來,只有重啓機器。我汗-_-!!

  因此ip地址轉換到mac地址的過程就更清晰了:

  ------------------------

  一、首先獲得ip包須要送達的目的地址 ip-des ;

  二、查路由表,根據匹配 ip-des 的路由表項獲得下一跳(next hop)的中間目的地址 ip-next (能夠保證 ip-next 是局域網中的地址);

  三、在arp緩存中查找 ip-next 對應的mac地址,若是緩存中沒有,再到局域網中使用arp協議進行詢問;

  四、獲得了mac地址,一切就好辦了----將mac地址放到幀頭,發送數據。

  ------------------------

  由此看出毫不是僅僅arp那麼簡單。

  幾個有用的命令(注意linux下須要root權限):

  ------------------------

  查看本地路由表:

  windows: route print

  linux: route

  查看本地arp緩存:

  windows: arp -a

  linux: arp

相關文章
相關標籤/搜索