網絡編程初始

一:通訊的由來:瀏覽器

 

若是有a,b兩個py文件,分別運行能夠,可是想要傳遞個數據怎麼作呢?服務器

其實很簡單的啊,直接寫一個文件,把傳遞數據寫一個文件不就好了,而後在b文件讀。網絡

若是是a和b文件在不一樣電腦上怎麼辦?架構

這就要用到通訊啦。tcp

 

二:軟件開發的架構函數

 

1:百度網盤,優酷,王者榮耀,吃雞等這一類都是應用類,須要安裝的桌面應用。spa

2:百度,知乎,博客園只需在瀏覽器就能夠訪問的應用程序。操作系統

這兩個程序的本質就是兩個程序在通訊,而這兩個程序分別對應兩個軟件開發的架構。.net

第一種:server

C/S架構: Client與Server ,中文意思:客戶端與服務器端架構,這種架構也是從用戶層面(也能夠是物理層面)來劃分的。

這裏的客戶端通常是指:客戶須要安裝應用程序EXE,須要先安裝而後到桌面運行。對客戶電腦操做系統環境依賴較大。

第二種:

B/S架構:browser和server:也就是瀏覽器端與服務器端架構,這是在用戶層次區分的。

 

Browser瀏覽器,其實也是一種Client客戶端,只是這個客戶端不須要你們去安裝什麼應用程序,只需在瀏覽器上經過HTTP請求服務器端相關的資源(網頁資源),客戶端Browser瀏覽器就能進行增刪改查。

 

 

三:網絡基礎

一個程序如何在電腦上找到另外一程序?

經過ip地址精確到具體的一個電腦,而後在經過端口鎖定具體程序。

1 什麼是ip地址?

IP地址是指互聯網協議地址(英語:Internet Protocol Address,又譯爲網際協議地址),是IP Address的縮寫。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)。







2 什麼是端口?

"端口"是英文port的意譯,能夠認爲是設備與外界通信交流的出口。 

 常見端口: (常見端口連接方式:http://blog.csdn.net/garfielder007/article/details/5387198/  /// http://blog.csdn.net/tanga842428/article/details/52445050

 

3 osi七層模型 

   若是你想和別人一塊兒玩王者榮耀擴折吃雞怎麼辦呢?

第一:固然是上網啦。具體說是上互聯網。

須知一個完整的計算機系統是由硬件、操做系統、應用軟件三者組成,具有了這三個條件,一臺計算機系統就能夠本身跟本身玩了(打個單機遊戲,玩個掃雷啥的)

若是你要跟別人一塊兒玩,那你就須要上網了,什麼是互聯網?

互聯網的核心就是由一堆協議組成,協議就是標準,好比全世界人通訊的標準是英語,若是把計算機比做人,互聯網協議就是計算機界的英語。全部的計算機都學會了互聯網協議,那全部的計算機都就能夠按照統一的標準去收發信息從而完成通訊了。

 

人們按照分工不一樣吧互聯網協議從邏輯上劃分了等級

 

 

 怎麼理解呢?

 

 

怎麼理解四層?

 

三次握手和四次揮手

 

 

 

 

tcp協議:

 

  當應用程序但願經過 TCP 與另外一個應用程序通訊時,它會發送一個通訊請求。這個請求必須被送到一個確切的地址。在雙方「握手」以後,TCP 將在兩個應用程序之間創建一個全雙工 (full-duplex) 的通訊。

  這個全雙工的通訊將佔用兩個計算機之間的通訊線路,直到它被一方或雙方關閉爲止。

 

#TCP是因特網中的傳輸層協議,使用三次握手協議創建鏈接。當主動方發出SYN鏈接請求後,等待對方回答SYN+ACK[1],並最終對對方的 SYN 執行 ACK 確認。這種創建鏈接的方法能夠防止產生錯誤的鏈接。[1] 
#TCP三次握手的過程以下:
#客戶端發送SYN(SEQ=x)報文給服務器端,進入SYN_SEND狀態。
#服務器端收到SYN報文,迴應一個SYN (SEQ=y)ACK(ACK=x+1)報文,進入SYN_RECV狀態。
#客戶端收到服務器端的SYN報文,迴應一個ACK(ACK=y+1)報文,進入Established狀態。
#三次握手完成,TCP客戶端和服務器端成功地創建鏈接,能夠開始傳輸數據了。

 

#創建一個鏈接須要三次握手,而終止一個鏈接要通過四次握手,這是由TCP的半關閉(half-close)形成的。
#(1) 某個應用進程首先調用close,稱該端執行「主動關閉」(active close)。該端的TCP因而發送一個FIN分節,表示數據發送完畢。
#(2) 接收到這個FIN的對端執行 「被動關閉」(passive close),這個FIN由TCP確認。
#注意:FIN的接收也做爲一個文件結束符(end-of-file)傳遞給接收端應用進程,放在已排隊等候該應用進程接收的任何其餘數據以後,
      由於,FIN的接收意味着接收端應用進程在相應鏈接上再無額外數據可接收。
#(3) 一段時間後,接收到這個文件結束符的應用進程將調用close關閉它的套接字。這致使它的TCP也發送一個FIN。
#(4) 接收這個最終FIN的原發送端TCP(即執行主動關閉的那一端)確認這個FIN。[1] 
#既然每一個方向都須要一個FIN和一個ACK,所以一般須要4個分節。
#注意:
#(1) 「一般」是指,某些狀況下,步驟1的FIN隨數據一塊兒發送,另外,步驟2和步驟3發送的分節都出自執行被動關閉那一端,有可能被合併成一個分節。[2] 
#(2) 在步驟2與步驟3之間,從執行被動關閉一端到執行主動關閉一端流動數據是可能的,這稱爲「半關閉」(half-close)。
#(3) 當一個Unix進程不管自願地(調用exit或從main函數返回)仍是非自願地(收到一個終止本進程的信號)終止時,全部打開的描述符都被關閉,這也致使仍然打開的任何TCP鏈接上也發出一個FIN。
#不管是客戶仍是服務器,任何一端均可以執行主動關閉。一般狀況是,客戶執行主動關閉,可是某些協議,例如,HTTP/1.0卻由服務器執行主動關閉。[2]

 

UDP協議

  當應用程序但願經過UDP與一個應用程序通訊時,傳輸數據以前源端和終端不創建鏈接。

  當它想傳送時就簡單地去抓取來自應用程序的數據,並儘量快地把它扔到網絡上。

tcp和udp的對比

TCP---傳輸控制協議,提供的是面向鏈接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間創建一個TCP鏈接,以後才能傳輸數據。TCP提供超時重發,丟棄重複數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另外一端。 
UDP---用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,可是並不能保證它們能到達目的地。因爲UDP在傳輸數據報前不用在客戶和服務器之間創建一個鏈接,且沒有超時重發等機制,故而傳輸速度很快。

#如今Internet上流行的協議是TCP/IP協議,該協議中對低於1024的端口都有確切的定義,他們對應着Internet上一些常見的服務。這些常見的服務能夠分爲使用TCP端口(面向鏈接)和使用UDP端口(面向無鏈接)兩種。 
#說到TCP和UDP,首先要明白「鏈接」和「無鏈接」的含義,他們的關係能夠用一個形象地比喻來講明,就是打電話和寫信。兩我的若是要通話,首先要創建鏈接——即打電話時的撥號
等待響應後——即接聽電話後,才能相互傳遞信息,最後還要斷開鏈接——即掛電話。寫信就比較簡單了,填寫好收信人的地址後將信投入郵筒,收信人就能夠收到了。從這個分析能夠看出,創建鏈接能夠在須要痛心地雙方創建一個傳遞信息的通道,
在發送方發送請求鏈接信息接收方響應後,
因爲是在接受方響應後纔開始傳遞信息,並且是在一個通道中傳送,所以接受方能比較完整地收到發送方發出的信息,即信息傳遞的可靠性比較高。但也正由於須要創建鏈接,
使資源開銷加大(在創建鏈接前必須等待接受方響應,傳輸信息過程當中必須確認信息是否傳到及斷開鏈接時發出相應的信號等),獨佔一個通道,在斷開鏈接錢不能創建另外一個鏈接,即兩人在通話過程當中第三方不能打入電話。而無鏈接是一開始就發送信息(嚴格說來,這是沒有開始、結束的),只是一次性的傳遞,是先不須要接受方的響應,於是在必定程度上也沒法保證信息傳遞的可靠性了,就像寫信同樣,咱們只是將信寄出去,卻不能保證收信人必定能夠收到。 
#TCP是面向鏈接的,有比較高的可靠性, 一些要求比較高的服務通常使用這個協議,如#FTP、Telnet、SMTP、HTTP、POP3等。
#而UDP是面向無鏈接的,使用這個協議的常見服務有DNS、SNMP、QQ等。對於QQ必須另外說明一下,QQ2003之前是隻使用UDP協議的,其服務器使用8000端口,偵聽是否有信息傳來,客戶端使用4000端口,向外發送信息(這也就不難理解在通常的顯IP的QQ版本中顯示好友的IP地址信息中端口常爲4000或其後續端口的緣由了),即QQ程序既接受服務又提供服務,在之後的QQ版本中也支持使用TCP協議了。

 圖解以下:

相關文章
相關標籤/搜索