Jeśli HTTP działa na porcie, czy to oznacza, że ​​TCP może również działać na tym porcie?

2

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 .

Alper Turan
źródło
Większość aplikacji mobilnych korzysta z protokołu HTTP do komunikacji. A jeśli nie używasz protokołu HTTP, przejście przez port 80 prawdopodobnie nie będzie przydatne, ponieważ ruch prawdopodobnie trafi do serwera proxy i zawiedzie.
ciężki
1
HTTP jest protokołem warstwy 7, podczas gdy TCP jest protokołem warstwy 4. Sekwencje poleceń HTTP i przepływ danych przez połączenie TCP, więc odpowiedź na twój tytuł brzmi zdecydowanie nie. powiedziano jednak, że tylko jeden proces może korzystać z portu jednocześnie. Możesz uruchamiać ruch inny niż HTTP przez połączenie na porcie 80, ale pamiętaj, że systemy pośredniczące mogą wykryć zaangażowany protokół i na tej podstawie podejmować decyzje zarządcze (na przykład blokować połączenie, jeśli tak zdecydują). 443 jest trochę lepszy, ponieważ ma być zaszyfrowany, ale to nie jest panaceum.
Frank Thomas

Odpowiedzi:

9

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.

Wes Sayeed
źródło
Dodawanie: W przypadku połączeń przychodzących, jeśli inna aplikacja ma już otwarty port TCP 80 (np. Serwer HTTP), aplikacja nie będzie mogła nasłuchiwać na porcie TCP 80, ponieważ serwer HTTP już go używa. Również tutaj jest ładna mała grafika pokazująca miejsce HTTP w modelu OSI .
Jason C
@JasonC - autor mówi o WhatsApp, Viber, na urządzeniach mobilnych. Nie jestem pewien, czy prowadzenie serwera WWW dotyczy autora.
Ramhound
Nie. Uruchamianie serwera WWW na urządzeniu mobilnym nie jest moim celem. Być może mógłbym pomylić heurystykę DPI, fałszywe nagłówki i szyfrować zawartość, ale to przeczy celowi tego, co robię. Dlatego nie możesz mieć ładnych rzeczy na telefonie komórkowym. Właśnie zrobiłem NPI i tak, aplikacje na Androida na moim smartfonie używają HTTP, z wyjątkiem WhatsApp, który używa HTTPS.
Alper Turan
1
@AlperTuran Och, źle zrozumiałem. Podział OSI może być przynajmniej pomocny.
Jason C
1
@AlperTuran, wzdrygam się na myśl o tym, jakie aplikacje używają zwykłego, niezaszyfrowanego HTTP do komunikacji - szczególnie te, które mają powiązane z nimi informacje o koncie.
Wes Sayeed
6

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…

GET / HTTP/1.0\r\n\r\n

… Na czele każdego strumienia TCP klient-serwer i fałszywy…

HTTP/1.0 200 OK\r\n\r\n

… 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.

Spiff
źródło
Tak, dokładnie o to mi chodziło. To jest do bani, ponieważ mój dostawca używa wielu rodzajów DPI. Dodanie narzutu nagłówka powoduje, że wszystkie moje próby wykorzystania najmniejszej ilości danych są nieważne, również dlatego, że dane, które wysyłam, są mniejsze niż nagłówek, nawet do 1-2 bajtów.
Alper Turan
@AlperTuran; Nie pukam do ciebie ani nic takiego i nie mam pojęcia, co robi twoja aplikacja ... ale wydaje mi się, że wysyłanie niewielkich pakietów zawierających zaledwie 1-2 bajty to naprawdę nieefektywny sposób na robienie różnych rzeczy.
Wes Sayeed
@WesSayeed Czy nie jest na odwrót? Moja aplikacja po prostu wysyła polecenia do zdalnego serwera, który jest połączony zarówno ze zdalnie sterowanym dronem, jak i urządzeniami elektrycznymi. Biorąc pod uwagę, że będzie on działał bardzo często, każdy dodatkowy wysłany bajt zużyje więcej baterii niż jest to konieczne.
Alper Turan