TCP介紹 Transmission Control Protocol
【概述】:TCP協(xié)議是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。
【三步走】TCP通信需要經(jīng)過創(chuàng)建連接、數(shù)據(jù)傳送、終止連接三個步驟。

關(guān)于 TCP “三次握手”以及“四次揮手”
三次握手,建立連接
- ① 【連接建立】:請求連接方(客戶端)發(fā)送SYN請求連接;
- ② 【數(shù)據(jù)傳送】:服務(wù)器返回SYN/ACK確認(rèn)收到發(fā)送端請求;
- ③ 【連接釋放】:客戶端回饋給服務(wù)器ACK,表示確認(rèn)收到服務(wù)器發(fā)送的確認(rèn)。
補充:注意事項
- ① 如果服務(wù)器沒有收到客戶端發(fā)送的ACK,則啟動超時重傳機制,這確保了TCP連接的準(zhǔn)確性。
- ② TCP的握手至少有三次。
【拓展】:連接的建立需要經(jīng)過多次交互,這就是我們?nèi)粘V兴f的建立連接是高成本的操作。因此,在實際生產(chǎn)中,通過建立連接池,來減少連接建立的頻度,傳輸數(shù)據(jù)時直接從連接池中獲取連接,而不是新建連接。
四次揮手【斷開連接】
- ①請求方(客戶端)數(shù)據(jù)已經(jīng)發(fā)送完畢,向服務(wù)器發(fā)送FIN請求斷開連接;
- ②服務(wù)器向客戶端發(fā)送ACK,對客戶端發(fā)送的FIN進行確認(rèn),并不需要即使斷開;
- ③服務(wù)器將接收到的數(shù)據(jù)處理完畢后發(fā)送FIN,斷開連接;
- ④客戶端發(fā)送確認(rèn)消息ACK。
【性質(zhì)】:TCP是雙向通信,因此關(guān)閉連接時需要雙向關(guān)閉連接。首先是關(guān)閉操作的發(fā)起方關(guān)閉本端的連接,然后是關(guān)閉接收方在收到發(fā)起方的關(guān)閉請求后,除了回復(fù)關(guān)閉應(yīng)答外,還要確保數(shù)據(jù)傳輸完成后發(fā)起一個關(guān)閉連接的請求,保證雙向同時關(guān)閉。
【知識拓展】:
標(biāo)志位(URG、ACK、PSH、RST、SYN和FIN)的含義介紹。
- ACK: 確認(rèn)序號有效。
- RST:重置連接
- SYN:發(fā)起一個新連接
- FIN:釋放一個連接
TCP編程
服務(wù)器端:
1、創(chuàng)建 套接字 socket
2、bind(命名IP地址和端口號)
3、listen(創(chuàng)建監(jiān)聽隊列)
4、accept(拿到已經(jīng)完成連接的)
5、recv/send(收發(fā)數(shù)據(jù))
6、close(關(guān)閉)
【知識積累】
- TCP 服務(wù)器一般情況下都需要綁定端口號,否則客戶端找不到這個服務(wù)器;
- TCP 服務(wù)器中通過監(jiān)聽可以將 套接字創(chuàng)建出來的主動套接字變?yōu)楸粍拥?,這是做 TCP 服務(wù)器時必須要做的;
客戶端:
1、socket
2、connect
3、recv/send
4、close
- TCP 客戶端一般不綁定端口號,使用隨機生成的端口號即可;
4、當(dāng) TCP 客戶端和服務(wù)端建立好連接才可以收發(fā)數(shù)據(jù),UDP 是不需要建立連接,直接就可以發(fā)送數(shù)據(jù);當(dāng)一個 TCP 客戶端和服務(wù)端連接成功后,服務(wù)器端會有1個新的套接字,這個套接字用來標(biāo)記這個客戶端,單獨為這個客戶端服務(wù);
5、關(guān)閉 accept 返回的套接字意味著這個客戶端已經(jīng)服務(wù)完畢.
6、【關(guān)于套接字】:是一個抽象層,應(yīng)用程序可以通過它發(fā)送或接收數(shù)據(jù),可對其進行像對文件一樣的打開、讀寫和關(guān)閉等操作。套接字允許應(yīng)用程序?qū)/O插入到網(wǎng)絡(luò)中,并與網(wǎng)絡(luò)中的其他應(yīng)用程序進行通信。網(wǎng)絡(luò)套接字是IP地址與端口的組合。
【引言】:在網(wǎng)絡(luò)應(yīng)用程序設(shè)計時,由于TCP/IP的核心內(nèi)容被封裝在操作系統(tǒng)中,如果應(yīng)用程序要使用TCP/IP,可以通過系統(tǒng)提供的TCP/IP的編程接口來實現(xiàn)。在Windows環(huán)境下,網(wǎng)絡(luò)應(yīng)用程序編程接口稱作Windows Socket。為了支持用戶開發(fā)面向應(yīng)用的通信程序,大部分系統(tǒng)都提供了一組基于TCP或者UDP的應(yīng)用程序編程接口(API),該接口通常以一組函數(shù)的形式出現(xiàn),也稱為套接字(Socket)。