GPRS / 3G 네트워크를 통해 모바일 스마트 폰에서 실행해야하는 앱을 만들고 있습니다. 나는 비트 연산을하고 있으므로 HTTP 헤더를 통해 낭비되는 모든 바이트 는 나쁘다. 내 지역의 이동 통신사는 프록시 등을 많이 사용합니다. 하나의 웹 소켓이 작동하지 않습니다.
포트 80 및 443의 HTTP는 항상 작동하는 것 같지만 동일한 포트에서 서버에 대한 TCP 소켓 연결을 작성하고 양방향 통신을 시작할 수 있습니까? WhatsApp, Viber 등과 같은 모바일 앱은 HTTP 연결을 사용하지 않는다고 생각하지만 구현에 대한 세부 정보를 찾지 못했으며 3G를 통해 네트워크가 완벽하게 작동하도록하거나 아무것도 작동하지 않는 경우 .
답변
TCP와 HTTP는 다릅니다.
TCP는 전송 계층입니다. 정의상, 애플리케이션 계층 프로토콜 (귀하의 경우 HTTP)을 전달해야합니다. TCP는 포트를 통해 실행되지 않습니다. 포트의 중재자입니다. 즉, HTTP 서버에 연결하면 TCP 포트 80에 연결됩니다. HTTPS에 연결하면 TCP 포트 443을 통해 연결됩니다.
HTTP 및 HTTPS는 모든 TCP 포트를 통해 실행될 수 있습니다. 80과 443은 일반적인 것입니다. 원하는 경우 응용 프로그램이 해당 포트에서 수신 대기하도록 할 수 있습니다. 따라서 예, HTTP 대신 다른 프로토콜을 사용하여 포트 80을 통해 서버에 연결할 수 있지만 서버가 다른 프로토콜을 사용하여 해당 포트에서 수신하도록 구성되어 있고 HTTP 또는 HTTPS가 해당 포트를 사용 하지 않도록 구성된 경우에만 (웹 서버를 실행한다고 가정).
이제 제공자가 프록시를 사용하고 있다고 언급했습니다. 포트 80 또는 443을 통해 비 HTTP / HTTPS 연결을 할 수 있습니까? 프록시가 얼마나 똑똑한가에 달려 있습니다. 패킷 검사를 수행하는 경우 HTTP 헤더를 확인하여 해당 포트를 통과하는 트래픽이 실제로 HTTP 트래픽인지 확인할 수 있습니다. 이를 위조하는 방법이 있지만 프록시가 트래픽을 얼마나 깊이 검사하는지에 따라 다릅니다. 프록시가 HTTP / HTTPS 포트에서 비 HTTP / HTTPS 트래픽을 차단하는 경우 공급자의 스 쿼크를 제외하고는 할 수있는 일이 많지 않습니다 (또는 경우에 따라 더 높은 가격을 지불).
다양한 모바일 애플리케이션이 통신하는 방식은 벤더가 작성한 방식에 따라 다릅니다. 대부분의 모바일 앱은 스킨 화 된 웹 앱이므로 대부분 포트 80 또는 443에서 HTTP 또는 HTTPS를 사용합니다. 그러나 그들이해야한다고 말하는 규칙은 없으며 패킷을 스니핑하지 않으면 알 수있는 실제 방법이 없습니다.
귀하의 질문에 답변을 드리겠습니다.
답변
질문을 올바르게 이해하면 “네트워크 인프라에서 특정 포트를 통해 HTTP 트래픽을 전달할 수있는 경우 완전한 HTTP 호환 작업이나 가짜 HTTP 헤더없이 순수한 TCP도 전달할 수 있습니까?” 그 포트? “
안타깝게도 대답은 “문제의 네트워크가 트래픽을 필터링하는 방법에 대해 아직 발견하지 못한 세부 사항에 따라 다릅니다”입니다. 포트 번호 만 기준으로 트래픽을 필터링하는 네트워크 인프라가 있으므로 TCP 페이로드가 HTTP처럼 보이거나 작동하는지에 관계없이 포트 80 또는 443을 통한 모든 TCP 트래픽이 작동 할 수 있습니다.
그러나 트래픽에 실제로 HTTP 헤더가 있는지 확인하기 위해 HTTP 프록시를 삽입하거나 심층 패킷 검사를 수행하는 다른 네트워크가 있으며 이러한 종류의 네트워크는 적절한 HTTP가 아닌 트래픽을 차단합니다. 당신은 가짜를 넣어 그 필터 중 일부를 돌아 다닐 수 있습니다…
GET / HTTP/1.0\r\n\r\n
… 각 클라이언트-서버 TCP 스트림의 헤드와 가짜…
HTTP/1.0 200 OK\r\n\r\n
… 각 서버-클라이언트 TCP 스트림의 헤드에서. 그러나 그러한 종류의 가짜는 완전한 HTTP 프록시를 통해 작동하게하기에 충분하지 않을 수 있습니다.