Wenn HTTP an einem Port ausgeführt wird, bedeutet dies, dass TCP auch an diesem Port ausgeführt werden kann?

4950
Alper Turan

Ich baue eine App, die auf einem mobilen Smartphone über ein GPRS / 3G-Netzwerk ausgeführt werden muss. Ich mache etwas ops, so dass jedes Byte durch HTTP - Header verschwendet ist schlecht. Mobilfunkanbieter in meiner Nähe verwenden häufig Proxies und dergleichen. Websockets zum einen funktionieren nicht.

HTTP an Port 80 und 443 scheint immer zu funktionieren, aber bedeutet das, dass ich eine TCP-Socket-Verbindung zu meinem Server am selben Port herstellen und eine bidirektionale Kommunikation starten kann? Ich glaube nicht, dass mobile Apps wie WhatsApp, Viber usw. HTTP-Verbindungen verwenden, aber ich habe keine Details zu ihren Implementierungen gefunden und ob sie etwas tun, damit das Netzwerk einwandfrei über 3G funktioniert oder ob es einfach so funktioniert, wie es ist .

1
Die meisten mobilen Apps verwenden HTTP zur Kommunikation. Wenn Sie nicht mit HTTP arbeiten, ist es wahrscheinlich nicht sinnvoll, über Port 80 zu gehen, da der Datenverkehr wahrscheinlich zum Proxy geht und fehlschlägt. heavyd vor 9 Jahren 0
HTTP ist ein Protokoll der Schicht 7, während TCP ein Protokoll der Schicht 4 ist. HTTP-Befehlssequenzen und Datenfluss über eine TCP-Verbindung, daher ist die Antwort auf Ihren Titel ein eindeutiges Nein. Dies bedeutet jedoch, dass jeweils nur ein Prozess einen Port verwenden kann. Sie können Nicht-HTTP-Verkehr über eine Verbindung an Port 80 ausführen. Beachten Sie jedoch, dass zwischengeschaltete Systeme das betreffende Protokoll erkennen und darauf basierend Verwaltungsentscheidungen treffen können (z. B. das Blockieren der Verbindung, falls dies gewünscht wird). 443 ist etwas besser, da erwartet wird, dass es verschlüsselt wird, aber das ist kein Allheilmittel. Frank Thomas vor 9 Jahren 1

2 Antworten auf die Frage

9
Wes Sayeed

TCP und HTTP sind unterschiedliche Dinge.

TCP ist die Transportschicht. Per Definition ist es dafür verantwortlich, Protokolle der Anwendungsschicht (in Ihrem Fall HTTP) darauf zu übertragen. TCP läuft nicht über einen Port. Es ist der Schiedsrichter der Ports. Wenn Sie also eine Verbindung zu einem HTTP-Server herstellen, stellen Sie eine Verbindung über TCP-Port 80 her. Wenn Sie eine Verbindung zu HTTPS herstellen, stellen Sie eine Verbindung über TCP-Port 443 her.

HTTP und HTTPS können über jeden TCP-Port laufen. 80 und 443 sind nur die üblichen. Sie können jede Anwendung dazu veranlassen, diese Ports zu überwachen, wenn Sie möchten. Ja, Sie können sich also über Port 80 mit einem anderen Protokoll anstelle von HTTP mit Ihrem Server verbinden, jedoch nur, wenn der Server so konfiguriert ist, dass er diesen Port mit diesem anderen Protokoll überwacht, und nur wenn HTTP oder HTTPS diese Ports nicht verwenden (vorausgesetzt, Sie betreiben einen Webserver).

Nun haben Sie erwähnt, dass Ihr Provider einen Proxy verwendet. Können Sie eine Nicht-HTTP / HTTPS-Verbindung über Port 80 oder 443 herstellen? Das hängt davon ab, wie intelligent der Proxy ist. Wenn die Paketprüfung durchgeführt wird, können die HTTP-Header überprüft werden, um sicherzustellen, dass der über diese Ports gehende Datenverkehr tatsächlich HTTP-Datenverkehr ist. Es gibt Möglichkeiten, es zu fälschen, aber es hängt davon ab, wie genau der Proxy den Verkehr untersucht. Wenn der Proxy-Server den Nicht-HTTP / HTTPS-Datenverkehr auf HTTP / HTTPS-Ports blockiert, können Sie nicht viel dagegen tun, außer Squawk bei Ihrem Provider (oder zahlen Sie gegebenenfalls den höheren Preis).

Bei der Kommunikation verschiedener mobiler Anwendungen hängt alles davon ab, wie der Hersteller sie geschrieben hat. Die meisten verwenden HTTP oder HTTPS über Port 80 bzw. 443, da es sich bei den meisten mobilen Apps nur um Web-Apps handelt. Aber es gibt keine Regel, die besagt, dass sie es tun müssen, und es gibt keine wirkliche Möglichkeit, es zu wissen, es sei denn, Sie schnüffeln an den Paketen.

Ich hoffe ich habe deine Frage beantwortet.

Hinzufügen: Wenn in einer anderen Anwendung bereits TCP-Port 80 geöffnet ist (z. B. ein HTTP-Server), kann Ihre Anwendung nicht auch TCP-Port 80 abhören, da der HTTP-Server ihn bereits verwendet. Auch [hier ist eine nette kleine Grafik] (http://infosys.beckhoff.com/deutsch.php?content=../content/1033/tf6310_tc3_tcpip/84246923.html&id=), die den Platz von HTTP im [OSI-Modell] ( http://en.wikipedia.org/wiki/OSI_model). Jason C vor 9 Jahren 0
@ JasonC - Der Autor spricht auf mobilen Geräten über WhatsApp, Viber. Ich bin nicht sicher, ob der Betrieb eines Webservers ein Problem des Autors ist. Ramhound vor 9 Jahren 0
Es ist nicht mein Ziel, einen Webserver auf einem mobilen Gerät auszuführen. Ich könnte vielleicht DPI-Heuristiken verwechseln, Kopfzeilen fälschen und Inhalte verschlüsseln, aber sie widerlegt den Zweck meines Tuns. Darum können Sie keine schönen Dinge auf dem Handy haben. Ich habe gerade einen NPI selbst gemacht und ja, Android-Apps auf meinem Smartphone verwenden HTTP, mit Ausnahme von WhatsApp, das HTTPS verwendet. Alper Turan vor 9 Jahren 0
@AlperTuran Oh, ich habe es falsch verstanden. Der OSI-Zusammenbruch kann zumindest immer noch hilfreich sein. Jason C vor 9 Jahren 1
@JasonC Keine Biggies. Das OSI-Modell ist in der Tat nützlich zu wissen. Alper Turan vor 9 Jahren 0
@AlperTuran, ich schaudere, wenn ich darüber nachdenke, welche Apps draußen einfach unverschlüsseltes HTTP verwenden, um zu kommunizieren - insbesondere solche, bei denen Kontoinformationen vorhanden sind. Wes Sayeed vor 9 Jahren 1
@WesSayeed Was ist mit [HTTP / 2] (http://en.wikipedia.org/wiki/HTTP/2)? Funktioniert es in dieser Situation oder unterliegt es auch einer Blockierung der Paketinspektion? Alper Turan vor 9 Jahren 0
Gute Antwort. Ein schnelles q. Wie kann ein Proxy keinen Nicht-HTTP / HTTPS-Verkehr auf HTTP / HTTPS-Ports blockieren? Da diese Ports für HTTP / HTTPS-Traffix reserviert sind, wie können Sie anderen Services erlauben, von diesem Port zu gelangen? Ist das möglich? Verpasse ich etwas Vielen Dank. Nik-Lz vor 6 Jahren 0
6
Spiff

Wenn ich Ihre Frage richtig verstehe, formuliere ich sie vielleicht wie folgt: "Wenn die Netzwerkinfrastruktur den HTTP-Verkehr an einen bestimmten Port weiterleitet, lässt dies auch reines TCP (ohne vollständigen HTTP-kompatiblen Betrieb oder gar falsche HTTP-Header) zu dieser Hafen? "

Leider lautet die Antwort: "Es hängt von Details ab, die Sie noch nicht erfahren haben, wie das betreffende Netzwerk den Datenverkehr filtert". Es gibt sicherlich Netzwerkinfrastrukturen, die den Verkehr nur nach Port-Nummer filtern. Daher kann jeder TCP-Verkehr über Port 80 oder 443 funktionieren, unabhängig davon, ob die TCP-Nutzdaten wie HTTP aussehen oder sich wie HTTP verhalten.

Es gibt jedoch auch andere Netzwerke, die HTTP-Proxys einfügen oder eine Deep-Packet-Prüfung durchführen, um zu sehen, ob der Datenverkehr tatsächlich HTTP-Header enthält, und diese Arten von Netzwerken würden Datenverkehr blockieren, der nicht ordnungsgemäßes HTTP ist. Möglicherweise können Sie einige dieser Filter umgehen, indem Sie eine Fälschung einsetzen…

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

… An der Spitze jedes Client-zu-Server-TCP-Streams und eine Fälschung…

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

… An der Spitze jedes Server-zu-Client-TCP-Streams. Diese Art von Fälschung kann jedoch nicht ausreichen, um einen vollständigen HTTP-Proxy zu verwenden.

Ja genau das meinte ich. Das ist schlecht, weil mein Provider mehrere DPI-Typen verwendet. Durch das Hinzufügen des Header-Overheads werden alle meine Versuche, die geringsten Daten zu verwenden, ungültig, auch weil die von mir gesendeten Daten kleiner als der Header sind und sogar 1-2 Bytes betragen. Alper Turan vor 9 Jahren 0
@AlperTuran; Ich klopfe nicht an dich oder irgendetwas und ich habe keine Ahnung, was deine App macht ... aber es scheint mir, dass das Senden von kleinen Paketen von nur 1-2 Bytes eine wirklich unwirksame Möglichkeit ist, Dinge zu tun. Wes Sayeed vor 9 Jahren 0
@WesSayeed Ist es nicht umgekehrt? Meine App sendet nur Befehle an einen Remote-Server, der sowohl mit einer ferngesteuerten Drohne als auch mit Elektrogeräten verbunden ist. Da es sehr häufig läuft, wird jedes zusätzliche gesendete Byte mehr Batterie verschwenden, als benötigt wird. Alper Turan vor 9 Jahren 0