1、什麼是TCP Window
TCP協議在能夠發送數據之前就建立起了「連接」。要實現這個連接,啟動TCP連接的那一方首先將發送一個SYN數據包。這只是一個不包含數據的數據包, 然後,打開SYN標記。如果另一方同時在它收到SYN標記的埠通話,它將發回一個SYN+ACK:SYN和ACK標志位都被打開,並將ACK(確認)編 號欄位設定為剛收到的那個數據包的順序號欄位的值。接下來,連接發起方為了表示收到了這個SYN+ACK信息,會向發送方發送一個最終的確認信息(ACK 包)。這種SYN、SYN+ACK、ACK的步驟被稱為TCP連接建立時的「三次握手」。在這之後,連接就建立起來了。這個連接將一直保持活動狀態,直到 超時或者任何一方發出一個FIN(結束)信號。
任何一方都可以關閉一個TCP連接,要求雙方發送一個FIN信號關閉自己的通訊頻道。一方可以在另 一方之前關閉,或者雙方同時關閉TCP連接。因此,當一方發送一個FIN信號時,另一方可發送「FIN+ACK」,開始關閉自己一方的通信並且確認收到了 第一個FIN信號。發送第一個FIN信號的人接下來再發送一個「FIN+ACK」信息,確認收到第二個FIN信號。另一方就知道這個連接已經關閉了,並且 關閉了自己的連接。發送第一個FIN的人沒有辦法收到最後一個ACK信號的確認信息。這時它會進入「TIME_WAIT」(等待時間)狀態並啟動一個定時 器,防止另一方沒有收到ACK信息並且認為連接仍是打開的。一般來說,這個狀態會持續1至2分鍾。
現在,我們來討論第一個問題。如果有人(假如一 個黑客)在你的Web伺服器上留下一個半開或者半關的連接,那就是一個壞消息。每一個連接都要消耗內存,打開數千個虛假的TCP連接可能導致伺服器癱瘓。 當然,你實際上不可能在不影響TCP正常工作的情況下調整TCP定時器。如果你聽說過TCP SYN 攻擊的話,那就是這個意思。為了防止出現這種情況,大多數操作系統都要限制半開連接的數量。例如,Linux默認的限制一般是256個。
關於持續 流控制問題,現在我們就來討論這個問題。TCP中實現它的機制是TCP滑動窗口機制。TCP協議使用「重新發送與正向ACK」來保證數據傳輸的可靠性。發 送方將等待一段時間,如果沒有收到其發送的數據包的ACK確認信息,發送方就要重新發送。順便說一下,TCP協議中有許多定時器。這只是其中一個定時器。 ACK的概念對於流控制是非常重要的,因為TCP滑動窗口協議使TCP的往復確認變得更有效率。如果TCP要發送一個數據包並且等待每一個ACK確認信 息,它實際上就把數據吞吐量削減了一半。
理想的情況是,我們能夠一次發送許多數據包,然後等待收到一個確認收到全部數據包的ACK信息,而不用對 方發來更多的數據。但是,我們如何知道發送了多少個數據包呢?TCP窗口尺寸可以控制在「已發送但是沒有確認」的狀態下能夠容納多少個數據包。如果這個窗 口尺寸很大,我們不必等待ACK信息就可以發送大量的數據包。這實際上就是流控制。
接收方就是控制窗口大小的那一方。如果接收方將窗口大小設為 「0」,那麼,發送方根本就不能發送任何數據。如果這個窗口的尺寸是「1」,那麼,我們就回到了簡單的「發送和等待ACK」的協議。如果最後的窗口尺寸是 「0」,發送者將發出一個探測信號以搞清這個窗口什麼時間再次打開。如果發送方從來沒有收到ACK信息,它就一直不斷地重試,直到定時器過期。請記住,這 個窗口尺寸在TCP頭中是一個16位欄位。如果你要一個窗口尺寸(按位元組計算)大於16位可以表示的容量(2的16次方個位元組),還可以使用一個名為「窗 口縮放」的TCP協議選項。這個選項允許窗口尺寸乘以比例因子。如果沒有極大的窗口尺寸,TCP協議就就無法充分利用GB級別的高速連接。這也是我們需要 針對這些新的高速連接調整TCP參數的原因,
關於TCP流控制的問題,我們不能不提一下Nagle演算法。如果我們在一個telnet連接上使用一 個大的TCP窗口會發生什麼事情呢?你會輸入一個指令(例如敲了一個字母),然後一直等待回應它卻遲遲不出現在終端回顯上。這對於實時通信來說是一個大問 題。而且,telnet也會增加網路的阻塞度,因為一個位元組的數據(例如我們的一次擊鍵)需要40個位元組的包頭。於是RFC 896定義這個Nagle演算法,用以消除小的數據包。這個思路是我們應該在數據發送之前給先把小數據集中起來然後一次性發送,以便提高效率。為了更有效 率,它還限定只允許存在一個未經確認的數據段,你在得到確認信息之前不能發送更多的數據。Telnet和互動SSH連接使用TCP_NODELAY套介面 選項啟用這個功能,這樣當你按下一個按鍵的時候,你能夠立即得到一個回應。
當然,我們仍是忽略了有關TCP協議的許多事情。然而,通過這兩篇文章的了解,你應該能夠理解其它一些更專業的TCP著作。阻塞控制與流控制不同,本文沒有討論。如果你真的對了解TCP協議的全部工作原理感興趣,你可以詳細閱讀TCP RFC。
小結
TCP 協議非常善於解決流控制問題,因此非常適應於許多應用程序。TCP協議中的流控制的含義是:「在收到對發送的數據的確認信息這前,我可以發送多少數據?」 這就是TCP窗口。學習阻塞控制的問題可以留作讀者的練習。需要指出的是,在TCP協議之下連接速度開始很慢,然後速度逐漸加快。這個做法並不總是最理想 的。
2、如何修改windows伺服器最大的tcp連接數
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters\TcpTimedWaitDelay to 30and HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters\MaxUserPort to 65534and rebooting the machineSee the readme.doc file for more information通過網路搜索介紹最多的還是讓修改TimedWaitDelay 和MaxUserPort這2個值,其中是將TimedWaitDelay修改的相對小點,可以根據實際情況來定,同時將MaxUserPort這個值修改大些,但是修改完並重啟機器後,該問題仍然存在,通過多方查資料,然後對一些注冊表進行修改:[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] TcpNumConnections = 0x00fffffe (Default = 16,777,214) 以上注冊表信息配置單機的最大允許的TCP連接數,默認為 16M。這個數值看似很大,這個並不是限制最大連接數的唯一條件,還有其他條件會限制到TCP 連接的最大連接數。 最大動態埠數 TCP客戶端和伺服器連接時,客戶端必須分配一個動態埠,默認情況下這個動態埠的分配范圍為 1024-5000 ,也就是說默認情況下,客戶端最多可以同時發起3977 個Socket 連接。我們可以修改如下注冊表來調整這個動態埠的范圍 [HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] MaxUserPort = 5000 (Default = 5000, Max = 65534) 最大TCB 數量 系統為每個TCP 連接分配一個TCP 控制塊(TCP control block or TCB),這個控制塊用於緩存TCP連接的一些參數,每個TCB需要分配 0.5 KB的pagepool 和 0.5KB 的Non-pagepool,也就說,每個TCP連接會佔用 1KB 的系統內存。 系統的最大TCB數量由如下注冊表設置決定 [HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] MaxFreeTcbs = 2000 (Default = RAM dependent, but usual Pro = 1000, Srv=2000) 非Server版本,MaxFreeTcbs 的默認值為1000 (64M 以上物理內存) Server 版本,這個的默認值為 2000。 也就是說,默認情況下,Server 版本最多同時可以建立並保持2000個TCP 連接。 最大TCB Hash table 數量 TCB 是通過Hash table 來管理的,下面注冊表設置決定了這個Hash table 的大小 HKEY_LOCAL_MACHINE \System \CurrentControlSet \services \Tcpip \Parameters] MaxHashTableSize = 512 (Default = 512, Range = 64-65536) 這個值指明分配 pagepool 內存的數量,也就是說,如果MaxFreeTcbs = 1000 , 則 pagepool 的內存數量為 500KB 那麼 MaxHashTableSize 應大於 500 才行。這個數量越大,則Hash table 的冗餘度就越高,每次分配和查找 TCP 連接用時就越少。這個值必須是2的冪,且最大為65536. MaxUserPort = 65534 (Decimal) MaxHashTableSize = 65536 (Decimal) MaxFreeTcbs = 16000 (Decimal) 這里我們可以看到 MaxHashTableSize 被配置為比MaxFreeTcbs 大4倍,這樣可以大大增加TCP建立的速度。
3、什麼是TCP Window
TCP協議的數據傳輸需要ACK來確認,但是考慮數據在網路傳輸的RTT,如果發送端每發送下一個數據包之前都要收到接收方的ACK才行,這樣會嚴重影響TCP的傳輸帶寬。
所以就有TCP window的概念,如果TCP接收方通過TCP WINDOW告訴發送方自己的TCP WINDOW size,那麼發送方就可以一口氣最多發送TCP WINDOW size大小的數據包,而不用每次發送都要等對方ACK。這樣可以大大加快TCP的傳出帶寬。
4、什麼是TCP Window
簡單來說, TCP Receive Window是在TCP連接兩端都有的緩沖區, 用於暫時保存到來的數據. 在這個緩沖區中的數據會被發送到應用程序中, 為新到來的數據騰出空間. 如果這個緩沖滿了, 那麼數據的接收方會警告發送方在緩沖去清空之前已經不能在收取更多的數據了.
這其中涉及到一些細節, 但那都是很基本的東西.
一般, 設備會在TCP Header信息中通知對方當前它的TCPWindows的大小.
5、如何修改windows伺服器最大的tcp連接數
眾所周知,為了防範蠕蟲病毒的傳播和攻擊,Windows XP SP2將並發線程最多限制為10個。SP2利用Messages動態鏈接庫,來實時監控每個進程的並發線程數目,一旦它發現某進程的線程數超過10個,就會屏蔽掉部分線程。SP2這樣做,雖然可以防範震盪波類型的蠕蟲病毒,加強系統安全,但是也帶了一些負面影響,例如當你使用BT、P2P或FlashGet軟體下載時,部分線程將被屏蔽掉,因此下載速度會變得很慢。為此,你可以採取以下對策,來突破TCP並發連接數,從而提高SP2的多線程訪問速度。
一、注冊表修改法的誤區
為了突破SP2對TCP並發連接數的限制,網上曾經流傳過一種修改注冊表的方法,操作步驟如下:
單擊「開始」/運行,輸入Regedit打開注冊表,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,修改的「TcpNumConnections」的鍵值,將之由10改為250,即設置TCP最大並發連接數為250。
經過實際測試,我們發現該方法看起來有效,但實質上並不能突破並發連接數限制,提高SP2的多線程訪問速度。因為SP2對線程數目的控制,是通過「Tcpip.sys」這個系統文件來實現的,並不是通過注冊表實現的,因此,該方法不能增加SP2的TCP並發連接數。
二、使用工具來替換Tcpip.sys
為了突破SP2的TCP並發連接數限制,正確地方法是修改Windows XP SP2的系統文件Tcpip.sys。Tcpip.sys是Windows XP SP2重要的系統文件,位於「C:\Windows\system32\drivers目錄下。該文件由於平時受到系統保護,所以正常情況下你是無法替換它的,必須在安全模式或純DOS模式下才能替換,建議你使用以下專門工具、來替換「Tcpip.sys」文件,操作步驟如下:
從網上下載替換工具(僅為30KB),用它來修改系統文件Tcpip.sys最大安全並發連接限制;然後備份一下C:\Windows\system32\drivers\Tcpip.sys文件。
接下來,雙擊打開下載文件ZIP壓縮包,運行其中的替換工具EvID4226Patch.exe,隨之將彈出一個命令行提示符窗口,首先顯示Windows當前的Tcpip.sys文件版本,以及並發連接的限制數值(默認為10);接著詢問你是否將連接數限制在50(如下圖1),你可以選擇「Yes/No/Change」,如果你輸入「Y」,則會將並發連接數改為「50」,如果想改為其他數(例如250),可以在提示符後輸入「c」,然後輸入最大的並發連接數(例如250)回車,最後在提示符下輸入「Y」並回車,這樣就替換了Tcpip.sys文件;Tcpip.sys文件被替換後,隨之會彈出系統文件保護對話框,你可以點擊「取消」按鈕,然後點擊「是」按鈕,重新啟動後,Tcpip.sys文件的替換就大功告成了!
現在你的最大並發連接數已超過10個,達到了250個,因此Windows XP SP2的多線程訪問速度得到了提升,當你用FlashGet、BT等多線程下載時,就不會感到網路帶寬的限制了。
三、DOS下修改Tcpip.sys文件
以上替換程序EvID4226Patch.exe也可以在DOS下使用,方法是:首先把EvID4226Patch.exe拷貝到C盤根目錄下;然後再進入DOS模式,進入C盤根目錄,輸入命令EvID4226Patch/L=$n$/w=C:\WINDOWS\system32\drivers/L=tcpip.sys即可修改Tcpip.sys文件。
注意:以上$n$為你要設置的最大安全連接數,假如要把最大並發連接數設置為250個線程,那麼輸入命令EvID4226Patch/L=150/w=C:\WINDOWS\system32\drivers/L=tcpip.sys即可。
四、使用比特精靈附帶的工具
比特精靈附帶的工具「TCP/IP連接數破解補丁」也可以替換Tcpip.sys,突破SP2的TCP並發連接數限制。
從網上下載比特精靈(BitSpirit)V2.7.2.225簡體中文正式版,然後雙擊下載文件進行安裝。你可以選擇安裝哪些組件(下圖2),應該安裝「用於Windows XP SP2的TCP/IP連接數破解補丁」,安裝結束後,XP開始菜單中就會有BitSpirit程序組,單擊其中的「XP SP2連接數破解補丁」,即可修改Tcpip.sys文件。
單擊「XP SP2連接數破解補丁」,彈出該軟體的界面,界面中列出了當前Tcpip.sys的版本、及最大並發連接數(右圖3),你可以在「TCP/IP Linitation」輸入一個數,來設置最大並發連接數,例如輸入250,然後按「Apply」按鈕,重啟系統後,你的SP2最大並發連接數就改為了250。
以上幾種方法雖然提高了Windows XP SP2的多線程訪問速度,但卻降低了SP2的安全性能,如果你的電腦感染了病毒和木馬,過多地啟用新線程,會加速病毒和木馬地蔓延,因此你在追求網路下載速度的同時,也要注意網路安全。建議你及時安裝升級殺毒軟體和防火牆,如果是普通用戶,可以利用上面的方法,將TCP最大並發連接數設置為5~8,BT用戶可以設置為160~400。
6、什麼是TCP Window
TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於位元組流的傳輸層通信協議,由的RFC 793定義。在簡化的計算機網路OSI模型中,它完成第四層傳輸層所指定的功能,用戶數據報協議(UDP)是同一層內[1] 另一個重要的傳輸協議。在網際網路協議族(Internet protocol suite)中,TCP層是位於IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。[1]
應用層向TCP層發送用於網間傳輸的、用8位位元組表示的數據流,然後TCP把數據流分區成適當長度的報文段(通常受該計算機連接的網路的數據鏈路層的最大傳輸單元([1] MTU)的限制)。之後TCP把結果包傳給IP層,由它來通過網路將包傳送給接收端實體[1] 的TCP層。TCP為了保證不發生丟包,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的包發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據包就被假設為已丟失將會被進行重傳。TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算校驗和。[1]
7、怎樣修改windows伺服器中最大的tcp連接數?
在做性能測試測試時候,如果被測試的系統頁面很簡單,並且性能很好,這樣會導致壓力機得tcp鏈接數不夠而導致如下錯誤:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters\TcpTimedWaitDelay to 30
and HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters\MaxUserPort to 65534
and rebooting the machine
See the readme.doc file for more information
通過百度搜索介紹最多的還是讓修改TimedWaitDelay 和MaxUserPort這2個值,其中是將TimedWaitDelay修改的相對小點,可以根據實際情況來定,
同時將MaxUserPort這個值修改大些,但是修改完並重啟機器後,該問題仍然存在,通過多方查資料,然後對一些注冊表進行修改:
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
TcpNumConnections = 0x00fffffe (Default = 16,777,214)
以上注冊表信息配置單機的最大允許的TCP連接數,默認為 16M。這個數值看似很大,這個並不是限制最大連接數的唯一條件,還有其他條件會限制到TCP 連接的最大連接數。
最大動態埠數
TCP客戶端和伺服器連接時,客戶端必須分配一個動態埠,默認情況下這個動態埠的分配范圍為 1024-5000 ,也就是說默認情況下,客戶端最多可以同時發起3977 個Socket 連接。我們可以修改如下注冊表來調整這個動態埠的范圍
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
MaxUserPort = 5000 (Default = 5000, Max = 65534)
最大TCB 數量
系統為每個TCP 連接分配一個TCP 控制塊(TCP control block or TCB),這個控制塊用於緩存TCP連接的一些參數,每個TCB需要分配 0.5 KB的pagepool 和 0.5KB 的Non-pagepool,也就說,每個TCP連接會佔用 1KB 的系統內存。
系統的最大TCB數量由如下注冊表設置決定
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
MaxFreeTcbs = 2000 (Default = RAM dependent, but usual Pro = 1000, Srv=2000)
非Server版本,MaxFreeTcbs 的默認值為1000 (64M 以上物理內存)
Server 版本,這個的默認值為 2000。
也就是說,默認情況下,Server 版本最多同時可以建立並保持2000個TCP 連接。
最大TCB Hash table 數量
TCB 是通過Hash table 來管理的,下面注冊表設置決定了這個Hash table 的大小
HKEY_LOCAL_MACHINE \System \CurrentControlSet \services \Tcpip \Parameters]
MaxHashTableSize = 512 (Default = 512, Range = 64-65536)
這個值指明分配 pagepool 內存的數量,也就是說,如果MaxFreeTcbs = 1000 , 則 pagepool 的內存數量為 500KB
那麼 MaxHashTableSize 應大於 500 才行。這個數量越大,則Hash table 的冗餘度就越高,每次分配和查找 TCP 連接用時就越少。這個值必須是2的冪,且最大為65536.
MaxUserPort = 65534 (Decimal)
MaxHashTableSize = 65536 (Decimal)
MaxFreeTcbs = 16000 (Decimal)
這里我們可以看到 MaxHashTableSize 被配置為比MaxFreeTcbs 大4倍,這樣可以大大增加TCP建立的速度。
8、如何修改windows伺服器最大的tcp連接數
去注冊表來:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
新建以下自項(類型為:DWORD 值,選擇十進制)
MaxUserPort=65534
重啟伺服器即可。
9、windows7如何開啟TCP/IP
1. 右鍵點 網路(桌面)——屬性——更改適配器設置(左上角),詳細見圖
2. 本地連接、無線連接和寬頻等等的都在這兒,右鍵屬性就有了
用IP4就行了 IP6不用動 吧他設置成自動的獲取
以下和XP一樣 注意是IP 4
下來解釋一下這里的復選框都代表些什麼:
自動獲得IP地址(O):選擇此項後,每次開機系統將從DHCP伺服器上自動分配到一個動態IP地址,這個地址是公網IP地址,也就是本地計算機在廣域網中的地址信息;
使用下面的IP地址(S):選擇此項後,需要進行一系列的IP地址配置,主要用於配置區域網IP地址;
IP地址(I):本地計算機在區域網中的IP地址,這個IP地址必須在默認網關允許的欄位范圍之內,比如說默認網關(路由器)只認為在 192.168.0.1~192.168.0.255欄位之間合法,那麼IP地址(I)就只能在該欄位之內,本文所講的修改IP地址就是指的修改這串局域 網IP地址的最後一位數值,它可以在1~255之間任意改動,但任何時候最後一個欄位都不能超過255;
子網掩碼(U): 用於聲明哪些欄位屬於公網位標識,哪些欄位屬於區域網位標識,默認都為255.255.255.0;解釋一下,前面三個255表示在公網中的位標識,這三 個欄位只能在255數值之內,而最後的一個0表示在區域網中的位標識,區域網位標識也只能在255數值之內;
默認網關(D):所處的區域網伺服器的IP地址(路由器的IP地址),通常區域網伺服器(路由器)的默認IP地址為192.168.0.1或192.168.1.1;
自動獲得DNS伺服器地址(B):跟自動獲得IP地址一樣,選擇此項後,每次開機DHCP伺服器都會為計算機分配一個合適的DNS解析伺服器IP地址;
使用下面的DNS伺服器地址(E):可以手動添加當地的DNS伺服器解析地址,但在使用路由器的情況下可以不用設置,直接為空,因為通常路由器 自帶開啟DHCP伺服器自動分配的功能,每次開啟路由器,DHCP伺服器都會向路由器分配一個合適的DNS解析地址,該地址保存在路由器中;
首選DNS伺服器(P):手動設置默認的DNS伺服器解析地址,用於每次開機計算機會向該DNS伺服器請求分配一個IP地址;
備用DNS伺服器(A):手動設置的備用DNS伺服器解析地址,一旦首選DNS伺服器無法分配IP地址時,就會向備用DNS伺服器發出分配請求;
最後點擊確定即可修改ip地址了,IP地址更改完畢之後需要重新啟動計算機;
10、什麼是TCP Window
前些天剛回答過同抄樣的襲問題,應該多利用搜索功能,很少有得不到答案的問題。
如圖,TCP的window段,也就是窗體欄位,佔16位,窗體欄位用來控制對方發送的數據量,單位為位元組。TCP連接的一端依據設置的緩存空間大小確定
自己的接收窗體大小,然後通知對方以確定對方的發送窗體的上限。一般來說,雙方通過告知對方這個值的大小,保證數據高速,可靠傳輸,網上關於這個值的應用
的文章很多,可以查一下,一般來說,這個值對於提高傳輸效率方面的研究非常有價值