メイン Transport Layer Protocol Implementation & Model Development ACKについて | 投稿するにはまず登録を |
題名 | 投稿者 | 日時 |
---|---|---|
ACKについて | junpei | 2005/12/6 15:25 |
Re: ACKについて | forum_support | 2005/12/7 19:38 |
» Re: ACKについて | forum_support | 2005/12/7 19:41 |
Re: ACKについて | junpei | 2005/12/8 15:51 |
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
forum_support | 投稿日時: 2005/12/7 19:41 |
モデレータ 登録日: 2005/5/17 居住地: 東京都中野区中央4-5-3 ?構造計画研究所 投稿: 322 |
Re: ACKについて 送信セグメントのACKフラグ設定
では、送信されるTCPセグメント(のTCPヘッダ部分の、コントロールビットフラグ)にいつACKフラグが立てられるのかということについてですが、tcp_output()関数内で以下のようにしてセットされています。 [transport/tcp/tcp_output.cpp] ti = (tcpiphdr*) MEM_malloc((sizeof(tcpiphdr) + optlen)); ... ti->ti_flags = flags; ここで、flagsという変数は、tcp_output()関数内の以下の箇所でデフォルト値がセットされ、それ以降でさらにそのときの状況に応じて特定フラグを落としたり立てたりします。 どのような場合にどのフラグを立てるのか、ということについては、ソースコードを読むかもしくはTCPの解説本などを参考にしてください。 [transport/tcp/tcp_output.cpp] flags = tcp_outflags[tp->t_state]; flagsのデフォルト値についても、簡単に解説しておきます。 ここで、tp->t_stateはそのときのTCPの状態であり、とりうる状態の値は transport/tcp/tcp_proto.hにおいて定義されていますので、そちらをご覧下さい。 tcp_outflagsについても、同ファイルに定義されていますのでご覧ください。 それらによると、各状態とそれに対応するデフォルトのフラグ値は、以下のように定義されていることになります。 State Default flag -------------------------------- TCPS_CLOSED TH_RST|TH_ACK TCPS_LISTEN 0 TCPS_SYN_SENT TH_SYN TCPS_SYN_RECEIVED TH_SYN|TH_ACK TCPS_ESTABLISHED TH_ACK TCPS_CLOSE_WAIT TH_ACK TCPS_FIN_WAIT_1 TH_FIN|TH_ACK TCPS_CLOSING TH_FIN|TH_ACK TCPS_LAST_ACK TH_FIN|TH_ACK TCPS_FIN_WAIT_2 TH_ACK TCPS_TIME_WAIT TH_ACK 以上、ご参考になりますでしょうか? |
フラット表示 | 前のトピック | 次のトピック |