Code Day's Night

ichikawayのブログ

GRO / GSO は TCP をどう変えるのか

GSO/GROを調査中、TCPのAckとの関係がよく分からなくなってきて混乱したため、ChatGPTとやりとりした内容をまとめたものです。 ChatGPTに出力させた記事ですが、内容は面白いと思ったことと、将来また自分が同じような疑問を持ちそうだと思ったため自分用の…

自作IPルーター実装時に「Message too long」はなぜ起きたのか ― Linux / AF_PACKET / GRO・GSO が生む“見えない巨大パケット”の正体 ―

PHPのsocket拡張を使ってLinuxで動作するIPルーターを自作しています。 実機で動作確認している際に、データーを転送したところで「Message too long」のエラーがたまに出ていました。 今回はその原因を探った記事です。 今回の環境は次のようになっています…

2025年ふりかえり

2025年は色々あったが、人生で初めての経験がそれなりにあってよかった。PHP系のカンファレンスは去年に引き続き全部スポンサーして参加したので満足感があった。 1月 禁酒生活が終了。2024年の11月に倒れてしまってから2ヶ月ほど禁酒していた。恐る恐る飲ん…

私とPHPカンファレンス福岡の10年

2015年にPHPカンファレンス福岡をアカセさんと始めて10年で8回開催しました。 10年ですよ、長いですね。平成から令和になり、当時5歳だった長男が中3になり、時の流れを感じます。 10周年となるPHPカンファレンス福岡2025が良い区切りだったので、アカセさん…

自作IPルーターを実装して見えた、tcpdumpに映らないカーネル内部の世界

現在PHPでIPルーターを作り始めています。簡単なものを実装してpingが通るところまで完成しました。 うおぉぉ!!! PHPで自作IPルータ(簡易版)が動いた!alice -> router(PHP) -> bob でaliceからのpingが通ったーちょっとはまってtcpdumpしてたりで解決…

PHPで第2層イーサネットの読み書きはできるのか?(できる)

PHPのsocket拡張を使うと、簡単にネットワークプログラミングができ、RAWソケットも利用可能なためTCPやIPパケットも読めます。 PHPのsocket拡張は、中ではCのsocketを呼び出しているだけなのですが、なぜかプロトコルファミリーでAF_PACKET指定できず、イー…

2024年を振り返る

今年1年を振り返ってみた。カンファレンス最高!という1年だった気がする。 コロナ禍前の2019年みたいな日々がずっと続くのが理想と思っていたので、それが戻ってきた感じ。 1月 PHPカンファレンス北海道へ。本番前日に時間があったのでtomzohさんを誘って急…

PHPカンファレンス2024にてPHPで実装するTLS/SSLプロトコルの発表をしました

2024/12/22に開催されたPHPカンファレンス2024にて、PHPでTLSを実装した時の話をしてきました。 登壇資料と動画 登壇資料はこちらです。フローの流れなどがわかりやすくなるので、ぜひプレゼンテーションモードで見てもらえると嬉しいです。 docs.google.com…

TLSやTCPをPHPで実装して人生を学ぶ「3つの層」の話をしました(ぺぱ合戦)

2024/11/30に行われた「紅白ぺぱ合戦」で技術LT(?)をしてきました。 connpass.com 紅白ぺぱ合戦は、id:asumiso と id:stefafafan の結婚披露宴(実質)のようなものです。 全体の感想 披露宴はいいですね。100人近く集まった人がいくつかグルーピングされて…

PHPで自作IPパケットを送受信したい場合

いまPHPでTCPプロトコルを実装中です。TCPはレイヤーとして4層でその下の3層にIPがあります。 PHPで自作TCPパケットを送りたい時はC言語で実装するのと同じように socket_create()関数の引数に、 AF_INETとSOCK_RAWを指定すると実現できます。 SOCK_RAWを使…