web-dev-qa-db-ja.com

Web開発者はTCP / IPとルーターがどのようにリクエストを管理するかを理解する必要がありますか?

今日、重要なサイトの開発者としての求人のポジションについて、就職の面接を受けました。彼らはプログラミング言語に関連する大量の質問をしましたが、問題なく答えることができましたが、PCからWebサーバーに要求を出した後、TCP/IP要求がどのように行われるかについて質問し始めました。私は学生としてそれらのコンテンツを受け取りましたが、それらをよく覚えていません。私は主にWeb開発で働いているため、私の質問は次のとおりです。

ソフトウェア開発者として、主にWebアプリケーションに取り組んでいるとき、TCP/IPのルーターとリクエストの管理方法について広範なの知識が必要ですか、それとも単なるブラックボックスの知識ですか?

15
user22533

この種の知識はvery役に立つveryでたまにしか入りません。

たとえば、運用チームがルーター、ファイアウォール、ロードバランサーの背後に本番サイトをセットアップし、テスト環境とは少し異なる設定でセットアップした場合、それに関連する問題が発生すると、それを見つけるのに役立ちます。コードの奇妙な部分を掘り下げるのではなく、迅速に操作担当者と話してください。それはあなたがその会話をしているときに彼らの言語を理解できるようになることであなたにさらに役立つでしょう。

しかし、特にジュニアプログラマーの場合は、インタビューで人々がなぜこれに重点を置いているのか本当にわかりません。それは確かにチームの全員にとって本質的な知識ではなく、あなたは教えることができます。

25
pdr

私の個人的な意見は、Web開発者すべき低レベルのプロトコルがどのように機能するかを知っているということです。特にHTTPだけでなく、(少なくとも基本的な)TCP/IPも。サイトの複雑さに応じて、HTTPトレースダンプまたはtcpdumpログを確認する必要がある場合があります。その場合、少なくともTCP/IPに関する知識が必要です。

さて、tcpdumpを実際に確認する必要があるかどうかは、サイトの詳細に大きく依存します。たとえば、多数のユーザーとサーバーが複数のデータセンターに分散している大規模なサイトで、比較的多数の要求(Ajax、特にCometスタイルの要求も同様)を行っている場合、tcpdumpsあなたが見る必要があるものかもしれません。

作業しているのがイントラネットサイトやかなり単純なものであれば、知識はそれほど重要ではないかもしれませんが、低レベルのものを知ることは常に助けになると思います。

16
Dean Harding

比較的複雑な問題をデバッグしようとしていて、アプリケーションに予期しないパフォーマンスの問題がある理由を理解する必要がある場合にのみ、非常に役立つので、コーディングしているレイヤーの下のレイヤーの動作を理解することは常に役立ちますWANまたはNATを使用しているユーザーが失敗する理由など。開発者、Webサーバー管理者、ネットワークと問題を話し合っている部屋にいる必要がある場合にも、非常に役立ちます。管理者、およびデータベース管理者は、他の誰もが話している言語を話して理解できるようになり、インテリジェントな質問をすることができます。さらに、さまざまな実装の詳細を理解すればするほど、スケーラブルなサイトを構築できる可能性が高まります。たとえば、実装する可能性のあるさまざまな機能を理解すると、レイテンシを引き起こす可能性のあるネットワークトラフィックが生成され、大規模なサイトのさまざまなキャッシュ戦略がレイテンシの問題を軽減する方法を理解します。

とはいえ、あなたが書いているコードから6層の抽象化である抽象化についてのいくつかの抽象化についてさらに学習しても、より優れたWeb開発者になる可能性は低いという明確なリターンのポイントがあります。したがって、ある程度は「広範囲」の意味によって異なります。ルーターがリクエストを管理する方法の基本を理解することは非常に役立つかもしれませんが、異なるルーターが異なる種類のトラフィックを優先するように構成できる方法を理解することは、ネットワーク管理者が望む可能性のあるアプリケーションで作業している場合を除いて、おそらくそれほど役に立ちません。スロットルする。

しかし、それが特に実用的ではない場合でも、強力な開発者はスタックのさまざまなレイヤーに興味を持ち、明確な利点がなくてもそれらについて学ぶ傾向があります。リレーショナルデータベースのしくみやネットワーキングのしくみを深く理解しているWeb開発者は、Web開発テクノロジのみを知ることに制限されているWeb開発者よりも強いと思いがちです。明らかに、これは完全な相関関係ではありませんが、尋ねることは合理的です。

7
Justin Cave

作成しているWebサイトによって異なります。中小規模のWebサイトの場合、TCP/IPの基本的な知識はおそらく十分です。

(トラフィックに関して)上位のWebサイトで作業している場合、基盤となるネットワークプロトコルとインフラストラクチャの詳細な知識は非常に重要です。設計を適切に決定するためのガイドを頻繁に提供します。

5
Eric J.

私の意見では、特にWeb開発の位置については、アプリケーションからサーバーにビットがどのように行き来するかを一般的に知る必要があります。プログラミングにはブラックボックスはありません。すべて 抽象化リーク

3
Ryan Michela

主にWebアプリケーションに取り組んでいるソフトウェア開発者として、TCP/IPとルーターがリクエストをどのように管理するかについての広範な知識が必要ですか、それとも私にとってはブラックボックスの知識だけですか?

IMO、あなたがソフトウェア開発者であるという事実(私はCSのバックグラウンドを持っていると思います)はこれらのことについて知っているべきです。特にあなたがウェブ開発をするなら。私のコメントの1つで述べたように、ネットワーク/インターネットアーキテクチャの基本を知らない人が行った本当に愚かなエラーを修正するだけで、コンサルティング料をsh * loadしました。

ZOMG、私のウェブサイトに加えた変更が表示されません、助けてください!* ZOMG、セッションがどこかにキャッシュされているため、ユーザーのプロファイルが交差しています、plz teh help!*ZOMG、認証されたユーザー向けの安全なコンテンツがありますが、ユーザーはブックマークを使用してアクセスでき、血なまぐさい認証画面は表示されません。plzteh help!

...など...悲しいことに...

ウェブアプリとユーザーのブラウザの間には、アプリ、アプリのNIC、ルーター、場合によってはファイアウォール、そしてhttpサーバーの内部NIC、次にhttpサーバー、次にhttpサーバーの送信NIC、そしてもう1つという大量のものがあります。ルーターと最も確かにファイアウォール。次に、キャッシュデバイス、および場合によってはSSLデバイス。次に、より多くのルーターとキャッシュサーバーを使用してインターネットに接続し、最後にユーザーのブラウザー(およびその内部キャッシュ)に接続します。

膨大な数の問題が発生する可能性があり、ネットワーキング、ネットワークプロトコル、オペレーティングシステム/システム管理者、インターネットアーキテクチャに関する知識が十分にない場合、IT運用部門の多くの責任を負うことになります(ほとんどの開発者がインフラストラクチャにアクセスできず、トラブルシューティングの際に探す場所もわかりません)。最悪の場合、それはあなたを本当にひどいウェブ開発者にするでしょう。

Web開発のプログラミングの側面は、まさにその1つの側面です。それをうまく実行することは、当たり前のことではなく、IT運用に盲目的に委任することができない他のスキル(特に、ネットワークとシステム管理)の上に真っ先に置かれます。 必須がネットワーク/ OSのトラブルシューティングを担当するという意味ではありませんが、

a。アプリケーションの詳細な知識を持たないIT OPSに協力して指導できるように、ネットワーク/ OSレベルで問題が発生する可能性があることを知っている必要があります。 b。このような知識により、システムを設計して、そのようなエラーを回避するか、少なくとも改善して適切に対処することができます。

プログラミングは、エンジニアリングと開発の1つの側面にすぎません。それはあなたの主要なスキルではあり得ません、そして一般的にエンタープライズ開発、特にWeb開発では長期的に本当に成功するでしょう、これらはあなたが知る必要があることです。正直なところ、これらは、学校で、または卒業前に(または就職市場に入るとすぐに)自己学習によって(非常にしっかりと)学習されるべきものです。

幸運を。

2
luis.espinal

TCP/IPとルーターが要求を管理する方法を理解することが重要です。しかし、あなたは面接でその必要性広範なについての知識を知りません。以前は表現されていませんでした。そうでなければ、あなたは両方とも時間を無駄にしました。罠のようですね。

しかし、アーキテクトの役割では、この知識はどのような場合でも重要であると強く信じています。その男は、カスタムソリューションのアーキテクチャを使用または複製することで、それを利用できるソリューションを提供します。タネンバウムネットワークスで週末を過ごして、のんびりしてください!!

1
Eduardo Xavier

これはトリッキーな質問です。はい、私はevery開発者はbasic TCP/IPの知識と、そのプロトコルに基づくネットワークの編成方法を知っている必要があると思います。しかし、それはbasicノウロッジがどれほど広範囲であると考えられるかという問題につながります。

開発者は、特定の問題に直面することなく(したがって、「その下」で実際にどのように構成されているかを知る必要があります)、パケットが何であるか、およびパケットがネットワークを通じてどのように分散されるか(これには、そのパケットの種類のマシンを知ることも含まれます)接触する)。ただし、ルーターがallレシーバーにパケットを配信し、スイッチがcertainレシーバーにパケットを配信することを知っていれば十分だと思います。私はまた、すべてのサブネットのものを開発者に要求することはありません-私はすべての詳細を自分で知っているとは限りません;-)サブネットが分離されている可能性があり、パケットをルーティングする必要があることを知っておく必要がありますネットAからネットBまでですが、すべての詳細は典型的な開発者にとっては大いに役立ちます。

私はそれが車を運転することに少し似ていると思います:なぜエンジンが必要で、なぜ燃料が必要なのかを理解する必要がありますが、平均的なドライバーとして、燃焼プロセスのための燃料と空気の完璧な混合を計算する方法を知る必要はありません。

1
perdian

周りで起こっていることの基本を理解していない人よりもイライラするものはほとんどありません。同じ質問を何度も繰り返すことになります(もちろん、少しずつ形式が異なります)。

繰り返し質問していることに気づいたら、本を読む時間です。私が受け取った質問の最近の例:

  • 「xyzの場合、ネットワークを構成するにはどうすればよいですか?」...
  • 「abcの場合にネットワークを構成するにはどうすればよいですか?」...
  • 繰り返す...

実際、学ぶよりももう一度尋ねる方が簡単だと思う人から非常に多くの繰り返しの質問を受け、私はそれらを追跡し、PowerPointスライドを作成し始めました。今では、半年ごとに、実践的なクラスを運営しています。その後、人々は私が作成したスライドを参照できます。後で、私たちが授業で取り上げたものを尋ねると、私はそっとそれを参照します。彼らは通常、私たちがそれを取り上げたことを思い出し、自分でスライドを読み直します。そうする人々は実際に主題をよりよく学び、それを価値があると思います。仕事の中断が減ったという点で、それは顕著な違いをもたらしました。

もう1つの考え:現実の世界では、実際のシステムには多くの奇妙な点や問題があり、ドメイン固有の知識だけを知ることは信じられないほど制限されています。基本的なファンダメンタルズがどのように機能するかというアイデアは、あなたを助けるだけです。

さて、それが本当にあなたが知っておくべきことの範囲外である場合は、問題ありません。しかし、質問を何度もしていることに気づいたら、それを学んでください。あなたはそれを後悔しないでしょう。

質問をしてくれたブラボー。学習を止めないでください。

0
kmort