ホームページ  >  記事  >  バックエンド開発  >  PHP 面接の質問 2: 使用されるトランスポート プロトコル

PHP 面接の質問 2: 使用されるトランスポート プロトコル

不言
不言オリジナル
2018-04-18 09:31:524253ブラウズ

この記事では、PHP インタビューの質問 2 で使用された送信プロトコルを紹介します。これには、必要な友人が参照できるように共有します。

1.HTTP (ハイパー テキスト トランスポート プロトコル) : ハイパーテキスト転送プロトコル。これは、インターネット上で最も広く使用されている通信プロトコルの 1 つであり、インターネット ユーザーが使用する WWW プログラムは、このプロトコル標準に準拠する必要があります。ユーザーが特定のリソース サーバー上のファイルにアクセスしたい場合 (サーバー上の指定されたファイルの参照、ダウンロード、実行など)、HTTP 経由でインターネット上の WWW リソースにアクセスできます。
2. FILE: ローカルファイル転送プロトコル。ユーザーが自分のコンピュータからファイルを取得し、自分のハードディスクに保存されているファイルをナビゲーションシステムの画面上に表示する方法です。
3. FTP(ファイル転送プロトコル):ファイル転送プロトコル。このプロトコルは、インターネットからファイルを取得する方法の 1 つで、ユーザーとファイル サーバー間でファイルを転送するために使用されます。このプロトコルを通じて、ユーザーはリモート サーバー上のファイルのコンテンツを簡単に表示できると同時に、必要なコンテンツを使用しているコンピューターにコピーできます。一方、ファイル サーバーの承認により、ユーザーがサーバー上のファイルを管理のために使用できる場合、ユーザーはローカル コンピュータ上のコンテンツをファイル サーバーにアップロードして他のユーザーと共有したり、上記のファイルを自由に編集したりすることができます。ファイルの削除、移動、コピー、名前変更など。

トランスポート層は、ターゲットネットワークに到達するための 2 つの方法を提供します

伝送制御プロトコル (TCP): 正常なデータ伝送を保証するための完全なエラー制御とフロー制御を提供します。
ユーザー データグラム プロトコル (UDP): 基本的なエラー検出のみを提供する、コネクションレス型プロトコルです。
特徴:
1) UDP:
データをパッケージ化する
データサイズが制限されている(64k)
接続は確立されない
高速だが信頼性が低い
2) TCP:
接続チャネルを確立する
データサイズは無制限
速度が遅い、しかし信頼性が高いです
トランスポート層にはポートやソケットなど多くの要素が関係するため、モバイル開発には理解する必要があります。これらについては後の記事で詳しく紹介しますので、ここでは説明しません。

アプリケーション層は、TCP/IP プロトコルの最上位として、モバイル開発にとって最も露出されています。

TCP プロトコルで実行されるプロトコル:
HTTP (ハイパーテキスト転送プロトコル、ハイパーテキスト転送プロトコル)、主に通常のブラウジングに使用されます。
HTTPS (Hypertext Transfer Protocol over Secure Socket Layer、または HTTP over SSL、Secure Hypertext Transfer Protocol)、HTTP プロトコルの安全なバージョン。
FTP (File Transfer Protocol) は、その名前が示すように、ファイル転送に使用されます。
POP3 (Post Office Protocol、バージョン 3、ポスト オフィス プロトコル)、電子メールの受信に使用されます。
SMTP (Simple Mail Transfer Protocol)、電子メールの送信に使用されます。
TELNET (ネットワーク経由のテレタイプ)、端末を介してネットワークにログインします。
SSH (Secure Shell、セキュリティが不十分な TELNET を置き換えるために使用)、暗号化された安全なログインに使用されます。
UDP プロトコルで実行されるプロトコル:
BOOTP (ブート プロトコル)、ディスクレス デバイスに適用されます。
NTP (Network Time Protocol)、ネットワーク同期に使用されます。
DHCP (動的ホスト構成プロトコル)、IP アドレスを動的に構成します。
その他:
DNS (ドメイン ネーム サービス)、アドレス検索、メール転送などを完了するために使用されます (TCP および UDP プロトコルで実行)。
ECHO (エコー プロトコル)。エラー チェックと応答時間の測定に使用されます (TCP および UDP プロトコルで実行)。
SNMP (Simple Network Management Protocol、簡易ネットワーク管理プロトコル)、ネットワーク情報の収集とネットワーク管理に使用されます。
ARP (アドレス解決プロトコル)、イーサネット ハードウェアのアドレスを動的に解決するために使用されます。

sip プロトコル https://www.cnblogs.com/gardenofhu/p/7299963.html

セッション開始プロトコル (SIP) は、VoIP テクノロジーで最も一般的に使用されるプロトコルの 1 つです。これは、他のアプリケーション層プロトコルと連携して動作し、インターネット上のマルチメディア通信セッションを制御するアプリケーション層プロトコルです。

SIP - 概要
SIP について注意すべき点がいくつかあります -

SIP は、インターネット プロトコル経由でマルチメディア セッションを作成、変更、終了するために使用されるシグナリング プロトコルです。セッションは、2 つのエンドポイント間の単純な呼び出しにすぎません。エンドポイントには、スマートフォン、ラップトップ、またはインターネット経由でマルチメディア コンテンツを送受信できる任意のデバイスを使用できます。

SIP は、IETF (Internet Engineering Task Force) 標準によって定義されたアプリケーション層プロトコルです。 RFC 3261 で定義されています。

SIP はクライアント サーバー アーキテクチャを具体化し、HTTP の URL と URI、SMTP のテキスト エンコード スキームとヘッダー スタイルを使用します。

SIP は、IP ネットワーク上で音声とビデオを配信するためのセッションと RTP (リアルタイム トランスポート プロトコル) を記述する SDP (セッション記述プロトコル) の助けを借ります。

SIP は、2 者間 (ユニキャスト) または複数者間 (マルチキャスト) セッションに使用できます。

その他の SIP アプリケーションには、ファイル転送、インスタント メッセージング、ビデオ会議、オンライン ゲーム、ストリーミング マルチメディア配信などがあります。

下の図は、一般的なシナリオにおける SIP の適用可能性を示しています。

通常、SIP プロトコルは、2 つ以上のエンドポイント間のインターネット テレフォニーとマルチメディア配信に使用されます。たとえば、ある人が SIP を使用して別の人に電話をかけたり、多くの参加者との電話会議を設定したりできます。

SIP プロトコルは、構成するコマンドが限られており、非常にシンプルになるように設計されています。また、テキストベースであるため、SIP セッションでエンドポイント間でやり取りされる SIP メッセージを誰でも読むことができます。

SIP のネットワーク作成を支援するエンティティが存在します。 SIP では、各ネットワーク要素はアドレスのような SIP URI (Uniform Resource Identifier) によって識別されます。以下はネットワーク要素です -

ユーザー エージェント
プロキシ サーバー
登録サーバー
リダイレクト サーバー
ロケーション サーバー
ユーザー エージェント
これは SIP ネットワークのエンドポイントであり、最も重要なネットワーク要素の 1 つです。エンドポイントはセッションを開始、変更、または終了できます。ユーザー エージェントは、SIP ネットワーク内で最もインテリジェントなデバイスまたはネットワーク要素です。ソフトフォン、携帯電話、またはラップトップを使用できます。

ユーザー エージェントは、論理的に 2 つの部分に分かれています。

ユーザー エージェント クライアント (UAC) - リクエストを送信し、レスポンスを受信するエンティティです。

ユーザー エージェント サーバー (UAS) - リクエストを受信し、応答を送信するエンティティ。

SIP は、発信者の電話が通話を開始するクライアントとして機能し、着信側の電話が通話に応答するサーバーとして機能するクライアントサーバー アーキテクチャに基づいています。

プロキシ サーバー
ユーザー エージェントからリクエストを受信し、別のユーザーに転送するネットワーク要素。

基本的に、プロキシ サーバーはルーターのように機能します。

SIP リクエストを理解し、URI を使用して送信するある程度のインテリジェンスを備えています。

プロキシ サーバーは 2 つのユーザー エージェントの間に存在します。

送信元と宛先の間に最大 70 のプロキシ サーバーを配置できます。

プロキシ サーバーには 2 つのタイプがあります -

ステートレス プロキシ サーバー - 受信したメッセージを転送するだけです。このタイプのサーバーには、通話やトランザクションの情報は一切保存されません。

ステートフル プロキシ サーバー - このタイプのプロキシ サーバーは、受信したすべてのリクエストと応答を追跡し、必要に応じて将来使用できます。相手が応答しない場合は、リクエストを再送信できます。

登録サーバー
登録サーバーは、ユーザーエージェントからの登録リクエストを受け入れます。これは、ユーザーがネットワーク内で自分自身を認証するのに役立ちます。同じドメイン内の他の SIP サーバーを支援するために、URI とユーザーの場所をデータベースに保存します。

SIP 登録のプロセスを示す以下の例を見てください。

ここで、発信者は TMC ドメインに登録したいと考えています。したがって、TMC のレジストラー サーバーに REGISTER リクエストが送信され、サーバーはクライアントを承認するときに 200 OK 応答を返します。

リダイレクト サーバー
リダイレクト サーバーはリクエストを受信し、レジストラによって作成されたロケーション データベース内でリクエストの対象受信者を検索します。

リダイレクトサーバーはデータベースを利用して位置情報を取得し、ユーザーに3xx(リダイレクト応答)を応答します。応答コードについては、このチュートリアルの後半で説明します。

ロケーション サーバー
ロケーション サーバーは、発信者の可能な位置に関する情報をリダイレクト サーバーとプロキシ サーバーに提供します。

ロケーション サーバーにアクセスできるのは、プロキシ サーバーまたはリダイレクト サーバーのみです。

以下の図は、セッションを確立する際に各ネットワーク要素が果たす役割を示しています。

SIP - システム アーキテクチャ
SIP は階層化されたプロトコルとして構造化されており、その動作は、各ステージ間の疎結合のみを備えた、かなり独立した一連の処理ステージの観点から記述されることを意味します。

SIP の最下層は、その構文とエンコーディングです。そのエンコーディングは、拡張された Backus-Naur 表形式構文 (BNF) を使用して指定されます。

2 番目の層はトランスポート層です。これは、クライアントがリクエストを送信して応答を受信する方法、およびサーバーがネットワーク経由でリクエストを受信して​​応答を送信する方法を定義します。すべての SIP 要素にはトランスポート層が含まれます。

次のステップはトランザクション層です。トランザクションは、クライアント トランザクション (トランスポート層を使用) によってサーバー トランザクションに送信されるリクエストであり、そのリクエストに対するすべての応答がサーバー トランザクションからクライアントに送り返されます。ユーザー エージェント クライアント (UAC) によって完了されるタスクは、一連のトランザクションを使用して実行されます。ステートレス プロキシにはトランザクション層が含まれません。

トランザクション層の上の層をトランザクションユーザーと呼びます。ステートレス プロキシを除いて、すべての SIP エンティティはトランザクション ユーザーです。

下の画像は、SIP セッションの基本的なコール フローを示しています。

ここでは、上記の呼び出しフローを段階的に説明します。

プロキシ サーバーに送信される INVITE リクエストは、セッションの開始を担当します。

プロキシ サーバーは、INVITE リクエストの再送信を停止するために、呼び出し元 (Alice) にすぐに応答するために 100 を送信します。

プロキシ サーバーは、ロケーション サーバーでボブのアドレスを検索します。アドレスを取得したら、さらにINVITEリクエストを転送します。

その後、ボブの電話から発生した 180 回の呼び出し音 (一時的な応答) がアリスに返されます。

ボブが電話を取るとすぐに 200 OK 応答が生成されました。

200 OK がアリスに届くと、ボブはアリスから ACK を受け取ります。

同時にセッションが確立され、両端からRTPパケット(セッション)が流れ始めます。

セッション終了後、参加者 (アリスまたはボブ) は BYE リクエストを送信してセッションを終了できます。

プロキシサーバーをバイパスして、アリスからボブに直接バイバイします。

最後に、Bob は 200 OK 応答を送信して BYE を確認し、セッションが終了します。

上記の基本的なコール フローでは、3 つのトランザクション (1、2、3 のラベルが付いています) を使用できます。

完全な呼び出し (INVITE から 200 OK まで) はダイアログと呼ばれます。

SIP ラダー
プロキシは、あるユーザーが別のユーザーと接続するのにどのように役立ちますか?下の画像を参考に調べてみましょう。

図に示したトポロジーをSIPラダー図と呼びます。このプロセスは次のように行われます -

発信者が通話を開始すると、INVITE メッセージがプロキシ サーバーに送信されます。 INVITE を受信すると、プロキシ サーバーは DNS サーバーの助けを借りて受信者のアドレスを解決しようとします。

次のルートを取得した後、呼び出し元のプロキシ サーバー (プロキシ 1、送信プロキシ サーバーとも呼ばれます) は、呼び出し先のプロキシ サーバーである受信プロキシ サーバー (プロキシ サーバー 2) に INVITE リクエストを転送します。

受信プロキシ サーバーは、ロケーション サーバーに接続して、ユーザーが登録した着信側アドレス情報を取得します。

位置サーバーから情報を取得したら、通話を宛先に転送します。

ユーザーエージェントが自分のアドレスを知ると、通話をバイパスする、つまり直接電話をかけることができます。

SIP メッセージには、リクエストとレスポンスの 2 つのタイプがあります。

リクエストの開始行には、リクエストを定義するメソッドと、送信するリクエストを定義するリクエスト URI が含まれます。

同様に、応答の開始行には応答コードが含まれます。

リクエストメソッド
SIPリクエストは通信を確立するために使用されるコードです。これらを補完するために、SIP 応答は通常、要求が成功したか失敗したかを示します。

METHODS と呼ばれるこれらの SIP リクエストにより、SIP メッセージが有効になります。

メソッドは、別のユーザー エージェントまたはサーバーによって実行される特定のアクションを要求するため、SIP リクエストと見なすことができます。

メソッドは 2 つのタイプに分類されます -

コア メソッド

拡張メソッド

コア メソッド
以下に説明するように、6 つのコア メソッドがあります。

INVITE
INVITE は、ユーザー エージェントとのセッションを開始するために使用されます。つまり、INVITE メソッドは、ユーザー エージェント間のメディア セッションを確立するために使用されます。

INVITEは、メール本文に発信者のメディア情報を含めることができます。

INVITE が成功応答 (2xx) を受信した場合、または ACK が送信された場合、セッションは確立されたとみなされます。

INVITE リクエストが成功すると、2 つのユーザー エージェント間の会話が確立され、BYE が送信されるまで会話を終了することはできません。

確立されたダイアログボックス内で送信される INVITE は、re-INVITE と呼ばれます。

Re-INVITE は、セッションのプロパティを変更したり、ダイアログ ボックスの状態を更新したりするために使用されます。

招待の例
次のコードは、INVITE の使用方法を示しています。

コードをコピー

INVITE sips:Bob@TMC.com SIP/2.0  
  Via: SIP/2.0/TLS client.ANC.com:5061;branch = z9hG4bK74bf9  
  Max-Forwards: 70  
  From: Alicesips:Alice@TTP.com;tag = 1234567  
  To: Bobsips:Bob@TMC.com 
  Call-ID: 12345601@192.168.2.1 
  CSeq: 1 INVITE  
  Contact: sips:Alice@client.ANC.com  
  Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY  
  Supported: replaces  
  Content-Type: application/sdp  
  Content-Length: …
v = 0  
  o = Alice 2890844526 2890844526 IN IP4 client.ANC.com  
  s = Session SDP  
  c = IN IP4 client.ANC.com  
  t = 3034423619 0  
  m = audio 49170 RTP/AVP 0  
  a = rtpmap:0 PCMU/8000

コードをコピー

BYE 
BYE是用于终止既定会话的方法。这是SIP请求,可以由呼叫者或被叫方发送以终止会话。
它不能由代理服务器发送。
BYE请求通常路由端到端,绕过代理服务器。
BYE不能发送到待处理的INVITE或未建立的会话。
注册 
REGISTER请求执行用户代理的注册。该请求由用户代理发送到注册服务器。
REGISTER请求可以转发或代理,直到它到达指定域的权威注册商。
它在正在注册的用户的To头中携带AOR(记录地址)。
REGISTER请求包含时间段(3600sec)。
一个用户代理可以代表另一个用户代理发送REGISTER请求。这被称为第三方注册。这里,From标签包含代表To标题中标识的方提交注册的方的URI 。
取消 
CANCEL用于终止未建立的会话。用户代理使用此请求取消之前发起的未决呼叫尝试。
它可以由用户代理或代理服务器发送。
CANCEL是逐跳请求,即它通过用户代理之间的元素,并接收下一个有状态元素生成的响应。
ACK 
ACK用于确认对INVITE方法的最终响应。如果INVITE不可用,则ACK始终沿着INVITE.ACK的方向包含SDP主体(媒体特性)。
ACK可能不会用于修改已经在初始INVITE中发送的媒体描述。
接收ACK的有状态代理必须确定ACK应该向下游转发到另一个代理或用户代理。
对于2xx响应,ACK是端到端的,但对于所有其他最终响应,它在涉及有状态代理时基于逐跳的工作。
OPTIONS 
OPTIONS方法用于向用户代理或代理服务器询问其功能并发现其当前的可用性。对请求的响应列出了用户代理或服务器的功能。代理从不生成OPTIONS请求。

拡張メソッド
サブスクリプション
ユーザーエージェントは、SUBSCRIBEを使用してサブスクリプションを確立し、特定のイベントに関する通知を取得します。

これには、サブスクリプションの期間を示す Expires ヘッダー フィールドが含まれています。

期間を過ぎると自動的に購読は終了となります。

サブスクリプションにより、ユーザーエージェント間の会話が確立されます。

ダイアログボックス内で別の SUBSCRIBE を送信することで、有効期限が切れる前に再購読できます。

購読したユーザーは200 OKを受け取ります。

ユーザーは、Expires 値 0 (ゼロ) を指定して別の SUBSCRIBE メソッドを送信して、サブスクリプションをキャンセルできます。

通知
ユーザーエージェントはNOTIFYを使用して特定のイベントの発生を取得します。通常、サブスクライバとノーティファイアの間にサブスクリプションがある場合、NOTIFY はダイアログ内で起動されます。

通知者が受信した場合、すべての NOTIFY は 200 OK 応答を受け取ります。

NOTIFY には、イベントを示すイベント ヘッダー フィールドと、サブスクリプションの現在の状態を示す subscriptionstate ヘッダー フィールドが含まれます。

サブスクリプションの開始時と終了時に必ず NOTIFY を送信してください。

PUBLISH
PUBLISH は、イベント ステータス情報をサーバーに送信するためにユーザー エージェントによって使用されます。

PUBLISH は、複数のソースからイベント情報がある場合に非常に便利です。

PUBLISH リクエストは、ダイアログ ボックスで送信されない点を除けば NOTIFY に似ています。

PUBLISH リクエストには、Expires ヘッダー フィールドと Min-Expires ヘッダー フィールドが含まれている必要があります。

参照
REFER は、ユーザー エージェントがダイアログ ボックスにアクセスするために別のユーザー エージェントの URI を参照するために使用されます。

REFER には Refer-To ヘッダーが含まれている必要があります。これは REFER の必須ヘッダーです。

REFER はダイアログの内部または外部に送信できます。

A 202 Accepted は REFER リクエストをトリガーし、参照が別のユーザー エージェントによって受け入れられたことを示します。

情報
INFO は、メディア セッションを確立している別のユーザー エージェントにコール シグナリング情報を送信するためにユーザー エージェントによって使用されます。

これはエンドツーエンドのリクエストです。

プロキシは常に INFO リクエストを転送します。

UPDATE
セッションが確立されていない場合、UPDATE を使用してセッションのステータスを変更します。ユーザーは UPDATE を使用してコーデックを変更できます。

セッションが確立されている場合は、再招待を使用してセッションを変更/更新します。

PRACK
PRACK は、信頼できる暫定応答転送 (1XX) の受信を確認するために使用されます。

一般に、PRACK は、RSeq の信頼できるシーケンス番号と Supported:100rel ヘッダーを含む暫定応答を受信したときにクライアントによって生成されます。

PRACK には、レースヘッダーに (RSeq + CSeq) 値が含まれます。

PRACK メソッドは、100 回の試行応答を除くすべての一時的な応答に対して機能します。これは、送信には決して信頼できません。

PRACK にはメッセージ本文が含まれる場合があり、オファー/返信の交換に使用できます。

メッセージ
SIPを使用してインスタントメッセージを送信するために使用されます。 IM は通常、テキスト会話に参加する参加者によってリアルタイムで交換される短いメッセージで構成されます。

メッセージはダイアログ ボックス内またはダイアログ ボックスの外に送信できます。

MESSAGEの内容はメール本文のMIME添付ファイルとして読み込まれます。

200 OK 応答は通常受信され、メッセージが宛先に配信されたことを示します。

関連する推奨事項:

php インタビューの質問 1: スレッドとプロセスの違い (ちなみに、コルーチンについても言及されています)

以上がPHP 面接の質問 2: 使用されるトランスポート プロトコルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。