UDPとTCPの紹介

3566 ワード

1、TCPとUDPの違いの総括:
1、TCPは接続に向いている(電話をかける時、先にダイヤルして接続を確立する);UDPは、データを送信する前に接続2を確立する必要がなく、TCPが信頼できるサービスを提供するために接続されていない.すなわち、TCP接続により伝送されるデータは、エラーがなく、失われず、重複せず、順次到着する.UDPは最大限の努力を尽くして納品し、すなわち信頼できる納品を保証しない.
Tcpはチェックサム,再送制御,シーケンス番号識別,スライドウィンドウ,確認応答により信頼性の高い伝送を実現する.パケットを紛失した場合の再送制御は、順序が乱れたパケットを順次制御することもできる.
3、UDPは比較的に良いリアルタイム性を持って、仕事の効率はTCPより高くて、高速伝送とリアルタイム性に対して比較的に高い通信あるいは放送通信に適用します.
4.各TCP接続はポイント対ポイントのみである;UDPは一対一、一対多、多対一と多対多のインタラクティブ通信をサポートする
5、TCPはシステム資源に対する要求が多く、UDPはシステム資源に対する要求が少ない.
2、なぜUDPがTCPより優位になることがあるのか.
UDPはその簡単さ、伝送が速いという利点で、リアルタイムゲームなどのTCPに取って代わるシーンが増えている.
(1)ネットワーク速度の向上はUDPの安定性に信頼できるネットワーク保障を提供し,パケット損失率が低く,アプリケーション層を用いて再送すれば伝送の信頼性を確保できる.
(2)TCPはネットワーク通信の信頼性を実現するために複雑な混雑制御アルゴリズムを用い,煩雑な握手プロセスを確立したが,TCP内蔵のシステムプロトコルスタックでは改善が極めて困難である.
TCPを採用して、いったんパケットを失うことが発生すると、TCPは後続のパケットをキャッシュして、前のパケットが再送して受信した後に更に送信を続けて、遅延はますます大きくなって、UDPに基づいてリアルタイム性に対する要求が比較的に厳しい情況の下で、カスタム再送のメカニズムを採用して、パケットを失う発生の遅延を最低に下げることができて、できるだけネットの問題がゲーム性に対して影響をもたらすことを減らすことができます.
3、UDPとTCPのプログラミング手順も少し違います.以下の通りです.
TCP:TCPプログラミングのサーバ側の一般的なステップは:1、socketを作成し、関数socket()を使用する.SOCKET SocketListen =socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); 2、socket属性を設定し、関数setsockopt();オプション3、IPアドレス、ポートなどの情報をsocketにバインドし、関数bind()を使用する.SOCKET_ERROR=bind(SocketListen,(const sockaddr*)&addr,sizeof(addr))4、リスニングを開始し、関数listen();SOCKET_ERROR==listen(SocketListen,2)5、クライアントからの接続を受信し、関数accept()を使用する.SOCKET SocketWaiter = accept(SocketListen,
                                        _Out_    struct sockaddr *addr

Inout int addrlen); 6、データの送受信、関数send()とrecv()またはread()とwrite()を使用する.7、ネットワーク接続を閉じる;closesocket(SocketListen);closesocket(SocketWaiter); 8、監獄を閉鎖するSOCK_STREAMという特徴は、データを送受信するたびにconnectで接続を確立しなければならず、SOCK_DGRAMはUser Datagram Protocolプロトコルのネットワーク通信であり、接続がなく、信頼できない.TCPプログラミングのクライアントの一般的なステップは:1、1つのsocketを作成して、関数socket()を使います;2、socket属性を設定し、関数setsockopt()を使用する.オプション3、IPアドレス、ポートなどの情報をsocketにバインドし、関数bind()*オプション4、接続する相手のIPアドレスとポートなどの属性を設定する.5、サーバーを接続し、関数connect()を使う.6、データの送受信、関数send()とrecv()またはread()とwrite()を使用する.7、ネットワーク接続を閉じる;
int send(In SOCKET s,//どのsocketに送信するか、acceptが返すsocket.In const char*buf,In int len,In int flags);send(SocketClient)&fh,sizeof(fh),0);recv(SocketClient,szbuf,sizeof(szbuf),0); UDP:それに対応するUDPプログラミングステップは簡単で、それぞれ以下の通りです:UDPプログラミングのサーバー側の一般的なステップは:1、1つのsocketを作成して、関数socket()を使います;2、socket属性を設定し、関数setsockopt()を使用する.オプション3、IPアドレス、ポートなどの情報をsocketにバインドし、関数bind()を使用する.4、循環してデータを受け取り、関数recvfrom()を使う.5、ネットワーク接続を閉じる;
UDPプログラミングのクライアントの一般的なステップは:1、1つのsocketを作成して、関数socket()を使います;2、socket属性を設定し、関数setsockopt();オプション3、IPアドレス、ポートなどの情報をsocketにバインドし、関数bind()*オプション4、相手のIPアドレスとポートなどの属性を設定する.5、データを送信し、関数sendto()を使用する.6、ネットワーク接続を閉じる;int recvfrom(In SOCKET s,//バインドされたsocket Out char*buf,In int len,In int flags,Out struct sockaddr from,//相手のInout_opt int fromlenを受信するために使用される);int nres=recvfrom(pThis->m_socketListen,szBuf,sizeof(szBuf),0,(sockaddr)&addrClient,&nSize);//0におけるフラグビットsendto(m_socketListen,szBuffer,nSize,0,(const sockaddr)&addr,sizeof(sockaddr_in))TCPおよびUDPは、OSIモデルにおける輸送層におけるプロトコルである.TCPは信頼性の高い通信伝送を提供し、UDPは、アプリケーションに渡される通信伝送をブロードキャストおよび詳細制御するためによく使用される.
4、socketをブロードキャスト属性bool optval=trueに設定する.setsockopt(m_socketListen,SOL_SOCKET,SO_BROADCAST,(const char *)&optval,sizeof(bool));
5、Socketを非ブロックに設定します.//bool benable=true;//ioctlsocket(m_socketListen,FIONBIO,(u_long*)&benable);
6、Tcpヘッダ、20バイト7、UDPヘッダ、8バイト
作者:xiaobangkuaipao来源:CSDN原文:https://blog.csdn.net/xiaobangkuaipao/article/details/76793702本文は博主のオリジナルの文章で、転載して博文のリンクを添付してください!