Tworzę aplikację, która musi działać na smartfonie za pośrednictwem sieci GPRS / 3G. Robię operacje bitowe, więc każdy bajt zmarnowany przez nagłówki HTTP jest zły. Operatorzy komórkowi w mojej okolicy intensywnie korzystają z serwerów proxy i tym podobnych. Gniazda sieciowe dla jednego nie działają.
HTTP na portach 80 i 443 wydaje się zawsze działać, ale czy to oznacza, że mogę utworzyć połączenie gniazda TCP z moim serwerem na tym samym porcie i rozpocząć komunikację dwukierunkową? Nie sądzę, aby aplikacje mobilne, takie jak WhatsApp, Viber itp., Korzystały z połączeń HTTP, ale nie znalazłem żadnych szczegółów na temat ich implementacji i czy robią coś, aby sieć działała bezbłędnie przez 3G, czy też działa tak, jak jest .
networking
http
tcp
3g
mobile-phone
Alper Turan
źródło
źródło
Odpowiedzi:
TCP i HTTP to różne rzeczy.
TCP jest warstwą transportową. Z definicji odpowiada za przenoszenie nad nim protokołów warstwy aplikacji (w twoim przypadku HTTP). TCP nie działa przez port. Jest arbitrem portów. Innymi słowy, kiedy łączysz się z serwerem HTTP, łączysz się przez port TCP 80. Kiedy łączysz się z HTTPS, łączysz się przez port TCP 443.
HTTP i HTTPS mogą działać na dowolnym porcie TCP. 80 i 443 to tylko te powszechne. Jeśli chcesz, możesz zmusić dowolną aplikację do nasłuchiwania na tych portach. Tak więc, możesz połączyć się z serwerem przez port 80, używając innego protokołu zamiast HTTP, ale tylko wtedy, gdy serwer jest skonfigurowany do nasłuchiwania na tym porcie za pomocą tego innego protokołu i tylko jeśli HTTP lub HTTPS są skonfigurowane tak, aby nie używać tych portów (zakładając, że używasz na nim serwera WWW).
Teraz wspomniałeś, że twój dostawca korzysta z serwera proxy. Czy można nawiązać połączenie inne niż HTTP / HTTPS przez port 80 lub 443? To zależy od tego, jak inteligentny jest serwer proxy. Jeśli przeprowadza kontrolę pakietów, może weryfikować nagłówki HTTP, aby upewnić się, że ruch przechodzący przez te porty jest rzeczywiście ruchem HTTP. Istnieją sposoby na sfałszowanie go, ale zależy to od tego, jak głęboko serwer proxy sprawdza ruch. Jeśli serwer proxy blokuje ruch inny niż HTTP / HTTPS na portach HTTP / HTTPS, nie możesz nic na to poradzić poza squawk u swojego dostawcy (lub zapłacić wyższą cenę, zależnie od przypadku).
Jeśli chodzi o sposób komunikowania się różnych aplikacji mobilnych, wszystko zależy od tego, jak je napisał sprzedawca. Większość używa HTTP lub HTTPS odpowiednio przez port 80 lub 443, ponieważ większość aplikacji mobilnych to po prostu skórowane aplikacje internetowe. Ale nie ma żadnej reguły, która mówi, że muszą, i nie ma prawdziwego sposobu, aby to wiedzieć, chyba że w jakiś sposób powąszysz pakiety.
Mam nadzieję, że odpowiedziałem na twoje pytanie.
źródło
Jeśli dobrze rozumiem twoje pytanie, mogę je sformułować w następujący sposób: „Jeśli infrastruktura sieci pozwala na ruch HTTP na określonym porcie, to pozwoli także na czysty TCP (bez operacji zgodnych z HTTP, a nawet fałszywych nagłówków HTTP) ten port? ”
Niestety odpowiedź brzmi: „To zależy od szczegółów, których jeszcze nie odkryłeś, dotyczących tego, w jaki sposób sieć (sieci) filtruje ruch”. Z pewnością istnieją infrastruktury sieciowe, które filtrują ruch tylko na podstawie numeru portu, więc każdy ruch TCP przez port 80 lub 443 może działać, niezależnie od tego, czy ładunki TCP wyglądają lub działają jak HTTP.
Istnieją jednak inne sieci, które wstawiają serwery proxy HTTP lub przeprowadzają głęboką inspekcję pakietów, aby sprawdzić, czy ruch rzeczywiście ma nagłówki HTTP, a tego rodzaju sieci blokowałyby ruch, który nie jest prawidłowy HTTP. Możesz obejść niektóre z tych filtrów, podszywając się pod fałszywe…
… Na czele każdego strumienia TCP klient-serwer i fałszywy…
… Na czele każdego strumienia TCP serwer-klient. Ale tego rodzaju fałszerstwo może nie wystarczyć, aby działało przez pełne proxy HTTP.
źródło