導航:首頁 > 數據分析 > 怎麼定義網路傳輸的數據包

怎麼定義網路傳輸的數據包

發布時間:2024-07-27 05:23:04

Ⅰ 如何使用java socket來傳輸自定義的數據包

以下分四點進行描述:

1,什麼是Socket
網路上的兩個程序通過一個雙向的通訊連接實現數據的交換,這個雙向鏈路的一端稱為一個Socket。Socket通常用來實現客戶方和服務方的連接。Socket是TCP/IP協議的一個十分流行的編程界面,一個Socket由一個IP地址和一個埠號唯一確定。
但是,Socket所支持的協議種類也不光TCP/IP一種,因此兩者之間是沒有必然聯系的。在Java環境下,Socket編程主要是指基於TCP/IP協議的網路編程。

2,Socket通訊的過程
Server端Listen(監聽)某個埠是否有連接請求,Client端向Server 端發出Connect(連接)請求,Server端向Client端發回Accept(接受)消息。一個連接就建立起來了。Server端和Client 端都可以通過Send,Write等方法與對方通信。
對於一個功能齊全的Socket,都要包含以下基本結構,其工作過程包含以下四個基本的步驟:
(1) 創建Socket;
(2) 打開連接到Socket的輸入/出流;
(3) 按照一定的協議對Socket進行讀/寫操作;
(4) 關閉Socket.(在實際應用中,並未使用到顯示的close,雖然很多文章都推薦如此,不過在我的程序中,可能因為程序本身比較簡單,要求不高,所以並未造成什麼影響。)

3,創建Socket
創建Socket
java在包java.net中提供了兩個類Socket和ServerSocket,分別用來表示雙向連接的客戶端和服務端。這是兩個封裝得非常好的類,使用很方便。其構造方法如下:
Socket(InetAddress address, int port);
Socket(InetAddress address, int port, boolean stream);
Socket(String host, int prot);
Socket(String host, int prot, boolean stream);
Socket(SocketImpl impl)
Socket(String host, int port, InetAddress localAddr, int localPort)
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
ServerSocket(int port);
ServerSocket(int port, int backlog);
ServerSocket(int port, int backlog, InetAddress bindAddr)
其中address、host和port分別是雙向連接中另一方的IP地址、主機名和端 口號,stream指明socket是流socket還是數據報socket,localPort表示本地主機的埠號,localAddr和 bindAddr是本地機器的地址(ServerSocket的主機地址),impl是socket的父類,既可以用來創建serverSocket又可 以用來創建Socket。count則表示服務端所能支持的最大連接數。例如:學習視頻網 http://www.xxspw.com
Socket client = new Socket("127.0.01.", 80);
ServerSocket server = new ServerSocket(80);
注意,在選擇埠時,必須小心。每一個埠提供一種特定的服務,只有給出正確的埠,才 能獲得相應的服務。0~1023的埠號為系統所保留,例如http服務的埠號為80,telnet服務的埠號為21,ftp服務的埠號為23, 所以我們在選擇埠號時,最好選擇一個大於1023的數以防止發生沖突。
在創建socket時如果發生錯誤,將產生IOException,在程序中必須對之作出處理。所以在創建Socket或ServerSocket是必須捕獲或拋出例外。

4,簡單的Client/Server程序
1. 客戶端程序
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
try{
Socket socket=new Socket("127.0.0.1",4700);
//向本機的4700埠發出客戶請求
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
//由系統標准輸入設備構造BufferedReader對象
PrintWriter os=new PrintWriter(socket.getOutputStream());
//由Socket對象得到輸出流,並構造PrintWriter對象
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由Socket對象得到輸入流,並構造相應的BufferedReader對象
String readline;
readline=sin.readLine(); //從系統標准輸入讀入一字元串
while(!readline.equals("bye")){
//若從標准輸入讀入的字元串為 "bye"則停止循環
os.println(readline);
//將從系統標准輸入讀入的字元串輸出到Server
os.flush();
//刷新輸出流,使Server馬上收到該字元串
System.out.println("Client:"+readline);
//在系統標准輸出上列印讀入的字元串
System.out.println("Server:"+is.readLine());
//從Server讀入一字元串,並列印到標准輸出上
readline=sin.readLine(); //從系統標准輸入讀入一字元串
} //繼續循環
os.close(); //關閉Socket輸出流
is.close(); //關閉Socket輸入流
socket.close(); //關閉Socket
}catch(Exception e) {
System.out.println("Error"+e); //出錯,則列印出錯信息
}
}
}

2. 伺服器端程序
import java.io.*;
import java.net.*;
import java.applet.Applet;
public class TalkServer{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
//創建一個ServerSocket在埠4700監聽客戶請求
}catch(Exception e) {
System.out.println("can not listen to:"+e);
//出錯,列印出錯信息
}
Socket socket=null;
try{
socket=server.accept();
//使用accept()阻塞等待客戶請求,有客戶
//請求到來則產生一個Socket對象,並繼續執行
}catch(Exception e) {
System.out.println("Error."+e);
//出錯,列印出錯信息
}
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由Socket對象得到輸入流,並構造相應的BufferedReader對象
PrintWriter os=newPrintWriter(socket.getOutputStream());
//由Socket對象得到輸出流,並構造PrintWriter對象
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
//由系統標准輸入設備構造BufferedReader對象
System.out.println("Client:"+is.readLine());
//在標准輸出上列印從客戶端讀入的字元串
line=sin.readLine();
//從標准輸入讀入一字元串
while(!line.equals("bye")){
//如果該字元串為 "bye",則停止循環
os.println(line);
//向客戶端輸出該字元串
os.flush();
//刷新輸出流,使Client馬上收到該字元串
System.out.println("Server:"+line);
//在系統標准輸出上列印讀入的字元串
System.out.println("Client:"+is.readLine());
//從Client讀入一字元串,並列印到標准輸出上
line=sin.readLine();
//從系統標准輸入讀入一字元串
} //繼續循環
os.close(); //關閉Socket輸出流
is.close(); //關閉Socket輸入流
socket.close(); //關閉Socket
server.close(); //關閉ServerSocket
}catch(Exception e){
System.out.println("Error:"+e);
//出錯,列印出錯信息
}
}
}

Ⅱ 網路傳輸中的數據包是什麼概念專業點。一個數據包多大

通常我們說的數據包指的是IP數據包,即網路層的協議數據單元——PDU,一個IP數據包最大可達65535位元組。但是通常網路鏈路上傳輸設備的介面MTU(最大傳輸單元)都是1500位元組,互聯網也是如此。您還可以輸入11字。呵呵

Ⅲ 數據包和數據幀分別代表什麼

1,包(Packet)是TCP/IP協議通信傳輸中的數據單位,一般也稱「數據包」。

TCP/IP協議是工作在OSI模型第三層(網路層)、第四層(傳輸層)上的,幀工作在第二層(數據鏈路層)。上一層的內容由下一層的內容來傳輸,所以在區域網中,「包」是包含在「幀」里的。

2,所謂數據幀(Data frame),就是數據鏈路層的協議數據單元,它包括三部分:幀頭,數據部分,幀尾。其中,幀頭和幀尾包含一些必要的控制信息,比如同步信息、地址信息、差錯控制信息等;數據部分則包含網路層傳下來的數據,比如IP數據包,等等。



(3)怎麼定義網路傳輸的數據包擴展閱讀

數據包在傳輸過程中是以數據幀的形式傳輸的,數據幀由幀頭+IP頭+TCP/UDP頭+數據+幀校驗組成;

在每一個路由器上幀頭與幀校驗都會變化以適應不同的鏈路,其他內容基本不變;

所有數據都是以二進制數據進行編碼的,根據各個鏈路類型在不同的物理鏈路上編碼傳輸。

Ⅳ 什麼是數據包,數據包是用來干什麼的

數據包(英語:Data packet),又稱分組,是在分組交換網路中傳輸的格式化數據單位。

一個數據包(packet)分成兩個部分,包括控制信息,也就是頭(header),和數據本身,也就是負載(payload)。可以將一個數據包比作一封信,頭相當於信封,而數據包的數據部分則相當於信的內容。有時候一個大數據包可以分成多個小數據包,這個和信不同。

簡單的說,上網打開網頁,這個簡單的動作,就是先發送數據包給網站,它接收到了之後,根據發送的數據包的IP地址,返回給網頁的數據包,也就是說,網頁的瀏覽,實際上就是數據包的交換。

(4)怎麼定義網路傳輸的數據包擴展閱讀:

數據包的結構——

數據包的結構非常復雜,數據包主要由「目的IP地址」、「源IP地址」、「凈載數據」等部分構成,包括包頭和包體;數據包的結構與我們平常寫信非常類似,目的IP地址是說明這個數據包是要發給誰的,相當於收信人地址;

源IP地址是說明這個數據包是發自哪裡的,相當於發信人地址;而凈載數據相當於信件的內容。 正是因為數據包具有這樣的結構,安裝了TCP/IP協議的計算機之間才能相互通信。我們在使用基於TCP/IP協議的網路時,網路中其實傳遞的就是數據包。理解數據包,對於網路管理的網路安全具有至關重要的意義。

Ⅳ IP數據包的定義是什麼

TCP/IP協議定義了一個在網際網路上傳輸的包,稱為IP數據包,而IP數據報(IP Datagram)是個比較抽象的內容,是對數據包的結構進行分析。 由首部和數據兩部分組成,其格式如圖所示。首部的前一部分是固定長度,共20位元組,是所有IP數據報必須具有的。在首部的固定部分的後面是一些可選欄位,其長度是可變的。首部中的源地址和目的地址都是IP協議地址。

固定部分

(1)版本佔4位,指IP協議的版本。通信雙方使用的IP協議版本必須一致。目前廣泛使用的IP協議版本號為4(即IPv4)。關於IPv6,目前還處於草案階段。

(2)首部長度佔4位,可表示的最大十進制數值是15。請注意,這個欄位所表示數的單位是32位字長(1個32位字長是4位元組),因此,當IP的首部長度為1111時(即十進制的15),首部長度就達到60位元組。當IP分組的首部長度不是4位元組的整數倍時,必須利用最後的填充欄位加以填充。因此數據部分永遠在4位元組的整數倍開始,這樣在實現IP協議時較為方便。首部長度限制為60位元組的缺點是有時可能不夠用。但這樣做是希望用戶盡量減少開銷。最常用的首部長度就是20位元組(即首部長度為0101),這時不使用任何選項。

(3)區分服務佔8位,用來獲得更好的服務。這個欄位在舊標准中叫做服務類型,但實際上一直沒有被使用過。1998年IETF把這個欄位改名為區分服務DS(Differentiated Services)。只有在使用區分服務時,這個欄位才起作用。

(4)總長度總長度指首部和數據之和的長度,單位為位元組。總長度欄位為16位,因此數據報的最大長度為2^16-1=65535位元組。

在IP層下面的每一種數據鏈路層都有自己的幀格式,其中包括幀格式中的數據欄位的最大長度,這稱為最大傳送單元MTU(Maximum Transfer Unit)。當一個數據報封裝成鏈路層的幀時,此數據報的總長度(即首部加上數據部分)一定不能超過下面的數據鏈路層的MTU值。

(5)標識(identification)佔16位。IP軟體在存儲器中維持一個計數器,每產生一個數據報,計數器就加1,並將此值賦給標識欄位。但這個「標識」並不是序號,因為IP是無連接服務,數據報不存在按序接收的問題。當數據報由於長度超過網路的MTU而必須分片時,這個標識欄位的值就被復制到所有的數據報的標識欄位中。相同的標識欄位的值使分片後的各數據報片最後能正確地重裝成為原來的數據報。

(6)標志(flag)佔3位,但目前只有2位有意義。

●標志欄位中的最低位記為MF(More Fragment)。MF=1即表示後面「還有分片」的數據報。MF=0表示這已是若干數據報片中的最後一個。

●標志欄位中間的一位記為DF(Don』t Fragment),意思是「不能分片」。只有當DF=0時才允許分片。

(7)片偏移佔13位。片偏移指出:較長的分組在分片後,某片在原分組中的相對位置。也就是說,相對用戶數據欄位的起點,該片從何處開始。片偏移以8個位元組為偏移單位。這就是說,除了最後一個分片,每個分片的長度一定是8位元組(64位)的整數倍。

(8)生存時間佔8位,生存時間欄位常用的的英文縮寫是TTL(Time To Live),表明是數據報在網路中的壽命。由發出數據報的源點設置這個欄位。其目的是防止無法交付的數據報無限制地在網際網路中兜圈子,因而白白消耗網路資源。最初的設計是以秒作為TTL的單位。每經過一個路由器時,就把TTL減去數據報在路由器消耗掉的一段時間。若數據報在路由器消耗的時間小於1秒,就把TTL值減1。當TTL值為0時,就丟棄這個數據報。後來把TTL欄位的功能改為「跳數限制」(但名稱不變)。路由器在轉發數據報之前就把TTL值減1.若TTL值減少到零,就丟棄這個數據報,不再轉發。因此,現在TTL的單位不再是秒,而是跳數。TTL的意義是指明數據報在網路中至多可經過多少個路由器。顯然,數據報在網路上經過的路由器的最大數值是255.若把TTL的初始值設為1,就表示這個數據報只能在本區域網中傳送。

(9)協議佔8位,協議欄位指出此數據報攜帶的數據是使用何種協議,以便使目的主機的IP層知道應將數據部分上交給哪個處理過程。

(10)首部檢驗和佔16位。這個欄位只檢驗數據報的首部,但不包括數據部分。這是因為數據報每經過一個路由器,路由器都要重新計算一下首部檢驗和(一些欄位,如生存時間、標志、片偏移等都可能發生變化)。不檢驗數據部分可減少計算的工作量。

(11)源地址佔32位。

(12)目的地址佔32位。

可變部分

IP首部的可變部分就是一個可選欄位。選項欄位用來支持排錯、測量以及安全等措施,內容很豐富。此欄位的長度可變,從1個位元組到40個位元組不等,取決於所選擇的項目。某些選項項目只需要1個位元組,它只包括1個位元組的選項代碼。但還有些選項需要多個位元組,這些選項一個個拼接起來,中間不需要有分隔符,最後用全0的填充欄位補齊成為4位元組的整數倍。

增加首部的可變部分是為了增加IP數據報的功能,但這同時也使得IP數據報的首部長度成為可變的。這就增加了每一個路由器處理數據報的開銷。實際上這些選項很少被使用。新的IP版本IPv6就將IP數據報的首部長度做成固定的。

目前,這些任選項定義如下:

(1)安全和處理限制(用於軍事領域)

(2)記錄路徑(讓每個路由器都記下它的IP地址)

(3)時間戳(Time Stamp)(讓每個路由器都記下IP數據報經過每一個路由器的IP地址和當地時間)

(4)寬松的源站路由(Loose Source Route)(為數據報指定一系列必須經過的IP地址)

(5)嚴格的源站路由(Strict Source Route)(與寬松的源站路由類似,但是要求只能經過指定的這些地址,不能經過其他的地址)[1]

這些選項很少被使用,並非所有主機和路由器都支持這些選項。

Ⅵ 區域網中的數據包是什麼,它的結構與傳輸過程是怎樣的

「包」(Packet)是TCP/IP協議通信傳輸中的數據單位,一般也稱「數據包版」。
數據包分為前導符權、數據包頭、數據、包尾4部分。
 前導符:通知接收方數據包即將到達。
 數據包頭:指明數據包從何來,到何處去,以及數據包類型。
 數據:數據包攜帶的數據。
 包尾:數據包的幀校驗碼和結束標志。
網路數據包的傳輸過程
 在網路中,發送方計算機將要發送的所有信息都分割成許多小數據包,並將這些小數據包通過連接介質及網路設備傳送至接收方計算機。
 在發送信息時,發送方的系統將把所有發送的位元組累加起來,並將這些數據添加在末尾一同發送出去。
 接受方收到數據包後,首先計算收到的數據總和,並與發送的數據總和相比較。如果二者相同操作結束。如果不同,則說明數據已損壞並丟棄,然後接收方立即向發送方發出重發請求。
 接收方然後將所有收到的小數據包重新組裝起來,從而完成信息的傳遞過程。

閱讀全文

與怎麼定義網路傳輸的數據包相關的資料

熱點內容
為什麼程序會跑飛 瀏覽:659
matlab中的m文件是什麼 瀏覽:226
excel批量保存pdf文件 瀏覽:963
win10文件夾死機動不了 瀏覽:411
ps打開多頁pdf文件 瀏覽:901
資料庫統計某一欄位值出現次數 瀏覽:705
學編程需要哪些方面的能力 瀏覽:896
在word2003表格中插入一行 瀏覽:606
怎麼把拍照取字的文件轉成pdf 瀏覽:838
小米穿戴app哪裡更換表盤 瀏覽:911
滿足該條件更改文件內容的代碼 瀏覽:503
xp系統怎麼卸載win10系統文件 瀏覽:709
華為手機雙系統app怎麼轉 瀏覽:317
u盤插上pc自動跳出文件夾 瀏覽:232
機密文件寫在哪裡 瀏覽:480
qq主題免費使用女孩 瀏覽:342
園林景觀網站模板 瀏覽:717
五線譜入門基礎視頻教程下載 瀏覽:598
個人網站怎麼盈利 瀏覽:618
怎麼禁止程序啟動程序運行 瀏覽:261

友情鏈接