網路通訊 TCP和UDP 一

2021-08-09 12:14:07 字數 3444 閱讀 8314

要搞清楚網路中程序間是如何通訊的,首先就得解決「如何標誌乙個程序」,網路層的「ip位址」可以唯一標識網路中的主機,而傳輸層的「協議+埠」可以唯一標識主機中的應用程式(程序)。這樣利用三元組(ip位址,協議,埠)就可以標識網路的程序了,網路中的程序通訊就可以利用這個標誌與其它程序進行互動。

tcp和udp

tcp/ip(transmission control protocol/internet protocol,傳輸控制協議/網間協議),主要目的是提供與底層硬體無關的網路之間的互聯,包括各種物理網路技術。不是單純兩個協議,而是一組通訊協議的聚合。

udp(user data protocol,使用者資料報協議)是與tcp相對應的協議。它是屬於tcp/ip協議族中的一種。

tcp】:是乙個面向連線的,端對端的全雙工通訊協議,通訊雙方需要建立由軟體實現的虛連線,為資料報提供可靠的資料傳送服務。

tcp資料報格式:24b+資料位元組。

tcp資料傳輸過程:建立tcp連線,傳送資料。即傳輸層將應用層傳送的資料存在快取區中,由tcp將它分成若干段再加上tcp包頭構成傳送協議資料單元(tpdu)傳送給ip層,採用arq方式傳送到目的主機,目的主機對存入在輸入快取區的tpdu進行檢驗,確定是要求重發還是接收,結束tcp連線。

udp】:是乙個面向無連線協議,主要用於不要求確認的情形或通常只傳少量資料的應用程式中。

udp資料報格式:由源埠(2b)目的埠(2b)報文長度(2b)檢驗(2b)以及資料組成。

udp資料傳送:在傳送端傳送資料時,由udp軟體組織乙個資料報,並把它交給ip軟體即完成了所有的工作。在接收端,udp軟體先檢查目的埠是否匹配,若匹配則放入佇列中,否則丟棄。

tcp採用四層結構(如圖),資料資訊的傳遞在傳送方是按照應用層—>傳輸層—>網際層—>網路介面層的順序;在接收方則相反,按底層為高層服務的原則。

osi:開放系統互連參考模型(乙個理想的模型):下四層(1,2,3,4)主要提供資料傳輸和交換功能,以節點到節點的通訊為主。上三層(5,6,7)以提供使用者與應用程式之間的資訊和資料處理功能為主。第4層作為上下兩部分的橋梁,是最關鍵的部分。簡言之,下四層完成通訊子網功能,上三層完成資源子網功能。

·[應用層] 與osi參考模型中的高三層任務相同,用於提供網路服務。

·[傳輸層] 又稱主機至主機層,與osi參考模型的傳輸層類似,負責主機到主機之間的端到端通訊,使用傳輸控制協議(tcp)和使用者資料報協議(udp)。

·[網際層] 也稱互聯層,主要功能是處理來自傳輸層的分組,將分組形成資料報(ip資料報),並為資料報進行路徑選擇,最終將資料報從源主機傳送到目的主機。常用的協議是網際協議ip協議。

·[網路介面層] 對應osi的物理層和資料鏈路層,負責通過網路傳送和接收ip資料報。

**過程

【socket】:socket(套接字)是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。把複雜的tcp/ip協議族隱藏在socket介面後面,使用者可直接通過這些介面去組織資料,以符合指定的協議。

tcp和udp的區別

tcp作為一種面向有連線的協議,只有在確認通訊對端存在時才會傳送資料,從而可以控制通訊流量的浪費。而udp是無連線的協議,傳輸資料之前源端和終端不建立連線,當它想傳送時就簡單地去抓取來自應用程式的資料,並盡可能快地把它扔到網路上。

每一條tcp連線只能是端到端的;udp支援服務機和客戶機一對一,一對多,多對一和多對多的互動通訊。

tcp面向位元組流模式,udp面向資料報模式。

tcp提供可靠的服務,保證資料的正確性和順序,udp盡最大努力交付,但無法保證正確性和順序,容易丟包。

tcp要求系統資源較多,首部開銷20位元組。udp的首部開銷小,只有8個位元組。

tcp充分實現了資料傳輸時各種控制功能,可以進行丟包的重發控制,還可以對次序亂掉的分包進行順序控制。而udp不提供複雜的控制機制,這些功能都沒有,(因為沒有擁塞控制,所以網路出現擁塞也不會使源主機的傳送速率降低)。如果需要這些細節控制,就需要交給使用udp的應用程式去處理。

tcp程式設計的伺服器端一般步驟是:

1、建立乙個socket,用函式socket();

2、設定socket屬性,用函式setsockopt(); * 可選

3、繫結ip位址、埠等資訊到socket上,用函式bind();

4、開啟監聽,用函式listen();

5、接收客戶端上來的連線,用函式accept();

6、收發資料,用函式send()和recv(),或者read()和write();

7、關閉網路連線;

8、關閉監聽;

tcp程式設計的客戶端一般步驟是:

1、建立乙個socket,用函式socket();

2、設定socket屬性,用函式setsockopt();* 可選

3、繫結ip位址、埠等資訊到socket上,用函式bind();* 可選

4、設定要連線的對方的ip位址和埠等屬性;

5、連線伺服器,用函式connect();

6、收發資料,用函式send()和recv(),或者read()和write();

7、關閉網路連線;

與之對應的udp程式設計步驟要簡單許多如下:

udp程式設計的伺服器端一般步驟是:

1、建立乙個socket,用函式socket();

2、設定socket屬性,用函式setsockopt();* 可選

3、繫結ip位址、埠等資訊到socket上,用函式bind();

4、迴圈接收資料,用函式recvfrom();

5、關閉網路連線;

udp程式設計的客戶端一般步驟是:

1、建立乙個socket,用函式socket();

2、設定socket屬性,用函式setsockopt();* 可選

3、繫結ip位址、埠等資訊到socket上,用函式bind();* 可選

4、設定對方的ip位址和埠等屬性;

5、傳送資料,用函式sendto();

6、關閉網路連線;

java網路通訊TCP與UDP

system.out.println 客戶端啟動 socket socket new socket 192.168.0.33 8080 outputstream os socket.getoutputstream 會的輸出流 outputstreamwriter osw new outputstre...

網路通訊UDP

udp 前面已經講過tcp網路通訊,然後tcp每次通訊都要進行三次握手連線,雖然傳輸的可靠性比較高,但對於一些及時性的資料的傳輸顯得太過費時,所以就有了udp這種無連線通訊,但資料容易出錯。那些函式我這裡就不講了,直接看我上乙個部落格就行,我這裡直接附例子了。udpserver.c include ...

udp網路通訊

建立套接字 傳送 接收 資料 關閉套接字 伺服器需要通過bind固定本機ip和port import socket 1.建立udp套接字 udp socket socket.socket socket.af inet,socket.sock dgram 2.傳送資料 send socket.send...