網絡編程: 學習網絡編程 爲何?目的: 服務端特色:網絡通信(通訊)什麼是網絡通信?爲何?目的:網絡創建的目的是爲數據交互(通訊)如何實現通信(通訊)?互聯網協議互聯網=物理鏈接介質+互聯網協議互聯網協議:(open system interconnection)什麼是互聯網協議? OSI七層協議/tcp/ip五層應表會 傳 網 數 物MAC地址ipportip+macip+port網頁地址解析什麼是網絡編程?socket套接字什麼是socket:socket中用戶最關心的是TCP和UDP TCP: 協議: 傳輸方式: 優勢: 缺點: 使用場景: 套接字type參數: 同時鏈接客戶端數量: UDP : 協議: 傳輸方式: 缺點: 優勢: 使用場景: 套接字type參數: 同時鏈接客戶端數量:TCP VS UDP 可靠性:TCP:TCP三次握手建鏈接,四次揮手斷鏈接TCP目的洪水攻擊TCP template半鏈接池,工做原理服務端須要遵循的原則粘包問題引發粘包的TCP特色自定義報頭TCP 遠程執行CMD(粘包的解決方法)UDP:UDP template============================================================網絡編程:1 學習網絡編程 其實就是在學socket套接字 ***** 爲何?目的:編寫一個C/S架構的軟件, 二者基於網絡通訊 爲了使程序可以分佈在不一樣的計算上 C/S: Client--------基於網絡----------Server B/S: Browser-------基於網絡----------Server 服務端特色: 一、不間斷地提供服務 二、服務端要支持併發+高性能2 網絡通信(通訊)什麼是網絡通信?***** 在不一樣的計算機上 一個安裝客戶端 另外一安裝服務端 經過網絡來通信爲何?目的:網絡創建的目的是爲數據交互(通訊)如何實現通信(通訊)? 1.創建好底層的物理鏈接介質 (網線,WIFI,光纖)---網絡工程師關注 2.通信協議(必須遵循相同的標準)---應用軟件開發者 關注 (比做在中國就像是講普通話,全世界就像是講英語)3 互聯網協議互聯網=物理鏈接介質+互聯網協議互聯網協議:(open system interconnection)什麼是互聯網協議? 比做 是計算機界的英語 OSI七層協議 ** tcp/ip五層 應 (表 會) 傳 網 數 物 應用 應用軟件,自定義協議,須要雙方程序員商量(報頭) 應用層(表示層和會員層都屬於應用層) 瀏覽器協議(HTTP FTP..) 表示 會話 傳輸 -TCP/UDP-基礎port端口工做的協議 傳輸層 網絡 -ip協議 (IP(DHCP分配),子網掩碼) 網絡層 1.用來定義數據傳輸格式 2.定位一個局域網 3.定位一臺主機 數據鏈路層-以太網協議Ethernet(基於mac地址)-報頭(信封)和真實數據 數據鏈路層 物理層-發送電信號(二進制數10101 ) 物理層 傳輸層 TCP/UDP TCP 傳輸是可靠的 傳輸前須要三次握手確認 傳輸過程當中須要返回確認 效率較低 UDP 不可靠傳輸 沒有三次握手 也沒有確認信息 僅僅傳輸數據 不關心接收方是否收到 使用socket接口完成TCP 和UDP以太網協議 規定 一個計算比須要一個網卡,一個網卡對應1個MAC地址,MAC能夠標識 惟一一臺計算機 古老的廣播式的通訊ip 能夠標識 在局域網內找到一臺計算機ip+mac能夠標識 全世界範圍內獨一無二的 一臺計算機的位置 (通訊的時候,必定要獲取對方的IP地址,拿到ip後,ARP協議自動將IP解析成MACport能夠標識 一臺計算機之上惟一的 一個基於網絡通訊的 應用軟件4 *****如何標識全世界範圍內獨一無二的一個socket程序(基於網絡通訊的 一個應用軟件) ip+(mac)+port網頁地址解析 就是域名 ,將域名給到 DNS服務器(域名服務器) (基於UPD協議)解析成IP,(DNS默認端口53) 對應有ip 和端口port,到這臺機器上拿到路徑裏的文件 DNS 全球共13臺根服務器,最大有效傳輸512字節網頁: https:// www.cnblogs.com:80 /linhaifeng/p/7278389.html 應用層協議 域名+端口 (先把域名交給dns解析成IP地址) 路徑 邏輯層面建好雙向通路(TCP三次握手) ==>給應用層按http協議傳輸數據,封包後交給傳輸層,給對方,再按這條線返回 (物理層 實際上在傳輸層後還有網絡層,數據鏈路層,物理層)5 socket套接字(*****)什麼是socket: 學習網絡編程 其實就是在學socket socket套接字是位於應用層與傳輸層之間的一個抽象接口層 是一個在傳輸層上封裝好的模塊!(是對底層的 TCP UDP IP ethernet協議進行封裝) 要完成網絡通信,只須要調用socket的接口或者說按照socket的標準編寫程序,寫出的程序天然是遵循tcp/ip協議 (比做 打電話時電話機的接口 服務端:買電話 插電話卡 等電話鏈接 收發消息 掛電話 關機 客戶端:買電話 撥電話 收發消息 掛電話) python中使用socket的時候用戶須要關心的是 ip地址,port端口, 傳輸協議TCP/UDP,你要發送的數據dataTCP和UDP是傳輸層最多見的協議(*****) 主要控制傳輸數據的方式 TCP 傳輸方式:要創建鏈接(流式協議:像水流同樣源源不斷的發過去) (數據量比較小,時間間隔較短的不會發過去,等下一次一塊兒) 優勢: 可靠協議,能夠保證數據的完整性 經過三次握手來與服務器創建鏈接 (好比 a機器給b機器發送數據包 要求b機器必須當即返回一個確認包 在對方確認後纔會中本身的操做系統緩存清除這個數據包 a機器會等待一段時間,若是超時尚未收到確認,則重發數據) 缺點: 傳輸效率比UDP低 使用場景: 文字聊天,支付寶轉帳等 套接字type參數:SOCK_STREAM 同時鏈接客戶端數量:1個 UDP : 傳輸方式: 不須要創建鏈接,直接發送, 數據報協議 優勢: 發送效率高,但有效傳輸的數據量最多爲500bytes 缺點: 不可靠:發送數據,無需對確認,容易丟包 發一條數據無需收到對方的確認消息,會馬上從本身的操做系統緩存中清除該條消息 使用場景: 視頻通話,語音通話等 套接字type參數:SOCK_DGRAM 同時鏈接客戶端數量: 能夠同時處理多個客戶端 是由於CPU處理速度快 給人感受像是同時處理TCP VS UDP 可靠性: TCP可靠 是由於發送數據後必須收到確認包TCP 三次握手建鏈接,四次揮手斷鏈接 兩條雙向管道: C===>S 發消息管道 S===>C 收消息管道 (比做 雙11購物 一管道傳商品金額 另外一管道傳購物狀態信息) 三次握手: (syn,seq,ack,fin都是標誌位,表明不一樣含義) c(客戶端)----syn=1(請求連接) seq=x(序列號)--->s(服務端) s----ack=1+x syn=1(請求連接) seq=y(序列號)--->c (確認請求,並在原來序列號基礎上+1) c----ack=1+y------->s tcp創建的是一個雙向鏈接 c------------------>s c<-----------------s 四次揮手:一般是服務端先有斷連接請求,節約資源 s------fin=1(斷連接請求)seq=x+2---------->c c------>ack=3+x(確認請求)--------->s c------>fin=1,seq=y+2--------->s 不能和上一條合併是由於S-C數據可能還沒傳完 s------>ack=3+y--------->c一、TCP 目的是創建雙向通路 傳輸數據可靠 ((好人協議)客戶端發包(發請求)後,服務端必定會響應 發出確認信息) 洪水攻擊 黑客模擬大量的客戶端發請求,讓服務端響應,虛擬的客戶端 服務端沒法識別 形成大量資源佔用 syn_send大量涌現(公司有預謀的發起) 解決方案:增長帶寬