熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

浏覽器訪問一個地址的過程

2022-06-13   來源: Java核心技術 

  我來回答這個問題吧整個過程比較復雜也不知道哪些步驟對你有用就說得詳細一些吧采用分條的形式看哪裡你能用到就參考哪裡吧呵呵!

  若DNS緩存中沒有相關數據則IE浏覽器先向DNS服務器發出DNS請求

  這一過程的目的是獲取這個域名所對應的IP地址

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

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

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

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

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

  發送時如果ARP緩存中沒有相關數據則發送ARP廣播請求等待ARP回應

  得到ARP回應後將IP地址與路由下一跳MAC地址對應的信息寫入ARP緩存表

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

  這個轉發過程可能會進行多次這取決於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緩存表

  IE浏覽器與建立TCP連接

  IE浏覽器向發出TCP連接請求報文

  該請求TCP報文中的SYN標志位被設置為表示連接請求

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

  該TCP請求報文經過IP層時填入的目的IP地址就是上面DNS過程獲得的IP地址

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

  收到的數據幀→IP→TCPTCP協議單元會回應請求應答報文

  該請求應答TCP報文中的SYN和ACK標志位均被設置為表示連接請求應答

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

  請求主機收到數據幀→IP→TCPTCP協議單元會回應請求確認報文

  該請求應答TCP報文中的ACK標志位被設置為表示連接請求確認

  該TCP請求確認報文→IP→MAC(ARP)→→校園網關→→主機

  收到的數據幀→IP→TCP連接建立完成

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

  這個過程被稱為TCP建立連接的三次握手

  IE浏覽器開始HTTP訪問過程

  IE浏覽器向發出HTTPGET方法報文

  該HTTPGET方法報文→TCP→IP→MAC→→校園網關→→主機

  收到的數據幀→IP→TCP→HTTPHTTP協議單元會回應HTTP協議格式封裝好的HTML超文本形式數據

  HTTPHTML數據→TCP→IP→MAC(ARP)→→校園網關→→請求主機

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

  斷開TCP連接

  IE浏覽器向發出TCP連接結束請求報文

  該請求TCP報文中的FIN標志位被設置為表示結束請求

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

  收到的數據幀→IP→TCPTCP協議單元會回應結束應答報文

  該結束應答TCP報文中的FIN和ACK標志位均被設置為表示結束應答

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

  這個過程需要雙向進行因此主機也會按上述流程再做一次

  整個過程被稱為TCP斷開連接的四次握手

  呵呵好麻煩的一個過程對不對?我也寫了好長時間诶希望對你有所幫助!

  

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

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

  網絡層主要任務是路由而數據鏈路層是提供相鄰兩個網絡實體間端到端的數據傳輸可以理解成為局域網內兩台機器間的數據傳輸

  數據鏈路層的作用范圍是局域網那麼其mac地址肯定是局域網內某台機器的mac地址並且arp協議的作用范圍也是局域網但是ip數據包的目的地址未必都是局域網內的如果不是在局域網內進行arp廣播查詢該ip地址對應的mac地址肯定沒有人回應因為大家誰都不擁有這個ip地址

  於是先要知道ip地址是不是同一個局域網裡的這個不難使用子網掩碼就可以確定如果是同一個局域網那麼就可以arp了那如果不是呢??

  這就要靠網絡層了到這時候我才驚訝地發現路由表不是只在路由器上才有的(以前我可都是這麼以為的)本機上照樣有而且也有路由過程在 windows下CMD下輸入命令route print就可以看到本機上的路由表(linux下是route部分路由表項如下(我機器的ip是子網掩碼是

  

  Network Destination        Netmask          Gateway        Interface             Metric

                                      

                            

  

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

  中間那條其實就是默認路由路徑(因為任何一個ip地址 AND 後肯定都是 的)其意思就是如果其他路由項都不符合則發送到默認網關

  扯遠一點默認情況下windows機器不會充當路由器的功能它不會轉發(forward)自己接受到的但是目的地址不是自己的包但是這是可以設置的通過開啟路由轉發功能就能充當一個路由器了這樣局域網中另一台機器就可以把默認網關設置為你的ip然後他的所有到外網的包都先交給你然後你再路由轉發出去貌似多次一舉但是這樣你的機器可以控制別人的上網功能譬如一個家裡老爸把他兒子的機器的默認網關設置為自己的機器的當這個狡猾的老爸不想讓兒子上網的時候就關閉自己機器的路由轉發功能可憐的兒子就上不了網了而且不知道為什麼_!!

  譬如XP下可以修改注冊表項HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Services\Tcpip \Parameters 中的 IPEnableRouter=

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

  和同宿捨一個哥們討論該問題當他發現route f可以讓機器不能上外網時立馬說可以用這個搞惡作劇啊讓人上不了網估計沒幾個人能找出問題來只有重啟機器我汗_!!

  所以ip地址轉換到mac地址的過程就更清晰了

  

  首先得到ip包需要送達的目的地址 ipdes

  查路由表根據匹配 ipdes 的路由表項得到下一跳(next hop)的中間目的地址 ipnext (可以保證 ipnext 是局域網中的地址)

  在arp緩存中查找 ipnext 對應的mac地址如果緩存中沒有再到局域網中使用arp協議進行詢問

  得到了mac地址一切就好辦了將mac地址放到幀頭發送數據

  

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

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

  

  查看本地路由表

  windows: route print

  linux: route

  查看本地arp緩存

  windows: arp a

  linux: arp

  


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26894.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.