1. 程式人生 > >Internet History,Technology,and Security -Technology: Application Protocols(Week7)

Internet History,Technology,and Security -Technology: Application Protocols(Week7)

Week7

Technology: Application Protocols

This week, we’ll be covering application protocols. With reliable “pipes” available from the Transport layer, we can build applications like web browsers, file transfer applications, or email clients and servers.

時間飛逝,這周我們將學習技術層次的最後一週,在這周裡,教授講解了最後一層Application Layer的內容,同時也說到了我以前的特別感興趣的”Hacker”,正如每個男生心裡都有一個武俠夢,每一個IT男心裡都有一個Hacker夢。哈哈哈

Layer 4: Applications


 

Application Layer

學習了前三週,我們知道,TCP/IP模型前三層,層層相扣,互相彌補,缺一不可。哪麼你其實也可以推測出,第四層也是這樣的,依賴於第三層TCP層。TCP層的服務為應用層提供了可靠、有序的端到端資料流。可以從一臺電腦中一個應用程式開始,到另一臺電腦的應用中結束並可提供雙向交流。在我們得到了這樣的框架後,我們應該怎麼去使用它?在日常通訊中,我們該如何請求資料?

在上圖中,兩側都有Application方框。一般來說,一側代表使用者,另一側代表伺服器。客戶端給我們資訊,而伺服器負責給客戶端提供資訊,所以客戶端經常要發出請求,然後伺服器迴應請求,這之間的訊息傳遞就是我們之前所學習的四個層次。因此,我們可以基於這個原理建立郵件系統、全球資訊網或者我們可以觀看流視訊。這時候就要重點提一下全球資訊網了,它基於上面所說的原理,整體簡潔且優雅,可以說是最為人所熟知的一個概念,雖然也有很多其他的協議存在,但是全球資訊網協議是最普遍的協議。

Application Layer有兩個基本問題:

1.Which application gets the data?

  • Ports

2.What are the rules for talking with application?

  • Protocols

Ports

所謂的埠,就好像是門牌號一樣,客戶端可以通過ip地址找到對應的伺服器端,但是伺服器端是有很多埠的,每個應用程式對應一個埠號,通過類似門牌號的埠號,客戶端才能真正的訪問到該伺服器。為了對埠進行區分,將每個埠進行了編號,這就是埠號

IANA(Internet Assigned Number Authority,網際網路地址分配機構)維護了埠分配列表,分三類:

第一類:0-1023,眾所周知的埠。由IANA控制和分配,特定的網路程式使用,例如:TCP協議使用80埠來完成http協議傳輸。

第二類:1024-49151,登記埠。不由IANA控制,但IANA維護了登記表,不應該在程式中使用,如果沒有衝突情況下也是可以由使用者程式使用。

第三類:49152-65535,私有埠。可以由普通使用者程式使用。

常用的埠

Application Protocols

伺服器有許多埠,分別起著不同的作用。而一旦我們和網路伺服器、郵箱伺服器或郵局伺服器有了連線,我們就得了解如何和它進行溝通,這就是所謂的應用協議(Application protocols)。這也就是我們要面對的第二個問題,與應用程式交談的規則是什麼?TCP提供了可靠的連線,我們現在可以通過埠連向想要的的伺服器,而現在的問題是:我們在整次連線中要說些什麼?說什麼?誰先說?需要傳送些什麼內容?而這取決於你進行對話的是哪類伺服器,例如在視訊中,就是使用全球資訊網伺服器。

HTTP - Hypertext Transport Protocol

HTTP,超文字傳輸協議,是一個簡單的請求-響應協議,它通常執行在TCP之上。它指定了客戶端可能傳送給伺服器什麼樣的訊息以及得到什麼樣的響應。請求和響應訊息的頭以ASCII碼形式給出;而訊息內容則具有一個類似MIME的格式。全球資訊網伺服器和客戶端的交流就是採用了HTTP協議。下面老師給我們演示了一下HTTP協議響應機制。

當你點選一個執行在你電腦中的客戶端client的一個link,瀏覽器就會和web server 連線併發送一個請求,web server看到了就會返回請求,返回的document就會出現在客戶端的桌面上。

Hacking HTTP

我們知道,在現實生活中網路似乎漸漸變得無所不能。但網路終究是死的,人是活的。在我們瞭解協議的內容後,我們就可以嘗試去“攻擊”網站,因為HTTP基本上是一個公共協議,它並沒有被高度保護,所以它也是較為容易被攻擊的,Windows系統需要下載Telnet,其最終的目的就是欺騙伺服器,讓它認為我們是瀏覽器,從而向我們傳送資料。如果你看過黑客帝國,你一定會被Hacker這麼名詞所吸引,it is so cool!小的時候,我也想過如果當一名Hacker一定非常精彩。哈哈哈。

Application Layer Summary

應用層,基於底部的三層,不考慮底部技術細節,把它們抽象一個簡單的管子,連通客戶和伺服器。

應用層是一個體量豐富的層次,在這一層就有許許多多的應用了。我們使用埠號,這樣我們就可以連線到同一伺服器上面的不同服務。

The Internet: An Amazing Design

介紹完Application Layer,我們也講完了四層模型。但非常不可思議的是,這些大部分都來自1970年代的研究工作,且現在都還在使用,隨著NSFnet的出現,會有一定的調整,但關鍵性的調整也都是上個世紀八十年代的事了。但另一方面,計算機的數量則大幅度增長,從1969年的6臺到2011年的幾十億級別,他們仍在使用這最初的六臺所使用的框架。當你看著現在的網路的時候,你可能會覺得它像一個生物,有著鮮活的生命,它從蹣跚的小孩慢慢成長為騰飛的巨龍。

俗話說不完美的才是完美的。網際網路誕生開始就是不完美的。在網際網路誕生之際,我們並沒有給它設定一個上限,而是讓它慢慢的成長,給他良好的擴張性,而這樣也使得它慢慢變得無比巨大。這很像在修仙小說裡修道一樣。每個人的道都是不一樣的,一味的模仿就像給它設定了一個限制。模仿永遠不會有超越。只有通過自己的成長,才能有自己的道。

Van Jacobson - Content Centered Networking


當我們寫到這裡,我們對網際網路技術層次的介紹就要接近尾聲了。我們講了網際網路的歷史,網際網路現有的技術,在接近尾聲之際,教授則想要引發我們對網際網路未來的展望,對網際網路未來的思考。你知道的,過去終究是過去,我們只有面向未來才會有更好的發展。在三十年之前,你根本無法想象,網際網路的的出現會給世界帶來如此大的變化,當然你也無法想象未來20年世界是怎麼樣的,因此我們需要不斷的進步,不斷地優化,不斷地推陳出新。這也是教師給我們看這個視訊的意義所在。你知道的,Van Jacobson 是一個天才,他的想法很多時候都領先於當時的世界,現在就讓我們來看看他的想法。

Van在當時,提出了一個對未來網際網路的設想——Content Centric Networking(內容中心網路),Van認為我們現在面臨著大量的關於拓展性問題,他想把以資訊為中心的網路模型,和以主機為中心的TCP/IP模型整合到一起。

網路最開始只是電腦的一個電話系統,但隨著需求的增加,ARPnet誕生了,它可以不需要像電話線路一樣知道所有結點,它只需要知道訊息傳送的下一個結點,就能把資料傳送出去,而到了二十一世紀後,網路又有了新的發展。

但這些似乎都和最開始的電話模型沒什麼關係,這給Van帶來了很大的衝擊,這讓他發出疑問:如果我們放棄18世紀的電話模型,把注意力放在電線裡傳輸的資訊,而不是電線本身,會怎麼樣? 我們能不能把web當作通訊的基礎,而不僅僅是一個覆蓋在TCP/IP上的一層? 例如,你可以在你的個人網站上面釋出一個視訊,但是你必須得寄希望於它的點選量不是特別大,因為如果點選量過大,你的連結配額將完全飽和。那麼你的網際網路供應商(ISP)就會馬上關閉它,這就是 Slashdot 效應。現如今,你可以看到像YouTube、谷歌、亞馬遜、臉書、推特都擁有著龐大的使用者群,它們都是用一個IP地址表明自己,看起來就像只有一個地點,但是對於一個擁有數億使用者的單一地點來說,在對話模型下,它的通訊量將跟使用者數量同比增長,比如你正在更新推特或者上傳視訊,你想讓數百萬人看到,但你沒法把它放到對話模型中。

所以,Van 他們花了許多的時間來讓網路誤以為只有一個地點,網路層的資訊在性質上與姓名,身份資訊一致,只是它隨機的分散在整個分組裡。這樣他們有了源地址和目的地址,它的前部被網路層呼叫,埠作為更深層次的應用層呼叫,以及序列號,讓應用重新組裝成一個大的單元,URL的整個分層都要使用它,而不是隻有傳輸的部分。如果你把源地址,埠,序列號,URL均整合到了一起,這些就是資訊的特定名稱(the name of the information)。如果每一個分組都有一個名字在上面,所有的資訊都包含在其中,你隨時可以檢視它,只需要保證資料的前端工作是正常的。

你不必關心這些資料是從哪裡獲得的,你只需要關心資料本身,而不是它的來源。如果我們有兩個人同時在看同一個視訊,那麼最靠近我們的上游閘道器會把一份拷貝發給我,把另一份一模一樣的視訊拷貝發給你,它們都要通過那一個閘道器的記憶體,因為這個對話的抽象概念的存在,閘道器並不知道,我們看的是相同的視訊,它看到的是兩個不同的對話,它沒法看著它的記憶體,然後說:“哦!我有這個資料,我可以直接給你。”它必須要重新拿到一個新的拷貝,而且要從YouTube那裡一路傳下來,導致這種槽糕的拓展性的原因,是因為負載的拓展性或者說使用者數量嚴格地跟資料有關,而且資料只能有一個源頭。反過來如果你只關心資料本身 那麼你沿著資料的源頭方向去找。只要你在路上找到了這個資料,意味著你已經有了它的拷貝,那麼這個資料的傳送任務也就完成了。

Think after class

  • 化繁為簡。在Week5中,我們提到了Packet-switching,它的核心理念就是將一個龐大的資料分解成一個個小的資料,解決了網路堵塞的問題。其實在生活中我們也可以貫徹這樣的想法。比如你要求每天被50個單詞,哪麼你就可以分成早上10個,中午10個,旁晚10個,晚上10個,睡覺10個。在生活中,這是一個很適用的方法。
  • 分而化之,專而一之。在TCP/IP的模型中,我們知道每層都趨於專門化,這層只負責這個功能,哪層只負責哪層功能,這樣極大的提高了效率並且也使得每層更專業,這讓我想到了一句話,術業有專攻。人的精力是有限的,如果我們想要做出什麼成就,應該專一且堅定不移地堅持下去。如果總是囫圇吞棗,終究上不得檯面。
  • .如果要解決一個問題,就要了解事物的本質。在Hacking HTTP這節中,我們知道了協議的內容,我們就可以根據協議內容而攻擊伺服器,正所謂,知彼知己,百戰不殆。

PS:(時間過的好快,轉眼間技術層次就學完了。在這三週裡,學到了很多幹貨。在計算機導論課堂上,老師也提到了TCP/IP模型等內容,但只是說了專有名詞,而在這三週的內容則是加深和擴張了我對網路的瞭解。還有課後思考,現在的我只能做出哲理型思考,而不能做出技術型思考,你知道的技術需要專業的知識,而且只是一個嗷嗷待哺的小雛鷹,希望我在未來能早日做出對技術的思考,同時將思考轉化為成果。加油