參考(照搬)
https://www.cnblogs.com/jking10/p/5525519.html
TCP
Transmission Control Protocol 傳輸控制協(xié)議.
主機對主機層的傳輸
三次握手確認 建立一個連接
位碼
tcp標志位,有6種
SYN(synchronous):建立聯(lián)機
ACK(acknowledgement):確認
PSH(push):傳送
FIN(finish):結束
RST(reset):重置
URG(urgent):緊急
Sequence number(順序號碼)
Acknowledge number: 確認號碼
三次握手
第一次握手
客戶端發(fā)送syn包(syn=j)到服務器,并進入SYN_SEND狀態(tài),等待服務器確認
第二次握手
服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態(tài)
第三次握手
客戶端收到服務器的SYN+ACK包,向服務器發(fā)送確認包ACK(ack=k+1),服務器收到后,客戶端和服務器進入ESTABLISHED狀態(tài),完成三次握手.
斷開連接經(jīng)過四次握手
就是服務器和客戶端交互,最終確定斷開
HTTP
http連接最顯著的特點是客戶端發(fā)送的每次請求都需要服務器回送響應,在請求結束后,會主動釋放連接.
SOCKET原理
套接字(socket)概念
套接字是通信的基石,是支持tcp/ip協(xié)議的網(wǎng)絡通訊基本操作單元
它是網(wǎng)絡通信過程中端點的抽象表示
包含5種信息:
連接使用的協(xié)議
本地主機的IP地址
本地進程的協(xié)議端口
遠地主機的IP地址
遠地進程的協(xié)議口
建立socket連接
建立連接至少需要一對套接字
其中一個運行于客戶端,稱為ClientSocket
另一個運行于服務器端,稱為ServerSocket
連接過程的三個步驟
服務器監(jiān)聽:
服務器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡狀態(tài),等待客戶端的連接請求
客戶端請求:
客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字.為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,支出服務器套接字的地址和端口號,然后想服務器端套接字提出連接請求
連接確認:
當服務器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發(fā)給客戶端,一旦客戶端確認了次描述,雙方就正式建立連接.而服務器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求
SOCKET連接與TCP連接
創(chuàng)建Socket 連接時,可以指定使用的傳輸層協(xié)議,當使用TCP連接
Socket連接與HTTP連接
網(wǎng)絡通信中,客戶端到服務器之間的通信要穿越多個中間節(jié)點,例如路由器,網(wǎng)關,防火墻,大部分防火墻默認會關閉長時間處于非活躍狀態(tài)的連接,因此需要輪詢告訴網(wǎng)絡,該連接處于活躍狀態(tài).而HTTP連接使用的是"請求--響應"的方式,不僅在請求時需要先建立連接,而且需要客戶端向服務器發(fā)出請求后,服務器才能回復數(shù)據(jù),
很多情況下,需要服務器端主動向客戶端推送數(shù)據(jù),保存客戶端與服務器數(shù)據(jù)的實時與同步.
IP 協(xié)議
Internet Protocol(網(wǎng)絡之間互連的協(xié)議)的縮寫,中文簡稱'網(wǎng)協(xié)'.IP地址具有唯一性,根據(jù)用戶性質的不同,可以分為5類