Bir web geliştiricisi TCP / IP'yi ve yönlendiricilerin istekleri nasıl yönettiğini anlamalı mı? [kapalı]


15

Bugün önemli bir sitedeki geliştirici olarak İş pozisyonu için bir iş görüşmesi yaptım. Sorunları çözmeyi başarabildiğim tonlarca programlama dili ile ilgili sorular sordular, ancak bilgisayarımda bir web sunucusuna istekte bulunduğumda TCP / IP isteklerinin nasıl yapıldığına dair soru sormaya başladılar. Bu içerikleri bir öğrenci olarak aldım, ancak onları iyi hatırlamıyorum, çünkü çoğunlukla web geliştirmede çalışıyorum, sorum şu:

Temel olarak web uygulamaları üzerinde çalışan bir yazılım geliştiricisi olarak, TCP / IP hakkında kapsamlı bilgi sahibi olmam ve yönlendiricilerin istekleri nasıl yönettiğini mi yoksa benim için sadece kara kutu bilgisine sahip olmam gerekir mi?


TCP / IP isteklerinin kavramsal düzeyde nasıl yapıldığı hakkında daha fazla bilgi edinmek mi istediler yoksa ayrıntıları öğrenmek mi istediler? TCP / IP, bir ağda her iletişim kurduğumuzda davlumbazların altında kullanılır. Şahsen, olayların en azından kavramsal bir seviyede davlumbazların altında nasıl çalıştığını anlamanın çok önemli olduğuna inanıyorum . Bu, sorunları tespit etmenize ve hatta daha iyi çözümler tasarlamanıza yardımcı olacaktır.
Parag

Yanıtlar:


25

Bu tür bilgiler çok nadiren çok faydalıdır .

Örneğin, ops ekibiniz üretim sitenizi test ortamınızdakinden biraz farklı bir şekilde ayarlanmış bir yönlendirici / güvenlik duvarı / yük dengeleyicisinin arkasına kurduğunda ve bununla ilgili bir sorunla karşılaştığınızda, hızlı bir şekilde ve bazı tuhaflık için kazmak yerine ops ile konuşun. Bu görüşme sırasında dillerini anlamanız size daha da iyi hizmet edecektir.

Ancak, özellikle de genç bir programcı için olduğunda, insanların röportajlarda neden bu kadar çok kilo aldıklarını gerçekten anlamıyorum. Bir takımdaki herkes için kesinlikle gerekli bir bilgi değildir ve size öğretilebilir.


2
Genç programcılar için iyi bir nokta, ama @forgotmynick'in hangi seviye pozisyonu için başvurduğundan emin değilim :-)
Dean Harding

@Dean - Adil nokta. Öğrenci olduklarında atıfta bulunanların 5 yıldan fazla süredir var olmadığını varsayıyorum. Ama haklısın, durum her zaman böyle değil.
pdr

1
En azından yönlendiriciler sessizce bağlantıları bıraktığında ne olacağını bilmek, bir üretim ortamında gerçekten güzel. Bir kereden fazla ısırıldı.

@pdr - Kabul etmiyorum. Bu tür bilgiler, işlerin neden bu kadar uzun sürdüğünü veya sitenizde yaptığınız güncellemelerin kullanıcılarınızın tarayıcılarında neden görünmediğini bilmek istediğinizde yararlıdır. Bir ağ bilgisine sahip olan herkes cevabı bilir: önbellekleme. Şahsen, bir danışman olarak, insanların bu şeyleri bilselerdi, kaçınacakları şeyleri aptalca basit (ve şirket için çok maliyetli) bir şey yaptım. Bu roket bilimi ya da kuantum mekaniği gibi değil. Acımasız Hadi, bir jr dev için mazeret değil (özellikle eğer bir CS arka plan) bu konuda bilmek.
luis.espinal

@ luis.espinal - Dürüst olmak gerekirse, aynı kategoride önbelleğe almam gerektiğini düşünmüyorum. Bu bir ağ işi değil, bir tarayıcı işi. Önbelleğe almanın (tarayıcı veya sunucu) herkesin anlaması gereken bir şey olduğunu kabul ediyorum çünkü basit ama çok fazla gotchas var. Ama TCP / IP?
pdr

16

Benim kişisel görüşüm bir web geliştiricisi olmasıdır olmalıdır düşük seviyeli protokoller nasıl işlediğini biliyorum. Özellikle HTTP değil, aynı zamanda (en azından temel bilgiler) TCP / IP. Sitenizin karmaşıklığına bağlı olarak, HTTP izleme dökümlerine ve hatta tcpdumpgünlüklerine bakmak zorunda kaldığınızı görebilirsiniz , bu durumda en az TCP / IP bilgisine ihtiyacınız olacaktır.

Şimdi, aslında bir tcpdump'a bakmak zorunda kalacağınız, sitenizin özelliklerine çok bağlıdır. Eğer kullanıcı ve sunucuların bir sürü büyük bir site varsa Örneğin, istekleri oldukça fazla sayıda yapım üzerinden çoklu veri merkezleri yaymak (örneğin Ajax sıra özellikle Comet tarzı istekler), sonra tcpdumps 'size bir şey olabilir Bakmam gerek.

Üzerinde çalıştığınız tek şey bir intranet sitesi veya oldukça basit bir şeyse, bilgi o kadar önemli olmayabilir, ancak hala düşük seviyeli şeyleri bilmek her zaman yardımcı olacaktır.


3
lol ... ben http bir düşük seviye protokolü
çağırmaz

2
@Permdas: Her şey göreceli. HTTP TCP'den daha yüksek, ancak SOAP'tan daha düşük bir düzeydir.
Dean Harding

1
SOAP, protokolden daha uygulamaya özel bir şeydir. Ne yazık ki uygulamaları birbirine çok yakın, buna "protokol"
diyorlar

HTTP: evet. TCP / IP: bazı üst düzey işlemleri nasıl ve neden gerçekleştirdiğine dair ilkel bir anlayış muhtemelen iyidir. Bir web geliştirme ortamında derin bir bilgiye ihtiyaç duyulduğundan (veya çok sık yararlı olduğundan) şüpheliyim
Andy Hunt

7

Kodladığınız katmanın altındaki katmanların nasıl davrandığını anlamak her zaman yararlıdır, çünkü yalnızca nispeten karmaşık bir sorunu ayıklamaya çalışırken çok faydalıdır ve uygulamanızın neden beklenmedik performans sorunları olduğunu anlamanız gerekir. bir WAN'da veya neden NAT, vb. kullanan kullanıcılar için başarısız olursa. Geliştiriciler, web sunucusu yöneticileri, ağ yöneticileri ve veritabanı yöneticileriyle ilgili bir sorunu tartışmak için bir odada olmanız gerektiğinde de paha biçilmez olabilir. herkesin konuştuğu dili konuşmak ve anlamak ve akıllı sorular sormak. Çeşitli uygulama ayrıntılarını ne kadar iyi anlarsanız, örneğin, tarafından ölçeklenebilir bir site oluşturma olasılığınız

Bununla birlikte, yazdığınız koddan 6 kat soyutlama hakkında daha fazla bilgi edinmenin, sizi daha iyi bir web geliştiricisi yapmanın olası olmadığı, geri dönüşlerin azaldığı bir nokta var. Yani bir dereceye kadar "kapsamlı" ile ne demek istediğinize bağlı olacaktır. Yönlendiricilerin istekleri nasıl yönettiğinin temellerini anlamak oldukça yararlı olabilir, ancak farklı yönlendiricilerin farklı trafik türlerine öncelik verecek şekilde nasıl yapılandırılabileceğini anlamak, ağ yöneticilerinin isteyebileceği bir uygulama üzerinde çalışmadığınız sürece büyük olasılıkla çok yararlı değildir kısmak.

Ancak, özellikle pratik olmasa bile, güçlü geliştiriciler, yığının farklı katmanlarını merak etme eğilimindedir ve bunu yapmanın net bir yararı olmasa bile, bunları öğrenme eğilimindedir. İlişkisel veritabanlarının nasıl çalıştığı veya ağların nasıl çalıştığı konusunda derin bir anlayışa sahip bir web geliştiricisinin, yalnızca web geliştirme teknolojileri hakkında bilgi sahibi olmakla sınırlı bir web geliştiricisinden daha güçlü olmasını beklerim. Açıkçası, bu mükemmel bir korelasyon değil, ama sormak mantıklı.


+1 for "Herkesin konuştuğu dili konuşabilmesi ve anlayabilmesi için geliştiriciler, web sunucusu yöneticileri, ağ yöneticileri ve veritabanı yöneticileriyle ilgili bir sorunu tartışmanız gereken bir odada olmanız gerektiğinde çok değerli olabilir. akıllı sorular sormak "
Parag

5

Oluşturduğunuz web sitesine bağlıdır. Küçük / orta ölçekli web siteleri için, temel TCP / IP bilgisi iyi olabilir.

Üst düzey bir web sitesinde (trafik açısından) çalışıyorsanız, temel ağ protokolleri ve altyapısı hakkında ayrıntılı bilgi son derece önemlidir. İyi tasarım kararları verirken sık sık size yol gösterecektir.



2

Temel olarak web uygulamaları üzerinde çalışan bir yazılım geliştiricisi olarak, TCP / IP hakkında kapsamlı bilgiye ve yönlendiricilerin istekleri nasıl yönettiğine veya bana sadece kara kutu bilgisine sahip olmam gerekir mi?

IMO, bir yazılım geliştiricisi olmanız (CS arka planıyla varsayıyorum) bu şeyleri bilmelidir. Özellikle web geliştirme yaparsanız. Yorumlarımdan birinde bahsettiğim gibi, danışmanlık ücretlerinde sadece ağ / internet mimarisinin temellerini bilmeyen insanlar tarafından yapılan gerçekten aptalca hataları düzeltmek için bir yük * yükledim.

ZOMG, web sitemde yaptığım değişiklikler gösterilmiyor, lütfen yardım edin! * ZOMG, insanların profilleri geçiyor çünkü oturumlar bir yerde önbelleğe alınıyor, yardım lütfen ! Yardım! "

... ve benzeri vb.

Web uygulamanız ve kullanıcının tarayıcısı arasında bir ton şey var: uygulamanız, uygulamanızın NIC'si, bir yönlendirici ve muhtemelen bir güvenlik duvarı, daha sonra http sunucunuzun dahili NIC'i, sonra http sunucunuz, sonra http sunucunuz giden NIC'i, sonra başka bir yönlendirici ve kesinlikle bir güvenlik duvarı. Sonra bir önbellek cihazı ve muhtemelen bir SSL cihazı. Daha sonra daha fazla yönlendirici ve önbellek sunucusu ile internete, daha sonra kullanıcılarınızın tarayıcısına (ve dahili önbelleğine).

Milyonlarca şey ters gidebilir ve ağ, ağ protokolleri, işletim sistemleri / sistemad ve internet mimarisi hakkında bir bilgi birikiminiz yoksa, kaybolan ve BT OPs departmanınızın merhametinde olacaksınız (çoğu geliştirici ne altyapıya erişebilir ne de bir şeyleri giderirken nereye bakacağını bilmez). En kötüsü, sizi gerçekten berbat bir web geliştiricisi yapacak.

Web geliştirme programlama yönü sadece bir yönüdür. Başarılı bir şekilde yürütülmesi, BT operasyonlarına verilemeyen veya körü körüne devredilemeyen diğer becerilerin (özellikle ağ ve sistem yönetimi) üzerine oturmaktadır. Bu, ağ / işletim sistemi sorun giderme işlemlerinden sorumlu olmanız gerektiği anlamına gelmez , ancak

a. Ağ / işletim sistemi düzeyinde neyin yanlış gidebileceğini bilmelisiniz, böylece uygulamanız hakkında hiçbir zaman samimi bilgiye sahip olamayan IT OPS'ye işbirliği yapabilir ve rehberlik edebilirsiniz. b. Bu bilgi, sisteminizi bu tür hatalardan kaçınmak veya en azından iyileştirmek ve zarif bir şekilde başa çıkmak için tasarlamanızı sağlar.

Programlama, mühendislik ve geliştirmenin sadece bir yönüdür. Birincil yeteneğiniz olamaz ve genel olarak kurumsal gelişimde uzun vadede gerçekten başarılı olun ve özellikle web geliştirmede bunlar bilmeniz gereken şeylerdir. Ve dürüst olmak gerekirse, bunlar okulda veya mezuniyetten önce (veya iş piyasasına girdikten hemen sonra) kendi kendine öğrenme yoluyla (çok sıkı bir şekilde) öğrenilmesi gereken şeylerdir.

İyi şanslar.


1

TCP / IP'yi ve yönlendiricilerin istekleri nasıl yönettiğini anlamak önemlidir. Ama bir röportajda bunun hakkında kapsamlı bilgiye ihtiyacınız olduğunu bilmiyorsunuz . Daha azı daha önce ifade edilmişti. Aksi halde ikinizi de boşa harcıyorsunuz. Bir tuzak gibi geliyor.

Ancak bir Mimar rolü için bu bilginin her durumda önemli olduğuna inanıyorum. Adam, mimariyi özel çözümde kullanarak veya hatta çoğaltarak bundan yararlanabilecek çözümler sunacaktır. Tanenbaum Networks ile bir hafta sonu geçirin ve sakin ol !!


1

Bu aldatıcı bir soru. Evet, her geliştiricinin temel bir TCP / IP bilgisine ve bu protokole dayalı ağların nasıl organize edildiğini düşünüyorum. Ancak bu, temel bir bilginin ne kadar kapsamlı olduğu sorusuna yol açar .

Belirli bir sorunla karşılaşmadan (ve bu yüzden işlerin gerçekten "orada" nasıl organize edildiğini bilmek zorunda kalmadan) bir geliştiricinin bir paketin ne olduğunu ve paketlerin ağ üzerinden nasıl dağıtıldığını (paketin hangi tür makinelerde olduğunu bilmek dahil) bilmesi gerektiğini düşünüyorum ile temasa geçer). Ancak bir yönlendiricinin paketleri tüm alıcılara dağıttığını ve bir anahtarın belirli alıcılara paketleri teslim ettiğini bilmek yeterli . Ben de tüm bu alt ağ şeyler bir devloper gerektirmez - Ben eminim tüm ayrıntıları kendim bilmiyorum ;-) Ben alt ağlar izole olabilir ve paketleri net A net B yönlendirilmiş olması gerekir ama tüm ayrıntılar tipik bir geliştirici için çok yoludur.

Sanırım biraz araba sürmeye benziyor: Neden motora ihtiyacınız olduğunu ve neden yakıta ihtiyacınız olduğunu bilmelisiniz, ancak ortalama bir sürücü olarak yanma işlemi için mükemmel yakıt ve hava karışımını nasıl hesaplayacağınızı bilmenize gerek yok.


0

Çevrelerinde olup bitenlerin temellerini anlamayan insanlardan daha az şey daha sinir bozucu. Aynı soruları tekrar tekrar sormaya yol açar (elbette biraz farklı bir şekilde).

Kendinizi tekrarlayan sorular sorarken, kitaplara vurma zamanı. Aldığım soruların son örnekleri:

  • "Xyz ise ağı nasıl yapılandırabilirim?" ...
  • "Abc ise ağı nasıl yapılandırabilirim?" ...
  • Tekrar et...

Aslında, öğrenmekten daha kolay sormayı bilen insanlardan çok fazla tekrarlanan soru aldım, onları takip etmeye ve Powerpoint slaytları yapmaya başladım. Şimdi, altı ayda bir, uygulamalı bir ders yürütüyorum. Daha sonra insanlar yaptığım slaytlara başvurabilirler. Daha sonra, sınıfta ele aldığımız bir şeyi sorduklarında, nazikçe ona atıfta bulunurum ve genellikle onu kapsadığımızı hatırlar ve slaytları kendileri için yeniden okurlar. Bunu yapanlar konuyu daha iyi öğrenir ve değerli bulurlar. İş günüme daha az kesinti şeklinde kayda değer bir fark yarattı.

Bir diğer düşünce: Gerçek dünyada, gerçek sistemlerin çok fazla tuhaflığı ve sorunu var, sadece alana özgü bilginizden daha fazlasını bilmemek inanılmaz derecede sınırlayıcı. Temel bilgilerin nasıl çalıştığı hakkında herhangi bir fikir sadece size yardımcı olabilir.

Şimdi, bilmeniz gerekenler için gerçekten kapsam dışındaysa, o zaman endişelenmeyin. Fakat soruyu bir kereden fazla soruyorsa, öğrenin. Pişman olmayacaksınız.

Bravo soruyu sorduğu için. Öğrenmeyi asla bırakma.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.