これはなに
TCPの勉強をしたので忘れないようにまとめる。
主にヘッダ、コネクション管理、順序制御、再送制御、輻輳制御について書く。
OSI参照モデルの話はみんな書いているので書かない。
今回はコネクション編。
参考文献:WEB+DB PRESS plusシリーズ TCP技術入門
https://gihyo.jp/book/2019/978-4-297-10623-2
目次
1.概要
2.コネクションの確立
3.コネクションの切断
4.おわりに
5.参考文献
1.概要
TCPでは通信を始める前に通信路を確立する。
この通信路をコネクションと呼ぶ。
UDPではこれをしないので、相手がバッファいっぱいだったとしても問答無用で送信したりする。
TCPにおけるコネクションにまつわる特徴は以下。
- アプリケーションごとにコネクションを分ける
- 一対一の通信
- 全二重通信
アプリケーションごとにコネクションを分ける
あなたはPCでYoutubeの音楽を聴きながら、同時にTwitterを見ているとする。
この時Youtubeのサーバとの通信で使うコネクションとTwitterのサーバとの通信で使うコネクションは異なる。
もちろん通信に使っている物理的な線は同じだろうが、プロトコル上の通信路は区別されて運用されている。
こういう状態を論理的な通信路が異なると言う。
一対一の通信
TCPではコネクションを確立すると書いたが、これは一対一の通信路である。
もしも複数人に同時送信をしたいならそれぞれに対してコネクションを確立しなければならない。
こういう一対一の送信しかできない送信方法をユニキャストと言う。
ちなみにUDPは一対多に送信ができる。
こういう送信方法をマルチキャストと言う。
全二重通信
TCPでコネクションを確立した相手とは送信をしながら受信を同時に行える。
これを全二重通信と呼ぶ。
逆に送信か受信のどっちかしかできない通信を半二重通信と呼ぶ。
全二重通信の方が明らかに便利だが、物理的な通信線を二本必要とするのが欠点。
2.コネクションの確立
TCPでコネクションを確立する手順を書く。
AがBと通信を始めたいとする。
- AがTCPヘッダのSYNフラグを有効化させたセグメントをBに送る
- BはSYNに対する応答としてACKフラグを有効化すると同時に、Aに対する送信路を確立するためにSYNフラグを有効化させてセグメントを送る
- AはBからのSYNに対してACKを送る
この手順を3ウェイハンドシェイクと呼ぶ。
三回の通信で終わるのでこの名前になった。
SYNとかACKとかってなんじゃ?と思ったら前回のヘッダ編のコントロールフラグを読んでください。
3.コネクションの切断
コネクションを切断する手順を書く。
AがBと通信を終えたいとする。
- AがFINフラグを有効化させたセグメントをBに送る
- BはそれにACKを返す
- AはBへの送信路を切断する
- BがAへの送信路を切断したいときは逆のことをする
切断も確立と同じようにFIN/ACKを送って3回の通信でやればいいじゃんと思うかもしれない。
しかしまだどちらかのデータ送信が終わってないかもしれないので、データの送信が終わった方から切断する。
「子供がまだ食ってる途中でしょうが!」
これをハーフクローズと呼ぶ。
4.おわりに
今回はコネクションについて書いた。
いろいろ記事が出ている内容なのでつまらなかったかもしれない。
次回は順序制御、再送制御について書く。
次回:順序制御、再送制御編
5.参考文献
WEB+DB PRESS plusシリーズ TCP技術入門
https://gihyo.jp/book/2019/978-4-297-10623-2