Если HTTP работает на порту, значит ли это, что TCP также может работать на этом порту?

4885
Alper Turan

Я создаю приложение, которое должно работать на мобильном смартфоне в сети GPRS / 3G. Я делаю бит операции, поэтому каждый байт, потраченный через HTTP-заголовки , плох. Мобильные провайдеры в моем регионе активно используют прокси и тому подобное. Веб-сокеты для одного не работают.

HTTP на портах 80 и 443, кажется, всегда работает, но означает ли это, что я могу создать соединение через сокет TCP с моим сервером на том же порту и начать двунаправленную связь? Я не думаю, что мобильные приложения, такие как WhatsApp, Viber и т. Д., Используют HTTP-соединения, но я не нашел подробной информации об их реализациях и о том, делают ли они что-нибудь, чтобы сеть работала безупречно по 3G, или же она просто работает как есть. ,

1
Большинство мобильных приложений используют HTTP для общения. И, если вы не используете HTTP, то переход через порт 80, вероятно, не будет полезным, так как ваш трафик, скорее всего, пойдет на прокси и потерпит неудачу. heavyd 9 лет назад 0
HTTP - это протокол уровня 7, а TCP - протокол уровня 4. Последовательности HTTP-команд и поток данных по TCP-соединению, поэтому ответ на ваш заголовок - категорическое нет. Тем не менее, только один процесс может использовать порт одновременно. Вы можете запускать трафик не-http через соединение через порт 80, но имейте в виду, что промежуточные системы могут обнаруживать соответствующий протокол и принимать управленческие решения на его основе (например, блокировать соединение, если они того пожелают). 443 немного лучше, потому что ожидается его шифрование, но это не панацея. Frank Thomas 9 лет назад 1

2 ответа на вопрос

9
Wes Sayeed

TCP и HTTP это разные вещи.

TCP - это транспортный уровень. По определению, он отвечает за перенос протоколов прикладного уровня (в вашем случае HTTP). TCP не работает через порт. Это арбитр портов. Другими словами, когда вы подключаетесь к HTTP-серверу, вы подключаетесь к TCP-порту 80. Когда вы подключаетесь к HTTPS, вы подключаетесь через TCP-порт 443.

HTTP и HTTPS могут работать через любой порт TCP. 80 и 443 только общие. Вы можете заставить любое приложение прослушивать эти порты, если хотите. Так что да, вы можете подключиться к вашему серверу через порт 80, используя другой протокол вместо HTTP, но только если сервер настроен на прослушивание этого порта с использованием этого другого протокола, и только если HTTP или HTTPS настроены так, чтобы не использовать эти порты (при условии, что вы используете веб-сервер на нем).

Вы упомянули, что ваш провайдер использует прокси. Можно ли установить соединение не через HTTP / HTTPS через порт 80 или 443? Это зависит от того, насколько умен прокси. Если он выполняет проверку пакетов, он может проверять заголовки HTTP, чтобы убедиться, что трафик, проходящий через эти порты, действительно является трафиком HTTP. Есть способы подделать его, но это зависит от того, насколько глубоко прокси проверяет трафик. Если прокси-сервер блокирует не HTTP / HTTPS-трафик на портах HTTP / HTTPS, то вы ничего не можете с этим поделать, за исключением использования вашего поставщика (или оплаты более высокой цены в зависимости от обстоятельств).

Когда речь заходит о том, как взаимодействуют различные мобильные приложения, все зависит от того, как производитель написал их. Большинство используют HTTP или HTTPS через порт 80 или 443 соответственно, потому что большинство мобильных приложений - это просто веб-приложения со скинами. Но нет правила, которое говорит, что они должны, и у вас нет реального способа узнать, если вы как-то не понюхаете пакеты.

Я надеюсь, что ответил на ваш вопрос.

Добавление: для входящих соединений, если у другого приложения уже открыт TCP-порт 80 (например, HTTP-сервер), ваше приложение не сможет также прослушивать TCP-порт 80, так как HTTP-сервер уже использует его. Также [вот хороший маленький рисунок] (http://infosys.beckhoff.com/english.php?content=../content/1033/tf6310_tc3_tcpip/84246923.html&id=), показывающий место HTTP в [модели OSI] ( http://en.wikipedia.org/wiki/OSI_model). Jason C 9 лет назад 0
@JasonC - Автор рассказывает о WhatsApp, Viber, на мобильных устройствах. Я не уверен, если запуск веб-сервера является проблемой автора. Ramhound 9 лет назад 0
Нет. Запуск веб-сервера на мобильном устройстве не моя цель. Возможно, я мог бы спутать эвристику DPI, поддельные заголовки и зашифровать контент, но это противоречит цели того, что я делаю. Вот почему вы не можете иметь хорошие вещи на мобильном телефоне. Я только что сделал NPI и да, приложения Android на моем смартфоне используют HTTP, за исключением WhatsApp, который использует HTTPS. Alper Turan 9 лет назад 0
@AlperTuran О, я не понял. Пробой OSI может быть полезен, по крайней мере. Jason C 9 лет назад 1
@JasonC Никаких бигги. Модель OSI действительно полезно знать. Alper Turan 9 лет назад 0
@AlperTuran, мне не терпится подумать о том, какие приложения используют для связи обычный старый незашифрованный HTTP - особенно те, которые имеют привязанную к ним информацию об учетной записи. Wes Sayeed 9 лет назад 1
@WesSayeed А как насчет [HTTP / 2] (http://en.wikipedia.org/wiki/HTTP/2)? Работает ли он в этой ситуации или тоже подвергается глубокой проверке пакетов? Alper Turan 9 лет назад 0
Отличный ответ. Один быстрый вопрос Как прокси-сервер не может блокировать трафик не HTTP / HTTPS на портах HTTP / HTTPS? Поскольку эти порты предназначены для трафика HTTP / HTTPS, как вы можете разрешить другим службам проходить из него? Это возможно? Я что-то пропустил? Благодарю. Nik-Lz 6 лет назад 0
6
Spiff

Если я правильно понимаю ваш вопрос, я мог бы перефразировать его следующим образом: «Если сетевая инфраструктура позволяет HTTP-трафику проходить через определенный порт, это также позволит передавать чистый TCP (без полной HTTP-совместимой операции или даже с поддельными заголовками HTTP) этот порт?

К сожалению, ответ таков: «Это зависит от деталей, которые вы еще не обнаружили, относительно того, как рассматриваемые сети фильтруют трафик». Безусловно, существуют сетевые инфраструктуры, которые фильтруют трафик только по номеру порта, поэтому любой трафик TCP через порт 80 или 443 может работать независимо от того, выглядят ли полезные данные TCP или действуют как HTTP.

Тем не менее, существуют другие сети, которые вставляют прокси-серверы HTTP или проводят глубокую проверку пакетов, чтобы определить, действительно ли у трафика есть заголовки HTTP, и такие сети блокируют трафик, который не является правильным HTTP. Вы могли бы обойти некоторые из этих фильтров, поставив подделку ...

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

... во главе каждого TCP-потока клиент-сервер и фальшивки ...

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

… Во главе каждого TCP-потока между серверами. Но такого рода подделок может быть недостаточно, чтобы заставить его работать через полный HTTP-прокси.

Да, именно это я и имел ввиду. Это плохо, потому что мой провайдер использует несколько типов DPI. Добавление заголовка делает все мои попытки использовать наименьшее количество данных пустыми, в том числе и потому, что отправляемые данные меньше заголовка, даже до 1-2 байтов. Alper Turan 9 лет назад 0
@AlperTuran; Я не стучу ни о вас, ни о чем-либо, и я понятия не имею, что делает ваше приложение ... но мне кажется, что отправка крошечных пакетов размером всего 1-2 байта - это действительно неэффективный способ сделать что-то. Wes Sayeed 9 лет назад 0
@WesSayeed Разве это не наоборот? Мое приложение просто отправляет команды на удаленный сервер, который подключен к удаленно управляемому дрону и электрическим приборам. Учитывая, что он будет работать очень часто, каждый отправленный дополнительный байт будет расходовать больше батареи, чем необходимо. Alper Turan 9 лет назад 0