!/usr/bin/env python
-- coding:utf-8 --
Author:Jarry
1.傳輸模型
1.概念
OSI模型
就是個(gè)概念陕习,用來協(xié)調(diào)進(jìn)程間通信標(biāo)準(zhǔn)的制定霎褐,并沒有提供一個(gè)實(shí)現(xiàn)的方法。事實(shí)上的標(biāo)準(zhǔn)是TCP/IP參考模型
TCP/IP 模型
TCP/IP協(xié)議不是TCP和IP兩個(gè)個(gè)協(xié)議的合稱该镣,而是指因特網(wǎng)整個(gè)TCP/IP協(xié)議族
2.模型對(duì)比
OSI TCP/IP
應(yīng)用層 應(yīng)用層
表示層
會(huì)話層
傳輸層 傳輸層
網(wǎng)絡(luò)層 網(wǎng)絡(luò)層
數(shù)據(jù)鏈路層 網(wǎng)絡(luò)接口層
物理層
2.TCP協(xié)議
1.概念
TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的冻璃、可靠的、基于字節(jié)流的傳輸層通信協(xié)議
2.要點(diǎn)
TCP協(xié)議是面向連接的损合,需要連接才能傳數(shù)據(jù)
TCP的連接需要3次握手
TCP的斷開需要4次揮手
3.UDP
互聯(lián)網(wǎng)的傳輸數(shù)據(jù)主要是兩個(gè)協(xié)議:TCP和UDP
UDP是無連接的俱饿,不管收不收得到。思考塌忽,什么情況用TCP拍埠,什么情況用UDP
理解小技巧,TCP是打電話土居,UDP是寫信枣购,寫完投遞就好了
3.IP地址和端口
1.IP
1.概念
IP地址是指互聯(lián)網(wǎng)協(xié)議地址(英語(yǔ):Internet Protocol Address,又譯為網(wǎng)際協(xié)議地址)擦耀,是IP Address的縮寫棉圈。
IP地址被用來給Internet上的電腦一個(gè)編號(hào)
2.ip地址格式
IP地址是一個(gè)32位的二進(jìn)制數(shù),通常被分割為4個(gè)“8位二進(jìn)制數(shù)”(也就是4個(gè)字節(jié))眷蜓。
IP地址通常用“點(diǎn)分十進(jìn)制”表示成(a.b.c.d)的形式分瘾,其中,a,b,c,d都是0~255之間的十進(jìn)制整數(shù)吁系。例如:192.168.1.1
最初設(shè)計(jì)互聯(lián)網(wǎng)絡(luò)時(shí)德召,為了便于尋址以及層次化構(gòu)造網(wǎng)絡(luò),每個(gè)IP地址包括兩個(gè)標(biāo)識(shí)碼(ID)汽纤,即網(wǎng)絡(luò)ID和主機(jī)ID
3.按網(wǎng)絡(luò)規(guī)模分類
A類 大型網(wǎng)絡(luò)
B類 中型網(wǎng)絡(luò)
C類 小型網(wǎng)絡(luò)
4.按用途分類:
1.公有地址上岗,直接在互聯(lián)網(wǎng)上使用的IP地址
2.私有地址,局域網(wǎng)使用的地址
2.端口
1.概念
"端口"是英文port的意譯蕴坪,是設(shè)備與外界通訊交流的出口肴掷。
端口可分為虛擬端口和物理端口,其中虛擬端口指計(jì)算機(jī)內(nèi)部或交換機(jī)路由器內(nèi)的端口背传,不可見呆瞻。
例如計(jì)算機(jī)中的80端口、21端口径玖、23端口等痴脾。
物理端口又稱為接口,是可見端口挺狰,計(jì)算機(jī)背板的RJ45網(wǎng)口明郭,交換機(jī)路由器集線器等RJ45端口。
今天我們主要來學(xué)習(xí)計(jì)算機(jī)的虛擬端口丰泊。
2.注意要點(diǎn)
1.計(jì)算機(jī)用整數(shù)表示端口
2.一臺(tái)電腦有65536個(gè)端口 2^16次方個(gè)薯定,范圍是0-65535
3.一個(gè)端口只能同時(shí)被一個(gè)應(yīng)用程序使用
3.分類(擴(kuò)展)
1.周知端口
眾所周知的端口,范圍0-1023被系統(tǒng)服務(wù)占用瞳购,不要隨便使用和修改
2.動(dòng)態(tài)端口
動(dòng)態(tài)端口的范圍是從49152到65535话侄。
之所以稱為動(dòng)態(tài)端口,是因?yàn)樗?一般不固定分配某種服務(wù)学赛,而是動(dòng)態(tài)分配年堆。
3.注冊(cè)端口
端口1024到49151,分配給用戶進(jìn)程或應(yīng)用程序盏浇。
這些進(jìn)程主要是用戶選擇安裝的一些應(yīng)用程序变丧,而不是已經(jīng)分配好了公認(rèn)端口的常用程序。
這些端口在沒有被服務(wù)器資源占用的時(shí)候绢掰,可以用用戶端動(dòng)態(tài)選用為源端口痒蓬。
4.套接字(socket)
1.定義
其實(shí)它是以個(gè)程序接口,它把復(fù)雜的TCP/IP協(xié)議族封裝為幾個(gè)簡(jiǎn)單的接口提供給應(yīng)用層調(diào)用滴劲,
實(shí)現(xiàn)程序在網(wǎng)絡(luò)中的通信攻晒。socket是計(jì)算機(jī)網(wǎng)絡(luò)通信的基本技術(shù)之一。
大多數(shù)基于網(wǎng)絡(luò)的軟件班挖,都是基于socket實(shí)現(xiàn)的鲁捏。
在通信開始之前,網(wǎng)絡(luò)應(yīng)用程序必須創(chuàng)建套接字萧芙。
可以將它比作電話的插孔给梅,電源的插座,沒有它將無法進(jìn)行通信双揪。
2.python中使用套接字
1.創(chuàng)建套接字
"""
創(chuàng)建socket
"""
from socket import * # 導(dǎo)入socket模塊
tcp_sock = socket(family=AF_INET, type=SOCK_STREAM)
upd_sock = socket(family=AF_INET, type=SOCK_DGRAM)
# family是地址族 默認(rèn)AF_INET type是指定TCP還是UDP
2.創(chuàng)建TCP服務(wù)器
1.創(chuàng)建socket
2.綁定端口
3.監(jiān)聽
4.接收連接
5.收發(fā)數(shù)據(jù)
6.循環(huán)4,5
作業(yè):
1.寫一個(gè)不斷接受(while True)用戶連接的服務(wù)端破喻,它的作用是把客戶端發(fā)來的數(shù)據(jù)原封不動(dòng)的返回。
- 寫一個(gè)客戶端來測(cè)試上面的服務(wù)端
!/usr/bin/env python
-- coding:utf-8 --
Author:Jarry
import socket
tcp_server =socket.socket() #創(chuàng)建socket連接
tcp_server.bind(('',8881)) #綁定ip 端口
tcp_server.listen(5) #tcp 服務(wù)器 最大連接數(shù)5
while 1:
conn ,addr = tcp_server.accept() #接收 客戶端連接
while 1: #不停的接收 客房 端 傳來的數(shù)據(jù)
data = conn.recv(1024).decode('utf-8') #接收連接 傳過來 的數(shù)據(jù) byte類型
if data == 'q': # 如果是q 停止連接.
break
print(f'接收到來自{addr[0]}的信息:{data}') #服務(wù)器 顯示 接收信息
conn.send('服務(wù)器的回復(fù)來了'.encode()) #發(fā)送給客戶端的反饋
conn.close() #釋放 連接
tcp_server.close() #釋放接口
break
!/usr/bin/env python
-- coding:utf-8 --
Author:Jarry
import socket
client = socket.socket()
client.connect(('192.168.95.128', 8881)) #連接到服務(wù)器
while 1:
data = input('>>>>:')
client.send(f'{data}'.encode()) #發(fā)送信息
data =client.recv(1024) #接收服務(wù)器返回的信息
print(data.decode())
if data =='q': #發(fā)送結(jié)果信息 關(guān)閉連接
break
client.close()