本篇博文主要記錄網路編程的先修知識,重點講解了五層網路體繫結構和TCP/IP協議 ...
前言
語言是用來交流的,人類語言使人與人交流,編程語言使人與機器交流,那麼問題來了,機器如何與機器交流。你是否疑惑過:為什麼我們可以使用瀏覽器查資料、為什麼我們可以使用聊天軟體聊天、為什麼我們可以通過網路傳輸文件.etc。會與機器交流的人是少部分的,正是這少部分人讓幾乎所有人方便的使用網路,對於這所有人來說,他們想要聊天,只需要打開一個聊天視窗,輸入文字,然後發送即可,他們並不會關註其背後的具體過程,因為背後的過程是複雜的,是由少部分人完成的。通過這本次系列的學習,你將成為少部分人!
一、網路編程概念
1.1 網路編程概念
網路編程聽起來很高大上,但其實質就是進程之間的通信。再說的直白點,就是軟體間的通信,可以是同一電腦的同一軟體、同一電腦的不同軟體、不同電腦的不同軟體、不同電腦的同一軟體。(看到這裡,應該大概明白了進程就是軟體了哇)
二、網路編程先修知識
2.1 電腦網路五層協議體繫結構
為了介紹網路原理,通常習慣將電腦網路分為五層協議體繫結構,從下至上分別為:物理層、數據鏈路層、網路層、運輸層、應用層。
2.1.1 應用層
應用層是體繫結構的最高層。直接為用戶的應用進程提供服務,主要任務是通過應用進程間的交互來完成特定的網路應用。應用層協議定義的是應用進程間通信和交互的規則。
應用層的協議很多,例如大家熟知的HTTP協議、DNS、SMTP協議、FTP等等
『防抄襲:讀者請忽略這段文字,文章作者是博客園的MinuteSheep』
2.1.2 運輸層
運輸層的主要任務是負責向兩台主機中進程之間的通信提供通用的數據傳輸服務。
運輸層主要有以下兩種協議:
傳輸控制協議TCP(Transmission Control Protool)—— 提供面向連接的、可靠的數據傳輸服務
用戶數據協議UDP(User Datagram Protool)—— 提供無連接的、盡最大努力的數據傳輸服務
2.1.3 網路層
網路層負責為分組交換網上的不同主機提供通信服務。
網路層最常用的協議為IP(Internet Protool)協議
2.1.4 數據鏈路層
兩台主機之間的數據傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專門的鏈路層協議。
2.1.5 物理層
物理層主要的任務是傳送比特流。
2.2 圖解數據在各層之間的傳遞過程
上圖是從《電腦網路》(第七版,謝希仁)掃描下來的,這幅圖顯示了整個電腦網路體系的傳遞過程。
假定主機1的應用進程AP1向主機2的應用進程AP2傳送數據。AP1先將其數據交給本主機的第5層(應用層)。第5層加上必要的控制信息H5就變成了下一層的數據單元。第4層(運輸層)收到這個數據單元後,加上本層的控制信息H4,在交給第3層(網路層),成為第3層的數據單元。一次類推,不過到了第2層(數據鏈路層)後,控制信息被分為兩部分,分別加到本層數據單元的首部(H2)和尾部(T2);而第1層(物理層)由於是比特流的傳送,所以不在加上控制信息。
當這串的比特流離開主機1經網路的物理媒體傳送到路由器時,就從路由器的第1層依次上升到第3層。每層都根據控制信息進行必要的操作,然後將控制信息剝去,將該層剩下的數據單元上交給更高的一層。當分組上升到了第3層時,就根據首部中的目的地址查找路由器中的轉發表,找出轉發分組的介面,然後往下傳送到第2層,加上新的首部和尾部後,再到最下麵的第1層,然後在物理媒體上把每-個比特發送出去。
當這一串的比特流離開路由器到達目的站主機2時,就從主機2的第1層按照上面講過的方式,依次上升到第5層。最後,把應用進程AP1發送的數據交給目的站的應用進程AP2。
『防抄襲:讀者請忽略這段文字,文章作者是博客園的MinuteSheep』
2.3 TCP/IP簡介
瞭解了上面五層網路體繫結構之後,兩台主機之間想要通信,那麼最重要的問題就是:要給誰發?怎麼發?發送的信息是否可以沒有任何錯誤的到達?
2.3.1 IP協議
為瞭解決要給誰發?怎麼發的問題,IP協議就誕生了。
- 為每一臺電腦做了標識,這個標識就是IP地址,例如233.233.233.233,有了這個標識,就可以知道給誰發送了
- IP協議負責將數據從一臺主機發送到另一臺主機。發送方式是將數據劃分為一段一段的,以IP包的形式發出去
2.3.2 TCP協議
發是能發了,但是能不能無差錯的送到對方手中,又成了一個難題,TCP的誕生解決了這個問題:
- TCP是建立在IP協議之上的
- TCP通過3次握手的方式建立連接,然後對IP包進行編號,保證每個IP包可以順利發送到對方手中,如果有一個包出現差錯,就重新發送這個包
上圖就是TCP建立連接(三次握手