當前位置:首頁 » 文件管理 » tcp可以群發文件嗎

tcp可以群發文件嗎

發布時間: 2023-05-08 15:35:07

Ⅰ TCP/IP 是怎樣傳輸數據文件的

1、當你把要傳送的數據傳遞給TCP後,TCP把這些信息分成很多個數據包(這種數據包稱為TCP分組),每一個分組都包含有一個序號。接著TCP分組被傳遞給IP層,IP層把這個TCP分組放在一個IP數據包的數據部分。然後,這個IP數據包被傳到目的主機。目的主機
上的IP層,把IP數據包的數據部分(即TCP分組)傳遞給TCP層。TCP接收到分組後,檢查數據包的正確性,如果不正確,通知源計算機重新送該IP包。利用分組的序號來將數據按照原來的順序排列,然後送給應用層。換句話說,IP的工作是把原始數據(數據包)從一地傳送到另一地;TCP的工作是管理這種流動並確保其數據是正確的。在IP層,信息不是一個恆定的流,而是一個個小的數據包,這種數據包稱為IP數據報。所有要發送的信息都必須被拆成IP數據包,才能在IP網上傳送。IP數據報中最主要的內容有:源計算機的地址信息、目的計算機的地址信息旁禪、要傳輸的數據。當發送一個數據包時,計算正宴機首先根據目的地址決定將其發送給誰,如果目的計算機與源計算機在同一個物理網路中,則直接將這個數據報發送給它。如果目的計算機與源計算機不在同一個物理網路中,則發送給路由器,路由器這個特殊的計算機連在了兩個網路之中,因此可以同時與兩個網路中的計算機通信。路由器在收到數據包後,根據目的地址決定是直接發給目的計算機(如果在同一個物理網路中),還是轉發給另一台計算機(如果不在同一個物理網路中運清塵)。

Ⅱ TCP是什麼協議

TCP代表傳輸控制協議,是Internet協議套件中的基本協議,是一種網路通信協議;它規定如何建立和維護兩個程序可以交換數據的連接,兆碼如何通過Internet發送信息。
TCP補充了Internet協議(IP協議),它定義了用於識別Internet上系統的IP地址,主要確保不同節點之間的端到端數據傳輸。Internet協議提供用於傳輸數據的指令,同時TCP創建連接並確保將數據傳遞到正確的目標。這兩種協議通常是協同工作的,稱為TCP / IP套件。【視頻教程推薦:TCP/IP教程】
TCPTCP與Internet協議協同工作,Internet協議定義遠程節點的邏輯位置,而TCP傳輸並迅纖確保將數據傳遞到正確的目標。
TCP的工作原理?
TCP的工作是將消息或文件分解成更小的片段(稱為數據包),在通過Internet發送。然後,這些數據包由另一個TCP層接收,然後將該數據重組為完整的文件或消息。TCP還負責對數據流進行錯誤檢查,以確保數據的傳遞; 如果發現錯誤,則TCP重新傳輸數據包。
以上就是本篇文章的全部內容,希望能對大家的學習有所畝猜仿幫助。

Ⅲ 使用SOCKET進行網路通信(TCP,UDP)時候,如何進行群發處理

看看TCP/IP中的IP廣播地址(Broadcast Address),可以達到群發效果。

Ⅳ 如何用TCP協議實現兩個人之間發送文件

利用操作系統提供的WINSOCKET函數來實現發送數據(如:connect, recv, send等函數)。注意:在WINSOCKET中發悶喚送的都是二進制數據,所局簡以不論你發送的是消息或者是文件內容,發送時都按你所寫的內容發送到另一方螞臘凱。所以你想要發送文件,只要雙方約定好一個協議,假設A是發送方,B是接收方。A和B建立連接後,首先發送一定的字元告訴B,說明這個文件多大,這個文件的文件名,B收到這樣的信息後開辟一塊內存或者直接以寫文件的方式新建一個文件。然後A繼續向B發送數據,這時候的數據就可是是實際要發送的文件了,一直發送到文件結束。B端不斷累加收到的數據,當數據量等於開始約定的文件大小時說明文件發送結束。

Ⅳ C#Socket(tcp)非同步批量發送文件問題

從ServerB下載文件,分別下載多個文件,
下載結果沒有發現錯誤文件.當開啟迅雷下載後沒有發現文件錯誤.
測試文件發送到Server和下載的情況基本差不多,這說明了在網路不好的情況處理發送大數據包似首容易產生錯誤,但看TCP/IP協議講解這情況似乎不存在,因為當一個發送數據超過某個值的時候,TCP會劃分塊進行傳輸並保證其順序.但網路不好的情況測試結果接收的數據有錯誤,但處理的數據大小是正確的,也並沒影響整個協議的分解.由於對CP/IP協議、低層和路由處理的不了解,暫沒找到具體原因。。。不排除程序存在還沒發現的錯誤,打算給發送的文件數據加上校驗再測試一下看情況

Ⅵ 聽說QQ聊天是點對點的,不經過伺服器傳輸的,但用TCP協議群發消息時是點對點傳輸的嗎

說白了,QQ採用的就是即時通信技術。每次QQ登陸時,用戶所屬的伺服器就會把好友的遠程此姿兆地址和冊友TCP埠發給用戶(也就是獲取好友列表的過程),這樣的話用戶就可以直接連接另一客戶端,實現點對點的通信,就不需要伺服器森租中轉了。還有QQ通信之間都需要會話密鑰的,就是一種網路加密,不會泄露的。至於群聊就像手機群發似的,你發一條信息所有人都可以接到。

Ⅶ 傳輸層(TCP,UDP)

tcp是一個面向連接,可靠的位元組流傳輸協議, TCP不提供廣播和多播,一般用於文件傳輸,收發郵件,遠程登錄等場景。

1、第一個4位元組:

(1)源埠,16位;發送數據的源進程埠

(2)目的埠,16位;接收數據的進程埠

2、第二個4位元組與第三個4位元組

(1)序號,32位;代表 當前TCP數據段第一個位元組占整個位元組流的相對位置 ;

(2)確認號,32位;代表接收端 希望接收的數據序號 ,為上次接收到數據報的序號+1,當ACK標志位為1時才生效。

3、第四個4位元組:

(1)數據偏移,4位;實際代表TCP首部長度,最大為60位元組。

(2)6個標志位,每個標志位1位;

SYN,為同步標志,用於數據同步;

ACK,為確認序號,ACK=1時確認號才有效;

FIN,為結束序號,用於發送端提出斷開連接;

URG,為緊急序號,URG=1是緊急指針有效;

PSH,指示接收方立即將數據提交給應用層,而不是等待緩沖區滿;

RST,重置連接。

(3)滑動窗口值,16位;標識接收方可接受的數據位元組數。

4、第五個4位元組

(1)校驗和,16位;用於檢驗數據完整性。

(2)緊急指針,16位;只有當URG標識位為1時,緊急指針才有效。緊急指針的值與序號的相加值為緊急數據的最後一個位元組位置。用於發送緊急數據。

參考: https://blog.csdn.net/qq_39584315/article/details/79387811

udp是一個無連接不可靠的數據報傳輸協議,一般用於即使通信,直播,扮正視頻等形式。

校驗和

Ip校驗是針對ip頭部的,即僅校驗ip頭部。  TCP首部校驗和計算三部分:TCP首部+TCP數據+TCP偽首部。tcp校驗需要將ip偽首部、tcp報文頭、tcp數據分為16位的字,然後進行累加按位取反。Udp校驗與tcp校驗基本上是一致的。

偽首部

偽首部共有12位元組,包含IP首部的一些欄位,有如下信息:32位源IP地址、32位目的IP地址、8位保留位元組(置0)、8位傳輸層協議號(TCP是6,UDP是17)、16位報文長度(首部+數據)。

 偽首部是為了增加校驗和的檢錯能力:通過偽首部的目的IP地址來檢查TCP報文是否收錯了、通過偽首部的傳輸層協議號來檢查傳輸層協議是否選對了。  雖然IP首部的校驗和會校驗IP,但數據包經過中間器件(路由器)的時候,這些中間器件可能會修改IP首部的內容,例簡殲如同時修改目的IP和IP首部校驗和。這樣一來將導致錯誤的接收方接收到該數據包。因此在TCP的偽首部加上IP地址,可以防止錯收報文。

為什麼是三次握手不是四次或兩次

可以按一下思路回答:

首先介紹tcp連接的特性:面向連接的可靠地位元組流傳輸協議。然後介紹tcp中的序列號和確認號(保證可靠和tcp分段傳輸)。然後介紹握手的目的:1.客戶端和服務端確認連接可通,自己能發出去對方能收到,對方能發出去,自己能收到。2.協商一個傳輸的初始序列號

為什麼不是四次:

伺服器的syn和ack可以整合到一次,提高效率。

為什麼不是兩次:

如果只有兩次,伺服器沒有收到客戶端的ack,伺服器無法知道伺服器到客戶端的傳輸是否可靠。2.客戶端和伺服器沒有就伺服器的初始序列號達成一致。

參考: https://www.hu.com/question/24853633

有幾個細節需要注意:

1、與SYN報文一樣,FIN報文段即使不攜帶數據,也要消耗一個序號。

2.當客戶端發送fin,服務端回復ack後,tcp連接處於半關閉狀態,即客戶端已經沒有數據要發送了,但是伺服器若發送數據,客戶端依然要接受。正是因為有半關閉狀態,不需要客戶端和伺服器同時斷開,因此才會有四次揮手。

3.當伺服器發出fin,只要收到了客戶端的ack,就進入CLOSED狀態,關閉tcp連接。而客戶端回復ack後,必須經過2*MSL(最長報文段壽命)的時間後,才會關閉tcp連接。

為什麼客戶端最攔缺沖後還要等待2MSL?

保證客戶端發送的最後一個ACK報文能夠到達伺服器,因為這個ACK報文可能丟失,站在伺服器的角度看來,我已經發送了FIN+ACK報文請求斷開了,客戶端還沒有給我回應,應該是我發送的請求斷開報文它沒有收到,於是伺服器又會重新發送一次,而客戶端就能在這個2MSL時間段內收到這個重傳的報文,接著給出回應報文,並且會重啟2MSL計時器。

分組可以發生在運輸層和網路層,運輸層中的TCP會分段,網路層中的IP會分片。IP層的分片更多的是為運輸層的UDP服務的,由於TCP自己會避免IP的分片,所以使用TCP傳輸在IP層都不會發生分片的現象。IP數據報分片後,只有第一片帶有UDP首部或ICMP首部,其餘的分片只有IP頭部,到了端點後根據IP頭部中的信息再網路層進行重組。而TCP報文段的每個分段中都有TCP首部,到了端點後根據TCP首部的信息在傳輸層進行重組。

對IP分片的數據報來說,如果需要重傳,即使只丟失一片數據也要重新傳整個數據報,這是因為IP層本身沒有超時重傳機制。這也是為什麼tcp要避免ip分片的原因。

 MTU(最大傳輸單元)

MTU是鏈路層中的網路對數據幀的一個限制,依然以乙太網為例,MTU為1500個位元組。一個IP數據報在乙太網中傳輸,如果它的長度大於該MTU值,就要進行分片傳輸,使得每片數據報的長度小於MTU。分片傳輸的IP數據報不一定按序到達,但IP首部中的信息能讓這些數據報片按序組裝。IP數據報的分片與重組是在網路層進完成的。

路徑MTU

如果兩台主機之間的通信要通過多個網路,那麼每個網路的鏈路層就可能有不同的MTU。重要的是兩台通信主機路徑中的最小MTU。它被稱作路徑MTU。兩台主機之間的路徑MTU不一定是個常數。它取決於當時所選擇的路由。而選路不一定是對稱的(從A到B的路由可能與從B到A的路由不同),因此路徑MTU在兩個方向上不一定是一致的。

 MSS(最大分段大小)

 MSS是TCP里的一個概念(首部的選項欄位中)。MSS是TCP數據包每次能夠傳輸的最大數據分段,TCP報文段的長度大於MSS時,要進行分段傳輸。TCP協議在建立連接的時候通常要協商雙方的MSS值,每一方都有用於通告它期望接收的MSS選項(MSS選項只出現在SYN報文段中,即TCP三次握手的前兩次)。MSS的值一般為MTU值減去兩個首部大小(需要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes)所以如果用鏈路層乙太網,MSS的值往往為1460。而Internet上標準的MTU(最小的MTU,鏈路層網路為x2.5時)為576,那麼如果不設置,則MSS的默認值就為536個位元組。很多時候,MSS的值最好取512的倍數。TCP報文段的分段與重組是在運輸層完成的。

TCP的四種擁塞控制演算法:

1.慢開始

2.擁塞控制

3.快重傳

4.快恢復

參考: https://blog.csdn.net/qq_41431406/article/details/97926927

滑動窗口協議解決的是流量控制的的問題,接收端的緩存傳輸數據給應用層,但這個過程不一定是即時的,如果發送速度太快,會出現接收端數據overflow,流量控制解決的是這個問題。

該協議允許發送方在停止並等待確認前發送多個數據分組。由於發送方不必每發一個分組就停下來等待確認,因此該協議可以加速數據的傳輸,提高網路吞吐量。

TCP會話的雙方都各自維護一個發送窗口和一個接收窗口。各自的接收窗口大小取決於應用、系統、硬體的限制(TCP傳輸速率不能大於應用的數據處理速率)。各自的發送窗口則要求取決於對端通告的接收窗口。

窗口的概念

發送方的發送緩存內的數據都可以被分為4類:

1. 已發送,已收到ACK

2. 已發送,未收到ACK

3. 未發送,但允許發送

4. 未發送,但不允許發送

其中類型2和3都屬於發送窗口。

接收方的緩存數據分為3類:

1. 已接收

2. 未接收但准備接收

3. 未接收而且不準備接收

其中類型2屬於接收窗口。

滑動機制

1.發送窗口只有收到發送窗口內位元組的ACK確認,才會移動發送窗口的左邊界。

2.接收窗口只有在前面所有的段都確認的情況下才會移動左邊界。當在前面還有位元組未接收但收到後面位元組的情況下,窗口不會移動,並不對後續位元組確認。以此確保對端會對這些數據重傳。

3.遵循快速重傳、累計確認、選擇確認等規則。

參考: https://blog.csdn.net/yao5hed/article/details/81046945

TCP中有四種計時器(Timer),分別為:

1.重傳計時器:Retransmission Timer

2.堅持計時器:Persistent Timer

3.保活計時器:Keeplive Timer

4.時間等待計時器:Timer_Wait Timer

(1)重傳計時器

當TCP發送報文段時,就創建該特定報文的重傳計時器。可能發生兩種情況:

1.若在計時器截止時間到之前收到了對此特定報文段的確認,則撤銷此計時器。

2.若在收到了對此特定報文段的確認之前計時器截止時間到,則重傳此報文段,並將計時器復位。

(2)持久計時器

當接收端緩存填滿時,由於滑動窗口演算法,發送端會停止發送數據,直到接收端發送一個宣布非0窗口的ack,但這個確認可能會丟失,導致發送方和接收方都等待對方發送消息。

因此TCP為每一個鏈接使用一個持久計時器。當發送房收到窗口大小為0的確認時,就啟動持久計時器。當持久計時器期限到時,發送方就發送一個探測報文。這個報文段只有一個位元組的數據,雖然他有一個序號,但他的序號永遠不需要確認。若發送探測報文後仍沒有收到從接收端來的響應,發送端會將堅持計時器設定的值加倍和復位,直到這個值增大到門限值(通常是60秒)為止。

(3)保活計時器

保活計時器用來防止在兩個TCP之間的連接出現長時間的空閑。伺服器設置保活計時器,每當伺服器收到客戶的信息,就將計時器復位。通常設置為兩小時。若伺服器過了兩小時還沒有收到客戶的信息,他就發送探測報文段。若發送了10個探測報文段(每一個像個75秒)還沒有響應,就假定客戶除了故障,因而就終止了該連接。

這種連接的斷開當然不會使用四次握手,而是直接硬性的中斷和客戶端的TCP連接。

(4)時間等待計時器

時間等待計時器是在四次握手的時候使用的。發送最後一個ack的一端要等待2MSL(MSL=maxinum segment lifetime最長報文生存時間,2MSL就是兩倍的MSL),確保另一端接受到了ack。

參考: https://www.cnblogs.com/an2/p/9180861.html

Ⅷ TCP/IP 群發

別等了。。。不可能有的。。。你的要求因該能從UDP協議實現,你先熟悉下UDP協議,不管是TCP也好,還是UDP也好,客戶端都得有一個接收程序,你UDP只要指定網段,那麼沒有接收程序,或者不符合接受的IP就不會收到你的數據包信舉梁的。。。類似QQ的廣告就是這樣實現的,他不可能一個一個IP來發送的吧~~~~

只有UDP~~~
另外,網路協議是只是個基礎協議,就像英文滑運語法詞典一樣,只提供最簡單最基礎的架構,你如果要組織語句,就得自己按照語法填入單詞,
如果你要實現TCP多IP發送,就得自己寫程序,然答升後一個一個自動發,可以寫成多線程的,那樣速度就快些~~~