브라우저에서 서버에 data 요청하면 서버에서 어떻게 클라이언트를 찾아 응답을 주는지 아시는분
글쓴이: s97083 / 작성시간: 금, 2015/04/17 - 6:12오후
안녕하세요
web쪽 하시는 분한테는 기초적인 것일거 같긴 한데... 얼마전 대답을 잘 못하는일이 생겨서요.
브라우저에서 서버쪽에 data요청하면 서버는 public ip니까 쉽게 찾아간다고 하는데
서버가 클라이언트에 응답을 줄때는 클라이언트는 private ip 를 가지고 있는데 어떻게 돌려주냐
이런 질문이었습니다.
http 가 지나간 ip를 record해두기 때문에 이걸로 찾아간다고 애기해 버렸는데 이거 어떻게
서버에서 클라이언트로 응답이 가는건가요?
접 네트웍이 걸려있을거 같기도 하고 쉬운듯 어렵네요...
Forums:
클라이언트가 보내는 패킷에 클라이언트의 IP 주소를
클라이언트가 보내는 패킷에 클라이언트의 IP 주소를 포함해서 보냅니다.
패킷의 계층 구조는 [IP header, [TCP header, [HTTP header, HTTP body]]] 이런 형식이 됩니다.
IP 헤더 부분에 클라이언트의 IP 주소가 들어가고요.
private IP 일 경우 public IP를 가진 라우터(예를 들어 가정집의 공유기)의 IP 주소가 서버에 전달되고, 서버에서 해당 라우터로 응답 패킷을 보내면, 라우터가 TCP 포트 번호를 참고해서 최종 클라이언트에 패킷을 전달해줍니다.
http://nmap.org/book/tcpip-ref.html
클라이언트에서 서버에 연결을 요청하면 서로 연결
클라이언트에서 서버에 연결을 요청하면 서로 연결 스트림이 생깁니다.
스트림은 각각 서버와 클라이언트 1:1 매칭이니 아이피주소가 public 이든 private든 관계없이 통신이 가능하다고 알고있습니다.
뭐 서버가 보낸 데이터는 어찌됐든 클라이언트 앞단에 있는 라우터가 수신하겠지만요.
윗 분들의 설명에 좀 더 부가해서 NAT에 대해서
윗 분들의 설명에 좀 더 부가해서
NAT에 대해서 찾아보시면 좀 더 자세히 알 수 있으실 것 같습니다.
HTTP 가..
HTTP 가 기본적으로 Request/Response 방식이며
Client가 Request 한 Socket 연결에 답변을 하는 구조입니다.
따라서 서버가 Client 를 찾을 필요는 없습니다.(Basically)
이런 방식으로 인해 Client 가 Server 로 Notification을 받을때에 문제가 생기는데
그래서 별도로 Push Server 등을 이용합니다..
Bosh 같은 Protocol 을 보면 전체적으로 이해하는데에 도움이 되지 않으실까 하네요.
Bosh 를 이용하면 양방향 Communication 을 사용할 수 있습니다.
그러나 Bosh가 그렇듯이 많은 Push Mechanism 도 결국에는 Persistent 연결에 기술적 기반을 두고 있는 경우가 있습니다.
더 관심있으시면 XMPP 같은걸 보는 것도 좋으실 듯 합니다.
Dig it.
HTTP 프로토콜은HTTP - TCP - IP 로
HTTP 프로토콜은
HTTP - TCP - IP 로 TCP/IP를 기반으로 하고 있습니다.
웹쪽은 깊이 안파서 정확히는 기억이 나지 않으나,
1) 문서 1개 요청할때마다 TCP 세션이 맺어짐. 전송 후 세션 해제. 기본적으로 TCP 포트 80을 사용.
*** 2) 내용은 틀린 것 같아 내용 삭제 합니다. ***
3) ""서버가 클라이언트에 응답을 줄 때는 클라이언트는 private ip 를 가지고 있는데 어떻게 돌려주냐""
공유기에 의해 NAT 된다고 가정 하겠습니다.
이 때, 서버가 받는 IP는 공유기의 Public IP입니다. 즉, 서버는 Client와 통신하는게 아니라,
공유기와 통신하는걸로 알고있고 해당 패킷을 실제 Client에게 전달하는건 공유기의 책임입니다.
데이터 주고받는 대상을 특정하는 작업은 IP레이어
데이터 주고받는 대상을 정해서 정확하게 전달하는 작업은 IP레이어 담당이고,
대량의 데이터를 송수신할때 전송순서 보장은 IP위에 있는 TCP 레이어 담당인데, 이부분은 OS가 알아서 다 해줍니다.
아 그리고 포트는 클라이언트의 포트와 서버의 포트가 있는데
서버측의 포트는 고정되어 있지만(http면 80) 클라이언트의 포트는 랜덤입니다. 이걸로 다 구별됩니다.
TCP는 전송순서뿐만 아니라 여러 link의 데이터를 한 라인에 섞어 실어서 보내주고 분배하는 Multiplexing 역할도 있습니다.
TCP는 서버측 포트 같아도 클라이언트 포트가 다르면 다른 link로 인식합니다.
브라우저에서 접속할 때에 랜덤으로 정해지는 클라이언트 포트가 결정되기 때문에 한 컴퓨터에서 여러 링크 만들어도 이걸로 다 구별 됩니다. HTTP는 요청할때마다 매번 TCP 접속 만들어 낸다는거 아시죠.
Written By the Black Knight of Destruction
댓글 달기