當前位置:首頁 » 雲伺服器 » tcp伺服器廣播自身地址

tcp伺服器廣播自身地址

發布時間: 2022-11-06 01:37:49

1. tcp協議通過什麼來區分不同的連接

TCP/IP
不同的計算機系統,就好像語言不同的兩個人互相見了面,完全不能交流信息。因而他們需要定義一些共通的東西來進行交流,TCP/IP就是為此而生。TCP/IP不是一個協議,而是一個協議族的統稱。裡麵包括了IP協議,IMCP協議,TCP協議,以及我們更加熟悉的http、ftp、pop3協議等等。電腦有了這些,就好像學會了外語一樣,就可以和其他的計算機終端做自由的交流了。
TCP/IP 層次
應用層(http、ftp、smtp) -->傳輸層(TCP、UDP)-->網路層(IP)-->數據鏈路層
域名系統 :域名系統是一個分布的資料庫,它提供將主機名(就是網址啦)轉換成IP地址的服務。
埠號(port): 注意,這個號碼是用在TCP,UDP上的一個邏輯號碼,並不是一個硬體埠,我們平時說把某某埠封掉了,也只是在IP層次把帶有這個號碼的IP包給過濾掉了而已。
應用編程介面:現在常用的編程介面有socket和TLI。
數據鏈路層
數據鏈路層有三個目的:
為IP模塊發送和 接收IP數據報。
為ARP模塊發送ARP請求和接收ARP應答。
為RARP發送RARP請 求和接收RARP應答
ip大家都聽說過。至於ARP和RARP,ARP叫做地址解析協議,是用IP地址換MAC地址的一種協議,而RARP則叫做逆地址解析協議.
--
IP 、ARP 、RARP 協議
三者都是在網路層 ,ARP協議用來找到目標主機的Ethernet網卡Mac地址,IP則承載要發送的消息。數據鏈路層可以從ARP得到數據的傳送信息,而從IP得到要傳輸的數據信息。
IP 協議
IP協議是TCP/IP協議的核心,所有的TCP,UDP,IMCP,IGCP的數據都以IP數據格式傳輸。要注意的是,IP不是可靠的協議,這是說,IP協議沒有提供一種數據未傳達以後的處理機制--這被認為是上層協議:TCP或UDP要做的事情。所以這也就出現了TCP是一個可靠的協議,而UDP就沒有那麼可靠的區別。

協議頭
八位的TTL欄位,還記得這個欄位是做什麼的么?這個欄位規定該數據包在穿過多少個路由之後才會被拋棄(這里就體現出來IP協議包的不可靠性,它不保證數據被送達),某個ip數據包每穿過一個路由器,該數據包的TTL數值就會減少1,當該數據包的TTL成為零,它就會被自動拋棄。這個欄位的最大值也就是255,也就是說一個協議包也就在路由器裡面穿行255次就會被拋棄了,根據系統的不同,這個數字也不一樣,一般是32或者是64,Tracerouter這個工具就是用這個原理工作的,tranceroute的-m選項要求最大值是255,也就是因為這個TTL在IP協議裡面只有8bit。
現在的ip版本號是4,所以也稱作IPv4。現在還有IPv6,而且運用也越來越廣泛了。
IP路由選擇
當一個IP數據包準備好了的時候,IP數據包(或者說是路由器)是如何將數據包送到目的地的呢?它是怎麼選擇一個合適的路徑來"送貨"的呢?
最特殊的情況是目的主機和主機直連,那麼主機根本不用尋找路由,直接把數據傳遞過去就可以了。至於是怎麼直接傳遞的,這就要靠ARP協議了。
稍微一般一點的情況是,主機通過若干個路由器(router)和目的主機連接。那麼路由器就要通過ip包的信息來為ip包尋找到一個合適的目標來進行傳遞,比如合適的主機,或者合適的路由。路由器或者主機將會用如下的方式來處理某一個IP數據包
如果IP數據包的TTL(生命周期)以到,則該IP數據包就被拋棄。
搜索路由表,優先搜索匹配主機,如果能找到和IP地址完全一致的目標主機,則將該包發向目標主機
搜索路由表,如果匹配主機失敗,則匹配同子網的路由器,這需要「子網掩碼(1.3.)」的協助。如果找到路由器,則將該包發向路由器。
搜索路由表,如果匹配同子網路由器失敗,則匹配同網號路由器,如果找到路由器,則將該包發向路由器。
搜索路由表,如果以上都失敗了,就搜索默認路由,如果默認路由存在,則發包
如果都失敗了,就丟掉這個包
這再一次證明了,ip包是不可靠的。因為它不保證送達。
ARP協議
還記得數據鏈路層的乙太網的協議中,每一個數據包都有一個MAC地址頭么?我們知道每一塊乙太網卡都有一個MAC地址,這個地址是唯一的,那麼IP包是如何知道這個MAC地址的?這就是ARP協議的工作。
ARP(地址解析)協議是一種解析協議,本來主機是完全不知道這個IP對應的是哪個主機的哪個介面,當主機要發送一個IP包的時候,會首先查一下自己的ARP高速緩存(就是一個IP-MAC地址對應表緩存),如果查詢的IP-MAC值對不存在,那麼主機就向網路發送一個ARP協議廣播包,這個廣播包裡面就有待查詢的IP地址,而直接收到這份廣播的包的所有主機都會查詢自己的IP地址,如果收到廣播包的某一個主機發現自己符合條件,那麼就准備好一個包含自己的MAC地址的ARP包傳送給發送ARP廣播的主機,而廣播主機拿到ARP包後會更新自己的ARP緩存(就是存放IP-MAC對應表的地方)。發送廣播的主機就會用新的ARP緩存數據准備好數據鏈路層的的數據包發送工作。
arp -a 可以查詢自己的arp緩存
這樣的高速緩存是有時限的,一般是20分鍾(伯克利系統的衍生系統)。
--
ICMP協議
--
UDP 協議
UDP是傳輸層協議,和TCP協議處於一個分層中,但是與TCP協議不同,UDP協議並不提供超時重傳,出錯重傳等功能,也就是說其是不可靠的協議。
1 、UDP 的埠號
由於很多軟體需要用到UDP協議,所以UDP協議必須通過某個標志用以區分不同的程序所需要的數據包。埠號的功能就在於此,例如某一個UDP程序A在系統中注冊了3000埠,那麼,以後從外面傳進來的目的埠號為3000的UDP包都會交給該程序。埠號理論上可以有2^16這么多。因為它的長度是16個bit
2 、UDP 的檢驗和
這是一個可選的選項,並不是所有的系統都對UDP數據包加以檢驗和數據(相對TCP協議的必須來說),但是RFC中標准要求,發送端應該計算檢驗和。
UDP檢驗和覆蓋UDP協議頭和數據,這和IP的檢驗和是不同的,IP協議的檢驗和只是覆蓋IP數據頭,並不覆蓋所有的數據。UDP和TCP都包含一個偽首部,這是為了計算檢驗和而攝制的。偽首部甚至還包含IP地址這樣的IP協議裡面都有的信息,目的是讓UDP兩次檢查數據是否已經正確到達目的地。如果發送端沒有打開檢驗和選項,而接收端計算檢驗和有差錯,那麼UDP數據將會被悄悄的丟掉(不保證送達),而不產生任何差錯報文。
3 、UDP 的長度
UDP可以很長很長,可以有65535位元組那麼長。但是一般網路在傳送的時候,一次一般傳送不了那麼長的協議(涉及到MTU的問題),就只好對數據分片,當然,這些是對UDP等上級協議透明的,UDP不需要關心IP協議層對數據如何分片。
4 、IP 分片
IP在從上層接到數據以後,要根據IP地址來判斷從那個介面發送數據(通過選路),並進行MTU的查詢,如果數據大小超過MTU就進行數據分片。數據的分片是對上層和下層透明,而數據也只是到達目的地還會被重新組裝,不過不用擔心,IP層提供了足夠的信息進行數據的再組裝。
在IP頭裡面,16bit識別號唯一記錄了一個IP包的ID,具有同一個ID的IP片將會被重新組裝;而13位片偏移則記錄了某IP片相對整個包的位置;而這兩個表示中間的3bit標志則標示著該分片後面是否還有新的分片。這三個標示就組成了IP分片的所有信息,接受方就可以利用這些信息對IP數據進行重新組織(就算是後面的分片比前面的分片先到,這些信息也是足夠了)。
因為分片技術在網路上被經常的使用,所以偽造IP分片包進行流氓攻擊的軟體和人也就層出不窮。
5 、ICMP源站抑制差錯
當目標主機的處理速度趕不上數據接收的速度,因為接受主機的IP層緩存會被占滿,所以主機就會發出一個「我受不了」的一個ICMP報文。
--
單播廣播和多播
單播
單播是說,對特定的主機進行數據傳送。例如給某一個主機發送IP數據包。這時候,數據鏈路層給出的數據頭裡面是非常具體的目的地址,對於乙太網來 說,就是網卡的MAC地址(不是FF-FF-FF-FF-FF-FF這樣的地址)。現在的具有路由功能的主機應該可以將單播數據定向轉發,而目的主機的網 絡介面則可以過濾掉和自己MAC地址不一致的數據。
廣播
廣播是主機針對某一個網路上的所有主機發送數據包。這個網路可能是網路,可能是子網,還可能是所有的子網。如果是網路,例如A類網址的廣播就是 netid.255.255.255,如果是子網,則是netid.netid.subnetid.255;如果是所有的子網(B類IP)則是則是 netid.netid.255.255。廣播所用的MAC地址FF-FF-FF-FF-FF-FF。網路內所有的主機都會收到這個廣播數據,網卡只要把 MAC地址為FF-FF-FF-FF-FF-FF的數據交給內核就可以了。一般說來ARP,或者路由協議RIP應該是以廣播的形式播發的。
多播
可以說廣播是多播的特例,多播就是給一組特定的主機(多播組)發送數據,這樣,數據的播發范圍會小一些(實際上播發的范圍一點也沒有變小),多播的MAC地址是最高位元組的低位為一,例 如01-00-00-00-00-00。多播組的地址是D類IP,規定是224.0.0.0-239.255.255.255。
雖然多播比較特殊,但是究其原理,多播的數據還是要通過數據鏈路層進行MAC地址綁定然後進行發送。所以一個乙太網卡在綁定了一個多播IP地址之後,必 定還要綁定一個多播的MAC地址,才能使得其可以像單播那樣工作。這個多播的IP和多播MAC地址有一個對應的演算法,在書的p133到p134之間。可以看到 這個對應不是一一對應的,主機還是要對多播數據進行過濾。
--
TCP
TCP和UDP處在同一層---運輸層,但是TCP和UDP最不同的地方是,TCP提供了一種可靠的數據傳輸服務,TCP是面向連接的,也就是說,利用TCP通信的兩台主機首先要經歷一個「撥打電話」的過程,等到通信准備結束才開始傳輸數據,最後結束通話。所以TCP要比UDP可靠的多,UDP是把數據直接發出去,而不管對方是不是在收信,就算是UDP無法送達,也不會產生ICMP差錯報文,這一經時重申了很多遍了。
把TCP保證可靠性的簡單工作原理:
應用數據被分割成TCP認為最適合發送的數據塊。這和UDP完全不同,應用程序產生的 數據報長度將保持不變。由TCP傳遞給IP的信息單位稱為報文段或段
當TCP發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能 及時收到一個確認,將重發這個報文段.
當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常將推遲幾分之一秒.
TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸 過程中的任何變化。如果收到段的檢驗和有差錯, T P將丟棄這個報文段和不確認收到此報文段(希望發端超時並重發)。
既然TCP報文段作為IP數據報來傳輸,而IP數據報的到達可能會失序,因此TCP報文段 的到達也可能會失序。如果必要, TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。
TCP還能提供流量控制。TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發送接收端緩沖區所能接納的數據。這將防止較快主機致使較慢主機的緩沖區溢出。
從這段話中可以看到,TCP中保持可靠性的方式就是超時重發,這是有道理的,雖然TCP也可以用各種各樣的ICMP報文來處理這些,但是這也不是可靠的,最可靠的方式就是只要不得到確認,就重新發送數據報,直到得到對方的確認為止。
TCP的首部和UDP首部一樣,都有發送埠號和接收埠號。但是顯然,TCP的首部信息要比UDP的多,可以看到,TCP協議提供了發送和確認所需要的所有必要的信息。可以想像一個TCP數據的發送應該是如下的一個過程。
雙方建立連接
發送方給接受方TCP數據報,然後等待對方的確認TCP數據報,如果沒有,就重新發,如果有,就發送下一個數據報。
接受方等待發送方的數據報,如果得到數據報並檢驗無誤,就發送ACK(確認)數據報,並等待下一個TCP數據報的到來。直到接收到FIN(發送完成數據報)
中止連接
可以想見,為了建立一個TCP連接,系統可能會建立一個新的進程(最差也是一個線程),來進行數據的傳送
--
TCP協議
TCP是一個面向連接的協議,在發送輸送之前 ,雙方需要確定連接。而且,發送的數據可以進行TCP層的分片處理。
TCP連接的建立過程 ,可以看成是三次握手 。而連接的中斷可以看成四次握手 。
1.連接的建立
在建立連接的時候,客戶端首先向伺服器申請打開某一個埠(用SYN段等於1的TCP報文),然後伺服器端發回一個ACK報文通知客戶端請求報文收到,客戶端收到確認報文以後再次發出確認報文確認剛才伺服器端發出的確認報文(繞口么),至此,連接的建立完成。這就叫做三次握手。如果打算讓雙方都做好准備的話,一定要發送三次報文,而且只需要三次報文就可以了。
可以想見,如果再加上TCP的超時重傳機制,那麼TCP就完全可以保證一個數據包被送到目的地。
2.結束連接
TCP有一個特別的概念叫做half-close,這個概念是說,TCP的連接是全雙工(可以同時發送和接收)連接,因此在關閉連接的時候,必須關閉傳和送兩個方向上的連接。客戶機給伺服器一個FIN為1的TCP報文,然後伺服器返回給客戶端一個確認ACK報文,並且發送一個FIN報文,當客戶機回復ACK報文後(四次握手),連接就結束了。
3.最大報文長度
在建立連接的時候,通信的雙方要互相確認對方的最大報文長度(MSS),以便通信。一般這個SYN長度是MTU減去固定IP首部和TCP首部長度。對於一個乙太網,一般可以達到1460位元組。當然如果對於非本地的IP,這個MSS可能就只有536位元組,而且,如果中間的傳輸網路的MSS更加的小的話,這個值還會變得更小。
4.客戶端應用程序的狀態遷移圖
客戶端的狀態可以用如下的流程來表示:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
以上流程是在程序正常的情況下應該有的流程,從書中的圖中可以看到,在建立連接時,當客戶端收到SYN報文的ACK以後,客戶端就打開了數據交互地連接。而結束連接則通常是客戶端主動結束的,客戶端結束應用程序以後,需要經歷FIN_WAIT_1,FIN_WAIT_2等狀態,這些狀態的遷移就是前面提到的結束連接的四次握手。
5.伺服器的狀態遷移圖
伺服器的狀態可以用如下的流程來表示:
CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
在建立連接的時候,伺服器端是在第三次握手之後才進入數據交互狀態,而關閉連接則是在關閉連接的第二次握手以後(注意不是第四次)。而關閉以後還要等待客戶端給出最後的ACK包才能進入初始的狀態。
6.TCP伺服器設計
前面曾經講述過UDP的伺服器設計,可以發現UDP的伺服器完全不需要所謂的並發機制,它只要建立一個數據輸入隊列就可以。但是TCP不同,TCP伺服器對於每一個連接都需要建立一個獨立的進程(或者是輕量級的,線程),來保證對話的獨立性。所以TCP伺服器是並發的。而且TCP還需要配備一個呼入連接請求隊列(UDP伺服器也同樣不需要),來為每一個連接請求建立對話進程,這也就是為什麼各種TCP伺服器都有一個最大連接數的原因。而根據源主機的IP和埠號碼,伺服器可以很輕松的區別出不同的會話,來進行數據的分發。
TCP的交互數據流
對於交互性要求比較高的應用,TCP給出兩個策略來提高發送效率和減低網路負擔:(1)捎帶ACK。(2)Nagle演算法(一次盡量多的發數據)
捎帶ACK的發送方式
這個策略是說,當主機收到遠程主機的TCP數據報之後,通常不馬上發送ACK數據報,而是等上一個短暫的時間,如果這段時間裡面主機還有發送到遠程主機的TCP數據報,那麼就把這個ACK數據報「捎帶」著發送出去,把本來兩個TCP數據報整合成一個發送。一般的,這個時間是200ms。可以明顯地看到這個策略可以把TCP數據報的利用率提高很多。
Nagle演算法
上過bbs的人應該都會有感受,就是在網路慢的時候發貼,有時鍵入一串字元串以後,經過一段時間,客戶端「發瘋」一樣突然回顯出很多內容,就好像數據一下子傳過來了一樣,這就是Nagle演算法的作用。
Nagle演算法是說,當主機A給主機B發送了一個TCP數據報並進入等待主機B的ACK數據報的狀態時,TCP的輸出緩沖區裡面只能有一個TCP數據報,並且,這個數據報不斷地收集後來的數據,整合成一個大的數據報,等到B主機的ACK包一到,就把這些數據「一股腦」的發送出去。雖然這樣的描述有些不準確,但還算形象和易於理解,我們同樣可以體會到這個策略對於低減網路負擔的好處。
在編寫插口程序的時候,可以通過TCP_NODELAY來關閉這個演算法。並且,使用這個演算法看情況的,比如基於TCP的X窗口協議,如果處理滑鼠事件時還是用這個演算法,那麼「延遲」可就非常大了。
2.TCP的成塊數據流
對於FTP這樣對於數據吞吐量有較高要求的要求,將總是希望每次盡量多的發送數據到對方主機,就算是有點「延遲」也無所謂。TCP也提供了一整套的策略來支持這樣的需求。TCP協議中有16個bit表示「窗口」的大小,這是這些策略的核心。
2.1.傳輸數據時ACK的問題
在解釋滑動窗口前,需要看看ACK的應答策略,一般來說,發送端發送一個TCP數據報,那麼接收端就應該發送一個ACK數據報。但是事實上卻不是這樣,發送端將會連續發送數據盡量填滿接受方的緩沖區,而接受方對這些數據只要發送一個ACK報文來回應就可以了,這就是ACK的累積特性,這個特性大大減少了發送端和接收端的負擔。
2.2.滑動窗口
滑動窗口本質上是描述接受方的TCP數據報緩沖區大小的數據,發送方根據這個數據來計算自己最多能發送多長的數據。如果發送方收到接受方的窗口大小為0的TCP數據報,那麼發送方將停止發送數據,等到接受方發送窗口大小不為0的數據報的到來。
2.3.數據擁塞
上面的策略用於區域網內傳輸還可以,但是用在廣域網中就可能會出現問題,最大的問題就是當傳輸時出現了瓶頸(比如說一定要經過一個slip低速鏈路)所產生的大量數據堵塞問題(擁塞),為了解決這個問題,TCP發送方需要確認連接雙方的線路的數據最大吞吐量是多少。這,就是所謂的擁塞窗口。
擁塞窗口的原理很簡單,TCP發送方首先發送一個數據報,然後等待對方的回應,得到回應後就把這個窗口的大小加倍,然後連續發送兩個數據報,等到對方回應以後,再把這個窗口加倍(先是2的指數倍,到一定程度後就變成現行增長,這就是所謂的慢啟動),發送更多的數據報,直到出現超時錯誤,這樣,發送端就了解到了通信雙方的線路承載能力,也就確定了擁塞窗口的大小,發送方就用這個擁塞窗口的大小發送數據。要觀察這個現象是非常容易的,我們一般在下載數據的時候,速度都是慢慢「沖起來的」
--
TCP的超時和重傳
超時重傳是TCP協議保證數據可靠性的另一個重要機制,其原理是在發送某一個數據以後就開啟一個計時器,在一定時間內如果沒有得到發送的數據報的ACK報文,那麼就重新發送數據,直到發送成功為止。
超時
超時時間的計算是超時的核心部分,TCP要求這個演算法能大致估計出當前的網路狀況,雖然這確實很困難。要求精確的原因有兩個:(1)定時長久會造成網路利用率不高。(2)定時太短會造成多次重傳,使得網路阻塞。所以,書中給出了一套經驗公式,和其他的保證計時器准確的措施。
計時器的使用
一個連接中,有且僅有一個測量定時器被使用。也就是說,如果TCP連續發出3組數據,只有一組數據會被測量。
ACK數據報不會被測量,原因很簡單,沒有ACK的ACK回應可以供結束定時器測量。
重傳
前面曾經提到過,數據在傳輸的時候不能只使用一個窗口協議,我們還需要有一個擁塞窗口來控制數據的流量,使得數據不會一下子都跑到網路中引起「擁塞」。也曾經提到過,擁塞窗口最初使用指數增長的速度來增加自身的窗口,直到發生超時重傳,再進行一次微調。但是沒有提到,如何進行微調,擁塞避免演算法和慢啟動門限就是為此而生。
所謂的慢啟動門限就是說,當擁塞窗口超過這個門限的時候,就使用擁塞避免演算法,而在門限以內就採用慢啟動演算法。所以這個標准才叫做門限,通常,擁塞窗口記做cwnd,慢啟動門限記做ssthresh。下面我們來看看擁塞避免和慢啟動是怎麼一起工作的
演算法概要
對一個給定的連接,初始化cwnd為1個報文段,ssthresh為65535個位元組。
TCP輸出常式的輸出不能超過cwnd和接收方通告窗口的大小。擁塞避免是發送方使用 的流量控制,而通告窗口則是接收方進行的流量控制。前者是發送方感受到的網路擁塞的估 計,而後者則與接收方在該連接上的可用緩存大小有關。
當擁塞發生時(超時或收到重復確認),ssthresh被設置為當前窗口大小的一半(cwnd 和接收方通告窗口大小的最小值,但最少為2個報文段)。此外,如果是超時引起了擁塞,則 cwnd被設置為1個報文段(這就是慢啟動)。
當新的數據被對方確認時,就增加cwnd,但增加的方法依賴於我們是否正在進行慢啟 動或擁塞避免。如果cwnd小於或等於ssthresh,則正在進行慢啟動,否則正在進行擁塞避免。 慢啟動一直持續到我們回到當擁塞發生時所處位置的半時候才停止(因為我們記錄了在步驟2 中給我們製造麻煩的窗口大小的一半),然後轉為執行擁塞避免。
快速重傳和快速恢復演算法
這是數據丟包的情況下給出的一種修補機制。一般來說,重傳發生在超時之後,但是如果發送端接受到3個以上的重復ACK的情況下,就應該意識到,數據丟了,需要重新傳遞。這個機制是不需要等到重傳定時器溢出的,所以叫做快速重傳,而重新傳遞以後,因為走的不是慢啟動而是擁塞避免演算法,所以這又叫做快速恢復演算法。流程如下:
當收到第3個重復的ACK時,將ssthresh設置為當前擁塞窗口cwnd的一半。重傳丟失的 報文段。設置cwnd為ssthresh加上3倍的報文段大小。
每次收到另一個重復的ACK時, cwnd增加1個報文段大小並發送1個分組(如果新的 cwnd允許發送)。
當下一個確認新數據的ACK到達時,設置cwnd為ssthresh(在第1步中設置的值)。這個 ACK應該是在進行重傳後的一個往返時間內對步驟1中重傳的確認。另外,這個ACK也應該 是對丟失的分組和收到的第1個重復的ACK之間的所有中間報文段的確認。這一步採用的是擁 塞避免,因為當分組丟失時我們將當前的速率減半。
TCP的其它定時器
堅持定時器
用於防止通告窗口為0以後雙方互相等待死鎖的情況
堅持定時器的原理是簡單的,當TCP伺服器收到了客戶端的0滑動窗口報文的時候,就啟動一個定時器來計時,並在定時器溢出的時候向向客戶端查詢窗口是否已經增大,如果得到非零的窗口就重新開始發送數據,如果得到0窗口就再開一個新的定時器准備下一次查詢。通過觀察可以得知,TCP的堅持定時器使用1,2,4,8,16……64秒這樣的普通指數退避序列來作為每一次的溢出時間。
2.保活定時器
保活定時器更加的簡單,還記得FTP或者Http伺服器都有Sesstion Time機制么?因為TCP是面向連接的,所以就會出現只連接不傳送數據的「半開放連接」,伺服器當然要檢測到這種連接並且在某些情況下釋放這種連接,這就是保活定時器的作用。其時限根據伺服器的實現不同而不通。另外要提到的是,當其中一端如果崩潰並重新啟動的情況下,如果收到該端「前生」的保活探察,則要發送一個RST數據報文幫助另一端結束連接。

2. TCP傳輸協議伺服器編程時,監視的是本地IP,還是公網IP

這取決於你在bind參數中指定的地址,如果沒有指定,系統會自己找一個,在系統中存在多個連接(多網路設備、撥號等)時,最好是自己指定。

3. TCP/IP協議裡面的IP地址和DNS伺服器怎麼設置

你不需要設置你全部
選擇自動獲得就ok了
如果你的adsl和別人共享
而你想控制別人的電腦
或者你想擁有固定而且有個性化的局域IP時就要設置了
設置方法
比如你的伺服器地址是192.168.1.1
而你又想設置帶8的ip
在ip地址填:192.168.1.8
子網掩碼:255.255.255.0(這步你只要設置了IP,按一下TAB電腦將自動設置)
默認網關:192.168.1.1
然後就是DNS:這個其實也沒有必要去設置
這個要說的話設置方法不是單一的
這里我給你一個資料
這裡面講的很清楚了

4. TCP/IP協議是怎麼設置的那些IP地址和子網掩碼和默認網關,DNS伺服器是怎麼設置的

IP地址的設定取決於你的網路接入方式,如果不是使用代理伺服器,通常為192.168.1.X(取值1-255),這個數字與其他電腦不能相同,如果相同,就會有「IP地址與系統沖突」的提示。這種現象沒有解決的辦法,最多隻能自欺欺人的讓電腦不提示。因為IP地址是全世界唯一的,就像我們用的電話號碼一樣,如果有重復就亂了。

子網掩碼通常為255.255.255.0

默認網關通常為192.168.1.1,即你的路由器。
DNS伺服器是用來解析域名的,當我們輸入例如「www.sina.com」這樣的網址時,電腦會通過域名伺服器,也就是DNS把這個網址轉換成「86.59.174.635」這樣的IP,然後才能夠訪問。這個伺服器可以填寫,這樣能夠更快的訪問網站,也可以不填寫,但是相對的訪問速度要慢一些。

祝你好運!

5. 請問TCP/IP協議是不是指的是IP地址請詳細說明下TCP是什麼IP又是什麼

其中最重要的概念是IP地址,它是32位地址,採用如下的形式:

nnn.nnn.nnn.nnn

其中每個nnn為8位,范圍為0~255。通常互連網上的每台機器的地址都是唯一的。這相當於身份證號碼,但這號碼不易記憶,後來就出現了域名的概念,它與IP地址唯一對應,實際就是網路世界的門牌號碼。如網事網路:

域名:www.into21.com
IP地址:210.77.43.3

域名的申請是有專門的管理機關負責的。常用的定級域名有行業與地區兩種,以下為常見的域名:

地區:
.cn中國;
.hk香港;
.uk英國;
.tw台灣;
.au澳大利亞;
.jp日本;
.ru俄羅斯;
.fr法國

行業:
.com公司;
.gov政府;
.net網路;
.e教育;
.mil軍事;
.org非贏利組織

TCP/IP協議中的三個參數
TCP/IP(TransmiteControlProtocol傳輸控制協議/InternetProtocol網際協議)已成為計算機網路的一套工業標准協議。Internet網之所以能將廣闊范圍內各種各樣網路系統的計算機互聯起來,主要是因為應用了「統一天下」的TCP/IP協議。在應用TCP/IP協議的網路環境中,為了唯一地確定一台主機的位置,必須為TCP/IP協議指定三個參數,即IP地址、子網掩碼和網關地址。
IP地址
IP地址實際上是採用IP網間網層通過上層軟體完成「統一」網路物理地址的方法,這種方法使用統一的地址格式,在統一管理下分配給主機。Internet網上不同的主機有不同的IP地址,每個主機的IP地址都是由32比特,即4個位元組組成的。為了便於用戶閱讀和理解,通常採用「點分十進製表示方法」表示,每個位元組為一部分,中間用點號分隔開來。如210.77.43.3就是網事網路WEB伺服器的IP地址。每個IP地址又可分為兩部分。網路號表示網路規模的大小,主機號表示網路中主機的地址編號。按照網路規模的大小,IP地址可以分為A、B、C、D、E五類,其中A、B、C類是三種主要的類型地址,D類專供多目傳送用的多目地址,E類用於擴展備用地址。A、B、C三類IP地址有效范圍如下表:

類別
網路號
主機號
A
1~126
0~2550~2551~254
B
128~191
0~2550~2551~254
C
192~223
0~2550~2551~254
在IP地址中,有幾種特殊含義的地址:

1、廣播地址 TCP/IP協議規定,主機號部分各位全為1的IP地址用於廣播。所謂廣播地址指同時向網上所有的主機發送報文,也就是說,不管物理網路特性如何,Internet網支持廣播傳輸。如136.78.255.255就是B類地址中的一個廣播地址,你將信息送到此地址,就是將信息送給網路號為136.78的所有主機。

2、有限廣播地址 有時需要在本網內廣播,但又不知道本網的網路號時,TCP/IP協議規定32比特全為1的IP地址用於本網廣播,即255.255.255.255。

3、「0」地址 TCP/IP協議規定,各位全為0的網路號被解釋成「本網路」。若主機試圖在本網內通信,但又不知道本網的網路號,那麼,可以利用「0」地址。

4、回送地址 A類網路地址的第一段十進制數值為127是一個保留地址,如127.1.11.13用於網路軟體測試以及本地機進程間通信。
子網掩碼

為了快速確定IP地址的哪部分代表網路號,哪部分代表主機號,以及判斷兩個IP地址是否屬於同一網路,就產生了子網掩碼的概念。子網掩碼給出了整個IP地址的位模式,其中的1代表網路部分,0代表IP主機號部分,應用中也採用點式十進製表示。用它來幫助確定IP地址網路號在哪結束,主機號在哪開始。A、B、C三類網路的標准預設掩碼如下:
類別
子網掩碼位模式
子網掩碼
A
11111111.00000000.00000000.00000000
255.0.0.0
B
11111111.11111111.00000000.00000000
255.255.0.0
C
11111111.11111111.11111111.00000000
255.255.255.0
如果在Internet網上進行通信的兩台主機的IP地址分別為192.83.192.10和192.83.192.32,那麼子網掩碼255.255.255.0分別對兩個IP地址進行與(and)運算後,得出網路號和主機號,並且結果一致,可以判斷這兩個IP地址屬於同一個網路。

為了在網路分段情況下有效地利用IP地址,可以攫取主機號的高位部分作為子網號,從通常的八位界限中擴展子網掩碼,用來創建某類地址的更多子網。但創建更多的子網時,在每個子網上的可用主機地址數目會減少。要確定更多子網的子網掩碼,首先應確定傳輸IP信息流的網段的數目,然後再確定能夠容納網段數的最低子網掩碼數目,記住不要使用包含全0或全1的網路地址。

網關地址

若要使兩個完全不同的網路(異構網)連接在一起,一般使用網關,在Internet中兩個網路也要通過一台稱為網關的計算機實現互聯。這台計算機能根據用戶通信目標計算機的IP地址,決定是否將用戶發出的信息送出本地網路,同時,它還將外界發送給屬於本地網路計算機的信息接收過來,它是一個網路與另一個網路相聯的通道。為了使TCP/IP協議能夠定址,該通道被賦予一個IP地址,這個IP地址稱為網關地址。

6. tcp連接狀態詳解

unix的哲學是一切皆文件,可以把socket看成是一種特殊的文件,而一些socket函數就是對其進行的操作api(讀/寫IO、打開、關閉)。我們知道普通文件的打開操作(open)返回一個文件描述字,與之類似,socket()用於創建一個socket描述符(socket descriptor),它唯一標識一個socket。

當我們調用socket創建一個socket時,返回的socket描述字它存在於協議族(address family,AF_XXX)空間中,但沒有一個具體的地址。如果想要給它賦值一個地址,就必須調用bind()函數,

 sockfd即socket描述字,它是通過socket()函數創建了,唯一標識一個socket。bind()函數就是將給這個描述字綁定一個名字。
    在將一個地址綁定到socket的時候,需要先將主機位元組序轉換成為網路位元組序,而不要假定主機位元組序跟網路位元組序一樣使用的是Big-Endian。由於這個問題曾引發過不少血案,謹記對主機位元組序不要做任何假定,務必將其轉化為網路位元組序再賦給socket。
    這里的主機位元組序就是我們平常說的大端和小端模式:不同的CPU有不同的位元組序類型,這些位元組序是指整數在內存中保存的順序,這個叫做主機序。引用標準的Big-Endian和Little-Endian的定義如下:

   listen函數的第一個參數即為要監聽的socket描述字,第二個參數為socket可以接受的排隊的最大連接個數。listen函數表示等待客戶的連接請求。

  connect函數的第一個參數即為客戶端的socket描述字,第二參數為伺服器的socket地址,第三個參數為socket地址的長度。客戶端通過調用connect函數來建立與TCP伺服器的連接。

 TCP伺服器端依次調用socket()、bind()、listen()之後,就會監聽指定的socket地址了。TCP客戶端依次調用socket()、connect()之後就向TCP伺服器發送連接請求。TCP伺服器監聽到這個請求之後,就會調用accept()函數去接收請求,這樣連接就建立好了(在connect之後就建立好了三次連接),之後就可以開始進行類似於普通文件的網路I/O操作了。

 如果accpet成功,那麼其返回值是由內核自動生成的一個全新的描述字,代表與客戶的TCP連接。
 accept的第一個參數為伺服器的socket描述字,是伺服器開始調用socket()函數生成的,稱為監聽socket描述字;而accept函數返回的是已連接的socket描述字。一個伺服器通常通常僅僅只創建一個監聽socket描述字,它在該伺服器的生命周期內一直存在。內核為每個由伺服器進程接受的客戶連接創建了一個已連接socket描述字,當伺服器完成了對某個客戶的服務,相應的已連接socket描述字就被關閉。

 read函數是負責從fd中讀取內容.當讀成功時,read返回實際所讀的位元組數,如果返回的值是0表示已經讀到文件的結束了,小於0表示出現了錯誤。如果錯誤為EINTR說明讀是由中斷引起的,如果是ECONNREST表示網路連接出了問題。

 write函數將buf中的nbytes位元組內容寫入文件描述符fd.成功時返回寫的位元組數。失敗時返回-1,並設置errno變數。 在網路程序中,當我們向套接字文件描述符寫時有倆種可能。1)write的返回值大於0,表示寫了部分或者是全部的數據。2)返回的值小於0,此時出現了錯誤

 在伺服器與客戶端建立連接之後,會進行一些讀寫操作,完成了讀寫操作就要關閉相應的socket描述字,類似於操作完打開的文件要調用fclose關閉打開的文件。

 close一個TCP socket的預設行為時把該socket標記為已關閉,然後立即返回到調用進程。該描述字不能再由調用進程使用,也就是說不能再作為read或write的第一個參數

 close操作只是使相應socket描述字的引用計數-1,只有當引用計數為0的時候,才會觸發TCP客戶端向伺服器發送終止連接請求。

 我們知道tcp建立連接要進行「三次握手」,即交換三個分組。大致流程如下:

客戶端向伺服器發送一個SYN J

伺服器向客戶端響應一個SYN K,並對SYN J進行確認ACK J+1

客戶端再想伺服器發一個確認ACK K+1

socket中TCP的四次握手釋放連接詳解

 某個應用進程首先調用close主動關閉連接,這時TCP發送一個FIN M;另一端接收到FIN M之後,執行被動關閉,對這個FIN進行確認。一段時間之後,服務端調用close關閉它的socket。這導致它的TCP也發送一個FIN N;接收到這個FIN的源發送端TCP對它進行確認,這樣每個方向上都有一個FIN和ACK。

為什麼要三次握手

由於tcp連接是全雙工的,存在著雙向的讀寫通道,每個方向都必須單獨進行關閉。當一方完成它的數據發送任務後就可以發送一個FIN來終止這個方向的連接。收到FIN只意味著這個方向上沒有數據流動,但並不表示在另一個方向上沒有讀寫,所以要雙向的讀寫關閉需要四次握手,

    3. time_wait狀態如何避免?

首先伺服器可以設置SO_REUSEADDR套接字選項來通知內核,如果埠忙,但TCP連接位於TIME_WAIT狀態時可以重用埠。在一個非常有用的場景就是,如果你的伺服器程序停止後想立即重啟,而新的套接字依舊希望使用同一埠,此時SO_REUSEADDR選項就可以避免TIME_WAIT狀態。

1.客戶端連接伺服器的80服務,這時客戶端會啟用一個本地的埠訪問伺服器的80,訪問完成後關閉此連接,立刻再次訪問伺服器的
80,這時客戶端會啟用另一個本地的埠,而不是剛才使用的那個本地埠。原因就是剛才的那個連接還處於TIME_WAIT狀態。

2.客戶端連接伺服器的80服務,這時伺服器關閉80埠,立即再次重啟80埠的服務,這時可能不會成功啟動,原因也是伺服器的連
接還處於TIME_WAIT狀態。
實戰分析:

狀態描述:

CLOSED:無連接是活動的或正在進行
LISTEN:伺服器在等待進入呼叫
SYN_RECV:一個連接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個連接
ESTABLISHED:正常數據傳輸狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉</pre>

命令解釋:

如何盡量處理TIMEWAIT過多?

編輯內核文件/etc/sysctl.conf,加入以下內容:
net.ipv4.tcp_syncookies = 1 表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,默認為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。
net.ipv4.tcp_fin_timeout 修改系默認的 TIMEOUT 時間</pre>

然後執行 /sbin/sysctl -p 讓參數生效.
/etc/sysctl.conf是一個允許改變正在運行中的Linux系統的介面,它包含一些TCP/IP堆棧和虛擬內存系統的高級選項,修改內核參數永久生效。

簡單來說,就是打開系統的TIMEWAIT重用和快速回收。

  本文主要講述了socket的主要api,以及tcp的連接過程和其中各個階段的連接狀態,理解這些是更深入了解tcp的基礎!

7. 正確安裝好TCP/IP協議後,如何更改自己的IP地址

你的是什麼系統?如果是WINXP的話是:
1.開始—控制面板—網路連接—本地連接—屬性—TCP/IP—使用下面的IP地址。
2.ADSL用戶建議你不要改,直接用撥號軟體,如果要設置路由的話可以設置192.168.1.2網關為192.168.1.1
3.如果是LAN那麼問一下你的管理員吧。
其實2000和XP的方法差不多。
至於98的話可以在網上鄰居里—屬性—TCP/IP

8. QT怎麼做TCP廣播IP

QT做TCP廣播IP方法如下所示:
1、在*.pro文件中加入network模塊QT+=network
2、在你的*.h裡面添加QTcpSocket
3、連接伺服器地址和埠號tcpSocket->connectToHost("192.168.1.1",8000);
4、監聽連接成功的信號SGINAL-->connected()
5、給socket填寫你想發送的數據,封裝成QByteArray

9. TCP/IP協議裡面的IP地址和DNS伺服器怎麼設置

你不需要設置你全部
選擇自動獲得
就ok了
如果你的adsl和別人共享
而你想控制別人的電腦
或者你想擁有固定而且有個性化的局域IP時就要設置了
設置方法
比如你的伺服器地址是192.168.1.1
而你又想設置帶8的ip
在ip地址填:192.168.1.8
子網掩碼:255.255.255.0(這步你只要設置了IP,按一下TAB電腦將自動設置)
默認網關:192.168.1.1
然後就是DNS:這個其實也沒有必要去設置
這個要說的話設置方法不是單一的
這里我給你一個資料
這裡面講的很清楚了

10. 網路裡面這個TCP/lP是什麼意思

TCP/IP(Transmission Control Protocol/Internet Protocol的簡寫,中文譯名為傳輸控制協議/互聯網路協議)協議是Internet最基本的協議,簡單地說,就是由底層的IP協議和TCP協議組成的。TCP/IP是Internet使用的一組協議(Protocol).在Internet上傳輸控制協議和網際協議是配合進行工作的。RARP(A Reverse Address Resolution Protocol反向地址解析協議),用於MAC地址到IP的解析,此協議多用於無盤工作站. 比如區域網中有一台主機只知道物理地址而不知道IP地址,那麼可以通過RARP協議發出徵求自身IP地址的廣播請求,然後由RARP伺服器負責回答。

熱點內容
使用hmailserver搭建郵件伺服器 發布:2025-01-12 16:05:43 瀏覽:809
ps3游戲下載解壓 發布:2025-01-12 15:55:46 瀏覽:596
視頻點播伺服器搭建區域網 發布:2025-01-12 15:46:44 瀏覽:88
unit長安豪華版有哪些配置 發布:2025-01-12 15:45:05 瀏覽:85
資料庫表的分區 發布:2025-01-12 15:39:29 瀏覽:369
u點家庭伺服器網關設置有什麼用 發布:2025-01-12 15:33:15 瀏覽:153
王者歸來java 發布:2025-01-12 15:27:13 瀏覽:68
安卓手機為什麼卡又發熱 發布:2025-01-12 15:23:18 瀏覽:571
如何驗證root密碼是否正確 發布:2025-01-12 15:23:15 瀏覽:591
socketftp伺服器端 發布:2025-01-12 15:19:55 瀏覽:235