개인적인 공부 목적으로 제 생각을 정리한 내용으로 정확하지 않은 정보가 포함되어 있습니다.
오늘 점검 대상이 소켓 통신을 할 경우 버프에서 프록시로 잡히는 패킷을 볼 수 없다는 얘기를 듣고 고개를 끄덕였지만 내 머릿속은 ?????로 가득 찼다,,
정확히 소켓통신은 무엇인가?
구글링을 해보면 http는 단방향 통신이고 소켓은 양방향 통신이라 메신저나 비디오 스트리밍과 같은 연결유지가 필요한 프로그램 통신에 쓰인다 라는 사전적인? 얘기밖에 안나와서 반복의 구글링을 통해 내 나름대로 정리해보는,, 그런 글
HTTP란?
HTTP는 OSI 7계층 중 애플리케이션 레이어에 속하는 프로토콜인데, 이 애플리케이션 레이어에는 데이터의 형식과 절차에 관련된 프로토콜이 속하게 된다.
HTTP는 웹을 기준으로 클라이언트와 웹서버가 서로 어떠한 데이터 형태로 요청을 보내고 전송을 받을지 그 형식을 정하고 있는 규약, 프로토콜인 것(예를 들어 버프로 프록시를 잡으면 클라이언트의 request와 서버의 response 형태로 데이터가 오고 가는것을 볼 수 있는것 처럼!)
결국 이 HTTP프로토콜을 기반으로 통신하는게 HTTP통신이고, 와이어샤크에서 필터링을 통해 HTTP통신을 하는 패킷만 볼 수 있다.
그런데 정말 어떤 대상에서는 웹으로 연결되는 부분(HTTP) 외에 기능 사용 시 버프에 패킷이 잡히는게 없었다
그래서 해당 기능을 사용하면서 와이어샤크로 패킷을 떠봤더니 ‘TCP’ 통신을 하고 있었다 이게 바로 소켓통신이라는 건가 싶어서 소켓통신에 대해서 더 자세히 알아보기로 한다.
소켓이란?
네트워크 상에서 동작하는 프로그램 간 통신의 엔드포인트. 프로그램이 네트워크에서 데이터를 통신할 수 있도록연결해주는 연결부라고 할 수 있다.
이에 개발 시에 Client 소켓/Server 소켓을 생성하여 통신할 수 있게하며, Server는 소켓을 통해 Cilent측 소켓의 연결 요청이 있을 때까지 기다리고 있고(listening 한다 라고도 표현)
Client 소켓에서 연결요청을 하면(올바른 port로 들어왔을 때) Server 소켓이 허락을 하여 통신을 할 수 있도록 연결(connection)되는 것
소켓 생성 후 소켓에 IP/PORT를 바인딩하여 식별할 수 있도록하고, 이와 같은 소켓을 활용한 통신이 소켓 통신이다~ 라고 이해해 보았고
소켓통신은 대표적으로 TCP 와 UDP 방식으로 나뉘는데
사실 HTTP 프로토콜 또한 TCP를 기반으로 만들어진 프로토콜로, TCP는 전송계층의 프로토콜 / HTTP는 위에서 말했듯이 응용계층의 프로토콜이기 때문에 HTTP프로토콜에 따라 정해진 형식의 데이터가 TCP 전송 방식으로 통신이 된다라고 생각을 하면 될것 같다
아래 참고 포스팅 중 첫번째 포스팅에서도 그런 의미로 HTTP가 TCP 위에 만들어졌으니, 이 또한 소켓을 활용한 통신이라고 할 수 있다! 라고 답답해 하신듯
나에게 물음표를 던져주신 발언에서의 소켓통신과 같이 일반적으로 사람들이 언급하는 소켓통신이란, TCP/IP 프로토콜 기반 소켓통신으로 버프는 HTTP Proxy 툴이기 때문에 당연히 프로토콜이 다름에 따라 HTTP와 전달되는 데이터 형식이 다른 소켓통신(TCP)의 패킷을 버프에서 잡을 수 있을리가~
버프에서 별도의 작업을 통해서 tcp 통신을 http처럼 프록시 잡는 방법도 구글링하다 발견해서 시도해볼 예정이다
즉 HTTP 통신 / 소켓 통신을 아예 다른것으로 비교하기 보다는 다른 계층의 프로토콜을 기반으로 한다는 것을 우선적으로 이해하고 비교할 수 있어야 할것 같다! 비교대상이 되는 그 특징들이 틀린 것은 아니니까
-참고-
HTTP는 소켓 통신이에욧 !!!
iOS) Socket 통신 (1) Socket 기초, TCP, UDP
HTTP란? HTTP와 TCP의 연관성은 무엇일까?
[Network] 프로토콜(Protocal)과 소켓(Socket)
(Term) Socket이란?
프로그래밍/웹, 네트워크
http와 tcp/ip의 이해