首頁 php教程 PHP开发 簡單理解Socket

簡單理解Socket

Dec 13, 2016 am 09:53 AM
socket

簡單理解Socket

要想理解簡單理解Socket首先得熟悉簡單理解Socket協議族, 簡單理解Socket(Transmission Control Protocol/Internet Protocol)即傳輸控制協議/網間協議,定義了主機如何連接到因特網及資料如何再它們之間傳輸的標準,

從字面意思來看簡單理解Socket是TCP和IP協定的合稱,但實際上簡單理解Socket協定是指因特網整個簡單理解Socket協定族。有別於ISO模型的七個分層,簡單理解Socket協定參考模型把所有的簡單理解Socket系列協定歸類到四個抽象層中

應用層:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet等等

傳輸層:TCP,UDP

網路層:IP,ICMP,OSPF,EIGRP,IGMP

資料鏈結層:SLIP,CSLIP,PPP,MTU

每一抽象層建立在低層提供在的服務上,並且為高一層提供服務,看起來大概是這樣子的

簡單理解Socket

簡單理解Socket

估計有興趣打開此文的同學都對此有一定了解了,加上我也是一知半解,所以就不詳細解釋,有興趣同學可以上網搜一下資料

在簡單理解Socket協定中兩個因特網主機透過兩個路由器和對應的層連接。各主機上的應用透過一些資料通道互相執行讀取操作

簡單理解Socket协议

簡單理解Socket

我們知道兩個進程如果需要進行通訊最基本的一個前提能能夠唯一的標示一個進程,在本地進程中我們可以使用PID來唯一標示一個進程,但PID只在本地唯一,網路中的兩個進程PID衝突幾率很大,這時候我們需要另闢它徑了,我們知道IP層的ip位址可以唯一標示主機,而TCP層協定和埠號可以唯一標示主機的一個進程,這樣我們可以利用ip位址+協定+埠號唯一標示網路中的一個進程。

能夠唯一標示網路中的進程後,它們就可以利用簡單理解Socket進行通訊了,什麼是簡單理解Socket呢?我們經常把簡單理解Socket翻譯為套接字,簡單理解Socket是在應用層和傳輸層之間的一個抽象層,它把簡單理解Socket層複雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信。

簡單理解Socket

簡單理解Socket起源於UNIX,在Unix一切皆文件哲學的思想下,簡單理解Socket是一種"打開—讀/寫—關閉"模式的實現,伺服器和客戶端各自維護一個"文件",在建立連線開啟後,可以寫入內容給自己檔案供對方讀取或讀取對方內容,通訊結束時關閉檔案。

簡單理解Socket通訊流程

簡單理解Socket是"開啟—讀/寫—關閉"模式的實現,以使用TCP協定通訊的簡單理解Socket為例,其交互流程大概是這樣子的

簡單理解Socket

伺服器根據地址類型( ipv4,ipv6)、簡單理解Socket類型、協定創建簡單理解Socket

伺服器為簡單理解Socket綁定ip位址和連接埠號碼

伺服器簡單理解Socket監聽連接埠號碼請求,隨時準備接收客戶端發來的連接,這時候伺服器的簡單理解Socket並沒有被打開

客戶端創建簡單理解Socket

客戶端打開簡單理解Socket,根據伺服器ip位址和連接埠號碼試圖連接伺服器簡單理解Socket

伺服器簡單理解Socket接收到客戶端簡單理解Socket請求,被動打開,開始接收客戶端請求,直到客戶端返回連接資訊.這時候簡單理解Socket進入阻塞狀態,所謂阻塞即accept()方法一直到客戶端返回連接訊息後才返回,開始接收下一個客戶端諒解請求

客戶端連接成功,向伺服器發送連接狀態資訊

伺服器accept方法返回,連接成功

客戶端向簡單理解Socket寫入訊息

伺服器讀取訊息

客戶端關閉

伺服器端關閉

三次握手

在簡單理解Socket協定中,TCP協定透過三次握手建立一個可靠的連線

簡單理解Socket

第一次握手:客戶端嘗試連接伺服器,向伺服器發送syn套件(同步序列編號Synchronize Sequence Numbers ),syn=j,客戶端進入SYN_SEND狀態等待伺服器確認

第二次握手:伺服器接收客戶端syn套件並確認(ack=j+1),同時向客戶端發送一個SYN套件(syn=k) ,即SYN+ACK包,此時伺服器進入SYN_RECV狀態

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

定睛一看,伺服器簡單理解Socket與客戶端簡單理解Socket建立連線的部分其實就是大名鼎鼎的三次握手

 簡單理解Socket编程API

到簡單理解Socket是"打開—讀/寫—關閉"模式的實現,簡單了解一下簡單理解Socket提供了哪些API供應用程序使用,還是以TCP協議為例,看看Unix下的簡單理解Socket API,其它語言都很類似( PHP甚至名字都幾乎一樣),這裡我就簡單解釋一下方法作用和參數,具體使用有興趣同學可以看看博客參考中的鏈接或者上網搜索

int 簡單理解Socket(int domain, int type, int protocol);

根據指定的位址族、資料型別和協定來分配一個簡單理解Socket的描述字及其所使用的資源。

domain:協議族,常用的有AF_INET、AF_INET6、AF_LOCAL、AF_ROUTE其中AF_INET代表使用ipv4位址

type:簡單理解Socket類型,常用的簡單理解Socket類型有,SOCK_STREAM、SOCK_DGRAM、協定.常用的協定有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);把一個分配給一個位址給這個位址給描述字,也就是簡單理解Socket引用

addr:要綁定給sockfd的協定位址

addrlen:位址的長度


通常伺服器在啟動的時候都會綁定一個眾所周知的位址(如ip位址+埠號),用於提供服務,客戶就可以透過它來接連伺服器;而客戶端就不用指定,有系統自動分配一個連接埠號碼和自身的ip位址組合。這就是為什麼通常伺服器端在listen之前會調用bind(),而客戶端就不會調用,而是在connect()時由系統隨機產生一個。

int listen(int sockfd, int backlog);

監聽簡單理解Socket

sockfd:要監聽的簡單理解Socket描述字

, 對應簡單理解Socketet可以排隊的最大連接個數嗎? sockaddr *addr, socklen_t addrlen);

連接某個簡單理解Socket

sockfd:客戶端的簡單理解Socket描述字

addr:伺服器的簡單理解Socketc. *addr, socklen_t *addrlen);

 TCP伺服器監聽到客戶端請求之後,呼叫accept()函數取接收請求

:

sockfd:伺服器的簡單理解Socket描述字

addr:

sockfd:伺服器的簡單理解Socket描述字

addr:客戶端的簡單理解Socket.位址的長度

ssize_t read(int fd, void *buf, size_t count);

讀取簡單理解Socket內容


fd:簡單理解Socket描述字

(int fd, const void *buf, size_t count);

寫入內容,其實就是傳送內容

fd:簡單理解Socket描述字

buf:緩衝區


count:緩衝區長度

buf:緩衝區

count:緩衝區長度

(int fd);

簡單理解Socket標記為以關閉 ,使對應簡單理解Socket描述字的引用計數-1,當引用計數為0的時候,觸發TCP客戶端向伺服器發送終止連線請求。

參考

Linux Socket程式設計(不限Linux)

揭開Socket程式的面紗 




本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1653
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1251
29
C# 教程
1224
24
PHP+Socket系列之IO多路復用及實作web伺服器 PHP+Socket系列之IO多路復用及實作web伺服器 Feb 02, 2023 pm 01:43 PM

這篇文章為大家帶來了關於php+socket的相關知識,其中主要介紹了IO多路復用,以及php+socket如何實作web伺服器?有興趣的朋友下面一起來看一下,希望對大家有幫助。

Python的socket與socketserver怎麼使用 Python的socket與socketserver怎麼使用 May 28, 2023 pm 08:10 PM

一、基於TCP協定的socket套接字程式設計1、套接字工作流程先從伺服器端說起。伺服器端先初始化Socket,然後與連接埠綁定(bind),對連接埠進行監聽(listen),呼叫accept阻塞,等待客戶端連線。在這時如果有個客戶端初始化一個Socket,然後連接伺服器(connect),如果連線成功,這時客戶端與伺服器端的連線就建立了。客戶端發送資料請求,伺服器端接收請求並處理請求,然後把回應資料傳送給客戶端,客戶端讀取數據,最後關閉連接,一次互動結束,使用以下Python程式碼實作:importso

怎麼使用Spring Boot+Vue實現Socket通知推播 怎麼使用Spring Boot+Vue實現Socket通知推播 May 27, 2023 am 08:47 AM

SpringBoot端第一步,引入依賴首先我們需要引入WebSocket所需的依賴,以及處理輸出格式的依賴com.alibabafastjson1.2.73org.springframework.bootspring-boot-starter-websocket第二步,創建WebSocket配置類importorg. springframework.context.annotation.Bean;importorg.springframework.context.annotation.Config

php socket無法連線怎麼辦 php socket無法連線怎麼辦 Nov 09, 2022 am 10:34 AM

php socket無法連線的解決方法:1、檢查php是否開啟socket擴充;2、開啟php.ini文件,檢查「php_sockets.dll」是否已載入;3、取消「php_sockets.dll」的註解狀態即可。

PHP實作Socket通訊的方法與技巧 PHP實作Socket通訊的方法與技巧 Mar 07, 2024 pm 02:06 PM

PHP是一種常用的開發語言,可以用來開發各種網頁應用程式。除了常見的HTTP請求和回應以外,PHP也支援透過Socket進行網路通信,實現更靈活和高效的資料互動。本文將介紹PHP如何實作Socket通訊的方法與技巧,並附上具體的程式碼範例。什麼是Socket通訊Socket是一種在網路中進行通訊的方法,可以在不同的電腦之間傳輸資料。透過S

C#常見的網路通訊與安全性問題及解決方法 C#常見的網路通訊與安全性問題及解決方法 Oct 09, 2023 pm 09:21 PM

C#中常見的網路通訊和安全性問題及解決方法在當今互聯網時代,網路通訊已成為了軟體開發中必不可少的一部分。在C#中,我們通常會遇到一些網路通訊的問題,例如資料傳輸的安全性、網路連線的穩定性等。本文將針對C#中常見的網路通訊和安全性問題進行詳細討論,並提供相應的解決方法和程式碼範例。一、網路通訊問題網路連線中斷:網路通訊過程中,可能會出現網路連線的中斷,這會導致

PHP+Socket系列之實現客戶端與服務端資料傳輸 PHP+Socket系列之實現客戶端與服務端資料傳輸 Feb 02, 2023 am 11:35 AM

這篇文章為大家帶來了關於php+socket的相關知識,其中主要介紹了什麼是socket? php+socket如何實現客戶端與服務端資料傳輸?有興趣的朋友下面一起來看一下,希望對大家有幫助。

利用PHP和Socket實現即時文件傳輸技術研究 利用PHP和Socket實現即時文件傳輸技術研究 Jun 28, 2023 am 09:11 AM

隨著網路的發展,文件傳輸成為人們日常工作和娛樂中不可或缺的一部分。然而,傳統的文件傳輸方式如郵件附件或文件分享網站存在一定的限制,無法滿足即時性和安全性的需求。因此,利用PHP和Socket技術實現即時檔案傳輸成為了一種新的解決方案。本文將介紹利用PHP和Socket技術實現即時檔案傳輸的技術原理、優點和應用場景,並透過具體案例來展示該技術的實作方法。科技

See all articles