Socket兩個基本概念:客戶方和服務(wù)方。當(dāng)兩個應(yīng)用之間需要采用SOCKET通信時,首先需要在兩個應(yīng)用之間(可能位于同一臺機器,也可能位于不同的機器)建立SOCKET連接,發(fā)起呼叫連接請求的一方為客戶方,接受呼叫連接請求的一方成為服務(wù)方??蛻舴胶头?wù)方是相對的,同一個應(yīng)用可以是客戶方,也可以是服務(wù)方。
我們已經(jīng)知道網(wǎng)絡(luò)中的進(jìn)程是通過 socket 來通信的,那什么是 socket 呢?

首先明確Socket在網(wǎng)絡(luò)模型中哪里:是應(yīng)用層與傳輸層之間的橋梁
image回顧一下網(wǎng)絡(luò)模型:OSI七層網(wǎng)絡(luò)模型:
1.應(yīng)用層.
2.表示層.
3.會話層.
4.傳輸層.
5.網(wǎng)絡(luò)層.
6.數(shù)據(jù)鏈路層.
7.物理層
TCP/IP四層網(wǎng)絡(luò)模型:應(yīng)用層.傳輸層.網(wǎng)絡(luò)層,網(wǎng)絡(luò)接入層
HTTP協(xié)議:屬于應(yīng)用層面向?qū)ο蟮膮f(xié)議(超文本傳輸協(xié)議),常基于TCP連接方式,特點是:
1.支持客戶/服務(wù)端模式
2.簡單快捷靈活
3.客戶端發(fā)送的每次請求都需要服務(wù)器回送響應(yīng),請求結(jié)束后主動釋放連接,俗稱”短連接”
TCP協(xié)議:傳輸控制協(xié)議,提供面向連接.可靠的字節(jié)流服務(wù),提供超時重發(fā),丟棄重復(fù)數(shù)據(jù),檢驗數(shù)據(jù),流量控制等功能。在正式收發(fā)數(shù)據(jù)前,必須建立可靠的連接,也即:三次握手.
第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN (ack=j+1),同時自已也發(fā)送一個SYN 包(syn=k),即SYN+ ACK包,此時服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
UDP協(xié)議:用戶數(shù)據(jù)報協(xié)議,面向非連接,不保證可靠性的數(shù)據(jù)傳輸服務(wù),沒有超時重發(fā)等機制,故而傳輸速度很快.特點:它不與對方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去,UDP適用于一次只傳送少量數(shù)據(jù)、對可靠性要求不高的應(yīng)用環(huán)境。
Socket:又稱”套接字”,應(yīng)用程序通過”套接字”向網(wǎng)絡(luò)發(fā)送請求或應(yīng)答,它是一個針對TCP和UDP編程的接口,借助它建立TCP/UDP連接。
socket連接就是所謂的長連接,理論上客戶端和服務(wù)器端一旦建立起連接將不會主動斷掉HTTP協(xié)議一Socket連接- -TCP連接關(guān)系:1.HTTP協(xié)議提供了封裝或者顯示數(shù)據(jù)的具體形式;
2.Sockct連接提供了網(wǎng)絡(luò)通信的能力;
3.TCP連接提供如何在網(wǎng)絡(luò)中傳輸;
4.socket是純C語言的,跨平臺;
5.HTTP協(xié)議是基于socket的,底層使用的就是socket;
6.創(chuàng)建Socket連接時,可以指定使用的傳輸層協(xié)議(TCP或UDP),當(dāng)使用TCP協(xié)議進(jìn)行連接時,該Socket連接就是一個TCP連接。