socket簡介


網絡這塊越了解感覺知道的越少,所以學習還是要繼續,,,,,,

Socket

0.幾個名詞:

       IPC—>Inter Process Communication,進程間通信

       socket —> 套接字

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

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

              注意點:TCP協議又稱為 “三次握手協議”;

              建立起一個TCP連接需要經過“三次握手”:

              第一次握手:客戶端發送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去組織數據,以符合指定的協議。

      

4、SOCKET原理

4.1套接字(socket)概念

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

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

4.2 建立socket連接

       建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket ,另一個運行於服務器端,稱為ServerSocket 。

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

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

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

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

 
   


      

      

5、SOCKET連接與TCP連接

       創建Socket連接時,可以指定使用的傳輸層協議,Socket可以支持不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連接時,該Socket連接就是一個TCP連接。

6、Socket連接與HTTP連接

       我們在傳輸數據時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用層協議。WEB使用HTTP協議作應用層協議,以封裝HTTP文本信息,然后使用TCP/IP做傳輸層協議將它發到網絡上。

       由於通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發送數據內容,直到雙方連接斷開。但在實際網絡應用中,客戶端到服務器之間的通信往往需要穿越多個中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的連接而導致Socket連接斷連,因此需要通過輪詢告訴網絡,該連接處於活躍狀態。而HTTP連接使用的是“請求—響應”的方式,不僅在請求時需要先建立連接,而且需要客戶端向服務器發出請求后,服務器端才能回復數據。

       很多情況下,需要服務器端主動向客戶端推送數據,保持客戶端與服務器數據的實時與同步。此時若雙方建立的是Socket連接,服務器就可以直接將數據傳送給客戶端;若雙方建立的是HTTP連接,則服務器需要等到客戶端發送一次請求后才能將數據傳回給客戶端,因此,客戶端定時向服務器端發送連接請求,不僅可以保持在線,同時也是在“詢問”服務器是否有新的數據,如果有就將數據傳給客戶端。

7、Socket和Http區別

       HTTP是基於請求-響應形式並且是短連接,並且是無狀態的協議。針對其無狀態特性,在實際應用中又需要有狀態的形式,因此一般會通過session/cookie技術來解決此問題。

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

8、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......

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM