python網絡-計算機網絡基礎(23)

1、網絡簡介

網絡是由節點和連線構成,表示諸多對象及其相互聯繫。linux

一我的玩:編程

 

兩我的玩:服務器

 

多我的玩:網絡

說明socket

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

使用網絡的目的tcp

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

 

2、tcp/ip簡介

1. 什麼是協議函數

有的說英語,有的說中文,有的說德語,說同一種語言的人能夠交流,不一樣的語言之間就不行了工具

爲了解決不一樣種族人之間的語言溝通障礙,現規定國際通用語言是英語,這就是一個規定,這就是協議學習

2. 計算機網絡溝通用什麼測試

如今的生活中,不一樣的計算機只須要可以聯網(有線無線均可以)那麼就能夠相互進行傳遞數據,那麼不一樣種類之間的計算機究竟是怎麼進行數據傳遞的呢?就像說不一樣語言的人溝通同樣,只要有一種你們都承認都遵照的協議便可,那麼這個計算機都遵照的網絡通訊協議叫作TCP/IP協議

3. TCP/IP協議(族)

早期的計算機網絡,都是由各廠商本身規定一套協議,IBM、Apple和Microsoft都有各自的網絡協議,互不兼容

爲了把全世界的全部不一樣類型的計算機都鏈接起來,就必須規定一套全球通用的協議,爲了實現互聯網這個目標,互聯網協議簇(Internet Protocol Suite)就是通用協議標準。

由於互聯網協議包含了上百種協議標準,可是最重要的兩個協議是TCP和IP協議,因此,你們把互聯網的協議簡稱TCP/IP協議

經常使用的網絡協議以下圖所示:

說明:

  • 網際層也稱爲:網絡層
  • 網絡接口層也稱爲:鏈路層

 

3、端口簡介

那麼TCP/IP協議中的端口指的是什麼呢?端口就好一個房子的門,是出入這間房子的必經之路。

若是一個進程須要收發網絡數據,那麼就須要有這樣的端口

在linux系統中,端口能夠有65536(2的16次方)個之多!

既然有這麼多,操做系統爲了統一管理,因此進行了編號,這就是端口號

2. 端口號

端口是經過端口號來標記的,端口號只有整數,範圍是從0到65535

3. 端口是怎樣分配的

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

4.知名端口(Well Known Ports)

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

  • 80端口分配給HTTP服務
  • 21端口分配給FTP服務

能夠理解爲,一些經常使用的功能使用的號碼比如:電話號碼1十、1008六、10010同樣

通常狀況下,若是一個程序須要使用知名端口的須要有root權限

5.動態端口(Dynamic Ports)

  • 動態端口的範圍是從1024到65535
  • 之因此稱爲動態端口,是由於它通常不固定分配某種服務,而是動態分配。
  • 動態分配是指當一個系統進程或應用程序進程須要網絡通訊時,它向主機申請一個端口,主機從可用的端口號中分配一個供它使用。
  • 當這個進程關閉時,同時也就釋放了所佔用的端口號。
  • 用「netstat -an」查看端口狀態

六、端口總結

端口有什麼用呢 ? 咱們知道,一臺擁有IP地址的主機能夠提供許多服務,好比HTTP(萬維網服務)、FTP(文件傳輸)、SMTP(電子郵件)等,這些服務徹底能夠經過1個IP地址來實現。那麼,主機是怎樣區分不一樣的網絡服務呢?顯然不能只靠IP地址,由於IP地址與網絡服務的關係是一對多的關係。其實是經過「IP地址+端口號」來區分不一樣的服務的。 須要注意的是,端口並非一一對應的。好比你的電腦做爲客戶機訪問一臺WWW服務器時,WWW服務器使用「80」端口與你的電腦通訊,但你的電腦則可能使用「3457」這樣的端口。

 

4、IP地址簡介

IP地址就像是咱們的家庭住址同樣,若是你要寫信給一我的,你就要知道他(她)的地址,這樣郵遞員才能把信送到。計算機發送信息就比如是郵遞員,它必須知道惟一的「家庭地址」才能不至於把信送錯人家。只不過咱們的地址使用文字來表示的,計算機的地址用二進制數字表示。

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地址的分類

A類IP地址

  • 一個A類IP地址由1字節的網絡地址和3字節主機地址組成,網絡地址的最高位必須是「0」,
  • 地址範圍1.0.0.1-126.255.255.254
  • 二進制表示爲:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110
  • 可用的A類網絡有126個,每一個網絡能容納1677214個主機

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主機

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個主機

D類地址用於多點廣播

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

E類IP地址

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

私有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服務器。

 

5、子網掩碼簡介

要想理解什麼是子網掩碼,就不能不瞭解IP地址的構成。互聯網是由許多小型網絡構成的,每一個網絡上都有許多主機,這樣便構成了一個有層次的結構。IP地址在設計時就考慮到地址分配的層次特色,將每一個IP地址都分割成網絡號和主機號兩部分,以便於IP地址的尋址操做。

IP地址的網絡號和主機號各是多少位呢?

若是不指定,就不知道哪些位是網絡號、哪些是主機號,這就須要經過子網掩碼來實現。

子網掩碼不能單獨存在,它必須結合IP地址一塊兒使用。

子網掩碼只有一個做用,就是將某個IP地址劃分紅網絡地址和主機地址兩部分子網掩碼的設定必須遵循必定的規則。

與IP地址相同,子網掩碼的長度也是32位,

  • 左邊是網絡位,用二進制數字「1」表示;
  • 右邊是主機位,用二進制數字「0」表示。

假設IP地址爲「192.168.1.1」子網掩碼爲「255.255.255.0」,子網掩碼裝換二進制位:11111111 11111111 11111111 00000000

  • 其中,「1」有24個,表明與此相對應的IP地址左邊24位是網絡號;
  • 「0」有8個,表明與此相對應的IP地址右邊8位是主機號。
  • 這樣,子網掩碼就肯定了一個IP地址的32位二進制數字中哪些是網絡號、哪些是主機號。
  • 這對於採用TCP/IP協議的網絡來講很是重要,只有經過子網掩碼,才能代表一臺主機所在的子網與其餘子網的關係,使網絡正常工做。

最經常使用的子網掩碼是「255.255.255.0」的網絡:

  • 最後面一個數字能夠在0~255範圍內任意變化,所以能夠提供256個IP地址。
  • 可是實際可用的IP地址數量是256-2,即254個,由於主機號不能全是「0」或全是「1」。
  • 主機號全爲0,表示網絡號
  • 主機號全爲1,表示網絡廣播

 

6、socket簡介

1.本地的進程間通訊(IPC)有不少種方式,例如

  • 隊列
  • 同步(互斥鎖、條件變量等)

以上通訊方式都是在一臺機器上不一樣進程之間的通訊方式,那麼問題來了,網絡中進程之間如何通訊?

2. 網絡中進程之間如何通訊

  • 首要解決的問題是如何惟一標識一個進程,不然通訊無從談起!
  • 在本地能夠經過進程PID來惟一標識一個進程,可是在網絡中這是行不通的。
  • 其實TCP/IP協議族已經幫咱們解決了這個問題,網絡層的「ip地址」能夠惟一標識網絡中的主機,而傳輸層的「協議+端口」能夠惟一標識主機中的應用程序(進程)。
  • 這樣利用ip地址,協議,端口就能夠標識網絡的進程了,網絡中的進程通訊就能夠利用這個標誌與其它進程進行交互

3. 什麼是socket

  • socket(簡稱 套接字) 是進程間通訊的一種方式,它與其餘進程間通訊的一個主要不一樣是:
  • 它能實現不一樣主機間的進程間通訊,咱們網絡上各類各樣的服務大多都是基於 Socket 來完成通訊的
  • 例如咱們天天瀏覽網頁、QQ 聊天、收發 email 等等

4. 建立socket

在 Python 中 使用socket 模塊的函數 socket 就能夠完成:

socket.socket(AddressFamily, Type)

說明:

函數 socket.socket 建立一個 socket,返回該 socket 的描述符,該函數帶有兩個參數:

  • Address Family:能夠選擇 AF_INET(用於 Internet 進程間通訊) 或者 AF_UNIX(用於同一臺機器進程間通訊),實際工做中經常使用AF_INET
  • Type:套接字類型,能夠是 SOCK_STREAM(流式套接字,主要用於 TCP 協議)或者 SOCK_DGRAM(數據報套接字,主要用於 UDP 協議)

建立一個tcp socket(tcp套接字)

import socket

s = socket.socket(socket.AF_INET, SOCK_STREAM) print 'Socket Created'

建立一個udp socket(udp套接字)

import socket

s = socket.socket(socket.AF_INET, SOCK_DGRAM) print 'Socket Created'
相關文章
相關標籤/搜索