day18_python_網(wǎng)絡(luò)基礎(chǔ)

1.在網(wǎng)絡(luò)邊界會(huì)對(duì)數(shù)據(jù)進(jìn)行ip地址檢測(cè),如果不是局域網(wǎng)的ip,那么路由器或者交換機(jī)就會(huì)把數(shù)據(jù)傳出局域網(wǎng)

(date 源ip,目標(biāo)ip,自己的mac地址市框,下一個(gè)的mac地址)通過不斷修改mac地址,從而做到網(wǎng)絡(luò)傳輸

2.osi七層參考模型

應(yīng)用層:所有能產(chǎn)生網(wǎng)絡(luò)流量的程序
表示層:數(shù)據(jù)傳輸前的壓縮锨能、加密荒适、確定編碼方式等操作
會(huì)話層:查看木馬(netstat -nb)(只需要網(wǎng)絡(luò)請(qǐng)求,就必定會(huì)產(chǎn)生會(huì)話)
傳輸層:可靠傳輸突想、不可靠傳輸、流量控制
網(wǎng)絡(luò)層:負(fù)責(zé)最佳路徑究抓,規(guī)劃ip地址
數(shù)據(jù)鏈路層:幀的開始和結(jié)尾猾担、透明傳輸、差錯(cuò)校驗(yàn)
物理層:接口標(biāo)準(zhǔn)刺下、電器標(biāo)準(zhǔn)

3.tcp/ip協(xié)議棧(簇)

應(yīng)用層 http绑嘹、ftp、dns
傳輸層 tcp(可靠傳輸)橘茉、udp(不可靠傳輸)
網(wǎng)絡(luò)層 arp,ip,icmp,igmp

數(shù)據(jù)鏈路層
物理層 Ethernet工腋、ATM、FramReplay

4.數(shù)據(jù)封裝

應(yīng)用層
表示層
會(huì)話層 上層數(shù)據(jù)
傳輸層 TCP頭+上層數(shù)據(jù)
網(wǎng)絡(luò)層 IP頭+[tcp頭+上層數(shù)據(jù)] 數(shù)據(jù)包
數(shù)據(jù)鏈路層 MAC頭+[ip+tcp+上層數(shù)據(jù)]+[FCS] 數(shù)據(jù)幀
物理層 000101010101001 Bit

5.數(shù)據(jù)解封裝

應(yīng)用層
表示層 上層數(shù)據(jù)
會(huì)話層 上層數(shù)據(jù),去掉tcp頭
網(wǎng)絡(luò)層 tcp+上層數(shù)據(jù)畅卓,去掉ip頭
數(shù)據(jù)鏈路層 [ip+tcp+上層數(shù)據(jù)],去掉mac頭
物理層 010101001

6.tcp/udp協(xié)議

tcp協(xié)議:傳輸控制協(xié)議擅腰,建立會(huì)話,流量控制,三次握手翁潘,四次揮手
1.客戶端進(jìn)程發(fā)出連接釋放報(bào)文趁冈,并且停止發(fā)送數(shù)據(jù)。釋放數(shù)據(jù)報(bào)文首部,F(xiàn)IN=1渗勘,其序列號(hào)為seq=u(等于前面已經(jīng)傳送過來的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1)沐绒,
此時(shí),客戶端進(jìn)入FIN-WAIT-1(終止等待1)狀態(tài)旺坠。 TCP規(guī)定乔遮,F(xiàn)IN報(bào)文段即使不攜帶數(shù)據(jù),也要消耗一個(gè)序號(hào)价淌。

2.服務(wù)器收到連接釋放報(bào)文申眼,發(fā)出確認(rèn)報(bào)文,ACK=1蝉衣,ack=u+1,并且?guī)献约旱男蛄刑?hào)seq=v巷蚪,此時(shí)病毡,服務(wù)端就進(jìn)入了CLOSE-WAIT(關(guān)閉等待)狀態(tài)。
TCP服務(wù)器通知高層的應(yīng)用進(jìn)程屁柏,客戶端向服務(wù)器的方向就釋放了啦膜,這時(shí)候處于半關(guān)閉狀態(tài),即客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了淌喻,但是服務(wù)器若發(fā)送數(shù)據(jù)僧家,
客戶端依然要接受。這個(gè)狀態(tài)還要持續(xù)一段時(shí)間裸删,也就是整個(gè)CLOSE-WAIT狀態(tài)持續(xù)的時(shí)間八拱。
3.客戶端收到服務(wù)器的確認(rèn)請(qǐng)求后,此時(shí)涯塔,客戶端就進(jìn)入FIN-WAIT-2(終止等待2)狀態(tài)肌稻,
等待服務(wù)器發(fā)送連接釋放報(bào)文(在這之前還需要接受服務(wù)器發(fā)送的最后的數(shù)據(jù))。
4.服務(wù)器將最后的數(shù)據(jù)發(fā)送完畢后匕荸,就向客戶端發(fā)送連接釋放報(bào)文爹谭,F(xiàn)IN=1,ack=u+1榛搔,由于在半關(guān)閉狀態(tài)诺凡,
服務(wù)器很可能又發(fā)送了一些數(shù)據(jù),假定此時(shí)的序列號(hào)為seq=w践惑,
此時(shí)腹泌,服務(wù)器就進(jìn)入了LAST-ACK(最后確認(rèn))狀態(tài),等待客戶端的確認(rèn)童本。
5.客戶端收到服務(wù)器的連接釋放報(bào)文后真屯,必須發(fā)出確認(rèn),ACK=1穷娱,ack=w+1绑蔫,
而自己的序列號(hào)是seq=u+1运沦,此時(shí),客戶端就進(jìn)入了TIME-WAIT(時(shí)間等待)
狀態(tài)配深。注意此時(shí)TCP連接還沒有釋放携添,必須經(jīng)過2?MSL(最長(zhǎng)報(bào)文段壽命)的時(shí)間后,當(dāng)客戶端撤銷相應(yīng)的TCB后篓叶,
才進(jìn)入CLOSED狀態(tài)烈掠。
6.服務(wù)器只要收到了客戶端發(fā)出的確認(rèn),立即進(jìn)入CLOSED狀態(tài)缸托。同樣左敌,撤銷TCB后,
就結(jié)束了這次的TCP連接俐镐〗孟蓿可以看到,服務(wù)器結(jié)束TCP連接的時(shí)間要比客戶端早一些佩抹。
udp:用戶數(shù)據(jù)報(bào)協(xié)議叼风,不可靠傳輸,不建立會(huì)話棍苹,沒有流量控制

文件分段傳輸无宿,可以使用容器把每一段裝起來,傳輸完成在寫入硬盤中

7.url:統(tǒng)一資源定位符

url基本格式:協(xié)議://主機(jī)地址/路徑1

8.url中常見的協(xié)議

http:超文本傳輸協(xié)議枢里,訪問的是遠(yuǎn)程的網(wǎng)絡(luò)資源,規(guī)定客戶端和服務(wù)器之間的數(shù)據(jù)傳輸格式
file:訪問的是本地計(jì)算機(jī)的資源,格式是:file://
mailto:訪問的是電子郵件地址孽鸡,格式是mailto:
ftp:文件傳輸協(xié)議,格式是ftp://

http協(xié)議的特點(diǎn):
簡(jiǎn)單快速
http協(xié)議簡(jiǎn)單,http服務(wù)器規(guī)模小

靈活
http允許傳輸各種各樣的數(shù)據(jù)

http0.9和1.0使用的非持續(xù)連接
HTTP協(xié)議的基本通信過程
1.請(qǐng)求request
請(qǐng)求頭:包含了對(duì)客戶端環(huán)境的描述坡垫,客戶端請(qǐng)求信息等
GET /minion.png HTTP/1.1 //包含了請(qǐng)求方法梭灿、請(qǐng)求資源路徑,http協(xié)議版本
Host:120.25.226.186:32812 //客戶端想要訪問的主機(jī)地址
User-Agent:Mozilla/5.0 //客戶端的類型冰悠,客戶端的軟件環(huán)境
Accept:text/html,/ //客戶端能接受到的數(shù)據(jù)類型
Accept_language:zh-cn //客戶端的語言環(huán)境
Accept-Encoding:gzip //客戶端支持的數(shù)據(jù)壓縮格式

請(qǐng)求體:要傳輸?shù)臄?shù)據(jù)
2.響應(yīng)response
響應(yīng)頭:包含了對(duì)服務(wù)的描述堡妒,對(duì)返回?cái)?shù)據(jù)的描述
HTTP/1.1 200 OK //包含了HTTP協(xié)議版本、狀態(tài)碼溉卓、狀態(tài)英文
Server:Apache-Coyote/1.1 服務(wù)器類型
Content-Type: 返回的數(shù)據(jù)類型
Content-length: 返回的數(shù)據(jù)長(zhǎng)度
Data: 響應(yīng)的時(shí)間
響應(yīng)體:響應(yīng)的具體的數(shù)據(jù)

http請(qǐng)求的方法
GET,POST皮迟,OPTIONS,HEAD,PUT桑寨,DELETE,TRACE,CONNECT,PATCH

get:在請(qǐng)求的url后面加上?將數(shù)據(jù)拼接到url上,url大小不能超過1KB
post:沒限制

9.socket套接字服務(wù)端

# socket:套接字伏尼,就是進(jìn)行數(shù)據(jù)通信的兩端。分為服務(wù)端套接字和客戶端套接字
# 套接字編程:自己寫服務(wù)器或者客戶端尉尾,進(jìn)行數(shù)據(jù)傳輸
# python對(duì)socket套接字的支持:提供了一個(gè)socket的庫(內(nèi)置)

import socket

def create_server():
    '''
    寫服務(wù)器套接字
    '''
#     1.創(chuàng)建套接字對(duì)象
    '''
    socket(family=socket.AF_INET,type=socket.SOCK_STRING)
    family:是用來確定ip協(xié)議類型的爆阶,
        AF_INET對(duì)應(yīng)的是ipv4 (默認(rèn))
        AF_INET6對(duì)應(yīng)的是ipv6
    type:傳輸協(xié)議的類型
        SOCK_STRING:對(duì)應(yīng)的是TCP協(xié)議 (默認(rèn))
        SOCK_DGRAM:對(duì)應(yīng)的是UDP協(xié)議
    '''
    server =  socket.socket()
    #2.需要綁定ip地址和端口
    '''
    bind((ip地址,端口))
        端口:一臺(tái)電腦上一個(gè)端口標(biāo)記一個(gè)唯一的服務(wù)。范圍0-65535,,0~1024是著名端口辨图,專門用來標(biāo)記一些特殊服務(wù)班套,一般不要用
        注意:通一個(gè)端口,同一時(shí)間只能綁定一個(gè)服務(wù)
    '''
    server.bind(('10.7.153.191',8080))
    
    #3.監(jiān)聽(監(jiān)聽客戶端的請(qǐng)求)
    '''
    listen(并發(fā)連接最大個(gè)數(shù))
    '''
    server.listen(5)
    #4.讓服務(wù)器處于運(yùn)行狀態(tài)

        #5.連接客戶端(建立連接),返回連接對(duì)象和客戶端地址
    connect,addr= server.accept()   #程序執(zhí)行到這兒會(huì)阻塞線程,直到有客戶端來請(qǐng)求當(dāng)前服務(wù)器為止
        
    #6.服務(wù)器給客戶端發(fā)生消息
    '''
    send(數(shù)據(jù))
    data:這兒的參數(shù)要求類型是bytes(python3)故河,python2可以傳送字符串
            字符串str和二進(jìn)制bytes之間的轉(zhuǎn)換
     1.字符串提供的方法
                符串.encode('編碼方式'),默認(rèn)編碼是utf-8
                2.類型名()
                bytes(字符串,encoding=None)
        '''
        
    while True:
        message = bytes(input('server:'),'utf-8')
        connect.send(message)
        #7.接受從客戶端傳過來的消息
        '''
        recv(bufsize)
        bufsize:每次能夠接收的最大的字節(jié)數(shù)
                    返回值:接收到的數(shù)據(jù),類型是bytes類型
                    
                    二進(jìn)制轉(zhuǎn)換成字符串:
                    1.二進(jìn)制.decode(編碼方式)方法,默認(rèn)utf-8
                    2.str(二進(jìn)制,編碼方式),編碼方式必須書寫
        '''
        recv_data = connect.recv(1024)#recv()方法也會(huì)阻塞線程
        print('client:'+str(recv_data,'utf-8'))
        
        #8.斷開連接
    connect.close()
        
if __name__ == '__main__':
    create_server()

10.socket套接字客戶端

import socket
def create_client():
    #1.創(chuàng)建套接字對(duì)象
    client = socket.socket()
    #2.連接服務(wù)器
    '''
    connect(('10.7.153.191',8080))
         服務(wù)器地址:(ip,端口)
    '''
    client.connect(('10.7.153.104',8080))
    while True:
       
        #3.接收服務(wù)器發(fā)送的數(shù)據(jù)
        recv_data = client.recv(1024)
        print('server:'+recv_data.decode())
        #4.給服務(wù)器發(fā)送消息
        message =bytes(input('client:'),'utf-8')
        client.send(message)
        if message == 0:
            break
    
    #5.端口連接
    client.close()
if __name__ == '__main__':
    create_client()

11.request請(qǐng)求與響應(yīng)

import requests
 

if __name__ == '__main__':
#     1.準(zhǔn)備url
    url = 'https://www.apiopen.top/satinApi?type=1&page=1'
#     2.發(fā)送請(qǐng)求(GET請(qǐng)求)吱韭,返回值就是服務(wù)器返回的響應(yīng)
    '''
    post(url,{參數(shù)對(duì)應(yīng)的字典})
    get(url,{參數(shù)對(duì)應(yīng)的字典})
    '''
    response = requests.get(url)
    
#     requests.get('https://www.apiopen.top/satinApi',{'type':1,'page':1})
    #3.通過響應(yīng)獲取服務(wù)器返回的數(shù)據(jù)
    #a.獲取字符串類型的數(shù)據(jù)
    print(response.text)
    #b.獲取json格式的數(shù)據(jù)
    print(response.json())
    #c.獲取二進(jìn)制格式的數(shù)據(jù)
    print(response.content)
    
    #4.獲取響應(yīng)頭
    print(response.headers)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鱼的,隨后出現(xiàn)的幾起案子理盆,更是在濱河造成了極大的恐慌,老刑警劉巖凑阶,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猿规,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡晌砾,警方通過查閱死者的電腦和手機(jī)坎拐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來养匈,“玉大人,你說我怎么就攤上這事都伪∨缓酰” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵陨晶,是天一觀的道長(zhǎng)猬仁。 經(jīng)常有香客問我,道長(zhǎng)先誉,這世上最難降的妖魔是什么湿刽? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮褐耳,結(jié)果婚禮上诈闺,老公的妹妹穿的比我還像新娘。我一直安慰自己铃芦,他們只是感情好雅镊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刃滓,像睡著了一般仁烹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咧虎,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天卓缰,我揣著相機(jī)與錄音,去河邊找鬼。 笑死征唬,一個(gè)胖子當(dāng)著我的面吹牛捌显,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鳍鸵,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼苇瓣,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了偿乖?” 一聲冷哼從身側(cè)響起击罪,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贪薪,沒想到半個(gè)月后媳禁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡画切,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年竣稽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霍弹。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毫别,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出典格,到底是詐尸還是另有隱情岛宦,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布耍缴,位于F島的核電站砾肺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏防嗡。R本人自食惡果不足惜变汪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚁趁。 院中可真熱鬧裙盾,春花似錦、人聲如沸荣德。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涮瞻。三九已至鲤拿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間署咽,已是汗流浹背近顷。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工生音, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窒升。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓缀遍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親饱须。 傳聞我的和親對(duì)象是個(gè)殘疾皇子域醇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1、TCP為什么需要3次握手蓉媳,4次斷開譬挚? “三次握手”的目的是“為了防止已失效的連接請(qǐng)求報(bào)文段突然又傳送到了服務(wù)端...
    杰倫哎呦哎呦閱讀 3,478評(píng)論 0 6
  • 1.這篇文章不是本人原創(chuàng)的,只是個(gè)人為了對(duì)這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的酪呻,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,063評(píng)論 6 174
  • title: 網(wǎng)絡(luò)基礎(chǔ)學(xué)習(xí)總結(jié)(1) tags: 網(wǎng)絡(luò) categories:筆記 date: 2017-06-1...
    行徑行閱讀 2,518評(píng)論 0 3
  • 當(dāng) app 和服務(wù)器進(jìn)行通信的時(shí)候玩荠,大多數(shù)情況下漆腌,都是采用 HTTP 協(xié)議。HTTP 最初是為 web 瀏覽器而定...
    Flysss1219閱讀 1,267評(píng)論 0 4
  • 個(gè)人認(rèn)為阶冈,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記闷尿,這雖然只是...
    貳零壹柒_fc10閱讀 5,054評(píng)論 0 8