wordpress 自定義主頁沈陽專業(yè)seo
TCP是面向連接的、可靠的、基于字節(jié)流的傳輸層協(xié)議。
面向連接:一定是一對一連接,不能像 UDP 協(xié)議可以一個主機同時向多個主機發(fā)送消息
可靠的:無論的網(wǎng)絡(luò)鏈路中出現(xiàn)了怎樣的鏈路變化,TCP 都可以保證一個報文一定能夠到達接收端;
基于字節(jié)流的:TCP 協(xié)議在傳輸數(shù)據(jù)時,并不關(guān)心數(shù)據(jù)的邊界。它將數(shù)據(jù)視為一連串的字節(jié),而不是消息或數(shù)據(jù)包。這意味著 TCP 不會保留消息邊界,它只是負責將字節(jié)流從發(fā)送端傳輸?shù)浇邮斩?。不會保留發(fā)送數(shù)據(jù)時的任何消息邊界。發(fā)送方發(fā)送的數(shù)據(jù)可能被 TCP 分割成多個段,也可能將多個消息合并成一個段發(fā)送。接收方需要根據(jù)應用層協(xié)議來識別和重組消息。
TCP格式:
源端口號和目的端口號:與源ip地址和目的ip地址構(gòu)成四元組
序列號:TCP協(xié)議中用于確保數(shù)據(jù)傳輸有序性的一種機制。在建立連接時,由計算機生成一個隨機數(shù)作為初始序列號,并通過SYN包發(fā)送給接收端主機。每發(fā)送一次數(shù)據(jù),序列號就會累加這次發(fā)送的數(shù)據(jù)字節(jié)數(shù)的大小。
確認應答號:TCP協(xié)議中用于確保數(shù)據(jù)傳輸可靠性的一種機制,主要作用是解決丟包問題。它指的是接收端期望下一次收到的數(shù)據(jù)的序列號。當發(fā)送端收到接收端發(fā)來的確認應答后,可以認為所有在這個序號以前的數(shù)據(jù)都已經(jīng)被接收端正常接收。
ACK:除了最初建立連接的SYN包以外,都要設(shè)置成1,
RST:當RST位設(shè)置為1時,表示TCP連接中出現(xiàn)異常,需要強制斷開連接。
SYN:該位為 1
時,表示希望建立連接,并在其「序列號」的字段進行序列號初始值的設(shè)定。
FIN: 當FIN位設(shè)置為1時,表示發(fā)送端已經(jīng)完成數(shù)據(jù)發(fā)送,希望斷開當前的TCP連接。通信雙方在結(jié)束數(shù)據(jù)傳輸后,可以通過交換FIN位為1的TCP段來關(guān)閉連接。FIN位用于優(yōu)雅地結(jié)束一個TCP會話。
首部長度:因為選項是可變長,所以要記錄首部長度。udp首部長度固定8個字節(jié),無需記錄。
為什么要有tcp?
IP層是「不可靠」的,它不保證網(wǎng)絡(luò)包的交付、不保證網(wǎng)絡(luò)包的按序交付、也不保證網(wǎng)絡(luò)包中的數(shù)據(jù)的完整性。TCP保證網(wǎng)絡(luò)數(shù)據(jù)包可靠性。
因為 TCP 是一個工作在傳輸層的可靠數(shù)據(jù)傳輸?shù)姆?#xff0c;它能確保接收端接收的網(wǎng)絡(luò)包是無損壞、無間隔、非冗余和按序的。
連接:用于保證可靠性和流量控制維護的某些狀態(tài)信息,這些信息的組合,包括Socket、序列號和窗口大小稱為連接。
一個 IP 的服務端監(jiān)聽了一個端口,它的 TCP 的最大連接數(shù)是多少?
對于服務端來說,目的 IP 地址是固定的(即服務端的 IP 地址),目的端口號也是固定的(即服務端監(jiān)聽的端口)。因此,變量是源 IP 地址和源端口號。
對于 IPv4,一個 IP 地址由 32 位組成,因此可能的 IP 地址總數(shù)是 2^32。
一個端口號由 16 位組成,因此可能的端口號總數(shù)是 2^16
最大 TCP 連接數(shù) = 2^32×2^16=2^48
文件描述符限制:
每個TCP連接在Linux系統(tǒng)中都被視為一個文件,因此受到文件描述符的限制。存在三種級別的限制:
系統(tǒng)級:整個系統(tǒng)可打開的最大文件描述符數(shù)量,可以通過查看 /proc/sys/fs/file-max
來獲取。
用戶級:特定用戶可打開的最大文件描述符數(shù)量,可以通過查看 /etc/security/limits.conf
來獲取。
進程級:單個進程可打開的最大文件描述符數(shù)量,可以通過查看 /proc/sys/fs/nr_open
來獲取
內(nèi)存限制:
操作系統(tǒng)的內(nèi)存是有限的,如果內(nèi)存資源耗盡,可能會導致 "Out of Memory"(OOM)錯誤。每個TCP連接都需要占用一定的內(nèi)存資源。
簡潔的UDP:
UDP(用戶數(shù)據(jù)報協(xié)議,User Datagram Protocol)是一種無連接的、簡單的傳輸層協(xié)議。頭部只有8個字節(jié)。
TCP和UDP的區(qū)別:
-
連接:
- TCP面向連接,需要在數(shù)據(jù)傳輸前建立連接。
- UDP無連接,可以直接發(fā)送數(shù)據(jù)。
-
服務對象:
- TCP提供一對一的通信服務。
- UDP支持多種通信模式,包括一對一、一對多、多對多。
-
可靠性:
- TCP提供可靠交付,確保數(shù)據(jù)無差錯、不丟失、不重復、按序到達。
- UDP盡力交付,但不保證數(shù)據(jù)的可靠傳輸。
-
擁塞控制和流量控制:
- TCP具有擁塞控制和流量控制機制。
- UDP沒有這些機制,即使網(wǎng)絡(luò)擁堵也保持發(fā)送速率。
-
首部開銷:
- TCP首部較長,通常至少20字節(jié),可能更長如果包含選項。
- UDP首部固定8字節(jié),開銷較小。
-
傳輸方式:
- TCP是流式傳輸,無邊界,保證數(shù)據(jù)順序和可靠性。
- UDP基于數(shù)據(jù)報文傳輸,有邊界,可能會丟包和亂序。
-
分片:
- TCP在數(shù)據(jù)大于MSS時在傳輸層進行分片,接收端在傳輸層組裝。
- UDP在數(shù)據(jù)大于MTU時在IP層進行分片,接收端在IP層組裝后傳給傳輸層。
TCP和UDP的應用場景:
數(shù)據(jù)長度大小:
TCP數(shù)據(jù)長度=IP總長度-IP首部長度-TCP首部長度
TCP和UDP可以共用端口號嗎?
?????????? 在數(shù)據(jù)鏈路層中,通過 MAC地址來尋找局域網(wǎng)中的主機。在網(wǎng)際層中,通過IP 地址來尋找網(wǎng)絡(luò)中互連的主機或路由器。在傳輸層中,需要通過端口進行尋址,來識別同一計算機中同時通信的不同應用程序。
所以,傳輸層的「端口號」的作用,是為了區(qū)分同一個主機上不同應用程序的數(shù)據(jù)包。
傳輸層有兩個傳輸協(xié)議分別是 TCP 和 UDP,在內(nèi)核中是兩個完全獨立的軟件模塊。
當主機收到數(shù)據(jù)包后,可以在 IP 包頭的「協(xié)議號」字段知道該數(shù)據(jù)包是 TCP/UDP,所以可以根據(jù)這個信息確定送給哪個模塊(TCP/UDP)處理,送給 TCP/UDP 模塊的報文根據(jù)「端口號」確定送給哪個應用程序處理。
-
TCP:
適用于需要可靠數(shù)據(jù)傳輸?shù)膽?#xff0c;如:遠程登錄(SSH/Telnet),郵件傳輸(SMTP),文件傳輸(FTP),Web瀏覽(HTTP) -
UDP:
適用于對實時性要求高的應用,如:某些類型的網(wǎng)絡(luò)監(jiān)控工具,DNS查詢,在線游戲,實時視頻和音頻傳輸(流媒體)