python网络通信的几种方式_python网络-计算机网络基础(23)
一、網絡簡介
網絡是由節(jié)點和連線構成,表示諸多對象及其相互聯系。
一個人玩:
兩個人玩:
多個人玩:
說明
網絡就是一種輔助雙方或者多方能夠連接在一起的工具
如果沒有網絡可想單機的世界是多么的孤單
使用網絡的目的
就是為了聯通多方然后進行通信用的,即把數據從一方傳遞給另外一方
前面的學習編寫的程序都是單機的,即不能和其他電腦上的程序進行通信
為了讓在不同的電腦上運行的軟件,之間能夠互相傳遞數據,就需要借助網絡的功能
所謂的網絡編程就是,讓在不同的電腦上的軟件能夠進行數據傳遞,即進程之間的通信
二、tcp/ip簡介
1. 什么是協(xié)議
有的說英語,有的說中文,有的說德語,說同一種語言的人可以交流,不同的語言之間就不行了
為了解決不同種族人之間的語言溝通障礙,現規(guī)定國際通用語言是英語,這就是一個規(guī)定,這就是協(xié)議
2. 計算機網絡溝通用什么
現在的生活中,不同的計算機只需要能夠聯網(有線無線都可以)那么就可以相互進行傳遞數據,那么不同種類之間的計算機到底是怎么進行數據傳遞的呢?就像說不同語言的人溝通一樣,只要有一種大家都認可都遵守的協(xié)議即可,那么這個計算機都遵守的網絡通信協(xié)議叫做TCP/IP協(xié)議
3. TCP/IP協(xié)議(族)
早期的計算機網絡,都是由各廠商自己規(guī)定一套協(xié)議,IBM、Apple和Microsoft都有各自的網絡協(xié)議,互不兼容
為了把全世界的所有不同類型的計算機都連接起來,就必須規(guī)定一套全球通用的協(xié)議,為了實現互聯網這個目標,互聯網協(xié)議簇(Internet Protocol Suite)就是通用協(xié)議標準。
因為互聯網協(xié)議包含了上百種協(xié)議標準,但是最重要的兩個協(xié)議是TCP和IP協(xié)議,所以,大家把互聯網的協(xié)議簡稱TCP/IP協(xié)議
常用的網絡協(xié)議如下圖所示:
說明:
網際層也稱為:網絡層
網絡接口層也稱為:鏈路層
三、端口簡介
那么TCP/IP協(xié)議中的端口指的是什么呢?端口就好一個房子的門,是出入這間房子的必經之路。
如果一個進程需要收發(fā)網絡數據,那么就需要有這樣的端口
在linux系統(tǒng)中,端口可以有65536(2的16次方)個之多!
既然有這么多,操作系統(tǒng)為了統(tǒng)一管理,所以進行了編號,這就是端口號
2. 端口號
端口是通過端口號來標記的,端口號只有整數,范圍是從0到65535
3. 端口是怎樣分配的
端口號不是隨意使用的,而是按照一定的規(guī)定進行分配。
端口的分類標準有好幾種,我們這里不做詳細講解,只介紹一下知名端口和動態(tài)端口
4.知名端口(Well Known Ports)
知名端口是眾所周知的端口號,范圍從0到1023
80端口分配給HTTP服務
21端口分配給FTP服務
可以理解為,一些常用的功能使用的號碼好比:電話號碼110、10086、10010一樣
一般情況下,如果一個程序需要使用知名端口的需要有root權限
5.動態(tài)端口(Dynamic Ports)
動態(tài)端口的范圍是從1024到65535
之所以稱為動態(tài)端口,是因為它一般不固定分配某種服務,而是動態(tài)分配。
動態(tài)分配是指當一個系統(tǒng)進程或應用程序進程需要網絡通信時,它向主機申請一個端口,主機從可用的端口號中分配一個供它使用。
當這個進程關閉時,同時也就釋放了所占用的端口號。
用“netstat -an”查看端口狀態(tài)
6、端口總結
端口有什么用呢 ? 我們知道,一臺擁有IP地址的主機可以提供許多服務,比如HTTP(萬維網服務)、FTP(文件傳輸)、SMTP(電子郵件)等,這些服務完全可以通過1個IP地址來實現。那么,主機是怎樣區(qū)分不同的網絡服務呢?顯然不能只靠IP地址,因為IP地址與網絡服務的關系是一對多的關系。實際上是通過“IP地址+端口號”來區(qū)分不同的服務的。 需要注意的是,端口并不是一一對應的。比如你的電腦作為客戶機訪問一臺WWW服務器時,WWW服務器使用“80”端口與你的電腦通信,但你的電腦則可能使用“3457”這樣的端口。
四、IP地址簡介
IP地址就像是我們的家庭住址一樣,如果你要寫信給一個人,你就要知道他(她)的地址,這樣郵遞員才能把信送到。計算機發(fā)送信息就好比是郵遞員,它必須知道唯一的“家庭地址”才能不至于把信送錯人家。只不過我們的地址使用文字來表示的,計算機的地址用二進制數字表示。
IP地址是一個32位的二進制數,通常被分割為4個“8位二進制數”(也就是4個字節(jié))。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字節(jié)的網絡地址和3字節(jié)主機地址組成,網絡地址的最高位必須是“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個字節(jié)的網絡地址和2個字節(jié)的主機地址組成,網絡地址的最高位必須是“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字節(jié)的網絡地址和1字節(jié)的主機地址組成,網絡地址的最高位必須是“110”
范圍192.0.1.1-223.255.255.254
二進制表示為: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110
C類網絡可達2097152個,每個網絡能容納254個主機
D類地址用于多點廣播
D類IP地址第一個字節(jié)以“1110”開始,它是一個專門保留的地址。
它并不指向特定的網絡,目前這一類地址被用在多點廣播(Multicast)中
多點廣播地址用來一次尋址一組計算機
地址范圍224.0.0.1-239.255.255.254
E類IP地址
以“1111”開始,為將來使用保留
E類地址保留,僅作實驗和開發(fā)用
私有ip
在這么多網絡IP中,國際規(guī)定有一部分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服務器。
五、子網掩碼簡介
要想理解什么是子網掩碼,就不能不了解IP地址的構成。互聯網是由許多小型網絡構成的,每個網絡上都有許多主機,這樣便構成了一個有層次的結構。IP地址在設計時就考慮到地址分配的層次特點,將每個IP地址都分割成網絡號和主機號兩部分,以便于IP地址的尋址操作。
IP地址的網絡號和主機號各是多少位呢?
如果不指定,就不知道哪些位是網絡號、哪些是主機號,這就需要通過子網掩碼來實現。
子網掩碼不能單獨存在,它必須結合IP地址一起使用。
子網掩碼只有一個作用,就是將某個IP地址劃分成網絡地址和主機地址兩部分子網掩碼的設定必須遵循一定的規(guī)則。
與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協(xié)議的網絡來說非常重要,只有通過子網掩碼,才能表明一臺主機所在的子網與其他子網的關系,使網絡正常工作。
最常用的子網掩碼是“255.255.255.0”的網絡:
最后面一個數字可以在0~255范圍內任意變化,因此可以提供256個IP地址。
但是實際可用的IP地址數量是256-2,即254個,因為主機號不能全是“0”或全是“1”。
主機號全為0,表示網絡號
主機號全為1,表示網絡廣播
六、socket簡介
1.本地的進程間通信(IPC)有很多種方式,例如
隊列
同步(互斥鎖、條件變量等)
以上通信方式都是在一臺機器上不同進程之間的通信方式,那么問題來了,網絡中進程之間如何通信?
2. 網絡中進程之間如何通信
首要解決的問題是如何唯一標識一個進程,否則通信無從談起!
在本地可以通過進程PID來唯一標識一個進程,但是在網絡中這是行不通的。
其實TCP/IP協(xié)議族已經幫我們解決了這個問題,網絡層的“ip地址”可以唯一標識網絡中的主機,而傳輸層的“協(xié)議+端口”可以唯一標識主機中的應用程序(進程)。
這樣利用ip地址,協(xié)議,端口就可以標識網絡的進程了,網絡中的進程通信就可以利用這個標志與其它進程進行交互
3. 什么是socket
socket(簡稱?套接字) 是進程間通信的一種方式,它與其他進程間通信的一個主要不同是:
它能實現不同主機間的進程間通信,我們網絡上各種各樣的服務大多都是基于 Socket 來完成通信的
例如我們每天瀏覽網頁、QQ 聊天、收發(fā) email 等等
4. 創(chuàng)建socket
在 Python 中 使用socket 模塊的函數 socket 就可以完成:
socket.socket(AddressFamily, Type)
說明:
函數 socket.socket 創(chuàng)建一個 socket,返回該 socket 的描述符,該函數帶有兩個參數:
Address Family:可以選擇 AF_INET(用于 Internet 進程間通信) 或者 AF_UNIX(用于同一臺機器進程間通信),實際工作中常用AF_INET
Type:套接字類型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 協(xié)議)或者 SOCK_DGRAM(數據報套接字,主要用于 UDP 協(xié)議)
創(chuàng)建一個tcp socket(tcp套接字)
importsocket
s =socket.socket(socket.AF_INET, SOCK_STREAM)
print 'Socket Created'
創(chuàng)建一個udp socket(udp套接字)
importsocket
s =socket.socket(socket.AF_INET, SOCK_DGRAM)
print 'Socket Created'
總結
以上是生活随笔為你收集整理的python网络通信的几种方式_python网络-计算机网络基础(23)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python操作mongodb语法_py
- 下一篇: unity 半透明混合问题_Unity