<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統(tǒng)計

    留言簿(23)

    積分與排名

    優(yōu)秀學習網站

    友情連接

    閱讀排行榜

    評論排行榜

    http請求的詳細過程 【推薦】

    對于一個做程序開發(fā)的人員來說基礎知識非常重要,而在工作中常常忽略掉這些基本功的熟練掌握,無意看到這篇文章,覺得不錯,特來轉載,由于原創(chuàng)地址不明,在此不作標注,希望作者能理解。
    http://www.yuanma.org/data/2009/1009/article_3949.htm

    一個http請求的詳細過程

    我們來看當我們在瀏覽器輸入http://www.mycompany.com:8080/mydir/index.html,幕后所發(fā)生的一切。

    首先http是一個應用層的協(xié)議,在這個層的協(xié)議,只是一種通訊規(guī)范,也就是因為雙方要進行通訊,大家要事先約定一個規(guī)范。

    1.連接 當我們輸入這樣一個請求時,首先要建立一個socket連接,因為socket是通過ip和端口建立的,所以之前還有一個DNS解析過程,把www.mycompany.com變成ip,如果url里不包含端口號,則會使用該協(xié)議的默認端口號。

    DNS的過程是這樣的:首先我們知道我們本地的機器上在配置網絡時都會填寫DNS,這樣本機就會把這個url發(fā)給這個配置的DNS服務器,如果能夠找到相應的url則返回其ip,否則該DNS將繼續(xù)將該解析請求發(fā)送給上級DNS,整個DNS可以看做是一個樹狀結構,該請求將一直發(fā)送到根直到得到結果。現(xiàn)在已經擁有了目標ip和端口號,這樣我們就可以打開socket連接了。

    2.請求 連接成功建立后,開始向web服務器發(fā)送請求,這個請求一般是GET或POST命令(POST用于FORM參數的傳遞)。GET命令的格式為:  GET 路徑/文件名 HTTP/1.0
    文件名指出所訪問的文件,HTTP/1.0指出Web瀏覽器使用的HTTP版本。現(xiàn)在可以發(fā)送GET命令:

    GET /mydir/index.html HTTP/1.0,

    3.應答 web服務器收到這個請求,進行處理。從它的文檔空間中搜索子目錄mydir的文件index.html。如果找到該文件,Web服務器把該文件內容傳送給相應的Web瀏覽器。

    為了告知瀏覽器,,Web服務器首先傳送一些HTTP頭信息,然后傳送具體內容(即HTTP體信息),HTTP頭信息和HTTP體信息之間用一個空行分開。
    常用的HTTP頭信息有:
      ① HTTP 1.0 200 OK  這是Web服務器應答的第一行,列出服務器正在運行的HTTP版本號和應答代碼。代碼"200 OK"表示請求完成。
      ② MIME_Version:1.0 它指示MIME類型的版本。
      ③ content_type:類型 這個頭信息非常重要,它指示HTTP體信息的MIME類型。如:content_type:text/html指示傳送的數據是HTML文檔。
      ④ content_length:長度值 它指示HTTP體信息的長度(字節(jié))。


    4.關閉連接:當應答結束后,Web瀏覽器與Web服務器必須斷開,以保證其它Web瀏覽器能夠與Web服務器建立連接。


    下面我們具體分析其中的數據包在網絡中漫游的經歷

    在網絡分層結構中,各層之間是嚴格單向依賴的。“服務”是描述各層之間關系的抽象概念,即網絡中各層向緊鄰上層提供的一組操作。下層是服務提供者,上層是請求服務的用戶。服務的表現(xiàn)形式是原語(primitive),如系統(tǒng)調用或庫函數。系統(tǒng)調用是操作系統(tǒng)內核向網絡應用程序或高層協(xié)議提供的服務原語。網絡中的n層總要向n+1層提供比n-1層更完備的服務,否則n層就沒有存在的價值。

    傳輸層實現(xiàn)的是“端到端”通信,引進網間進程通信概念,同時也要解決差錯控制,流量控制,數據排序(報文排序),連接管理等問題,為此提供不同的服務方式。通常傳輸層的服務通過系統(tǒng)調用的方式提供,以socket的方式。對于客戶端,要想建立一個socket連接,需要調用這樣一些函數socket() bind() connect(),然后就可以通過send()進行數據發(fā)送。

    現(xiàn)在看數據包在網絡中的穿行過程:

    應用層

    首先我們可以看到在應用層,根據當前的需求和動作,結合應用層的協(xié)議,有我們確定發(fā)送的數據內容,我們把這些數據放到一個緩沖區(qū)內,然后形成了應用層的報文data

    傳輸層

    這些數據通過傳輸層發(fā)送,比如tcp協(xié)議。所以它們會被送到傳輸層處理,在這里報文打上了傳輸頭的包頭,主要包含端口號,以及tcp的各種制信息,這些信息是直接得到的,因為接口中需要指定端口。這樣就組成了tcp的數據傳送單位segment。tcp是一種端到端的協(xié)議,利用這些信息,比如tcp首部中的序號確認序號,根據這些數字,發(fā)送的一方不斷的進行發(fā)送等待確認,發(fā)送一個數據段后,會開啟一個計數器,只有當收到確認后才會發(fā)送下一個,如果超過計數時間仍未收到確認則進行重發(fā),在接受端如果收到錯誤數據,則將其丟棄,這將導致發(fā)送端超時重發(fā)。通過tcp協(xié)議,控制了數據包的發(fā)送序列的產生,不斷的調整發(fā)送序列,實現(xiàn)流控和數據完整。

    網絡層

    然后待發(fā)送的數據段送到網絡層,在網絡層被打包,這樣封裝上了網絡層的包頭,包頭內部含有源及目的的ip地址,該層數據發(fā)送單位被稱為packet。網絡層開始負責將這樣的數據包在網絡上傳輸,如何穿過路由器,最終到達目的地址。在這里,根據目的ip地址,就需要查找下一跳路由的地址。首先在本機,要查找本機的路由表,在windows上運行route print就可以看到當前路由表內容,有如下幾項:
    Active Routes Default Route Persistent Route.

    整個查找過程是這樣的:
    (1)根據目的地址,得到目的網絡號,如果處在同一個內網,則可以直接發(fā)送。
    (2)如果不是,則查詢路由表,找到一個路由。
    (3)如果找不到明確的路由,此時在路由表中還會有默認網關,也可稱為缺省網關,IP用缺省的網關地址將一個數據傳送給下一個指定的路由器,所以網關也可能是路由器,也可能只是內網向特定路由器傳輸數據的網關。
    (4)路由器收到數據后,它再次為遠程主機或網絡查詢路由,若還未找到路由,該數據包將發(fā)送到該路由器的缺省網關地址。而數據包中包含一個最大路由跳數,如果超過這個跳數,就會丟棄數據包,這樣可以防止無限傳遞。路由器收到數據包后,只會查看網絡層的包裹數據,目的ip。所以說它是工作在網絡層,傳輸層的數據對它來說則是透明的。

    如果上面這些步驟都沒有成功,那么該數據報就不能被傳送。如果不能傳送的數據報來自本機,那么一般會向生成數據報的應用程序返回一個“主機不可達”或 “網絡不可達”的錯誤。

     

    以windows下主機的路由表為例,看路由的查找過程
    ======================================================================
    Active Routes:
    Network Destination            Netmask                      Gateway              Interface                  Metric
    0.0.0.0                                 0.0.0.0                       192.168.1.2           192.168.1.101           10
    127.0.0.0                             255.0.0.0                   127.0.0.1               127.0.0.1                   1
    192.168.1.0                         255.255.255.0           192.168.1.101       192.168.1.101           10
    192.168.1.101                     255.255.255.255       127.0.0.1               127.0.0.1                   10
    192.168.1.255                     255.255.255.255       192.168.1.101       192.168.1.101           10
     224.0.0.0                            240.0.0.0                   192.168.1.101       192.168.1.101           10
    255.255.255.255                 255.255.255.255       192.168.1.101       192.168.1.101           1
    Default Gateway:                192.168.1.2

    Network Destination 目的網段 
    Netmask 子網掩碼 
    Gateway 下一跳路由器入口的ip,路由器通過interface和gateway定義一調到下一個路由器的鏈路,通常情況下,interface和gateway是同一網段的。
    Interface 到達該目的地的本路由器的出口ip(對于我們的個人pc來說,通常由機算機A的網卡,用該網卡的IP地址標識,當然一個pc也可以有多個網卡)。

    網關這個概念,主要用于不同子網間的交互,當兩個子網內主機A,B要進行通訊時,首先A要將數據發(fā)送到它的本地網關,然后網關再將數據發(fā)送給B所在的網關,然后網關再發(fā)送給B。
    默認網關,當一個數據包的目的網段不在你的路由記錄中,那么,你的路由器該把那個數據包發(fā)送到哪里!缺省路由的網關是由你的連接上的default gateway決定的,也就是我們通常在網絡連接里配置的那個值。

    通常interface和gateway處在一個子網內,對于路由器來說,因為可能具有不同的interface,當數據包到達時,根據Network Destination尋找匹配的條目,如果找到,interface則指明了應當從該路由器的那個接口出去,gateway則代表了那個子網的網關地址。

    第一條      0.0.0.0   0.0.0.0   192.168.1.2    192.168.1.101   10
    0.0.0.0代表了缺省路由。該路由記錄的意思是:當我接收到一個數據包的目的網段不在我的路由記錄中,我會將該數據包通過192.168.1.101這個接口發(fā)送到192.168.1.2這個地址,這個地址是下一個路由器的一個接口,這樣這個數據包就可以交付給下一個路由器處理,與我無關。該路由記錄的線路質量 10。當有多個條目匹配時,會選擇具有較小Metric值的那個。

    第三條      192.168.1.0   255.255.255.0  192.168.1.101   192.168.1.101  10
    直聯(lián)網段的路由記錄:當路由器收到發(fā)往直聯(lián)網段的數據包時該如何處理,這種情況,路由記錄的interface和gateway是同一個。當我接收到一個數據包的目的網段是192.168.1.0時,我會將該數據包通過192.168.1.101這個接口直接發(fā)送出去,因為這個端口直接連接著192.168.1.0這個網段,該路由記錄的線路質量 10 (因interface和gateway是同一個,表示數據包直接傳送給目的地址,不需要再轉給路由器)。

    一般就分這兩種情況,目的地址與當前路由器接口是否在同一子網。如果是則直接發(fā)送,不需再轉給路由器,否則還需要轉發(fā)給下一個路由器繼續(xù)進行處理。

     

    查找到下一跳ip地址后,還需要知道它的mac地址,這個地址要作為鏈路層數據裝進鏈路層頭部。這時需要arp協(xié)議,具體過程是這樣的,查找arp緩沖,windows下運行arp -a可以查看當前arp緩沖內容。如果里面含有對應ip的mac地址,則直接返回。否則需要發(fā)生arp請求,該請求包含源的ip和mac地址,還有目的地的ip地址,在網內進行廣播,所有的主機會檢查自己的ip與該請求中的目的ip是否一樣,如果剛好對應則返回自己的mac地址,同時將請求者的ip mac保存。這樣就得到了目標ip的mac地址。

    鏈路層

    將mac地址及鏈路層控制信息加到數據包里,形成Frame,F(xiàn)rame在鏈路層協(xié)議下,完成了相鄰的節(jié)點間的數據傳輸,完成連接建立,控制傳輸速度,數據完整。

    物理層

    物理線路則只負責該數據以bit為單位從主機傳輸到下一個目的地。

    下一個目的地接受到數據后,從物理層得到數據然后經過逐層的解包 到 鏈路層 到 網絡層,然后開始上述的處理,在經網絡層 鏈路層 物理層將數據封裝好繼續(xù)傳往下一個地址。

    在上面的過程中,可以看到有一個路由表查詢過程,而這個路由表的建立則依賴于路由算法。也就是說路由算法實際上只是用來路由器之間更新維護路由表,真正的數據傳輸過程并不執(zhí)行這個算法,只查看路由表。這個概念也很重要,需要理解常用的路由算法。而整個tcp協(xié)議比較復雜,跟鏈路層的協(xié)議有些相似,其中有很重要的一些機制或者概念需要認真理解,比如編號與確認,流量控制,重發(fā)機制,發(fā)送接受窗口。

     

    tcp/ip基本模型及概念


    物理層

    設備,中繼器(repeater),集線器(hub)。對于這一層來說,從一個端口收到數據,會轉發(fā)到所有端口。


    鏈路層

    協(xié)議:SDLC(Synchronous Data Link Control)HDLC(High-level Data Link Control) ppp協(xié)議獨立的鏈路設備中最常見的當屬網卡,網橋也是鏈路產品。集線器MODEM的某些功能有人認為屬于鏈路層,對此還有些爭議認為屬于物理層設備。除此之外,所有的交換機都需要工作在數據鏈路層,但僅工作在數據鏈路層的僅是二層交換機。其他像三層交換機、四層交換機和七層交換機雖然可對應工作在OSI的三層、四層和七層,但二層功能仍是它們基本的功能。

    因為有了MAC地址表,所以才充分避免了沖突,因為交換機通過目的MAC地址知道應該把這個數據轉發(fā)到哪個端口。而不會像HUB一樣,會轉發(fā)到所有滴端口。所以,交換機是可以劃分沖突域滴。


    網絡層

    四個主要的協(xié)議:  
    網際協(xié)議IP:負責在主機和網絡之間尋址和路由數據包。    
    地址解析協(xié)議ARP:獲得同一物理網絡中的硬件主機地址。    
    網際控制消息協(xié)議ICMP:發(fā)送消息,并報告有關數據包的傳送錯誤。    
    互聯(lián)組管理協(xié)議IGMP:被IP主機拿來向本地多路廣播路由器報告主機組成員。

    該層設備有三層交換機,路由器。


    傳輸層

    兩個重要協(xié)議 TCP 和 UDP 。

    端口概念:TCP/UDP 使用 IP 地址標識網上主機,使用端口號來標識應用進程,即 TCP/UDP 用主機 IP 地址和為應用進程分配的端口號來標識應用進程。端口號是 16 位的無符號整數, TCP 的端口號和 UDP 的端口號是兩個獨立的序列。盡管相互獨立,如果 TCP 和 UDP 同時提供某種知名服務,兩個協(xié)議通常選擇相同的端口號。這純粹是為了使用方便,而不是協(xié)議本身的要求。利用端口號,一臺主機上多個進程可以同時使用 TCP/UDP 提供的傳輸服務,并且這種通信是端到端的,它的數據由 IP 傳遞,但與 IP 數據報的傳遞路徑無關。網絡通信中用一個三元組可以在全局唯一標志一個應用進程:(協(xié)議,本地地址,本地端口號)。

    也就是說tcp和udp可以使用相同的端口。

    可以看到通過(協(xié)議,源端口,源ip,目的端口,目的ip)就可以用來完全標識一組網絡連接。

    應用層

    基于tcp:Telnet FTP SMTP DNS HTTP
    基于udp:RIP NTP(網落時間協(xié)議)和DNS (DNS也使用TCP)SNMP TFTP

     

    參考文獻:

    讀懂本機路由表 http://hi.baidu.com/thusness/blog/item/9c18e5bf33725f0818d81f52.html

    Internet 傳輸層協(xié)議 http://www.cic.tsinghua.edu.cn/jdx/book6/3.htm

    計算機網絡 謝希仁


     

    posted on 2009-12-01 16:47 都市淘沙者 閱讀(381) 評論(0)  編輯  收藏 所屬分類: Java Basic/Lucene/開源資料

    主站蜘蛛池模板: 久久久久久国产精品免费免费| 亚洲一区二区三区在线播放 | 亚洲精品国产高清在线观看| 国产精品嫩草影院免费| 一级人做人a爰免费视频| 久久亚洲AV无码精品色午夜| 日本免费一本天堂在线| 日韩电影免费在线观看中文字幕| 亚洲小说图区综合在线| 亚洲无人区午夜福利码高清完整版| 精品国产污污免费网站aⅴ| 看一级毛片免费观看视频| 亚洲国产高清视频| 亚洲AV无码乱码在线观看性色扶| 99久久免费精品高清特色大片| 日韩成人精品日本亚洲| 亚洲第一页中文字幕| 亚洲精品国产高清不卡在线| 青青视频观看免费99| 色www永久免费| 色窝窝亚洲AV网在线观看| 1区1区3区4区产品亚洲| 91麻豆精品国产自产在线观看亚洲| 国产福利在线观看免费第一福利| 国产精品永久免费视频| 亚洲精品9999久久久久无码| 亚洲一区影音先锋色资源| 亚洲精品成a人在线观看| 成人男女网18免费视频| 日韩av无码久久精品免费| 国产精品成人免费观看| 亚洲AV噜噜一区二区三区| 亚洲人成网站18禁止久久影院| 一本久久a久久精品亚洲| 免费人成年激情视频在线观看| 美女视频黄的全免费视频| 99视频有精品视频免费观看| 嫩草在线视频www免费看| 免费人成大片在线观看播放电影| 亚洲一线产区二线产区区| 亚洲精品动漫在线|