「マスタリングTCP/IP を読んだけど理解がイマイチ進まない。Goがどのようにサーバーを立てているのか気になる。」 そんなスキマを埋めるための本です。 Goの標準パッケージである net package を一切利用せずに、自作TCP/IPプロトコルでサーバーを作ります。 パケットをどのようにやり取りするかハンズオン形式で解説し、最後にToDoリストAPIを実装します。
はじめに とりあえずIT業界に入ったら読んでおけという名著はいろいろありますが、その中の1冊がマスタリングTCP/IP入門編でしょう。 僕も買ってはいたものの読むのを途中で挫折していたので、今回しっかり読んでTCP/IPを再勉強してみたいと思います。 マスタリングTCP/IPを読みながらその他わからんことはググりつつ、golangでTCPIPプロトコルそのものを自作してみます。 方針は以下のようにします。 ethernetから作る データのやり取りにnetパッケージは一切使わない (訂正、PCのIPやMacアドレスを取るのにだけ使用しますた) データのやり取りに使うのはsyscallのsendtoとrecvfromだけ socketはRAW_SOCKETを使う golangやネットワークについても初心者の駆け出しですので間違えや実装ミス、変なコードがあるかもですが、生暖かい目でよろしゅうお
The parallelogram represents the interface. It can be seen from the figure that the interface is fully reused on both the server and the client. A brief introduction to the functions of the next few interfaces: EncodePacket/DecodePacket: Responsible for solving the sticky packet problem of data receiving and sending. Through this interface, memory can be reclaimed when sending and receiving data,
IP制限しているTCP 22(sshd)や3306(MySQL)のようなポートが空いていないかチェックするツールを作りました。 たとえば設定ミスで22番ポートがすべてのIPを許可している状態になってしまっていたというケースがありそうで、サーバ台数が数百台になってくるといちいち気にしているのが面倒なのでチェックする簡易ポートスキャナーを作りました。 github.com 外部監視ツールだとポートが空いてるか、任意の文字列が返るかなどのチェックはできますが、ポートが閉じられてることというのを簡単に管理するのが意外と手間だと感じたのがきっかけです。 Go言語で作ってるのでバイナリにして実行もできます。 使い方 goが動く環境を用意して、 echo "example.com\nexample.net" | go run aite9 -tcp 22,3306 のようにすると次のように一気にポートをス
Advent Calendar 2020 全部オレシリーズ 10日目です。もうめんどくせえなあ。 gRPC と NLB での Idle Timeout というあるある問題の調査で Go 言語で書いたクライアントとサーバーを使った際に知ったことのメモです。 まずは TCP keepalive を送らないクライアントとサーバーでの動作検証だ、と思って tcpdump を実行しながら試してみたらなぜか 15 秒おきに TCP keepalive を送り合うんです… は!? そんなコード書いてないのに?? で、確認してみるとクライアント(Dial)側は Go 1.12 からデフォルトで TCP keepalive が有効になっていたみたいです。1.12 ってもうだいぶ前ですね。keepalive の送信は最後の通信から15秒後から15秒おきに送信します。切断までの連続失敗回数は未指定なので ker
This post is going to discuss how to gracefully shut down a TCP server in Go. While servers typically never stop running (until the process is killed), in some scenarios - e.g. in tests - it's useful to shut them down in an orderly way. High-level structure of TCP servers in Go Let's start with a quick review of the high-level structure of TCP servers implemented in Go. Go provides some convenient
kamakura.go #5
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く