ホーム » 2022 » 11月 » 15

日別アーカイブ: 2022年11月15日

2022年11月
 12345
6789101112
13141516171819
20212223242526
27282930  

最新の投稿(電子情報)

アーカイブ

カテゴリー

トランスポート層・TCPとUDP

サブネット同士をつなぐプロトコルとして IPプロトコル を紹介したが、MACアドレスとIPアドレスの対応付けを行う ARP の説明や、パケットのルーティングを司る RIP の説明が不十分だったので、前回資料を補足説明を行う。

  • DHCP(IPアドレスの貸し出し)
  • ARP(IPとMACアドレスの対応付け)
  • RIP(ルータの経路情報のやりとり)
  • IPv4とプライベートアドレス
  • NAT と P2P通信
  • IPv6アドレス.

データ通信ではノイズなどの影響で通信に失敗することがある。これらを補うためのTCPがある。

TCP

TCP(Transmission Control Protocol/トランスミッションコントロールプロトコル)では、分割されたパケットを元の順序に組み上げたり、パケットが途中で消えた場合の再送などの処理を行う。この機能により確実に相手に送る機能が実現されている。

3way ハンドシェーク

TCPの通信では、最初に相互に通信が可能かを確認するハンドシェークが行われる。パケットには、SYN,ACK,FINといった種別を表すフラグがついており、SYNは接続確立の要求を表す。ACKは了解を表す。FINは切断要求を表す。通信開始の時には、(1)通信OK?、(2)OKだよ,そっちもOK?、(3)OKだよ! といった3つの通信パケットで確認してから通信を行う。この最初のやり取りを3way ハンドシェークという。

  • SYN flood攻撃 – 3wayハンドシェークは、今後のパケット並び替えの準備も含めるとコストが高い。通信ルールを無視して相手にSYNパケットだけを大量に送ると相手は他の通信が困難になる場合がある。

SEQ番号,ACK番号

また、通信パケットには、SEQ番号ACK番号という情報がついており、3wayハンドシェーク時には、相手のSEQ番号に1を加えたACK番号をつけてパケットを返送する。これにより、どの通信に対する返事か判るようにしている。さらに、実際のデータを送信する際には、受け取ったデータ長をSEQ番号に加えた値を、ACK番号にして受信に成功したことを相手に伝える。これにより、小分けにされたパケットで次に何を送れば良いのか判別できる。

通信で、パケット分割して送って、その一つ毎の返答を待つと、通信の待ち時間が増えてしまう。このため、相手が受け取り可能であれば、一度に前回の2倍のパケットを返信を待たずに送る。(ウィンドウサイズの拡大)

チェックサムとタイムアウト

通信では、送る途中でデータにノイズが混入したり、パケットが消失することがある。このため、パケットにはパケットのチェックサム(バイトデータを加算した値)を付けて送り、受信時に比較してノイズ混入を確認する。こういった際には、パケットが正しく届かない。パケットが消失したりして、通信相手からの返送が届かないで一定の待ち時間が経過することをタイムアウトと呼ぶ。この時、返信パケットにはデータのSEQ番号とACK番号の情報があるため、受け取りに失敗したパケットが判別できるので、送り側は失敗したパケットを再送する。

受け取り側は、同じくSEQ番号やACK番号を元にパケットの順番を正しく並べ戻すことができる。

TCP FINパケット

通信を切断する場合には、相互に切断して良いか確認する4回の通信で終了する。

UDP

TCPによる通信は、相手側からの受け取った返事を待ちながら通信を行う。このため、通信にかかる時間を要する。また、複数の利用者に一斉にデータをばらまくブロードキャスト通信では、個別のパケット欠落を修復しようとすると、処理が複雑になる。

これらの対応策として、UDP(User Datagram Protocol)がある。これは、TCP通信でのパケット分割や再送処理を行わない極めて単純な送信方法である。このため、相手側に正しくデータが送られる保証はない。確実に相手に送る必要があれば、確認や再送は上位プロトコルの責任となる。

UDP通信は、動画・音声配信などのリアルタイム性のある通信で、正しく通信ができず一時的に動画が止まるなり音声が止まっても、問題が少ないような場合に有効となる。

ICMP/ping

IPプロトコルのプロトコルの1つとして ICMP (Internet Control Message Protocol) がある。このプロトコルは、ネットワーク機器(ノード)の間で、通信の確認をするためのもので、ping コマンドや traceroute コマンドで使われる。

基本的に、パケットを相手コンピュータに送り、返事が返ってくる。ping や traceroute は、その送って返事が返ってくるまでの時間や、パケットを複数送っていくつ返ってきた…などの情報を表示することができ、相手コンピュータまでの通信路が正常かどうかが判断できる。

$ ping www.google.co.jp
PING www.google.co.jp (172.217.25.163) 56(84) バイトのデータ
64 バイト応答 送信元 syd09s13-in-f3.1e100.net (172.217.25.163): icmp_seq=1 ttl=115 時間=7.85ミリ秒
64 バイト応答 送信元 syd09s13-in-f3.1e100.net (172.217.25.163): icmp_seq=2 ttl=115 時間=8.02ミリ秒
^C   # 途中で強制終了させるために Ctrl-C で止める
]$ traceroute www.google.co.jp
traceroute to www.google.co.jp (172.217.25.163), 30 hops max, 60 byte packets
 1  airstation.ei.fukui-nct.ac.jp (192.168.2.1)  0.355 ms  0.529 ms  0.549 ms
(略)
 9  108.170.243.33 (108.170.243.33)  8.245 ms 108.170.243.65 (108.170.243.65)  6.893 ms  6.936 ms
10  72.14.239.25 (72.14.239.25)  6.899 ms  7.125 ms 72.14.238.23 (72.14.238.23)  7.140 ms
11  syd09s13-in-f163.1e100.net (172.217.25.163)  7.014 ms  7.007 ms  6.961 ms

トランスポート層

OSI参照モデルでは、TCPプロトコルとUDPプロトコルをあわせてトランスポート層と呼び、TCP+UDPとIPプロトコルでの通信が、今日のインターネット通信の基本プロトコルとなっており、総称して TCP/IPとかインターネット・プロトコル・スイート と呼ぶ。