Linux網絡編程

網絡編程

瞭解網絡名詞

IP地址:在網絡中唯一標識的一臺主機

port端口:在一臺主機上標識一個進程

協議:通信雙方的約定

網絡協議:網絡通信環境中數據的約定格式

通信協議標準:網絡互聯的前提

協議分層

在以往的瞭解知道協議具有多層,而分層就是爲了協議分裝,爲了更好的使用。

對服務,接口,協議進行明確的劃分;形成標準實現起來就容易了

OSI七層模型

物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層

這是基礎網絡中的七層模型,這是一種理想的模型狀態,在現代,大佬們將其劃分爲TCP/IP五層模型。將會話層,表示層,應用層全都規劃到應用層。

網絡1

TCP/IP五層模型

物理層,鏈路層,網絡層,傳輸層,應用層

  • 物理層:負責光電信號的傳輸;比如以太網協議
  • 鏈路層:負責相鄰設備之間的數據幀傳輸;比如Ethernet以太網協議;
  • 網絡層:負責地址管理和路由選擇;IP協議,典型設備(路由器:負責路由選擇,選擇數據發送到哪裏去)
  • 傳輸層:負責端與端之間的數據傳輸;TCP協議,UDP協議
  • 應用層:負責應用程序之間的數據溝通(一般交由程序員來寫);HTTP協議,FTP,SMTP,DNS,HTML

網絡2

圖中是我自己的理解,只能算一個初步的瞭解,不能算標準。

不同的協議層對數據包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做數據報 (datagram),在鏈路層叫做幀(frame).

應用層數據通過協議棧發到網絡上時,每層協議都要加上一個數據首部(header),稱爲封裝 (Encapsulation).

數據封裝的過程如下圖:

網絡3

網絡編程套接字

IP地址

IP是在網絡上唯一標識一個主機

IPV4(uint32_t):對於IPV4來說,IP地址是一個4字節,32位的整數

通常使用“點分十進制”的字符串標識IP地址,例如:192.168.0.1;用點分割的每一個數字表示一個字節,範圍是0-255。

IPV6(uchar ip[16]):IPV6目前還沒有完全的被使用,可以先了解一下。它的地址長度128位,是IPV4地址長度的4倍。於是IPV4點分十進制不再適用,採用十六進制表示。

DHCP(Dynamic Host Configuration Protocol):動態主機配置協議是一個局域網的網絡協議。DHCP服務可以自動給局域網中的主機自動分配一個IP地址。

NAT技術:因爲ipv4的IP不夠用,而發明的技術,實現地址轉換,多人使用同一地址上網。但要區分公網IP和私網IP。

推薦一篇博客,什麼是公網什麼是私網:https://blog.csdn.net/gui951753/article/details/79210535

port端口

端口的類型是(uint16,065535;01024不推薦使用,一般多爲系統佔用端口)

端口是再網絡上唯一標識一個進程

網絡程序分爲了客戶端和服務端,主動發起的一方是客戶端,被動再指定位置接收的一方是服務端,而且服務端被動的接收地址必須是固定不變的。

一個端口只能被一個進程佔用;一個進程可以使用多個端口

在發送數據的過程中,每條數據都一定包含了五元組:源IP,源端口,目的IP,目的端口,協議

網絡字節序

字節序:cpu在內存中對數據存取的順序

在以往的學習中,我們瞭解過大端與小端這兩種字節序。

簡單回憶一下。小端是低地址放低位,高地址放高位;大端是低地址放高位,高地址放低位

在網絡中,存在主機字節序,它是當前計算機的字節序,大小端這取決於cpu架構

因此爲了傳輸數據的我們要保證兩端主機字節序相同,如果不同,那麼就會造成數據二義性。所以保證一個程序的可移植性,通信雙方必須使用網絡字節序進行通信。在網絡通信中,數據的字節序轉換主要是針對數據存儲大於一個字節類型的數據

網絡字節序,一般使用大端字節序。通過聯合體判斷。

傳輸層協議(簡單瞭解)

**TCP:**傳輸控制協議,面向連接,可靠傳輸,面向字節流

面向連接:通信之前先建立連接,確保雙方在線。

可靠傳輸:在網絡正常的情況下,數據不會丟失

面向字節流服務:傳輸靈活,但是存在tcp粘包問題,沒有明顯的數據約定

使用場景多爲:傳輸文件,保證數據安全,對數據安全的要求較高

**UDP:**用戶數據協議,無連接,不可靠,面向數據報

面向數據報:每條數據有長度標識,數據有明顯的間隔,帶有報頭的整條發/收。傳輸不靈活。注意!!!!不存在粘包問題

使用場景多爲:多數據實時要求非常高的,比如看視頻。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章