socket簡介

網絡這塊越瞭解感受知道的越少,因此學習仍是要繼續,,,,,,程序員

Socket編程

0.幾個名詞:設計模式

       IPC—>Inter Process Communication,進程間通訊瀏覽器

       socket —> 套接字安全

       TCP—>Transmission Control Protocol傳輸控制協議,服務器

              提供的是面向鏈接、可靠的字節流服務。客戶和服務器彼此交換數據前,必須先在雙方之間創建一個TCP鏈接,以後才能傳輸數據。TCP提供超時重發,丟棄重複數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另外一端。cookie

              注意點:TCP協議又稱爲 「三次握手協議」;網絡

              創建起一個TCP鏈接須要通過「三次握手」:session

              第一次握手:客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;併發

              第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

              第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手

       UDP:—>User Datagram Protocol,用戶數據報協議

              是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,可是並不能保證它們能到達目的地。因爲UDP在傳輸數據報前不用在客戶和服務器之間創建一個鏈接,且沒有超時重發等機制,故而傳輸速度很快.

       TCP/IP—>傳輸控制協議/網間協議,

              定義了主機如何連入因特網及數據如何再它們之間傳輸的標準,這是一個協議族(不少的協議….)

              TCP/IP協議族包含了不少功能各異的子協議。TCP/IP層次模型共分爲四層:應用層、傳輸層、網絡層、數據鏈路層。(異於7層模型)

       IP—>Internet Protocol,網絡互連協議

              是能使鏈接到網上的全部計算機網絡實現相互通訊的一套規則,規定了計算機在因特網上進行通訊時應當遵照的規則。

       IP地址—>Internet Protocol Address,網際協議地址;電腦在網絡上的標識.

              靜態IP地址:固定不變的IP地址,須要用戶本身手動設置.

                 動態IP地址:經過DHCP協議自動生成的IP地址.

              子網掩碼:與IP地址配合使用判斷兩臺計算機是否位於同一個子網絡.

                     DNS服務器:能夠將域名(網址)轉換成IP地址.

          DHCP協議—>經過DHCP協議,用戶得到本機的動態IP地址,子網掩碼,網關,DNS服務器等.

                

       ARP協議—> Address Resolution Protocol,地址解析協議

              是根據IP地址獲取物理地址的一個TCP/IP協議;經過IP地址得到MAC地址.有了ARP協議,能夠獲得同一個子網絡內的主機MAC地址.就能夠把數據包發送到任意一臺主機.不一樣的子網絡之間: 若是兩臺主機不在同一個子網絡,沒法獲得對方的MAC地址,只能將數據包發送到兩個子網絡鏈接處的「網關」(gateway),讓網關去處理.

       MAC地址—> 網卡地址,網卡的惟一標識

       端口號—>傳輸層給每個使用網卡的應用程序一個編號,即「端口」號,區間0-65536

              能夠經過端口號找到對應的應用程序;

       HTTP鏈接—->HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),

       是Web聯網的基礎,也是手機聯網經常使用的協議之一,HTTP協議是創建在TCP協議之上的一種應用,HTTP鏈接最顯著的特色是客戶端發送的每次請求都須要服務器回送響應,在請求結束後,會主動釋放鏈接。從創建鏈接到關閉鏈接的過程稱爲「一次鏈接」。

       1)在HTTP 1.0中,客戶端的每次請求都要求創建一次單獨的鏈接,在處理完本次請求後,就自動釋放鏈接。

       2)在HTTP 1.1中則能夠在一次鏈接中處理多個請求,而且多個請求能夠重疊進行,不須要等待一個請求結束後再發送下一個請求。

       因爲HTTP在每次請求結束後都會主動釋放鏈接,所以HTTP鏈接是一種「短鏈接」,要保持客戶端程序的在線狀態,須要不斷地向服務器發起鏈接請求。一般的作法是即時不須要得到任何數據,客戶端也保持每隔一段固定的時間向服務器發送一次「保持鏈接」的請求,服務器在收到該請求後對客戶端進行回覆,代表知道客戶端「在線」。若服務器長時間沒法收到客戶端的請求,則認爲客戶端「下線」,若客戶端長時間沒法收到服務器的回覆,則認爲網絡已經斷開。

 

 

1.OSI 七層模型

由下至上

       物理層

              ①做用:鏈接計算機,負責傳送’0’和’1’的電信號

              ②典型設備:光纖,同軸電纜,雙絞線,等

       數據鏈路層

              ①做用:處理電信號,以太網協議(數據包)把數據分組。即把電信號轉化爲能夠在網絡中使用的二進制數據然後進行傳輸,在該層數據以幀爲處理單位.

              ②典型設備:網橋、交換機、中繼器等

       網絡層

              ①做用:找到網絡中的」惟一」的電腦,創建 主機(IP)—>主機(IP)的鏈接;

                 也但是看做是:基於網絡層地址(IP地址)進行不一樣網絡系統間的路徑選擇

              ②典型設備:路由器

              ③若是處於同一個子網絡,採用廣播的方式發送數據包.若是處於不一樣的子網絡,就採用「路由」的方式發送數據包.

       傳輸層

              ①做用:網絡層只能讓計算機接收和發送信息,可是並不知道要傳遞給哪個應用程序。傳輸層給每個使用網卡的應用程序一個編號,即「端口」號;0-65536;創建「端口/應用程序」到「端口/應用程序」之間的通訊。

              ②典型設備:終端設備(PC、手機、平板等)

              ③Socket           

                     Socket == 主機 + 端口 ;

                     最多見的socket編程就是:TCP/IP編程;

                     須要特別注意的是:socket只是一個通信模型,不屬於網絡七層協議.

                    

       會話層

              ①做用:爲了實現自動收發數據,自動尋址功能;引入了會話層.會話層的做用,就是創建和管理應用程序之間的通訊.會話層不參與具體的傳輸,它提供包括」訪問驗證」和」會話管理」在內的創建和維護應用之間通訊的機制。如服務器驗證用戶登陸即是由會話層完成的。

              ②典型設備:終端設備(PC、手機、平板等)

 

       表示層

              ①做用:解決不一樣系統之間的通訊問題,能夠看做一個」翻譯官」.

              ②典型設備:終端設備(PC、手機、平板等)

       應用層

              ①做用:規定了不一樣應用程序的數據格式.

              ②典型設備:終端設備(PC、手機、平板等)

              http協議:超文本傳輸協議

           file協議:文件傳輸協議

           mail協議:郵件協議

 

2.什麼是socket?.socket 是用來幹什麼的?

       兩個進程(程序)若是須要進行通信最基本的一個前提可以惟一標示一個進程,在本地進程通信中咱們可使用PID(progress ID)來惟一標示一個進程,但PID只在本地惟一,網絡中的兩個進程PID衝突概率很大,這時候咱們須要另闢它徑了,咱們知道IP層的ip地址能夠惟一標示主機,而TCP層協議和端口號能夠惟一標示主機的一個進程,這樣咱們能夠利用ip地址+協議+端口號惟一標示網絡中的一個進程。

       可以惟一標示網絡中的進程後,它們就能夠利用socket進行通訊了,什麼是socket呢?咱們常常把socket翻譯爲套接字,socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操做抽象爲幾個簡單的接口供應用層調用已實現進程在網絡中通訊。

 

3.Http與Socket鏈接究竟有什麼區別?

       TCP/IP是個協議組,可分爲三個層次:網絡層、傳輸層和應用層。在網絡層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。在傳輸層中有TCP協議與UDP協議。在應用層有FTP、HTTP、TELNET、SMTP、DNS等協議。所以,HTTP自己就是一個協議,是從Web服務器傳輸超文本到本地瀏覽器的傳送協議。IP協議對應於網層,TCP協議對應於傳輸層,而HTTP協議對應於應用層,三者從本質上來講沒有可比性。

       Socket是應用層與TCP/IP協議族通訊的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket接口後面,對用戶來講,一組簡單的接口就是所有,讓Socket去組織數據,以符合指定的協議。

      

四、SOCKET原理

4.1套接字(socket)概念

       套接字(socket)是通訊的基石,是支持TCP/IP協議的網絡通訊的基本操做單元。它是網絡通訊過程當中端點的抽象表示,包含進行網絡通訊必須的五種信息:鏈接使用的協議,本地主機的IP地址,本地進程的協議端口,遠地主機的IP地址,遠地進程的協議端口。

       應用層經過傳輸層進行數據通訊時,TCP會遇到同時爲多個應用程序進程提供併發服務的問題。多個TCP鏈接或多個應用程序進程可能須要經過同一個TCP協議端口傳輸數據。爲了區別不一樣的應用程序進程和鏈接,許多計算機操做系統爲應用程序與TCP/IP協議交互提供了套接字(Socket)接口。應用層能夠和傳輸層經過Socket接口,區分來自不一樣應用程序進程或網絡鏈接的通訊,實現數據傳輸的併發服務。

4.2 創建socket鏈接

       創建Socket鏈接至少須要一對套接字,其中一個運行於客戶端,稱爲ClientSocket ,另外一個運行於服務器端,稱爲ServerSocket 。

       套接字之間的鏈接過程分爲三個步驟:服務器監聽,客戶端請求,鏈接確認。

       服務器監聽:服務器端套接字並不定位具體的客戶端套接字,而是處於等待鏈接的狀態,實時監控網絡狀態,等待客戶端的鏈接請求。

       客戶端請求:指客戶端的套接字提出鏈接請求,要鏈接的目標是服務器端的套接字。爲此,客戶端的套接字必須首先描述它要鏈接的服務器的套接字,指出服務器端套接字的地址和端口號,而後就向服務器端套接字提出鏈接請求。

       鏈接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的鏈接請求時,就響應客戶端套接字的請求,創建一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式創建鏈接。而服務器端套接字繼續處於監聽狀態,繼續接收其餘客戶端套接字的鏈接請求。

 
   


      

      

五、SOCKET鏈接與TCP鏈接

       建立Socket鏈接時,能夠指定使用的傳輸層協議,Socket能夠支持不一樣的傳輸層協議(TCP或UDP),當使用TCP協議進行鏈接時,該Socket鏈接就是一個TCP鏈接。

六、Socket鏈接與HTTP鏈接

       咱們在傳輸數據時,能夠只使用(傳輸層)TCP/IP協議,可是那樣的話,若是沒有應用層,便沒法識別數據內容,若是想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有不少,好比HTTP、FTP、TELNET等,也能夠本身定義應用層協議。WEB使用HTTP協議做應用層協議,以封裝HTTP文本信息,而後使用TCP/IP作傳輸層協議將它發到網絡上。

       因爲一般狀況下Socket鏈接就是TCP鏈接,所以Socket鏈接一旦創建,通訊雙方便可開始相互發送數據內容,直到雙方鏈接斷開。但在實際網絡應用中,客戶端到服務器之間的通訊每每須要穿越多箇中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的鏈接而致使Socket鏈接斷連,所以須要經過輪詢告訴網絡,該鏈接處於活躍狀態。而HTTP鏈接使用的是「請求—響應」的方式,不只在請求時須要先創建鏈接,並且須要客戶端向服務器發出請求後,服務器端才能回覆數據。

       不少狀況下,須要服務器端主動向客戶端推送數據,保持客戶端與服務器數據的實時與同步。此時若雙方創建的是Socket鏈接,服務器就能夠直接將數據傳送給客戶端;若雙方創建的是HTTP鏈接,則服務器須要等到客戶端發送一次請求後才能將數據傳回給客戶端,所以,客戶端定時向服務器端發送鏈接請求,不只能夠保持在線,同時也是在「詢問」服務器是否有新的數據,若是有就將數據傳給客戶端。

七、Socket和Http區別

       HTTP是基於請求-響應形式而且是短鏈接,而且是無狀態的協議。針對其無狀態特性,在實際應用中又須要有狀態的形式,所以通常會經過session/cookie技術來解決此問題。

       Socket:Socket不屬於協議範疇,而是一個調用接口(API),Socket是對TCP/IP協議的封裝,經過調用Socket,才能使用TCP/IP協議。Socket鏈接是長鏈接,理論上客戶端和服務器端一旦創建鏈接將不會主動斷開此鏈接。Socket鏈接屬於請求-響應形式,服務端可主動將消息推送給客戶端。

八、TCP和UDP的區別

       1。TCP是面向連接的,雖說網絡的不安全不穩定特性決定了多少次握手都不能保證鏈接的可靠性,但TCP的三次握手在最低限度上(實際上也很大程度上保證了)保證了鏈接的可靠性;而UDP不是面向鏈接的,UDP傳送數據前並不與對方創建鏈接,對接收到的數據也不發送確認信號,發送端不知道數據是否會正確接收,固然也不用重發,因此說UDP是無鏈接的、不可靠的一種數據傳輸協議。

       2。也正因爲1所說的特色,使得UDP的開銷更小數據傳輸速率更高,由於沒必要進行收發數據的確認,因此UDP的實時性更好。

       知道了TCP和UDP的區別,就不難理解爲什麼採用TCP傳輸協議的MSN比採用UDP的QQ傳輸文件慢了,但並不能說QQ的通訊是不安全的,由於程序員能夠手動對UDP的數據收發進行驗證,好比發送方對每一個數據包進行編號而後由接收方進行驗證啊什麼的,即便是這樣,UDP由於在底層協議的封裝上沒有采用相似TCP的「三次握手」而實現了TCP所沒法達到的傳輸效率。

 

   ps:no words......

相關文章
相關標籤/搜索