HTTP가 포트에서 실행되면 TCP가 해당 포트에서도 실행될 수 있습니까?


2

GPRS / 3G 네트워크를 통해 모바일 스마트 폰에서 실행해야하는 앱을 만들고 있습니다. 나는 비트 연산을하고 있으므로 HTTP 헤더를 통해 낭비되는 모든 바이트 나쁘다. 내 지역의 이동 통신사는 프록시 등을 많이 사용합니다. 하나의 웹 소켓이 작동하지 않습니다.

포트 80 및 443의 HTTP는 항상 작동하는 것 같지만 동일한 포트에서 서버에 대한 TCP 소켓 연결을 작성하고 양방향 통신을 시작할 수 있습니까? WhatsApp, Viber 등과 같은 모바일 앱은 HTTP 연결을 사용하지 않는다고 생각하지만 구현에 대한 세부 정보를 찾지 못했으며 3G를 통해 네트워크가 완벽하게 작동하도록하거나 아무것도 작동하지 않는 경우 .


대부분의 모바일 앱은 HTTP를 사용하여 통신합니다. HTTP를 사용하지 않는 경우 트래픽이 프록시로 이동하여 실패 할 가능성이 있으므로 포트 80을 초과하는 것이 유용하지 않을 수 있습니다.
17:41에

1
HTTP는 계층 7 프로토콜 인 반면 TCP는 계층 4 프로토콜입니다. HTTP 명령 시퀀스 및 데이터는 TCP 연결을 통해 흐르므로 제목에 대한 대답은 강조 할 수 없습니다. 그러나 한 번에 하나의 프로세스 만 포트를 사용할 수 있습니다. 포트 80의 연결을 통해 비 http 트래픽을 실행할 수 있지만 중개 시스템은 관련된 프로토콜을 감지하고이를 기반으로 관리 결정을 내릴 수 있습니다 (예를 들어 연결을 차단하는 경우). 443은 암호화 될 것으로 예상되기 때문에 조금 나아지지만 만병 통치약은 아닙니다.
Frank Thomas

답변:


9

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를 사용합니다. 그러나 그들이해야한다고 말하는 규칙은 없으며 패킷을 스니핑하지 않으면 알 수있는 실제 방법이 없습니다.

귀하의 질문에 답변을 드리겠습니다.


추가 : 들어오는 연결의 경우, 다른 응용 프로그램에 이미 TCP 포트 80이 열려있는 경우 (예 : HTTP 서버), HTTP 서버가 이미 사용 중이므로 응용 프로그램이 TCP 포트 80에서도 청취 할 수 없습니다. 또한 여기 OSI 모델 에서 HTTP의 위치를 ​​보여주는 멋진 작은 그래픽이 있습니다 .
Jason C

@JasonC-필자는 모바일 장치에서 WhatsApp, Viber에 대해 이야기합니다. 웹 서버 실행이 저자의 관심사인지 확실하지 않습니다.
Ramhound

아니요. 모바일 장치에서 웹 서버를 실행하는 것은 저의 목표가 아닙니다. DPI 휴리스틱, 혼란스러운 헤더 및 콘텐츠 암호화를 혼동시킬 수는 있지만 내가하는 일의 목적을 상실합니다. 그렇기 때문에 모바일에서 좋은 것을 가질 수 없습니다. 방금 NPI를 직접 수행했으며 HTTPS를 사용하는 WhatsApp을 제외하고 스마트 폰의 Android 앱은 HTTP를 사용합니다.
Alper Turan

1
@AlperTuran 아, 오해했습니다. OSI 분석은 여전히 ​​도움이 될 수 있습니다.
Jason C

1
@AlperTuran, 나는 평범한 오래된 암호화되지 않은 HTTP를 사용하여 통신하는 앱, 특히 계정 정보가 연결된 앱을 생각하고 있습니다.
Wes Sayeed

6

질문을 올바르게 이해하면 "네트워크 인프라에서 특정 포트를 통해 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 프록시를 통해 작동하게하기에 충분하지 않을 수 있습니다.


네, 정확히 그게 제가 의미 한 바입니다. 내 공급자가 여러 유형의 DPI를 사용하기 때문에 심하게 짜증납니다. 헤더 오버 헤드를 추가하면 내가 보내는 데이터가 헤더보다 작기 때문에 1-2 바이트까지되므로 데이터 무효를 최소화하려고합니다.
Alper Turan

@AlperTuran; 나는 당신이나 아무것도 두드리지 않을 것이고, 나는 당신의 앱이 무엇을하는지 전혀 모른다.
Wes Sayeed

@WesSayeed 다른 방법이 아닙니까? 내 응용 프로그램은 원격 제어 드론 및 전기 기기에 인터페이스 된 원격 서버로 명령을 보냅니다. 매우 자주 실행될 것이라는 점을 감안할 때 전송되는 모든 추가 바이트는 필요한 것보다 더 많은 배터리를 낭비합니다.
Alper Turan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.