網路的實質是資料傳輸,網路程式設計就是對如何傳輸資料進行程式設計。教材裡講過網際網路並不是第乙個可用來傳輸資料的工具,但它是目前最流行的,為什麼?因為網際網路的實質就是提供了乙個傳輸資料的通道,並且規定了資料在這個通道內如何傳輸。所以網際網路之所以流行,是因為它的規定得到了大眾的認可,變得越來越流行,於是規定就成為了標準。那網際網路是如何傳輸資料的?
首先,資料傳輸最直觀的理解至少需要三樣東西:
這就跟小時候用銅線和空瓶做的「土**」一樣,雖然簡單,但已可見到資料傳輸模型的雛形。在這裡,電纜就是傳輸資料的實體,在這個實體之上通過電訊號傳載資料。
傳的什麼資料呢?既然是電線,就只能傳0和1。不過,沒關係,我們的傳送和接收裝置幸好是電腦,電腦本身也只能處理0和1,計算機所做的工作就是處理0和1,這個相信大家都認可。
如果電腦只能處理0和1是沒有意義的,為了讓0和1能表示更多的資料和進行更複雜的計算,可以對0和1進行編碼組合,於是規定8位0或1表示1個位元組,而不同的位元組又表示不同的資料型別,從機器語言到組合語言,再到高階語言,通過一層一層的抽象和封裝,最終用很簡潔的方式來操作底層的電訊號0或1。
計算機對0或1進行處理和儲存,0和1代表的是記憶體,固定不變的,用8位表示乙個位元組,可以區分不同的資料,讓這些記憶體變得有意義;在網路上,它也可以,但多乙個問題,這個資料需要被傳輸,所以它不僅需要有意義,還需要能表示:
所以這個時候,那些能提供電纜的公司,自然就開始規定在他們的電纜上,以上的資料如何標識。最終乙太網勝出,也就是現在的網際網路,而它所提供的的網路模型就規定:
每一幀(frame)包含兩個部分:標頭(head)和資料(data)。data是實際需要被傳輸的資料,head就是這些資料的元資料,包括:傳送者和接收者資訊,資料本身資訊(幀型別,資料長度,校驗位等)。
這裡不需要詳細了解元資料的格式,只需要記住和明白,此時還tcp/ip的身影還沒有出現,所以標頭里的傳送者和接收者是如何標識的?沒錯,就是電腦的mac位址。我把資料發出去,發給誰,就用那台電腦的mac位址來標識,它收到後怎麼知道是誰發給它的,那就用我的電腦的mac位址來標識。
這個mac位址全世界獨一無二,長度是48個二進位制位,常用12個16進製制數表示。
而網際網路上電纜很多,不光有電纜,還有其他傳輸工具,還有無線網路和路由器,我怎麼保證發出的資料幀一定能夠到達對方的電腦呢?畢竟電訊號本身是沒有方向的。
理論上,有了以上內容,在全世界範圍內通訊都沒有問題,可是呢?我們現在並沒有這麼做就一定有它的道理。主要有兩個原因:
所以,mac位址必須被隔離,它應該是比較私有的資訊,在這個資訊之上我們可以用另一套更安全的位址來進行網路裝置的標識和資料傳輸。於是就有了網路位址,簡稱**,也就是ip位址。mac位址是私有的,網路位址是分配的,想上網首先得有**。
ip位址起著和mac位址一樣的作用,但它是建立在資料幀之上的,所以傳輸資料的時候前面的資料幀中的頭部沒有變化,但資料部分有了更明確的規定。這個資料就是ip資料。ip資料報也包含有頭部和和資料兩個部分,頭部存放的是目的和源ip位址以及其它一些元資料資訊。ip資料報的最大長度是65535位元組,頭部資訊最少20位元組,最大60位元組,所以ip資料報最長可能有65515位元組資料,而乙太網的資料部分最長只有1500個位元組,所以如果ip資料報過長,就需要切分到幾個幀裡去傳送。
有了ip位址,既提高了效率,也更加安全,兩台計算機之間可以相互交流了,但現在面臨的問題是,一台電腦上有多個應用程式,如何確定某個ip資料報是發給計算機上的哪個程式的?即使是遍歷所有應用程式,ip資料報本身也應該有該應用程式的標識。
此時,ip資料報的資料部分會發生和資料幀一樣的變化,變得更加明確,同樣這部分資料改了個名稱,叫tcp資料報,而tcp資料報中存放了某台計算機上某個應用程式的標識,而按照規定,用乙個整數,也就是埠號來標識此應用程式。計算機上乙個埠只能被乙個程式占用,所有當計算機收到ip資料報後,從中取出tcp資料報,再從tcp資料報中取出埠號,就能知道該資料屬於哪個應用程式。tcp資料報也有標頭和資料兩個部分。
有了tcp/ip資料報,就能完成複雜的網路功能。http協議就是構建在tcp/ip之上的乙個應用層協議,它的原理前面的幾個資料報一樣,首先,此時的tcp資料報不再是單純的資料,它變得更加明確,一般來說有3個部分:
在上面提到的每一層還有其他很多協議,雖然協議的具體內容不同,但大致構建模式是一樣,只是為了滿足不同的需求,在格式上稍有不同,理解了本文所描述的場景,基本上也就能對網路程式設計有乙個基礎的認識。接下來就是深入到每乙個協議和系統提供的api進行程式設計實踐了。
網路程式設計基礎概念理解
協議 網路之中主機進行通訊必須使用相同的協議。相同的光電訊號格式 計算機如何傳輸資料 光電波訊號0101110011 0101110011 協議就是乙個相互都能識別的約定 網路中生產廠商很多,協議很多,都用自己的協議將導致網路上主機間無發正常通訊,所以要設計乙個標準協議,這時候網路間資料傳輸就可以通...
網路基礎(對於計算機網路的理解)
詳見github 1 ping命令 ping是個使用頻率極高的實用程式,主要用於確定網路的連通性。這對確定網路是否正確連線,以及網路連線的狀況十分有用。簡單的說,ping就是乙個測試程式,如果ping執行正確,大體上就可以排除網路訪問層 網絡卡 modem的輸入輸出線路 電纜和路由器等存在的故障,從...
理解LSTM網路
lstm long shortterm memory長短項記憶 網路是一種特殊的rnn,可以學習long term中的依賴。hochreiter schmidhuber 1997 向世人介紹了它,然後在接下來的工作中不斷被人們完善。它在很多問題上表現異常的好,現在也被人們廣泛地使用。所有遞迴神經網路...