一文入门网络编程:常见协议、通信过程、Socket、CS/BS、TCP/UDP
網絡編程三要素:ip地址、端口、協議,在網絡通信協議下,不同計算機上運行的程序,可以進行數據傳輸
常見協議:
- 傳輸層 常見協議有TCP/UDP協議。
- 應用層 常見的協議有HTTP協議,FTP協議。
- 網絡層 常見協議有IP協議、ICMP協議、IGMP協議。
- 網絡接口層 常見協議有ARP協議、RARP協議。
- TCP傳輸控制協議(Transmission Control Protocol)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。
- UDP用戶數據報協議(User Datagram Protocol)是OSI參考模型中一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務。
- HTTP超文本傳輸協議(Hyper Text Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。
- FTP文件傳輸協議(File Transfer Protocol)
- IP協議是因特網互聯協議(Internet Protocol)
- ICMP協議是Internet控制報文協議(Internet Control Message Protocol)它是TCP/IP協議族的一個子協議,用于在IP主機、路由器之間傳遞控制消息。
- IGMP協議是 Internet 組管理協議(Internet Group Management Protocol),是因特網協議家族中的一個組播協議。該協議運行在主機和組播路由器之間。
- ARP協議是正向地址解析協議(Address Resolution Protocol),通過已知的IP,尋找對應主機的MAC地址。
- RARP是反向地址轉換協議,通過MAC地址確定IP地址。
IP地址:
- 要想讓網絡中的計算機能夠互相通信,必須為每臺計算機指定一個標識號,通過這個標識號來指定要接收數據的計算機和識別發送的計算機,而IP地址就是這個標識號,也就是設備唯一的標識
IP地址分為兩大類:
IPv4
是給每個連接在網絡上的主機分配一個32bit地址。按照TCP/IP規定,IP地址用二進制來表示,每個IP地址長32bit,也就是4個字節。例如一個采用二進制形式的IP地址是“11000000 10101000 00000001 01000010”,這么長的地址,處理起來也太費勁了。為了方便使用,IP地址經常被寫成十進制的形式,中間使用符號“.”分隔不同的字節。于是,上面的IP地址可以表示為“192.168.1.66”。IP地址的這種表示法叫做“點分十進制表示法”,這顯然比1和0容易記憶得多
IPv6
由于互聯網的蓬勃發展,IP地址的需求量愈來愈大,但是網絡地址資源有限,使得IP的分配越發緊張。為了擴大地址空間,通過IPv6重新定義地址空間,采用128位地址長度,每16個字節一組,分成8組十六進制數,這樣就解決了網絡地址資源數量不夠的問題
冒分十六進制表示法:
如果計算出的16進制表示形式中間有多個連續的0,可以用兩個冒號省略,計算機會識別出并自動補全省略的0
例如:FF01:0:0:0:0:0:0:1101可以壓縮為FF01::1101
DOS常用命令:
-
ipconfig:查看本機IP地址
-
ping IP地址:檢查網絡是否連通
-
特殊IP地址:
- 127.0.0.1:是回送地址,可以代表本機地址,一般用來測試使用
端口:
端口
網絡的通信,本質上是兩個應用程序的通信。每臺計算機都有很多的應用程序,那么在網絡通信時,如何區分這些應用程序呢?如果說IP地址可以唯一標識網絡中的設備,那么端口號就可以唯一標識設備中的應用程序了。也就是應用程序的標識
端口號
- 用兩個字節表示的整數,它的取值范圍是0 ~ 65535。其中,0 ~ 1023之間的端口號用于一些知名的網絡服務和應用,普通的應用程序需要使用1024以上的端口號。
- 一個端口號只能被一個程序使用,如果端口號被另外一個服務或應用所占用,會導致當前程序啟動失敗
協議:
通過計算機網絡可以使多臺計算機實現連接,位于同一個網絡中的計算機在進行連接和通信時需要遵守一定的規則,這就好比在道路中行駛的汽車一定要遵守交通規則一樣。在計算機網絡中,這些連接和通信的規則被稱為網絡通信協議,它對數據的傳輸格式、傳輸速率、傳輸步驟等做了統一規定,通信雙方必須同時遵守才能完成數據交換。常見的協議有UDP協議和TCP協議
TCP:
TCP協議是比較安全的通信協議,輸數據之前,在發送端和接收端建立邏輯連接,然后再傳輸數據,它提供了兩臺計算機之間可靠無差錯的數據傳輸。在TCP連接中必須要明確客戶端與服務器端,由客戶端向服務端發出連接請求,每次連接的創建都需要經過“三次握手”,斷開連接的時候需要四次揮手
特點:
1.需要建立連接
2.不會丟失數據、有序、安全
3.速度慢
4.建立連接后以流的形式傳輸,沒有大小限制
UDP:
UDP是無連接通信協議,在數據傳輸時,數據的發送端和接收端不建立邏輯連接。
簡單來說,當一臺 計算機向另外一臺計算機發送數據時,發送端不會確認接收端是否存在,就會發出數據,同樣接收端在收到數據時,也不會向發送端反饋是否收到數據。 由于使用UDP協議消耗系統資源小,通信效率高,所以通常都會用于音頻、視頻、視頻會議和普通數據的傳輸采用UDP協議,即使偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。但是在使用UDP協議傳送數據時,由于UDP的面向無連接性,不能保證數據的完整性,因此在傳輸重要數據時不建議使用UDP協議
UDP底層不會做校驗,數據丟了就丟了,但是可以在應用層做校驗,這樣就可以彌補安全方面的問題,也就是前期需要把校驗的架子做好,后面就會很方便。比如QQ就是用的UDP,不可能說消息丟了就丟了,都是上層做的校驗的,但是對于中小型公司來說還不如直接用TCP來的實在,畢竟麻煩,TCP雖然建立連接的時候會慢一點,但是對于很多場景基本上是可以忽略不計的,并且TCP是很規范化的。
特點:
1.不需要建立連接
2.可能會丟失數據、無序、不穩定、安全低
3.速度塊
4.每個包最大64kb
UDP與TCP的使用場景
| 面向連接 | 面向無連接 |
| 要求系統資源較多 | 要求系統資源較少 |
| TCP程序結構較復雜 | UDP程序結構較簡單 |
| 使用流式 | 使用數據包式 |
| 保證數據準確性 | 不保證數據準確性 |
| 保證數據順序 | 不保證數據順序 |
| 通訊速度較慢 | 通訊速度較快 |
TCP應用場景:
對數據傳輸安全性要求高,比如文件傳輸
UDP應用場景:
對數據實時傳輸要求比較高,比如視頻、通話、游戲
網絡分層架構(分層模型):
為了減少協議設計的復雜性,大多數網絡模型均采用分層的方式來組織。每一層都有自己的功能,就像建筑物一樣,每一層都靠下一層支持。每一層利用下一層提供的服務來為上一層提供服務,本層服務的實現細節對上層屏蔽。
業內普遍的分層方式有兩種。OSI七層模型 和TCP/IP四層模型。可以通過背誦兩個口訣來快速記憶:
- OSI七層模型:物、數、網、傳、會、表、應
- TCP/IP四層模型:鏈、網、傳、應
主要是將從下層接收的數據進行分段和傳輸,到達目的地址后再進行重組。常常把這一層數據叫做段。
網絡的每一層,都定義了很多協議。這些協議的總稱,叫“TCP/IP協議”。TCP/IP協議是一個大家族,不僅僅只有TCP和IP協議,它還包括其它的協議,如下圖:
鏈路層:
以太網規定,連入網絡的所有設備,都必須具有“網卡”接口。數據包必須是從一塊網卡,傳送到另一塊網卡。通過網卡能夠使不同的計算機之間連接,從而完成數據通信等功能。網卡的地址——MAC 地址,就是數據包的物理發送地址和物理接收地址。
ARP協議:借助Ip地址獲取Mac地址
網絡層:
- 網絡層的作用是引進一套新的地址,使得我們能夠區分不同的計算機是否屬于同一個子網絡。這套地址就叫做“網絡地址”,這是我們平時所說的IP地址。這個IP地址好比我們的手機號碼,通過手機號碼可以得到用戶所在的歸屬地。
- 網絡地址幫助我們確定計算機所在的子網絡,MAC 地址則將數據包送到該子網絡中的目標網卡。網絡層協議包含的主要信息是源IP和目的IP。
于是,“網絡層”出現以后,每臺計算機有了兩種地址,一種是 MAC 地址,另一種是網絡地址。兩種地址之間沒有任何聯系,MAC 地址是綁定在網卡上的,網絡地址則是管理員分配的,它們只是隨機組合在一起。 - 網絡地址幫助我們確定計算機所在的子網絡,MAC 地址則將數據包送到該子網絡中的目標網卡。因此,從邏輯上可以推斷,必定是先處理網絡地址,然后再處理 MAC 地址。
傳輸層:
當我們一邊聊QQ,一邊聊微信,當一個數據包從互聯網上發來的時候,我們怎么知道,它是來自QQ的內容,還是來自微信的內容?
也就是說,我們還需要一個參數,表示這個數據包到底供哪個程序(進程)使用。這個參數就叫做端口 port,它其實是每一個使用網卡的程序的編號。每個數據包都發到主機的特定端口,所以不同的程序就能取到自己所需要的數據。
端口特點:
- 對于同一個端口,在不同系統中對應著不同的進程
- 對于同一個系統,一個端口只能被一個進程擁有
應用層:
應用程序收到“傳輸層”的數據,接下來就要進行解讀。由于互聯網是開放架構,數據來源五花八門,必須事先規定好格式,否則根本無法解讀。“應用層”的作用,就是規定應用程序的數據格式。
協議功能:
通信過程:
兩臺計算機通過TCP/IP協議通訊的過程如下所示:
將Hello發送到一臺計算機的執行過程
封裝過程是自上向下的:
接收端的解封裝是反向執行的
Socket:
- Socket,是插座、插孔的意思,一般稱之為套接字,用于描述IP地址和端口,可以實現不同程序間的數據通信。
- Socket起源于Unix,而Unix基本哲學之一就是“一切皆文件”,都可以用“打開open –> 讀寫write/read –> 關閉close”模式來操作。Socket就是該模式的一個實現,網絡的Socket數據傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個類似于打開文件的函數調用:Socket(),該函數返回一個整型的Socket描述符,隨后的連接建立、數據傳輸等操作都是通過該Socket實現的。
- Socket底層是封裝了兩個單向的channel,進行網絡通信時Socket都是成對出現的。
- 在TCP/IP協議中,IP地址+TCP/UDP端口號唯一標識網絡通訊中的一個進程。IP地址+端口號就對應一個socket。欲建立連接的兩個進程各自有一個socket來標識,那么這兩個socket組成的socket pair就唯一標識一個連接。因此可以用Socket來描述網絡連接的一對一關系。
- 常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數據報式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對于面向連接的TCP服務應用;數據報式Socket是一種無連接的Socket,對應于無連接的UDP服務應用。
網絡應用程序設計模式C/S和B/S:
C/S模式
傳統的網絡應用設計模式,客戶端(client)/服務器(server)模式。需要在通訊兩端各自部署客戶機和服務器來完成數據通信。
B/S模式
瀏覽器(Browser)/服務器(Server)模式。只需在一端部署服務器,而另外一端使用每臺PC都默認配置的瀏覽器即可完成數據的傳輸。
C/S優點:
客戶端位于目標主機上可以保證性能,將數據緩存至客戶端本地,從而提高數據傳輸效率。一般來說客戶端和服務器程序由一個開發團隊創作,所以他們之間所采用的協議相對靈活。可以在標準協議的基礎上根據需求裁剪及定制。例如,騰訊所采用的通信協議,即為ftp協議的修改剪裁版。因此,傳統的網絡應用程序及較大型的網絡應用程序都首選C/S模式進行開發。如,知名的網絡游戲魔獸世界。3D畫面,數據量龐大,使用C/S模式可以提前在本地進行大量數據的緩存處理,從而提高觀感。
C/S缺點:
由于客戶端和服務器都需要有一個開發團隊來完成開發。工作量將成倍提升,開發周期較長。從用戶角度出發,需要將客戶端安插至用戶主機上,對用戶主機的安全性構成威脅。這也是很多用戶不愿使用C/S模式應用程序的重要原因。
B/S優點:
由于它沒有獨立的客戶端,使用標準瀏覽器作為客戶端,工作開發量較小。只需開發服務器端即可。另外由于其采用瀏覽器顯示數據,因此移植性非常好,不受平臺限制。如早期的偷菜游戲,在各個平臺上都可以完美運行。
B/S缺點:
由于使用第三方瀏覽器,因此網絡應用支持受限。另外,沒有客戶端放到對方主機上,緩存數據不盡如人意,從而傳輸數據量受到限制。應用的觀感大打折扣。而且必須與瀏覽器一樣,采用標準http協議進行通信,協議選擇不靈活。因此在開發過程中,模式的選擇由上述各自的特點決定。根據實際需求選擇應用程序設計模式。
TCP的C/S架構:
總結
以上是生活随笔為你收集整理的一文入门网络编程:常见协议、通信过程、Socket、CS/BS、TCP/UDP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle数据库生产,从安装系统到or
- 下一篇: 华为8545m5补全shell_华为hs