タグ

tcpに関するa2ikmのブックマーク (37)

  • Difference between UNIX domain STREAM and DATAGRAM sockets?

    This question is NOT for the difference between STREAM type and DATAGRAM type INTERNET sockets. I know that STREAM sockets use TCP, Datagram sockets use UDP and all the TCP,UDP stuff, packets arriving in order, ACK, NACK etc. I understand the importance of these over internet. Q1) When I create a UNIX domain socket which is a local socket, how would it matter if the socket is STREAM socket or DATA

    Difference between UNIX domain STREAM and DATAGRAM sockets?
  • 会社のテックブログに記事を書きました: ペパボ トラブルシュート伝 - TCP: out of memory -- consider tuning tcp_mem の dmesg から辿る 詳解 Linux net.ipv4.tcp_mem - hibomaの日記

    以下の記事です。 tech.pepabo.com TCP our of memory memory pressure モード net.ipv4.tcp_mem 以上の三つの詳細を扱ったエントリです。TCP で大規模なトラフィックを扱っているサーバを扱われている場合、問題がないかどうかを確かめてみるとよいかと思います。 文長いです。何に気をつけたらいいんでしょう? プラクティカルな話だけをまとめると、以下の4行です。 memory pressure モードに入ってしまうと warning です TCP out of memory が出てしまうと critical です 監視は /proc/ 以下のファイルを見ましょう チューニングは net.ipv4.tcp_mem で行いましょう LVS はどうなの? LVS でロードバランシングしている場合は、TCP スタックを通らないため TCP o

    会社のテックブログに記事を書きました: ペパボ トラブルシュート伝 - TCP: out of memory -- consider tuning tcp_mem の dmesg から辿る 詳解 Linux net.ipv4.tcp_mem - hibomaの日記
  • 内部実装から理解するgRPC - Qiita

    概要 目的 gRPCはDocumentにあるように以下の特徴があるかと思います。 protocol buffer のようなインターフェース定義語 (IDL) から生成されたコードを利用してRPCができる HTTP/2で通信することができ、リクエストとレスポンスをそれぞれ分割できる 多言語に対応している しかし、この記事ではこれらの機能の紹介ではなく、gRPCの仕組みを理解することを意図しています。 なぜそれを意図したかというと普段の開発でgRPCを利用しているものの、どのような仕組みでRPCが実現できているのかイメージが持てていなかったためです。そのために、grpc-goの内部実装(2019/5時点)を読み解きながら、実際の通信の中身を覗いてみました。 そして結果的には以下の効用がありました。 protoc-gen-goがprotocol-buffersから生成したコードがどのように利用さ

    内部実装から理解するgRPC - Qiita
  • 何もツールがなくてもコンテナの中のTCP通信の状態を見たい - ローファイ日記

    完全に消費税に負けた... 今日も小ネタです。 一般に、以下のようなことを調べる時 netstat や ss などのツールは便利です。 あるポートがリッスンされているか知りたい あるコネクションに実際に通信があるか知りたい MySQLサーバなど外部プロセス/サーバにコネクションが貼られているか知りたい でもコンテナ環境では、そんな余計なツールは入っていない!!!ことも多い。 そんな時でも、 /proc ファイルシステムはほぼ間違いなくマウントされているはずです。 なのでそこを直接見ることも検討しましょう。 /proc/net/tcp(6) を眺める コンテナのネットワークに直接入るには、 nsenter などを使うことができます。今回はすぐ用意できる環境があったので Haconiwa ですが、 Docker などで置き換えて試してください。 $ ps auxf ... root 13252

    何もツールがなくてもコンテナの中のTCP通信の状態を見たい - ローファイ日記
  • When TCP sockets refuse to die — Idea of the day

    This article was first published on Cloudflare blog: When TCP sockets refuse to die Accompanying scripts While working on our Spectrum server, we noticed something weird: the TCP sockets which we thought should have been closed were lingering around. We realized we don't really understand when TCP sockets are supposed to time out! In our code, we wanted to make sure we don't hold connections to de

  • TCP socketではwriteの後すぐにcloseしてはいけない

    TCP socketではwriteの後すぐにcloseしてはいけない。 相手側に全てのデータが届いてからcloseする必要がある。 shutdown で書き込み側だけハーフクローズするとよい。 相手側がcloseしてから、こちらをcloseする。相手側がcloseしたことは、readを呼んでブロックさせておくと、読み込みバイト数==0 つまりEOFになったことでわかる。

    TCP socketではwriteの後すぐにcloseしてはいけない
  • GitLabで「切りのいい時間」によって引き起こされた不具合と改善されるまでの6つのステップ

    By Rawpixel GitLab.comのエンジニアであるクレイグ・ミスケル氏は、顧客から報告された「gitのリポジトリからpullを行う際に発生したエラー」が、切りのいい時間にとらわれがちな人間性によるものだと判明したことについて、エラーを改善するまでの手順を6つのステップに分けて紹介しています。 6 Lessons we learned when debugging a scaling problem on GitLab.com | GitLab https://about.gitlab.com/2019/08/27/tyranny-of-the-clock/ ミスケル氏は、GitLab.comの顧客から「Git pullのエラーが断続的に見られる」という報告を受け取りました。報告されたエラーメッセージは以下の通り。 ssh_exchange_identification: con

    GitLabで「切りのいい時間」によって引き起こされた不具合と改善されるまでの6つのステップ
    a2ikm
    a2ikm 2019/09/19
  • socat で簡易プロキシサーバーを立てよう - らっちゃいブログ

    今日は socat コマンドのご紹介です。 表題の通り、コマンドラインだけで簡易プロキシサーバーを立てることができるというものです。 さっそく見ていきましょう。 インストール 起動してみる SSLを試してみる まとめ インストール 今回は ubuntu 環境にインストールします。 $ sudo apt-get install socat これだけで準備OKです。 起動してみる その前に簡単に使い方を説明します。 $ socat <options> <address> <address> 一つ目の address が入力で、二つ目の address が出力と思ってもらえればいいです。 具体的には以下のように指定します。 $ socat tcp-listen:80,reuse,fork tcp-connect:localhost:8080 これだけで80番ポートで待ち受け、8080へ中継する動

    socat で簡易プロキシサーバーを立てよう - らっちゃいブログ
  • NLB + Fluentd の構成でファイルディスクリプタが枯渇する謎の現象を解消した話 - Repro Tech Blog

    Repro インフラチーム (SRE + 分析基盤) の伊豆です。今回は、Repro のデータ収集基盤で私たちが遭遇した問題を紹介したいと思います。 具体的には、AWS Network Load Balancer(NLB) + Fluentd の構成でファイルディスクリプタが枯渇する謎の現象に遭遇したので、その問題の調査記録と解決策を共有します。また、この問題を解消するにあたり Fluentd に PR を送ったのでそれの紹介もします。 https://github.com/fluent/fluentd/pull/2352 データ収集基盤の構成 Repro のデータ収集基盤はFlunetd High Availability Configをもとに構成され、大まかに次のようになっています。 SDK からアップロードされたデータは、転送用 Fluentd(log forwarders)を経由し

    NLB + Fluentd の構成でファイルディスクリプタが枯渇する謎の現象を解消した話 - Repro Tech Blog
  • GitHub - smoltcp-rs/smoltcp: a smol tcp/ip stack

    smoltcp is a standalone, event-driven TCP/IP stack that is designed for bare-metal, real-time systems. Its design goals are simplicity and robustness. Its design anti-goals include complicated compile-time computations, such as macro or type tricks, even at cost of performance degradation. smoltcp does not need heap allocation at all, is extensively documented, and compiles on stable Rust 1.65 and

    GitHub - smoltcp-rs/smoltcp: a smol tcp/ip stack
  • TCP接続の追跡による簡略化したネットワーク依存関係グラフの可視化基盤 - ゆううきブログ

    著者: 坪内佑樹(*1), 古川雅大(*1) 所属: (*1) 株式会社はてな 研究会: Web System Architecture研究会#3 はじめに ウェブシステムは,一般的に,分散したホスト上で動作するソフトウェアが互いにネットワーク通信することにより構成される. 相互にネットワーク通信するシステムにおいて,システム管理者があるネットワーク内のノードに変更を加えた結果,ノードと通信している他のノードに変更の影響がでることがある. ネットワーク接続数が多いまたはノードが提供するサービスの種類が多くなるほど,システム管理者が個々の通信の依存関係を記憶することは難しくなる. さらに,常時接続しておらず必要なタイミングで一時的に通信するケースでは,あるタイミングの通信状況を記録するだけでは通信の依存関係を把握できない. その結果,システムを変更するときの影響範囲がわからず,変更のたびに依

    TCP接続の追跡による簡略化したネットワーク依存関係グラフの可視化基盤 - ゆううきブログ
  • TCPパケットを解析して構造化ログでダンプするツール tcpdp を作った - Copy/Cut/Paste/Hatena

    やっと形になってきました。 github.com 「データベースのクエリログを取得したい」 例えば、データベース(RDBMS)のクエリログを取得したいとき一番確実な方法は、そのRDBMSに備わっているログ機構を利用することです。 一方で、全てのクエリログを出力するとなるとそれなりにIO負荷がかかることが予想されるので、負荷状況によってはクエリログ出力(のIO負荷)を別サーバに分離したくなります。 では、どうすればよいかというと、例えば アプリケーションサーバとデータベースサーバの間にプロキシサーバを挟んでそこで記録することでIO負荷を分離する アプリケーションサーバ側で(notアプリケーションで)記録することで(大抵、サーバ台数の多い)アプリケーション側にIO負荷を分散する というような方法を思いつきます。 そこで、「もし、TCPコネクション上に流れている(例えば)クエリログを解析してログ

    TCPパケットを解析して構造化ログでダンプするツール tcpdp を作った - Copy/Cut/Paste/Hatena
    a2ikm
    a2ikm 2018/09/25
  • TCP Proxyを書いてMySQLの通信を覗いてみる - Copy/Cut/Paste/Hatena

    お、MySQLの通信も見えそうだぞ? pic.twitter.com/GVxBXqHEgA— k1LoW (@k1LoW) 2018年7月25日 "TCP Proxyを書いてPostgreSQLの通信を覗いてみる - Copy/Cut/Paste/Hatena" の続編です。 MySQLの通信を覗いてみる また簡単なクエリだけを対象にします(プリペアードステートメントなどは含みません)。 MySQLもしっかりとしたドキュメントがありクエリのプロトコルの説明もありました。 MySQL :: MySQL Internals Manual :: 14.6.4 COM_QUERY しかし、とみたまさひろさん の資料のほうが断然わかりやすかったです。 slide.rabbit-shocker.org というわけで今回も tcprxy に実装を追加していきます。 mysqlコマンドでクエリを実行してみ

    TCP Proxyを書いてMySQLの通信を覗いてみる - Copy/Cut/Paste/Hatena
  • @IT:パケットフローから負荷分散の基本を理解する

    サーバ負荷分散の基構成と動作 負荷分散装置(ロードバランサ)のニーズは現在も高まる一方です。従来はWebサーバのみを主な対象としていましたが、現在ではルータ#1/アプリケーションサーバ/メールサーバ/SIPサーバ/ファイアウォール/VPNゲートウェイ/ウイルスゲートウェイ/IDSなど、多種多様の機器やプロトコルが負荷分散の対象となっています。それに応じてロードバランサも現在では非常に多機能となっていますが、連載では、全3回に渡ってアプリケーションベースではなく、ネットワークベースの技術、基となるパケットフローやサーバヘルスチェック、接続維持などの動作について紹介します。また、パフォーマンス測定についてもお話ししましょう。 #1 ルータはレイヤ3でインターネット回線のマルチホーミングとして機能する(=複数のWAN回線を接続して、同時に通信させることで負荷分散し、必要な帯域を確保するし、

    @IT:パケットフローから負荷分散の基本を理解する
  • Go言語でTCPやソケット通信を多重化,高速化するsmux(ソケットマルチプレクサ)をつくった · THINKING MEGANE

    サーバ間で分散処理を行う際の相互通信におけるボトルネックを解消するため,smux(Socket multiplexer)を開発している. サーバ間の相互通信におけるボトルネックとその解決策 一対のサーバ間で多数のリクエストとレスポンスが送受信され,信頼性の高い通信としてTCPを利用する場合,コネクション確立のオーバーヘッドを排除するために接続の再利用が行われる.しかしながら,クライアントは送信に対する受信を待つ必要があるため,レスポンスまでに幾許かの処理時間を要する状況では送信のキューがたまってしまう.そこで複数の接続を利用することでこれを解消する方法が取られるが,追加の接続はリソース使用に関するオーバーヘッドを発生させてしまう.なにより各接続におけるレスポンス待ち時間は依然として解決しておらず,接続の利用面から見て非効率である.そこで,単一の接続において,仮想的に並行送受信を行う方法が提

    Go言語でTCPやソケット通信を多重化,高速化するsmux(ソケットマルチプレクサ)をつくった · THINKING MEGANE
    a2ikm
    a2ikm 2018/05/03
    HTTP/2が早々に頭打ちになってるのはヘッダとかの処理の差?
  • google/netstack: IPv4 and IPv6 userland network stack

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    google/netstack: IPv4 and IPv6 userland network stack
  • ログからは見えてこない高負荷サイトのボトルネック : DSAS開発者の部屋

    ちょうど1年前に「高負荷サイトのボトルネックを見つけるには」という記事を掲載していますが、この手のトラブルシューティングって結構大変で悩ましいですよね。はじめまして、新入りの@pandax381です。 ログからは見えてこないもの 「サイトの応答が遅い」という問題が発生した場合、その原因はどこにあるでしょうか。 Webアプリケーションの処理に時間が掛かっている DBサーバに投げたクエリーの応答が遅い サーバの処理能力を超えている などなど、いくつもの可能性があります。通常、上に挙げているような問題は、アプリケーションやサーバのログを調査することで、原因を突き止めることができます。 一方で、こういったログの調査だけでは、その原因にたどり着くことができなかったり、相当な苦労が伴うケースもあります。 あるサイトのある日の出来事 つい先日のことですが、KLabの運営している某ソーシャルゲームにて、サ

    ログからは見えてこない高負荷サイトのボトルネック : DSAS開発者の部屋
  • 平文のTCP/IPにおいて転送されたデータの信頼性を期待してはいけない - 最速配信研究会(@yamaz)

    TL;DR 平文のTCP/IPの通信では送信したデータの完全性は期待できないので、経路にはSSL/TLSを使いましょう TCP/IPはUDPと違い、信頼性のある通信を実現するためのプロトコルという説明がよくされる。なのでTCP/IPでやり取りしたデータは1bitの狂いもなく転送先に届くと思われがちだ。TCP/IPが信頼性のある通信を確保してると言われているのは下記の理由による。 1. データが届かなかった場合の再送処理がプロトコルに入っている 2. TCPパケットにペイロードのチェックサムがあり、不具合が検知されると修正もしくは再送される(ただし16bit) 3. IP層の更に下の層にチェックサムがあり、不具合が検知されると修正もしくは再送される(イーサの場合32bit) しかしチェックサムはそれぞれ16/32bitのため、昨今の超大量データを取り扱うにはかなり心もとない。 1. ざっくり

    平文のTCP/IPにおいて転送されたデータの信頼性を期待してはいけない - 最速配信研究会(@yamaz)
    a2ikm
    a2ikm 2018/03/04
  • ssd -- Socket Server demo by Apple · GitHub

    ssd.c 0���U �T��U // Copyright (C) 2010 Apple Inc. All Rights Reserved. #include <launch.h> #include <libkern/OSAtomic.h> #include <vproc.h> #include "shared.h" static bool g_is_managed = false; static bool g_accepting_requests = true; static dispatch_source_t g_timer_source = NULL; /* OSAtomic*() requires signed quantities. */ static int32_t g_transaction_count = 0; int server_check_in(void) { in

    ssd -- Socket Server demo by Apple · GitHub
  • SwiftでTCPサーバーを作ってみる - Qiita

    Swiftでは,Cの構造体でさえもExtensionでどんどん拡張できてしまうのは愉快痛快ですね. C言語でのソケット関連のお約束をSwiftで拡張して使いやすくしてみようという試みです. Cの,というかソケットAPIでは, struct sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_len = sizeof(sin); sin.sin_family = AF_INET; sin.sin_port = htons(0); sin.sin_addr.s_addr= INADDR_ANY; bind(sock, (struct sockaddr *)&sin, sizeof(sin)) ... という感じでsockaddr_inからsockaddrへキャストするのがお約束.swiftではこれをストレートに表現できないので,Exte

    SwiftでTCPサーバーを作ってみる - Qiita