HOME 首頁
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運營
CASE 服務(wù)案例
NEWS 熱點資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    tcp請求(jmeter發(fā)送tcp請求)

    發(fā)布時間:2023-03-19 02:14:15     稿源: 創(chuàng)意嶺    閱讀: 97        問大家

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于tcp請求的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com

    本文目錄:

    tcp請求(jmeter發(fā)送tcp請求)

    一、一文搞懂TCP的三次握手和四次揮手

    TCP的三次握手和四次揮手實質(zhì)就是TCP通信的連接和斷開。

    三次握手:為了對每次發(fā)送的數(shù)據(jù)量進行跟蹤與協(xié)商,確保數(shù)據(jù)段的發(fā)送和接收同步,根據(jù)所接收到的數(shù)據(jù)量而確認數(shù)據(jù)發(fā)送、接收完畢后何時撤消聯(lián)系,并建立虛連接。

    四次揮手:即終止TCP連接,就是指斷開一個TCP連接時,需要客戶端和服務(wù)端總共發(fā)送4個包以確認連接的斷開。

    TCP三次握手、四次揮手時序圖

    TCP協(xié)議位于傳輸層,作用是提供可靠的字節(jié)流服務(wù),為了準確無誤地將數(shù)據(jù)送達目的地,TCP協(xié)議采納三次握手策略。

    三次握手原理:

    第1次握手:客戶端發(fā)送一個帶有SYN(synchronize)標志的數(shù)據(jù)包給服務(wù)端;

    第2次握手:服務(wù)端接收成功后,回傳一個帶有SYN/ACK標志的數(shù)據(jù)包傳遞確認信息,表示我收到了;

    第3次握手:客戶端再回傳一個帶有ACK標志的數(shù)據(jù)包,表示我知道了,握手結(jié)束。

    其中:SYN標志位數(shù)置1,表示建立TCP連接;ACK標志表示驗證字段。

    可通過以下趣味圖解理解三次握手:

    三次握手過程詳細說明:

    1、客戶端發(fā)送建立TCP連接的請求報文,其中報文中包含seq序列號,是由發(fā)送端隨機生成的,并且將報文中的SYN字段置為1,表示需要建立TCP連接。(SYN=1,seq=x,x為隨機生成數(shù)值);

    2、服務(wù)端回復(fù)客戶端發(fā)送的TCP連接請求報文,其中包含seq序列號,是由回復(fù)端隨機生成的,并且將SYN置為1,而且會產(chǎn)生ACK字段,ACK字段數(shù)值是在客戶端發(fā)送過來的序列號seq的基礎(chǔ)上加1進行回復(fù),以便客戶端收到信息時,知曉自己的TCP建立請求已得到驗證。(SYN=1,ACK=x+1,seq=y,y為隨機生成數(shù)值)這里的ack加1可以理解為是確認和誰建立連接;

    3、客戶端收到服務(wù)端發(fā)送的TCP建立驗證請求后,會使自己的序列號加1表示,并且再次回復(fù)ACK驗證請求,在服務(wù)端發(fā)過來的seq上加1進行回復(fù)。(SYN=1,ACK=y+1,seq=x+1)。

    由于TCP連接是全雙工的,因此每個方向都必須單獨進行關(guān)閉。這原則是當一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個FIN來終止這個方向的連接。收到一個 FIN只意味著這一方向上沒有數(shù)據(jù)流動,一個TCP連接在收到一個FIN后仍能發(fā)送數(shù)據(jù)。首先進行關(guān)閉的一方將執(zhí)行主動關(guān)閉,而另一方執(zhí)行被動關(guān)閉。

    四次揮手原理:

    第1次揮手:客戶端發(fā)送一個FIN,用來關(guān)閉客戶端到服務(wù)端的數(shù)據(jù)傳送,客戶端進入FIN_WAIT_1狀態(tài);

    第2次揮手:服務(wù)端收到FIN后,發(fā)送一個ACK給客戶端,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號),服務(wù)端進入CLOSE_WAIT狀態(tài);

    第3次揮手:服務(wù)端發(fā)送一個FIN,用來關(guān)閉服務(wù)端到客戶端的數(shù)據(jù)傳送,服務(wù)端進入LAST_ACK狀態(tài);

    第4次揮手:客戶端收到FIN后,客戶端t進入TIME_WAIT狀態(tài),接著發(fā)送一個ACK給Server,確認序號為收到序號+1,服務(wù)端進入CLOSED狀態(tài),完成四次揮手。

    其中:FIN標志位數(shù)置1,表示斷開TCP連接。

    可通過以下趣味圖解理解四次揮手:

    四次揮手過程詳細說明:

    1、客戶端發(fā)送斷開TCP連接請求的報文,其中報文中包含seq序列號,是由發(fā)送端隨機生成的,并且還將報文中的FIN字段置為1,表示需要斷開TCP連接。(FIN=1,seq=x,x由客戶端隨機生成);

    2、服務(wù)端會回復(fù)客戶端發(fā)送的TCP斷開請求報文,其包含seq序列號,是由回復(fù)端隨機生成的,而且會產(chǎn)生ACK字段,ACK字段數(shù)值是在客戶端發(fā)過來的seq序列號基礎(chǔ)上加1進行回復(fù),以便客戶端收到信息時,知曉自己的TCP斷開請求已經(jīng)得到驗證。(FIN=1,ACK=x+1,seq=y,y由服務(wù)端隨機生成);

    3、服務(wù)端在回復(fù)完客戶端的TCP斷開請求后,不會馬上進行TCP連接的斷開,服務(wù)端會先確保斷開前,所有傳輸?shù)紸的數(shù)據(jù)是否已經(jīng)傳輸完畢,一旦確認傳輸數(shù)據(jù)完畢,就會將回復(fù)報文的FIN字段置1,并且產(chǎn)生隨機seq序列號。(FIN=1,ACK=x+1,seq=z,z由服務(wù)端隨機生成);

    4、客戶端收到服務(wù)端的TCP斷開請求后,會回復(fù)服務(wù)端的斷開請求,包含隨機生成的seq字段和ACK字段,ACK字段會在服務(wù)端的TCP斷開請求的seq基礎(chǔ)上加1,從而完成服務(wù)端請求的驗證回復(fù)。(FIN=1,ACK=z+1,seq=h,h為客戶端隨機生成)

    至此TCP斷開的4次揮手過程完畢。

    LISTEN:等待從任何遠端TCP 和端口的連接請求。

    SYN_SENT:發(fā)送完一個連接請求后等待一個匹配的連接請求。

    SYN_RECEIVED:發(fā)送連接請求并且接收到匹配的連接請求以后等待連接請求確認。

    ESTABLISHED:表示一個打開的連接,接收到的數(shù)據(jù)可以被投遞給用戶。連接的數(shù)據(jù)傳輸階段的正常狀態(tài)。

    FIN_WAIT_1:等待遠端TCP 的連接終止請求,或者等待之前發(fā)送的連接終止請求的確認。

    FIN_WAIT_2:等待遠端TCP 的連接終止請求。

    CLOSE_WAIT:等待本地用戶的連接終止請求。

    CLOSING:等待遠端TCP 的連接終止請求確認。

    LAST_ACK:等待先前發(fā)送給遠端TCP 的連接終止請求的確認(包括它字節(jié)的連接終止請求的確認)

    TIME_WAIT:等待足夠的時間過去以確保遠端TCP 接收到它的連接終止請求的確認。

    TIME_WAIT 兩個存在的理由:

              1.可靠的實現(xiàn)tcp全雙工連接的終止;

              2.允許老的重復(fù)分節(jié)在網(wǎng)絡(luò)中消逝。

    CLOSED:不在連接狀態(tài)(這是為方便描述假想的狀態(tài),實際不存在)。

    二、怎么解決在window下高并發(fā)TCP請求端口被占用有關(guān)問題

    執(zhí)行以下操作之一:

    在 Windows XP 或 Windows Server 2003 計算機上的命令提示中輸入以下命令,顯示此計算機上 TCP/IP 協(xié)議所使用的活動連接:

    復(fù)制

    netstat -n

    這將列出綁定到客戶端計算機的 TCP/IP 地址以及 TCP/IP 地址與遠程服務(wù)器通信所使用的端口。如果列出的端口使用了所有可用的端口,則出現(xiàn)了 TCP/IP 端口耗盡現(xiàn)象。

    在基于 Windows Server 2003 的客戶端計算機的命令提示中輸入以下命令,以顯示 TCP/IP 協(xié)議所使用的活動連接:

    復(fù)制

    netstat -b

    這將列出綁定到客戶端計算機的 TCP/IP 地址、TCP/IP 地址與遠程服務(wù)器通信所使用的端口以及使用這些端口的應(yīng)用程序。此信息可以幫助您確定那個客戶端應(yīng)用程序正在使用過多的 TCP/IP 端口。

    與 TCP/IP 端口耗盡有關(guān)的問題

    當客戶端應(yīng)用程序嘗試使用 TCP/IP 套接字連接到 BizTalk Server,或當 BizTalk 應(yīng)用程序嘗試使用 TCP/IP 套接字連接到服務(wù)器時,可能會出現(xiàn)類似于下面的情況:

    復(fù)制

    System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send.

    - 或者 -

    復(fù)制

    Unable to connect to the remote server

    System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.

    當出現(xiàn)這些錯誤時,還可能出現(xiàn)以下問題:

    客戶端應(yīng)用程序可能無法連接到 BizTalk Server。

    BizTalk 應(yīng)用程序服務(wù)可能無法連接到遠程 SQL 服務(wù)器。

    BizTalk Server 適配器可能無法連接到遠程服務(wù)器。

    客戶端應(yīng)用程序預(yù)留的每個端口均占用內(nèi)核內(nèi)存。如果預(yù)留了數(shù)目超常的客戶端端口,Windows 內(nèi)核內(nèi)存的占用率將相應(yīng)增加。

    原因

    如果客戶端計算機中存在數(shù)目超常的 TCIP/IP 套接字連接,則客戶端計算機上可能出現(xiàn) TCP/IP 端口耗盡的情況。如果多個客戶端應(yīng)用程序都在建立連接,則可能出現(xiàn)這種情況。

    如果所有可用的臨時端口都分配給了客戶端應(yīng)用程序,則客戶端將出現(xiàn) TCP/IP 端口耗盡的情況。當 TCP/IP 端口耗盡時,將無法預(yù)留客戶端端口,并且嘗試通過 TCP/IP 套接字連接到服務(wù)器的客戶端應(yīng)用程序也將出錯。

    在高負載情況下,比處于正常負載時更容易出現(xiàn) TCP/IP 端口耗盡的情況。

    解決方法

    執(zhí)行以下步驟以避免 TCP/IP 端口耗盡及其相關(guān)問題:

    驗證客戶端應(yīng)用程序沒有生成過多的 TCP/IP 套接字連接。這一點可以用上面提到的方法來檢查,即在 Windows Server 2003 和 Windows XP 上運行 netstat -n,或者在 Windows Server 2003 和 2008 上運行 netstat -b。

    如果某個客戶端應(yīng)用程序使用了數(shù)量超常的 TCP/IP 套接字連接,則應(yīng)考慮重新設(shè)計客戶端應(yīng)用程序,以便更有效地使用 TCP/IP 套接字連接。

    注意

    如果為 BizTalk 應(yīng)用程序服務(wù) (BTSNTSvc.exe) 實例預(yù)留了數(shù)量超常的客戶端端口,則需驗證配置為在 BizTalk 應(yīng)用程序服務(wù)中運行的任何自定義代碼都沒有建立過多的 TCP/IP 套接字連接。

    如果大量客戶端應(yīng)用程序要啟動已知數(shù)量的 TCP/IP 套接字連接,但沒有足夠數(shù)量的可用臨時端口來滿足連接請求,則需要進行以下注冊表修改。

    警告

    如果注冊表編輯器使用不當,則可能會產(chǎn)生嚴重問題,導(dǎo)致重新安裝操作系統(tǒng)。Microsoft 不保證可以解決因注冊表編輯器使用不當而造成的問題。請慎用注冊表編輯器,風(fēng)險自負。在修改注冊表之前,請務(wù)必備份注冊表,并確保您知道在發(fā)生問題時如何使用備份進行還原。有關(guān)如何備份、還原及修改注冊表的詳細信息,請參閱 Microsoft 知識庫文章“Microsoft Windows 注冊表說明”,網(wǎng)址為http://go.microsoft.com/fwlink/?LinkId=62729。

    增加動態(tài)分配到客戶端 TCP/IP 套接字連接的臨時端口的上限。

    降低客戶端 TCP/IP 套接字連接的超時值(默認值為 240 秒)

    啟動注冊表編輯器。

    在注冊表中,瀏覽到并單擊以下注冊表項。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

    在“編輯”菜單中單擊“新建”、“DWORD 值”,然后添加以下注冊表值,以縮短關(guān)閉連接時,該連接處于 TIME_WAIT 狀態(tài)的時間。當連接處于 TIME_WAIT 狀態(tài)時,套接字對無法重新使用:

    值名稱

    TcpTimedWaitDelay

    值數(shù)據(jù)

    <在此輸入一個 30 到 240 之間的十進制值。>

    關(guān)閉注冊表編輯器。

    注意

    必須重新啟動計算機,此更改才會生效。

    注意

    此值的有效范圍為 30 到 300(十進制)之間。默認值為 240。

    啟動注冊表編輯器。

    在注冊表中,瀏覽到并單擊以下注冊表項。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

    在“編輯”菜單中單擊“新建”、“DWORD 值”,然后添加以下注冊表值,以增加可以動態(tài)分配到客戶端的臨時端口的數(shù)量:

    值名稱

    MaxUserPort

    值數(shù)據(jù)

    <在此輸入一個 5000 到 65534 之間的十進制值>

    關(guān)閉注冊表編輯器。

    注意

    必須重新啟動計算機,此更改才會生效。

    注意

    增加用于客戶端 TCP/IP 連接的臨時端口的范圍將占用 Windows 內(nèi)核內(nèi)存。請勿將此設(shè)置的值增加至超過容納客戶端應(yīng)用程序套接字連接所需要的值,以便盡可能降低對 Windows 內(nèi)核內(nèi)存的不必要占用。

    三、tcp發(fā)請求數(shù)據(jù)里為什么后面會自動填充很多零

    數(shù)據(jù)部分不是偶數(shù)。

    在RFC1071的文檔中,有一個C語言的的代碼來求解校驗和。在UDP報文校驗和計算的時候,如果報文的數(shù)據(jù)部分不是偶數(shù)個字節(jié),則在最后面填充0。

    四、TCP連接相關(guān)

    為什么要有三次握手,因為如果只有兩次握手,那么

    第一次:客戶端發(fā)送一個syn包給服務(wù)器,里面有一個隨機生成的syn,然后客戶端處于syn_send狀態(tài)

    第二次:服務(wù)端收到客戶端發(fā)來的syn包之后,確認syn包,也就是生成一個ack=syn+1,然后再自己隨機生成一個syn包,即syn+ack包,然后返回給客戶端,自己變成syn_recv狀態(tài)

    第三次:客戶端收到服務(wù)端發(fā)來的syn+ack包之后,確認ack是正確的之后,返回一個ack=syn+1給服務(wù)端,此包發(fā)送完畢,客戶端進入了ESTABLISHED狀態(tài),服務(wù)端收到ack包后也進入ESTABLISHED狀態(tài)。

    SYN攻擊,當?shù)诙挝帐址?wù)端發(fā)送了syn+ack包之后,收到客戶端發(fā)送的ack之前這段時間的tcp鏈接成為半連接,此時服務(wù)端處于syn_recv狀態(tài)。當大量客戶端隨機IP瘋狂發(fā)送tcp鏈接請求時,客戶端以為是不同用戶的請求,所以隊列中全是半連接,然后導(dǎo)致服務(wù)器宕機,正常請求被丟棄。

    第一個包發(fā)送過程丟失

    A會周期性超時重傳,直到收到B的確認

    第二個包發(fā)送過程丟失

    B會周期性超時重傳,直到收到A的確認

    第三個包發(fā)送過程丟失

    A發(fā)送完數(shù)據(jù)后單方面進入TCP的ESTABLISHED狀態(tài),B還處于半鏈接:

    TCP協(xié)議為什么需要三次握手?

    第一次:客戶端發(fā)送一個fin給服務(wù)端表示自己要斷開連接了,然后進入fin_wait_1狀態(tài)

    第二次:服務(wù)端收到fin后,發(fā)送一個ack=fin+1給客戶端,服務(wù)端進入close_wait狀態(tài),客戶端進入fin_wait_2狀態(tài)

    第三次:服務(wù)端發(fā)送一個fin,用來關(guān)閉服務(wù)端到客戶端的數(shù)據(jù)傳輸,服務(wù)端進入last_ack狀態(tài)

    第四次:客戶端收到fin后,進入time_wait狀態(tài),然后發(fā)送一個ack=fin+1給服務(wù)端,服務(wù)端確認后進入close狀態(tài),完成四次揮手

    TCP協(xié)議是一種面向連接的、可靠的、基于字節(jié)流的運輸層通信協(xié)議。TCP是全雙工模式,這就意味著,當主機1發(fā)出FIN報文段時,只是表示主機1已經(jīng)沒有數(shù)據(jù)要發(fā)送了,主機1告訴主機2,它的數(shù)據(jù)已經(jīng)全部發(fā)送完畢了;但是,這個時候主機1還是可以接受來自主機2的數(shù)據(jù);當主機2返回ACK報文段時,表示它已經(jīng)知道主機1沒有數(shù)據(jù)發(fā)送了,但是主機2還是可以發(fā)送數(shù)據(jù)到主機1的;當主機2也發(fā)送了FIN報文段時,這個時候就表示主機2也沒有數(shù)據(jù)要發(fā)送了,就會告訴主機1,我也沒有數(shù)據(jù)要發(fā)送了,之后彼此就會愉快的中斷這次TCP連接。如果要正確的理解四次分手的原理,就需要了解四次分手過程中的狀態(tài)變化。

    答案解析:

    瀏覽器對并發(fā)請求的數(shù)目限制是針對域名的,即針對同一域名(包括二級域名)在同一時間支持的并發(fā)請求數(shù)量的限制。如果請求數(shù)目超出限制,則會阻塞。因此,網(wǎng)站中對一些靜態(tài)資源,使用不同的一級域名,可以提升瀏覽器并行請求的數(shù)目,加速界面資源的獲取速度。

    在 HTTP/1.0 中,一個http請求收到服務(wù)器響應(yīng)后,會斷開對應(yīng)的TCP連接。這樣每次請求,都需要重新建立TCP連接,這樣一直重復(fù)建立和斷開的過程,比較耗時。所以為了充分利用TCP連接,可以設(shè)置頭字段 Connection: keep-alive ,這樣http請求完成后,就不會斷開當前的TCP連接,后續(xù)的http請求可以使用當前TCP連接進行通信。

    第一次訪問有初始化連接和SSL開銷

    初始化連接和SSL開銷消失了,說明使用的是同一個TCP連接。

    HTTP/1.1 將 Connection 寫入了標準,默認值為 keep-alive 。除非強制設(shè)置為 Connection: close ,才會在請求后斷開TCP連接。

    所以這一題的答案就是:默認情況下建立的TCP連接不會斷開,只有在請求頭中設(shè)置 Connection: close 才會在請求后關(guān)閉TCP連接。

    HTTP/1.1 中,單個TCP連接,在同一時間只能處理一個http請求,雖然存在Pipelining技術(shù)支持多個請求同時發(fā)送,但由于實踐中存在很多問題無法解決,所以瀏覽器默認是關(guān)閉,所以可以認為是不支持同時多個請求。

    HTTP2 提供了多路傳輸功能,多個http請求,可以同時在同一個TCP連接中進行傳輸。

    頁面資源請求時,瀏覽器會同時和服務(wù)器建立多個TCP連接,在同一個TCP連接上順序處理多個HTTP請求。所以瀏覽器的并發(fā)性就體現(xiàn)在可以建立多個TCP連接,來支持多個http同時請求。

    Chrome瀏覽器最多允許對同一個域名Host建立6個TCP連接,不同的瀏覽器有所區(qū)別。

    補充

    如果圖片都是HTTPS的連接,并且在同一域名下,瀏覽器會先和服務(wù)器協(xié)商使用 HTTP2 的 Multiplexing 功能進行多路傳輸,不過未必所有的掛在這個域名下的資源都會使用同一個TCP連接。如果用不了HTTPS或者HTTP2(HTTP2是在HTTPS上實現(xiàn)的),那么瀏覽器會就在同一個host建立多個TCP連接,每一個TCP連接進行順序請求資源。

    參考:

    [1]. 第8題-瀏覽器HTTP請求并發(fā)數(shù)和TCP連接的關(guān)系

    以上就是關(guān)于tcp請求相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。


    推薦閱讀:

    tcp請求(jmeter發(fā)送tcp請求)

    ChatGPT有中文嗎(chatcrypt)

    tcp心跳機制(tcp 心跳)

    又好看又實用的字體(又好看又實用的字體有哪些)

    怎么做電商平臺(買賣天貓店鋪的平臺)