タグ

tcpに関するkyabのブックマーク (4)

  • もしもACKパケットがドロップして届かなかったら【3ウェイハンドシェイク】 - Qiita

    3ウェイハンドシェイク中、SYN または SYN+ACK パケットがドロップしたときは気づけるけど、ACK パケットがドロップしても気づけ無い・・・? ふと気になったので調べてみました。 結論から言うと、後続のデータ送信用のパケットに付与されているacknowledgment numbers(確認応答番号)により、ACKパケットだけが途中でドロップしたことを確認できます。 ACKパケットのドロップを確認した宛先側は暗黙的なACKパケットを受け取った状態になり、SYN_RECEIVED状態からESTABLISHED状態に遷移、コネクションを確立します。 解説します。 3ウェイハンドシェイクとは 名前の通り以下の3つの要求と許可の確認をし、通信できる状態を作り出している。 1.送信元が通信路を確保するため、相手にデータ転送の許可要求を出す。(SYN) 2.宛先側が許可を送信元に知らせると同時に

    もしもACKパケットがドロップして届かなかったら【3ウェイハンドシェイク】 - Qiita
    kyab
    kyab 2019/06/18
  • How TCP backlog works in Linux

    When an application puts a socket into LISTEN state using the listen syscall, it needs to specify a backlog for that socket. The backlog is usually described as the limit for the queue of incoming connections. Because of the 3-way handshake used by TCP, an incoming connection goes through an intermediate state SYN RECEIVED before it reaches the ESTABLISHED state and can be returned by the accept s

    How TCP backlog works in Linux
    kyab
    kyab 2015/06/03
    ポートは閉じてないのにRST返される可能性もあるのね。
  • PythonでTCPスタックを記述するとどうなる? | POSTD

    Hacker School在籍中、ネットワーキングの理解をより深めたいと思い、小規模なTCPスタックを書いてみようと思い立ちました。個人的には、C言語よりもPythonの方になじみがありましたし、その頃ちょうど、パケット送信を 非常に簡単に する scapy ネットワーキングライブラリも見つけたところでした。 そんなわけで、 teeceepee を書き始めました。 基的な構想は次のとおりです。 TCPパケットを送信可能にするRaw socketを開く google.comを取得するためにHTTP要求を送る 応答を取得しパースする 成功を祝う 適切なエラー処理などについてはさほどの注意も払わず、ただただウェブページを取得し、勝利を宣言しようと思っていました(^_^) ステップ1:TCPハンドシェイク 手始めは、GoogleとのTCPハンドシェイクです(以下は必ずしも正しく動作しませんが、原

    PythonでTCPスタックを記述するとどうなる? | POSTD
  • TCP/IPの通信の切断検知 - 揮発性のメモ2

    プログラムが終了するときはOSがFINとか送ってくれるけど、途中でLANケーブル抜けたときとかはどうにもならないので 自分で切断を検知する必要がある。キープアライブを使って切断を検知する。 int option = 1; setsockopt( sd, SOL_SOCKET, SO_KEEPALIVE, (void*)&option, sizeof(option) ); デフォルトでは切断検知まで 2時間11分15秒。 2時間とか待ってると日が暮れるので、これをせめて3分とかにする int option = 1; setsockopt( sd, SOL_SOCKET, SO_KEEPALIVE, (void*)&option, sizeof(option) ); option = 60; setsockopt( sd, IPPROTO_TCP, TCP_KEEPIDLE, (void*)&

    TCP/IPの通信の切断検知 - 揮発性のメモ2
    kyab
    kyab 2014/04/03
    setsockoptでSO_KEEPALIVE, TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_KEEPCNTを設定してやる
  • 1