前端學HTTP之資料傳輸

2021-09-07 07:59:08 字數 3967 閱讀 1725

以圖為例,pc1通過http協議訪問位於server上的網頁。那麼,網頁資料在網路中是如何傳輸的呢?下面是具體的實現步驟

http協議的職責是生成針對目標web伺服器的http請求報文,該報文就是需要傳遞的資料

下沉到傳輸層後,由於http協議使用的是tcp協議,為了方便通訊,將http請求報文按序號分為多個報文段(segment),並對每個報文段進行封裝。pc1使用本地乙個大於1024以上的隨機tcp源埠(這裡假設是1030)建立到目的伺服器tcp80號埠(https協議對應的埠號是443)的連線,tcp源埠和目的埠被加入到報文段中,學名叫協議資料單元(protocol data unit, pdu)。因tcp是乙個可靠的傳輸控制協議,傳輸層還會加入序列號、視窗大小等引數

傳輸層封裝後的資料分段下沉到網路層後,封裝網路層的頭部,主要就是新增源和目的ip位址,成為資料報。使用者通常使用主機名或網域名稱來訪問伺服器,這時就需要通過應用層的dns服務來通過網域名稱查詢ip位址,或逆向從ip位址反查網域名稱。這裡的源ip位址是193.1.1.2,目的ip位址是195.1.1.2

網路層封裝後的資料報下沉到資料鏈路層,封裝幀頭和幀尾。幀尾是新增被稱做crc的迴圈冗餘校驗部分。幀頭主要是新增資料鏈路層的位址,即資料鏈路層的源位址和目的位址,用在乙太網上的體現就是新增源mac位址和目的mac位址。pc1比較要去往的目標ip位址,發現伺服器的ip位址195.1.1.2不在本地網路中,pc1知道要發往不同網路中的資料報,首先要發往閘道器,也就是圖中路由器r1快速乙太網介面fa0/0的1p位址193.1.1.1。pc1查詢本地的arp快取,如果找到193.1.1.1對應的mac位址則進行封裝;如果在arp快取中沒有找到193.1.1.1對應的mac位址,則使用arp協議,查詢到閘道器對應的mac位址 「00-11-bc-7d-25-03」 。於是,這裡的源mac位址是pc1的mac位址「00-1b-24-7d-25-01」,目的mac位址是閘道器的mac位址 「00-11-bc-7d-25-03」

資料鏈路層封裝後的資料幀下沉到物理層,轉換成二進位制形式的位元(bit)流,從pc1的網絡卡傳送出去。物理層的用途就是處理位元流,把位元轉換成電子、光學或微波訊號。反之在接收端,物理層從傳輸**中重新得到這些訊號,恢復成位元流,傳輸位元流到資料鏈路層

[注意]協議資料單元在應用層、表示層和會話層被稱做資料(data),在傳輸層被稱做分段(segment),在網路層被稱做包(packet),在資料鏈路層被稱做幀(frame),在物理層被稱做位元(bit)

[注意]目的mac位址是路由器介面的mac位址,而不是目的伺服器網絡卡的mac位址。因為mac只是用在區域網內的定址,如果封裝的是目的伺服器的mac位址,如何體現這個包是發往路由器的呢?假設封裝的目的mac位址是伺服器的mac位址 「00-1b-24-7d-25-05」,這樣的資料報被傳到路由器後,路由器比較資料幀中的r的mac位址,發現與本路由器介面的mac位址不同,路由器丟棄這個包,資料報不被路由器**,更別想能到達目的伺服器了

pc1發出的位元流到達集線器,集線器簡單地對位元流進行放大,從除接收埠以外的所有埠**出去。pc2接收到這個資料報,把位元流轉換成幀上傳到資料鏈路層,pc2比較資料幀的目的mac位址,發現與本機網絡卡的mac位址不同,pc2丟棄該資料幀,放棄處理

路由器r1收到該位元流,轉換成幀上傳到資料鏈路層,路由器r1比較資料幀的目的mac位址,發現與路由器接收埠fa0/0(快速乙太網,簡寫成fa0/0,指的是0號插槽上編號為0的介面)的mac位址相同,路由器知道該資料幀是發往本路由器的。路由器r1的資料鏈路層把資料幀進行解封裝,然後上傳到路由器r1的網路層,路由器r1看到資料報的目的ip位址是195.1.1.2,並不是發給本路由器的,需要路由器進行**

路由器r1查詢自己的路由表,發現資料報應該從序列介面s1/1發出。路由器r1把資料報從fa0/0接**換到s1/1介面

此時r1並不能直接把這個資料報發出去,因為在r1的fa0/0介面被解封裝,現在需要被重新再封裝。可以想象乙個風雪交加的日子,進門的時候拿下帽子,出門的時候需要再戴上帽子。資料封裝也是這樣,在路由器的入介面解封裝,在路由器的出介面需要再封裝,和人取下帽子有區別的是,這裡解封裝去掉的內容和再封裝加上去的內容是不一樣的。網路層的封裝並沒有被解開,但並不意味著網路層的資訊一點都沒有改變,其實網路層的資料報中源和目的ip位址都沒有被改變(除非在網路位址轉換的情況下),但ttl(生存週期)會減1。網路層把資料報交給下層的資料鏈路層,資料鏈路層需要封裝二層的位址。序列鏈路不同於乙太網,因為乙太網是乙個多路訪問的網路,要定位到目的裝置需要借助於mac位址,但序列線路一般的封裝協議都是ppp(point-to-point protocol,點到點協議)或hdlc(high-level data link control,高階資料鏈路控制協議)封裝,這種封裝被用於點對點線路,也就是說,一根線纜只連線兩台裝置,一端發出,另一端肯定可以收到。假設序列線纜上使用的是ppp協議,則資料鏈路層封裝的源和目的位址都是ppp

資料鏈路層封裝後的資料幀被傳到物理層,轉換成二進位制形式的位元流,從路由器r1的s1/1介面傳送出去

路由器r2收到這個位元流,上傳至資料鏈路層,資料鏈路層去掉ppp的封裝。路由器r2查詢資料報的目的ip位址,發現該ip網路直接連線在fa0/0介面,路由器r2把資料報交換到fa0/0介面。路由器檢視本地的arp快取,如果找到195.1.1.2對應的mac位址,則直接進行封裝;如果沒有找到,則傳送arp的查詢包。路由器r2發出資料幀的源位址是fa0/0介面的mac位址,目的位址是伺服器網絡卡的mac位址

資料鏈路層封裝後的資料幀被傳到物理層,轉換成二進位制形式的位元流,從路由器r2的fa0/0介面傳送出去

路由器r2發出的位元流到達交換機,交換機除了對位元流進行放大外,還根據源mac位址進行學習,根據目的mac位址進行**。交換機根據資料幀中的目的mac位址查詢mac位址表,把位元流從對應的埠傳送出去,交換機把位元流發往伺服器,並沒有發往pc3

伺服器接收到這個位元流,把位元流轉換成幀格式,上傳到資料鏈路層,伺服器發現資料幀中的目的mac位址與本網絡卡的mac位址相同,伺服器拆除資料鏈路層的封裝後,把資料報上傳到網路層。伺服器的網路層比較資料報中的目的ip位址,發現與本機的ip位址相同,伺服器拆除網路層的封裝後,把資料分段上傳到傳輸層。傳輸層對資料分段進行確認、排序、重組,確保資料傳輸的可靠性。資料最後被傳到伺服器的應用層

從pc1到server的整個資料報流動過程,pc1執行osi七層的封裝,然後把位元流傳到集線器;集線器在物理層把訊號簡單放大後,把位元流傳到路由器r1;r1執行osi下三層的處理後,再把位元流傳到路由器r2;r2執行osi下三層的處理後,再把位元流傳到交換機;交換機執行osi下二層的處理後,再把位元流傳到伺服器

從這個流動過程中,可以發現資料流在中間裝置上主要執行的是osi下三層的操作,物理層的裝置不改變幀的格式,廣播式**:資料鏈路層的裝置也不改變幀的格式,但可以根據資料幀中的目的mac位址進行**;網路層的裝置改變幀的格式,要執行幀的解封裝和再封裝,但不改變資料報中的源和目的ip位址

伺服器收到pc1發過來的資料後,對pc1進行響應。和pc1處理的過程類似,伺服器也知道要發往乙個遠端的網路,資料鏈路層的目的mac位址需要封裝閘道器的mac位址;網路層源和目的ip位址與pc1傳送過來的包相反,即把源位址變成目的位址,目的位址變成源位址;傳輸層源和目的埠與pc1傳送過來的包相反,即把源埠變成目的埠,目的埠變成源埠

C SFTP資料傳輸

我們有些客戶公司的資料比較重要,為了安全集團公司內部都使用的是區域網,但是有時候又不得不予外界網際網路做資料互動,所以有些不重要的系統是放在外界網際網路的,這樣以來內部系統和外部系統的資料互動就成為了問題,這樣以來就使用到了sftp伺服器來作為資料傳輸的中介。下面不說了,直接上c 此處使用了第三方動...

資料傳輸方式

資料傳輸方式 1 並行傳輸與序列傳輸 並行傳輸指的是資料以成組的方式,在多條並行通道上同時進行傳輸。常用的就是將構成一 個字元 的幾位二進位製碼,分別在幾個並行通道上進行傳輸。例如,採用8單位 的字 符 可以用8個通道並行傳輸。一次傳送乙個字元,因此收 發雙方不存在字元的同步問題,不需要另加 起 止...

flex wcf 資料傳輸

最近跟哲子做個專案,本來可以用asp.net輕鬆搞定,但是鑑於大家都比較想試用下學習已久的技術,所以便出現了flex與wcf entity這樣得前後臺組合。專案開始之初,著實為兩者之間的互動頭疼一番,在經過大量資料得獲取後,終於解決,以下寫出簡要的注意事項,由於wcf 我還是個徹頭徹尾的門外漢,資料...