JAVA TCPとUDPの違い

4310 ワード

The difference between TCP/IP and UDP
Javaは主にトランスポート層に関心を持ち、トランスポート層ではTCP、UDPは2つのトランスポートデータストリームの方式である。
一、TCP(Transmission Control Protocol,転送制御プロトコル)Connection-orented protocal.つまり、データを送受信する前に、双方はまず仮想の通信道を作り、相手と信頼できる接続を確立しなければならない。
3回の握手:1、AはBにデータセグメントを送信します。(Bに二つのことを教えます。あなたと通信したいです。どのシーケンス番号を先頭データ段として返してもいいですか?)2、BはAの要求を受け取った後、確認応答(ACK)と同期シーケンス番号(SYN)のあるビットの数でAに応答します。(ホストAの二つのことも教えてください。データを転送してもいいです。どのシリアル番号を先頭データとして返してくれますか?)3、Aを受け取ったら、もう一つ確認応答を送ります。
このように3回の握手で完成します。ホストAとホストBはデータを転送できます。
TCPの切断は4回行います。
1、Aがデータ転送を完了したら、制御ビットFINを1セットにし、TCP接続を停止する要求2、ホストBがFINを受信した後に応答し、この方向のTCP接続がオフされることを確認し、ACK置13、B側から逆方向のクローズ要求を再提出し、FIN置14、ホストAがホストBの要求を確認し、ACKを1セットにし、双方のクローズが終了する。
 
名詞の解釈
ACK  TCPヘッダの制御ビットの一つは、データを確認します。宛先から送信されたことを確認し、それを用いて送信先にこのシーケンス番号の前のデータセグメントが全部受信されました。たとえば、確認番号がXであると、前X-1のデータセグメントが全部受信されたということです。ACK=1の場合のみ、確認番号が有効です。ACK=0の場合、確認番号が無効となり、データの再送信が要求され、データの完全性が保証されます。
SYN  同期シーケンス番号は、TCPが接続を確立する時にこの位置1、接続が確立されたらSYNは0となります。
FIN  送信側は送信タスクビットを完了し、TCPがデータ転送を完了すると切断する必要がある場合、接続を切断する方がこの位置を1として提案します。
UDP(User Data Protocol、ユーザデータ報プロトコル)
(1)UDP Is a Connection lessprotocol、Connection less message may arrive
out of order。転送したい場合は、アプリケーションからのデータを簡単につかむことができます。できるだけ速くネットワークに投げます。送信端では、UDP転送データの速度はアプリケーションがデータを生成する速度、コンピュータの能力、伝送帯域幅の制限を受けるだけです。受信端では、UDPはメッセージセグメントごとにキューに置いて、アプリケーションはキューから読むたびに、このメッセージ
(3)UDPパケットのタイトルは短く、8バイトしかなく、TCPの20バイトの情報パケットに対する追加のオーバーヘッドは小さい。
 
結節TCPとUDPの違い:
1.接続と無接続に基づく;2.システムリソースに対する要求(TCPが多く、UDPが少ない);3.UDPプログラムの構造はより簡単である;4.フローモードとデータグラムモード;5 TCP保証データの正確性、UDPはパケットを失う可能性があり、TCPはデータ順序を保証しない。
三.例
TCP:ServerSocket ss=newServer Socket(2000)、UDP:Datagram Socketオブジェクトを作成し、DatagramSocketはTcp方式のsocketオブジェクトと区別されます。   ds=new   Datagram Socket()
[java]view plin
copy
print
//TCPサーバ端   package comp.zakioff.tcp;     import java.io.Input Stream Reader;     import java.net.ServerSocket;     import java.net.Socket         public クラス TCPServer {         public static void main(String[] アークス ローソン Exception {             ServerSocket パス = new ServerSocket(2000)             while (true) {                 ソケット s = ss.accept();                 System.out.println("A" client ハイ ヘン connected.");                 InputStream Reader r = new InputStream Reader(s.getInputStream();                 要点 c = 0;                 while (c) = r.read() > -1) {                     System.out.print(char) c)                 }                 System.out.printl()                 r.close();                 s.close()             }         }     )  
//TCP    
package com.zakisoft.tcp;  
import java.io.InputStreamReader;  
import java.net.ServerSocket;  
import java.net.Socket;  

public class TCPServer {  
    public static void main(String[] args) throws Exception {  
        ServerSocket ss = new ServerSocket(2000);  
        while (true) {  
            Socket s = ss.accept();  
            System.out.println("A client has heen connected.");  
            InputStreamReader r = new InputStreamReader(s.getInputStream());  
            int c = 0;  
            while ((c = r.read()) > -1) {  
                System.out.print((char) c);  
            }  
            System.out.println();  
            r.close();  
            s.close();  
        }  
    }  
}
[java]view plin
copy
print
//TCPクライアント   package comp.zakioff.tcp;         import java.io.Output Stream Writer;     import java.net.Socket         public クラス TCPClient {         public static void main(String[] アークス ローソン Exception {             ソケット s = new ソケット(「127..0.1」、 2000)             Output Stream Writer w = new OutputStream Writer(s.get OutputStream();             w.write("Helloサーバ")             w.flash();             w.close();             s.close()         }     )   
//TCP   
package com.zakisoft.tcp;  

import java.io.OutputStreamWriter;  
import java.net.Socket;  

public class TCPClient {  
    public static void main(String[] args) throws Exception {  
        Socket s = new Socket("127.0.0.1", 2000);  
        OutputStreamWriter w = new OutputStreamWriter(s.getOutputStream());  
        w.write("Hello   ");  
        w.flush();  
        w.close();  
        s.close();  
    }  
}