網絡與socket

https://blog.csdn.net/zhihuiy...
這篇文章寫的也不錯,socket={ip,port}
暫時不理解進程爲何要用ip+協議+port做爲惟一標識linux

目錄編程

  • 網絡
  • IP地址
  • 端口
  • socket
  • 總結

1 網絡

1.1 網絡定義

  • 網絡就是一種輔助雙方或者多方可以鏈接在一塊兒的工具
  • 若是沒有網絡可想單機的世界是多麼的孤單

1.2 使用網絡的目的

  • 就是爲了聯通多方而後進行通訊用的,即把數據從一方傳遞給另一方
  • 若是沒有網絡,編寫的程序都是單機的,即不能和其餘電腦上的程序進行通訊
  • 爲了讓在不一樣的電腦上運行的軟件,之間可以互相傳遞數據,就須要藉助網絡的功能

1.3 總結

  • 使用網絡可以把多方連接在一塊兒,而後能夠進行數據傳遞
  • 所謂的網絡編程就是,讓在不一樣的電腦上的軟件可以進行數據傳遞,即進程之間的通訊

2 IP地址

2.1 ip地址的做用

ip地址:用來在網絡中標記一臺電腦,好比192.168.1.1;在本地局域網上是惟一的。服務器

2.2 ip地址的分類

每個IP地址包括兩部分:網絡地址和主機地址網絡

2.2.1 A類IP地址

一個A類IP地址由1字節的網絡地址和3字節主機地址組成,網絡地址的最高位必須是「0」
地址範圍1.0.0.1-126.255.255.254
二進制表示爲:socket

00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110

可用的A類網絡有126個,每一個網絡能容納1677214個主機tcp

2.2.2 B類IP地址

一個B類IP地址由2個字節的網絡地址和2個字節的主機地址組成,網絡地址的最高位必須是「10」
地址範圍128.1.0.1-191.255.255.254
二進制表示爲:函數

10000000 00000001 00000000 00000001 - 10111111 11111111 11111111 11111110

可用的B類網絡有16384個,每一個網絡能容納65534主機工具

2.2.3 C類IP地址

一個C類IP地址由3字節的網絡地址和1字節的主機地址組成,網絡地址的最高位必須是「110」
範圍192.0.1.1-223.255.255.254
二進制表示爲:測試

11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110

C類網絡可達2097152個,每一個網絡能容納254個主機ui

2.2.4 D類地址用於多點廣播

D類IP地址第一個字節以「1110」開始,它是一個專門保留的地址。
它並不指向特定的網絡,目前這一類地址被用在多點廣播(Multicast)中
多點廣播地址用來一次尋址一組計算機 s 地址範圍

224.0.0.1-239.255.255.254

2.2.5 E類IP地址

以「1111」開始,爲未來使用保留
E類地址保留,僅做實驗和開發用

2.2.6 私有ip

在這麼多網絡IP中,國際規定有一部分IP地址是用於咱們的局域網使用,也就
是屬於私網IP,不在公網中使用的,它們的範圍是:

10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255

注意:

IP地址127.0.0.1~127.255.255.255用於迴路測試,
如:127.0.0.1能夠表明本機IP地址,用 http://127.0.0.1 就能夠測試本機中配置的Web服務器。

3 端口

3.1 什麼是端口

  • 端口就好一個房子的門,是出入這間房子的必經之路。
  • 若是一個程序須要收發網絡數據,那麼就須要有這樣的端口
  • 在linux系統中,端口能夠有65536(2的16次方)個之多!
  • 對端口進行統一編號,這就是所說的端口號

3.2 端口號

端口是經過端口號(一個整數)來標記的,範圍是從0到65535
注意:

端口數不同的*nix系統不同,還能夠手動修改

3.3 端口的分配

端口號不是隨意使用的,而是按照必定的規定進行分配。端口的分類標準有好幾種,筆者在這裏不作詳細講解,只介紹一下知名端口和動態端口

3.3.1 知名端口(Well Known Ports)

知名端口是 衆所周知的端口號,範圍從0到1023

  • 80端口分配給HTTP服務
  • 21端口分配給FTP服務
在這裏爲了方便理解,咱們能夠將端口號想象成手機號,一些經常使用的功能使用的號碼是你們都知道的,比如電話號碼1十、1008六、10010同樣,他們在電話中的地位和知名端口在端口的地位是相似的
通常狀況下,若是一個程序須要使用知名端口的須要有root權限

3.3.2 動態端口(Dynamic Ports)

動態端口的範圍是從1024到65535

之因此稱爲動態端口,是由於它通常不固定分配某種服務,而是動態分配。

動態分配是指當一個系統程序或應用程序程序須要網絡通訊時,它向主機申請一個端口,主機從可用的端口號中分配一個供它使用。
當這個程序關閉時,同時也就釋放了所佔用的端口號

3.3 怎樣查看端口

  • 用「netstat -an」查看端口狀態
  • lsof -i [tcp/udp]:2425

4 socket(進程間通訊的一種方式)

4.1 不一樣電腦上的進程間通訊的實現

  • 首要要惟一標識一個進程
  • 在1臺電腦上能夠經過進程號(PID)來惟一標識一個進程,可是在網絡中這行不通。
  • 這就須要TCP/IP協議族,網絡層的「ip地址」 能夠 惟一標識網絡中的主機,而傳輸層的「協議+端口」 能夠 惟一標識主機中的應用進程(進程)。
  • 這樣利用ip地址,協議,端口就能夠標識網絡的進程了,網絡中的進程就能夠利用該方式與其它進程進行交互

注意:

進程:運行的程序以及運行時用到的資源這個總體稱之爲進程
進程間通訊指:運行的程序之間的數據共享

4.2 socket簡介

  • socket()函數:用於根據指定的地址族、數據類型和協議來分配一個套接口(通信的基石是套接口,一個套接口是通信的一端)的描述字及其所用的資源
  • socket(簡稱 套接字) 是進程間通訊的一種方式,它與其餘進程間通訊的一個主要不一樣是:
    它能實現不一樣主機間的進程間通訊,咱們網絡上各類各樣的服務大多都是基於 Socket 來完成通訊的,例如瀏覽網頁、QQ 聊天、收發 email 等等

注意:

套接字使用流程 與 文件的使用流程很相似

  • 建立套接字
  • 使用套接字收/發數據
  • 關閉套接字

5 網絡通訊總結

  • 網絡通訊能夠說是在網絡中,知道互相之間的「IP地址(在網絡層)」以肯定相互是誰,再經過知道要進行通訊的「協議+端口號(在傳輸層)」,以肯定通訊雙方進行通訊的工具即進程,而在這過程當中必然涉及到套接口的描述字及其所用的資源的分配(軟件及硬件),當下實現這一功能的多采用socket()函數。
  • 詳細的來講,一臺擁有IP地址的主機能夠提供許多服務,好比HTTP(萬維網服務)、FTP(文件傳輸)、SMTP(電子郵件)等,這些服務徹底能夠經過1個IP地址來實現。那麼,主機是怎樣區分不一樣的網絡服務呢?顯然不能只靠IP地址,由於IP地址與網絡服務的關係是一對多的關係。
  • 其實是經過「IP地址+端口號」來區分不一樣的服務的。須要注意的是,端口並非一一對應的。好比你的電腦做爲客戶機訪問一臺WWW服務器時,WWW服務器使用「80」端口與你的電腦通訊,但你的電腦則可能使用「3457」這樣的端口。
相關文章
相關標籤/搜索