首先必須明確socket不是某一層的協議,它是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組程式設計介面(即api),在設計模式中,socket就是門面模式(又稱為外觀模式,facade),它把複雜的tcp/ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。總的來說socket就是一組api,對tcp/ip協議進行封裝的api介面
伺服器端的流程如下:
1、socket – 建立套接字(後面會變為監聽套接字)
2、bind – 將套接字繫結到乙個本地位址和埠上(假如沒有繫結,客戶端就不知道從哪個埠通訊)。埠號範圍:0-65535
3、listen – 將套接字設為監聽模式,準備接收客戶端請求
4、accept – 等待客戶端請求到來;當請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字
5、send/recv – 用返回的套接字和客戶端進行通訊(這個套接字就是通訊套接字)
6、返回,等待另乙個客戶請求。
7、close – 關閉套接字。
客戶端的流程如下:
1、socket – 建立套接字
2、connect – 向伺服器發出連線請求
3、send/recv – 和伺服器端進行通訊
4、close – 關閉套接字
在tcp/ip協議中,tcp協議通過三次握手建立乙個可靠的連線。
從圖中可以看出
當客戶端呼叫connect時,觸發了連線請求,向伺服器傳送了syn j包,這時connect進入阻塞狀態;
伺服器監聽到連線請求,即收到syn j包,呼叫accept函式接收請求向客戶端傳送syn k ,ack j+1,這時accept進入阻塞狀態;
客戶端收到伺服器的syn k ,ack j+1之後,這時connect返回,並對syn k進行確認;
伺服器收到ack k+1時,accept返回,至此三次握手完畢,連線建立。
某個應用程序首先呼叫close主動關閉連線,這時tcp傳送乙個fin m;
另一端接收到fin m之後,執行被動關閉,對這個fin進行確認。
它的接收也作為檔案結束符傳遞給應用程序,因為fin的接收意味著應用程序在相應的連線上再也接收不到額外資料;
一段時間之後,接收到檔案結束符的應用程序呼叫close關閉它的socket。這導致它的tcp也傳送乙個fin n;
接收到這個fin的源傳送端tcp對它進行確認。
客戶端client從伺服器server獲取檔案。流程如下:
伺服器server:
1、建立socket,繫結埠,等待客戶端連線;
2、建立鏈結後,開啟需要傳送的檔案,傳送檔案相關資訊(名字、檔案長度、每包長度等等),等待接收客戶端響應;
3、客戶端響應ok後,傳送檔案資料,逐包傳送;
4、傳送結束後關閉鏈結;
歡迎技術交流qq 736009573
參考資料
學習筆記 sockect之UDP
單對單的通訊 資料報同時發給區域網中的所有主機,稱為廣播 只有使用者資料報 使用udp協議 套接字才能廣播 廣播方式發給所有的主機。過多的廣播會大量占用網路頻寬,造成廣播風暴,影響正常的通訊 3 廣播位址 以192.168.1.x網段為例,最大的主機位址192.168.1.255代表該網段的廣播位址...
學習筆記之TCP擁塞控制
tcp的擁塞控制 1 擁塞控制 防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不至於過載。擁塞控制所要做的都有乙個前提,網路能夠承受現有的網路負荷。擁塞控制是乙個全域性性的過程,涉及到所有的主機 所有的路由器,以及與降低網路傳輸效能有關的所有因素。2 流量控制 往往指點對點通訊量的控制,...
TCP學習筆記
tcp tcp譯為傳輸控制協議,一種面向廣域網的通訊協議 目的 在不可靠的網際網路絡上提供可靠的端到端位元組流 特點 1.基於流方式 2.面向連線 3.可靠通訊方式 4.網路狀況不佳盡量降低系統由於重傳帶來的寬頻開銷 5.通訊連線維護面向通訊的兩個端點,不考慮中間網段和節點 工作方式 一 3次握手建...