數據如何在網絡上傳輸?掌握這些小知識,編程將不再呆板無趣

c語言基礎 發佈 2020-05-11T03:51:07+00:00

前言本文主要介紹的是C語言網絡編程基礎,介紹一些網絡常識,這希望對於廣大讀者學習C/C++有一些幫助。更多淺顯的C語言、C++,windows知識,持續關注我吧!什麼是socket?Socket的英文原義是「孔」或「插座」。

前言


本文主要介紹的是C語言網絡編程基礎,介紹一些網絡常識,這希望對於廣大讀者學習C/C++有一些幫助。更多淺顯的C語言、C++,windows知識,持續關注我吧!

什麼是socket?

Socket的英文原義是「孔」或「插座」。在編程中,Socket被稱做 套接字,是網絡通信中的一種約定。Socket編程的應用無處不在,我們平時用的QQ、微信、瀏覽器等程序,都與Socket編程有關。我們平時使用瀏覽器查資料,這個過程的技術原理是怎樣的呢?

我們平時使用瀏覽器,大致就是這樣的一個過程。這裡有兩個重要的名詞: 服務端與 客戶端。

Socket編程的目的就是如何實現這兩端之間的通信。

Socket編程在編程開發中很重要

Socket編程不僅僅在網際網路方面很重要,在我們的嵌入式方面也是非常的重要,因為現在很多電子設備都趨向於聯網。比如很多編程行業的招聘要求都會有這一條要求:

說一點題外話,還在學校的朋友,如果感覺到很迷茫,不知道學什麼的時候,可以上招聘網站上看看自己未來工作相關的職位的任職要求,這樣就可以總結自己的一些不足、比較有針對性的去學習。

Socket編程中的幾個重要概念

Socket編程用於解決我們 客戶端與 服務端之間通信的問題。我們平時多多少少都有聽過IP位址、埠、TCP協議、UDP協議等概念,這些都與Socket編程中相關,想要知道怎麼用起來,當然得先了解它們的一些介紹。下面看一下這些專業術語的一些要點介紹:

1、什麼是IP位址?

IP位址(InternetProtocolAddress)是指網際網路協議地址,又譯為 網際協議地址。IP位址被用來給Internet上的電腦一個編號。我們可以把「個人電腦」比作「一台電話」,那麼「IP位址」就相當於「電話號碼」。若計算機1知道計算機2的IP位址,則計算機1就能訪問計算機2。

IP位址是一個32位的二進位數,通常被分割為4個「8位二進位數」(也就是4個字節)。IP位址通常用 點分十進位表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之間的十進位整數。例:點分十進IP位址(100.4.5.6),實際上是32位二進位數(01100100.00000100.00000101.00000110)。

IP位址有 IPv4與 IPv6之分,現在用得較多的是IPv4。其中,有一個特殊的IP位址需要我們記住: 127.0.0.1,這是回送地址,即本地機,一般用來測試使用。後邊我們的實例中會用到。

關於IP位址還有很多知識要點,但是對於在Socket編程中的應用,我們暫且知道這麼多就可以。

2、什麼是TCP/IP埠?

上一點中我們提到,若計算機1知道計算機2的IP位址,則計算機1就能訪問計算機2。但是,我們要訪問計算機2中的不同的應用軟體,則還得需要一個信息: 埠。埠使用16bit進行編號,即其範圍為: 0~65536。但 0~1023 的埠一般由系統分配給特定的服務程序,例如 Web 服務的埠號為 80,FTP 服務的埠號為 21等。

3、什麼是協議?

協議(Protocol)是通信雙方進行數據交互的一種約定。如TCP、UDP協議:

TCP協議

TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議,數據可以準確發送,數據丟失會重發。TCP協議常用於web應用中。

TCP連接(三次握手)

TCP傳輸起始時,客戶端、服務端要完成三次數據交互工作才能建立連接,常稱為三次握手。可形象比喻為如下對話:

客戶端:服務端您好,我有數據要發給你,請求您開通訪問權限。

服務端:客戶端您好,已給您開通權限,您可以發送數據了。

客戶端:收到,謝謝。

具體示意圖為:

這裡的SYN和ACK是都是標誌位,其中SYN代表新建一個連接,ACK代表確認。其中m、n都是隨機數。具體說明如:

  • 第一次握手:SYN標誌位被置位,客戶端向服務端發送一個隨機數m。
  • 第二次握手:ACK、SYN標誌位被置位。服務端向客戶端發送m+1表示確認剛才收到的數據,同時向客戶端發送一個隨機數n。
  • 第三次握手:ACK標誌被置位。客戶端向服務端發送n+1表示確認收到數據。

TCP斷開(四次揮手)

TCP斷開連接時,客戶端、服務端要完成四次數據交互工作才能建立連接,常稱為四次揮手。可形象比喻為如下對話:

客戶端:服務端您好,我發送數據完畢了,即將和您斷開連接。

服務端:客戶端您好,我稍稍準備一下,再給您斷開

服務端:客戶端您好,我準備好了,您可以斷開連接了。

客戶端:好的,合作愉快!

具體示意圖為:

這裡的FIN也是一個標誌位,代表斷開連接。具體說明類似三次握手

為什麼建立連接只需要三次數據交互,而斷開連接需要四次呢?

建立連接時,服務端在監聽狀態下,收到建立連接請求的SYN報文後,把ACK和SYN放在一個報文里發送給客戶端。

而關閉連接時,當收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方也未必全部數據都發送給對方了,所以己方可以立即close,也可以發送一些數據給對方後,再發送FIN報文給對方來表示同意現在關閉連接,因此,己方ACK和FIN一般都會分開發送。

UDP協議

UDP(User Datagram Protocol, 用戶數據報協議)是一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務,可以保證通訊效率,傳輸延時小。例如視頻聊天應用中用的就是UDP協議,這樣可以保證及時丟失少量數據,視頻的顯示也不受很大影響。

4、什麼是協議族?

協議族是多個協議的統稱。比如我們的TCP/IP協議族,其不僅僅是TCP協議、IP協議,而是多個協議的集合,其包含IP、TCP、UDP、FTP、SMTP等協議。

TCP、UDP通信的socket編程過程圖

(1)TCP通信socket編程過程

(2)UDP通信socket編程過程

尾言

由於篇幅問題,關於socket的編程應用實例敬請期待,文章都是手打原創,每天最淺顯的介紹C語言、C++,windows知識,喜歡我的文章就關注一波吧,每天帶你學習C/C++不同的知識,也可以看到最新更新和之前發表的文章哦。如果足下基礎比較差,不妨關注下人人都可以學習的視頻教程

《C語言51課視頻教程合集》

《C++45課視頻教程》

通俗易懂,深入淺出,一個視頻只講一個知識點。視頻不深奧,不需要鑽研,在公交、在地鐵、在廁所都可以觀看,隨時隨地漲姿勢

如果今天學到知識的,可以在留言區留言學到了哦,如果喜歡的可以評論,轉發,收藏哦,這真的對我很重要!!

關鍵字: