![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
takeshi | 投稿日時: 2007/6/26 14:29 |
新米 ![]() ![]() 登録日: 2006/5/10 居住地: 投稿: 16 |
TCPのコネクション管理 ノードが複数のTCP通信を行う場合に,複数のTCPコネクションが使われていると思うのですが
それら複数のTCPコネクションを管理している部分が知りたいのですがわかりません nsと違ってtcpがclass化されていないと思うのですが どなたかご存じの方がいらしましたら,ご教授頂けると幸いです |
mast | 投稿日時: 2007/6/26 15:46 |
一人前 ![]() ![]() 登録日: 2005/4/7 居住地: 投稿: 93 |
Re: TCPのコネクション管理 こんにちは。
node->transportData.tcpで管理しています。 ただし、INPCB(Internet Protocol Control Block)が絡んでいるので、把握するのが少々ややこしいかもしれません。 node->transportData.tcpには、struct inpcb型のheadという名前のフィールドがありますが、 これが、コネクション毎に用意されるstruct inpcbのインスタンス(INPCB)のリストになっています。
この各INPCBの中に、inp_ppcbというフィールドがあり、これが各々のコネクションのTCPCB(TCP Control Block: struct tcpcbのインスタンス)へのポインタとなっています。 各コネクションのINPCB/TCPCBの生成は、tcp_attach()で行われます。 また、特定コネクションのリスト内サーチは、 in_pcblookup():4タプル(LocalAddr/LocalPort/RemoteAddr/RemotePort)を検索キーとしたサーチ または、 in_pcbsearch():コネクションIDを検索キーとしたサーチ で行い、intotcpcb()を呼び出して、そのINPCBのinp_ppcbが指しているTCPCBを取得します。 詳しくは、一度、tcp_usrreq.cppを読んでみてください。 上記のようなことがたぶん読み取れると思います。 (tcp_connect()関数などを追うと分かりやすいかと思います。) |
takeshi | 投稿日時: 2007/6/29 18:18 |
新米 ![]() ![]() 登録日: 2006/5/10 居住地: 投稿: 16 |
Re: TCPのコネクション管理 mastさん
ご丁寧な情報ありがとうございました 上記の情報を便りに一度tcp_usrreq.cppなど読んでみようかと思います また大変恐縮ではありますが あるコネクション番号がついたTCPコネクションにA~Bまでのシーケンス番号のついたTCPデータを送信する方法や あるコネクション番号がついたTCPコネクションの通信を途中で止めるなどは方法などはご存知でしょうか. |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |