Blog

技術の深掘り・日常など幅広く紹介してます

    All Posts
  • thumbnail

    Go で競技プログラミングに臨んだことがある人なら、一度は fmt.Scan 関数の落とし穴にハマったことがあるのではないでしょうか。 Go では標準入力を受け付ける際に、fmt.Scan 関数、もしくは bufio.Scanner メソッドや bufio.ReadLine メソッドをよく用います。 しかし、Go を使って競技プログラミングをやる場合、bufio.Scanner を使用しなければ困る場面があります。 今回のブログでは、fmt パッケージの Scan 関数と bufio パッケージの Scanner メソッドに注目しながら、fmt.Scan で TLE が発生する原因と解決策について紹介します。

    Published on
  • thumbnail

    インターネットを介して提供されるサービスはどのように構築・実現されるのでしょうか。現代のネットワークアプリケーション開発において、Socket API は非常に重要な役割を果たします。 Socket API は、異なるコンピュータ間でデータを送受信するための低レベルインターフェースを提供し、TCP/IP に則った通信を実現します。今回のブログでは、ネットワークソケットについて触れ、Socket API の概要から実際の使用法について紹介します。

    Published on
  • thumbnail

    インターネット上には様々な脅威が存在するため、端末間通信におけるセキュリティの確保が重要です。異なるプライベートネットワークに存在する端末同士をセキュアに接続する代表的なネットワーク技術として VPN(Virtual Private Network)があります。VPN は、公共ネットワーク網の中に仮想的な専用線を作り出し、送受信データを暗号化することでグローバルネットワークを介したセキュアな端末間通信を実現します。VPN を使用すると、オフィスと自宅、異なる拠点同士等、地理的に離れた場所にあるプライベートネットワーク同士が直接繋がっているかのようなエンドツーエンド通信が可能になります。近年では、クラウドサービスや IoT(Internet of Things)の普及、リモートワークの一般化が進み、ネットワークの構造は複雑で分散的なものになってきています。こうした背景を踏まえ、VPN を用いた安全かつセキュアなリモート接続は組織や企業においてますます重要な役割を担います。今回のブログでは、VPN を利用することで地理的に離れた端末同士をセキュアに繋げられる仕組みや要素技術、VPN の代表的な接続トポロジについて紹介したいと思います。

    Published on
  • thumbnail

    L2 モデルによるネットワーク設計は拡張性や高可用性の観点から、DC の弱点とされてきました。 これは L2 で使用されるプロトコルが多数のデバイス間でトラフィックを大量に送信するため、冗長化構成を取りながらもフレーミングストームを回避するための策を講じる必要があったためです。 また、従来のネットワークトポロジは、スケールインモデルであることから、ネットワーク帯域を拡張する際は、より大きくて高価な機器に交換します。 さらに、大きな機器ほど多くの機器と接続するため、故障した際の影響範囲が大きくなることが懸念されます。 そのため、DC ネットワークは拡張に伴いますます複雑化し、運用面やコスト面においてスケーラビリティは限界を迎えようとしていました。近年では、これらの問題を受け、多くの DC で IP-Clos と呼ばれる、Clos ネットワークの原則を適用した IP-fabric が採用されています。 Clos ネットワークは、L3 ベースのアーキテクチャを用いることで、ブロードキャスト等の BUM トラフィックによる帯域圧迫を排除し、安定性と拡張性を向上させます。 また、BGP と BFD はベンダに依存せず、L3 で経路を制御するため、トラブルが発生した際も、従来の IP のトラブルシューティングが適用可能になります。今回のブログでは、実際に日本で IP-Clos が採用されているヤフーにて Clos ネットワークの構築を経験してきたので、これを機に聞いた話や知見を含め、IP-Clos について調査・紹介しようと思います。

    Published on
  • thumbnail

    インターネットを介した通信は、WEB サービス、モバイルアプリケーション、IoT 等、様々な分野で利用されています。ネットワークアプリケーションの多くは Internet Protocol(IP)と呼ばれる仕組みによって実現されています。IP による通信は、データを相手端末に送り届けるための最も基本的な方式であり、現代のインターネットそのものを成り立たせています。本来、IP 通信はエンドツーエンドの接続性、すなわち送信側と受信側が直接データをやり取りできることを前提に設計されています。しかし、実際のインターネット環境では IP 通信を妨げる様々な障壁が存在するため、単に IP アドレスを指定すれば相手と接続できるというわけではありません。特に IP によるエンドツーエンド通信の大きな障壁となっているのが、NAT/NAPT やファイアウォールの存在です。これらは、ネットワーク内のセキュリティ確保や IP アドレスの節約 といった目的で広く導入されています。一方で、NAT/NAPT は、配下の端末を外部から隠蔽する特性があり、「どのように相手と接続するか」という接続性の問題を引き起こします。今回のブログでは、IP 通信の発展と課題、それらの課題を解決するために登場した代表的な通信接続性を実現する技術について紹介したいと思います。

    Published on