단일 웹 서버에 여러 클라이언트 연결이 어떻게 이루어 집니까?


16

실제로 컴퓨터 네트워크를 배우고 있는데 웹 서버가 여러 연결을 유지 관리하는 방법에 혼란이 있습니까?

간단히 말해서, 일부 인터넷 검색은 소켓이 각 클라이언트 요청을 처리한다는 것입니다.

웹 서버가 있다고 말하고 IP가있는 2 명의 클라이언트를 말할 수 있습니다

Client A: 5.5.5.5
Client B: 10.10.10.10 

둘 다 포트 80 에서 서버에 연결을 시도합니다 .

이제 내가 찾은 인터넷 검색에서 서버 는 들어오는 요청에 대해 포트 80 에서 수신 대기 합니다. 그런 다음 클라이언트 A 가 서버에 연결을 시도 한다고 가정 합니다 (TCP / IP 연결 만들기). 그 사이에이 둘 사이에 소켓이 작성됩니다. 그런 다음 추가 통신을 위해 별도의 스레드로 실행되어 서버가 해당 특정 포트에서 다른 클라이언트 요청을 다시 수신하도록합니다. 그리고 클라이언트 B도 같은 방식으로 연결합니다.

이제 첫 번째 질문은

1. How does server communicate with these two clients simultaneously  
   after the connection has been established?

이제는 실제로 2 명의 클라이언트뿐만 아니라 수천만 명의 사용자가 서버에 연결할 수 있습니다.

다음 질문은 :

2. Now, how do those thousands of clients get connected to a single server?

   If we assume every client is connected to the server through wire, it is not 
   practically possible to maintain that many sockets on a hardware for
   connection. How those thousands connections are made and handled?

마지막으로, 제 3의 질문은 :

3. Above I said (actually heard) how **client A** connected to the the server
   and similarly the client B.

   But I didn't get the part stating "after a TCP/IP connection is made they
   continue separately in a separate socket and making server to listen for 
   other client requests." What does that mean? If one client is communicating
   to the server, how come other can communicate at the same time to same server.

   Isn't it like while a student is asking question to a teacher, other can't
   ask at the same time since that particular student is busy or occupying the
   teacher at the moment so others should wait, which we compare than client B 
   should wait when client A is communicating.

이것들은 내가받지 못하는 기본 질문입니다. 모든 것이 잘못되면 수정하십시오. 답변이 상세하거나 특정 부분에 집중되어 있지 않은 경우 읽을 책 / pdf를 제안 할 수 있습니다. 감사


어떤 대답이 도움이 되었습니까? 그렇다면 질문에 대한 답변이 계속 표시되지 않도록 답변을 수락해야합니다. 또는 자신의 답변을 제공하고 수락 할 수 있습니다.
Ron Maupin

답변:


6

이제 내가 찾은 인터넷 검색에서 서버는 포트 80에서 수신 요청을 수신합니다.

실제로,보다 구체적으로 "청취"소켓이라고하는 특별한 유형의 소켓이 있습니다.

일반적으로 소켓은 로컬 IP, 로컬 포트, 원격 IP 및 원격 포트의 조합과 연관됩니다.

청취 소켓이 다릅니다. 특정 원격 IP 및 포트와 연결되어 있지 않습니다. 특정 로컬 포트와 연관됩니다. 특정 로컬 IP와 연결되거나 연결되지 않을 수 있습니다.

일반적으로 웹 서버에는 로컬 포트 ​​80의 청취 소켓이 있습니다.

그런 다음 클라이언트 A가 서버에 연결을 시도한다고 가정합니다 (TCP / IP 연결 만들기). 그 사이에이 둘 사이에 소켓이 작성됩니다.

소켓 쌍은 실제로 클라이언트와 서버에 하나씩 있습니다.

클라이언트 응용 프로그램은 소켓을 만들고 클라이언트 OS에게 소켓을 서버에 연결하도록 요청합니다.

클라이언트 OS는 임의의 로컬 포트를 할당하고 로컬 IP (일반적으로 패킷이 전송 될 인터페이스를 기반으로)를 선택하고 클라이언트 응용 프로그램이 요청한 원격 IP 및 포트를 채 웁니다. 그런 다음 서버 연결 프로세스를 시작합니다.

서버 OS는 새 연결이 들어오고 있음을 청취 소켓 소유자에게 알립니다. 서버 응용 프로그램은 연결을 수락하고이를 처리하기 위해 새 소켓을 만듭니다.

여러 스레드 또는 프로세스가 동일한 리스팅 소켓을 모니터링 할 수 있습니다. OS는 정확히 하나의 연결을 허용하도록합니다.

그런 다음 추가 통신을 위해 별도의 스레드로 실행됩니다.

그것은 서버 응용 프로그램의 구현 자에 달려 있습니다. 그들은 여러 스레드를 사용하도록 선택하거나 단일 스레드가 활동을 위해 여러 소켓을 모니터 할 수있게하는 "select"또는 "poll"과 같은 API를 사용하도록 선택할 수 있습니다.


  1. 연결이 설정된 후 서버가이 두 클라이언트와 동시에 어떻게 통신 합니까?

서버 OS는 소스 IP, 소스 포트, 대상 IP 및 대상 포트의 조합으로 소켓과 패킷을 일치시켜 적절한 소켓으로 전달합니다.

  1. 이제 수천 명의 클라이언트가 단일 서버에 어떻게 연결됩니까?

    모든 클라이언트가 유선을 통해 서버에 연결되어 있다고 가정하면 실제로 연결을 위해 많은 소켓을 하드웨어에 유지하는 것은 불가능합니다. 그 수천 개의 연결은 어떻게 이루어지고 처리됩니까?

이 문맥에서 "소켓"은 실제 소켓이 아니라 운영 체제 내의 데이터 구조를 나타냅니다.

여전히 한계가 있지만 현대 서버에서 수천명이 쉽게 할 수 있으며 수백만이 어려워집니다.

학생이 교사에게 질문하는 동안은 그렇지 않습니다. 특정 학생이 현재 바쁘거나 교사를 점유하고 있기 때문에 다른 사람이 동시에 요청할 수 없으므로 다른 사람들이 기다려야하므로 클라이언트 B가 기다려야하는 것보다 비교해야합니다 클라이언트 A가 통신 할 때

컴퓨터는 사람들보다 관심을 나누는 데 훨씬 좋습니다. 서버에 프로세서 코어가 하나 뿐인 경우 한 번에 한 가지 작업 만 수행 할 수 있지만 작업간에 빠르게 전환 할 수 있으면 클라이언트는이를 알지 못합니다.

물론 오늘날 많은 서버에는 여러 개의 프로세서 코어가 있습니다.


소켓이 아닌 새로운 연결이 생성됩니다. 소켓이 무엇인지에 대한 OP의 혼란을 확장하고 있다고 생각합니다.

문제는 rfc가 소켓 정의에서 실제 사례와 다르다는 것입니다.

방금 가서 세 가지 주요 운영 체제에 대한 "수락"에 대한 문서를 찾아 보았습니다. 모두 새로운 소켓 생성 수락에 대해 이야기했습니다.

http://man7.org/linux/man-pages/man2/accept.2.html

https://www.freebsd.org/cgi/man.cgi?query=accept&sektion=2

https://msdn.microsoft.com/en-us/library/windows/desktop/ms737526%28v=vs.85%29.aspx


1의 대답으로 소켓 고유성에 대해 알고 있습니다. 내가 묻는 것은 2 개의 고유 소켓이 있고 서버가 다른 것을 알고 있다는 것입니다. 그런 다음 서버는 각 소켓에 요청을 동시에 처리하여 실행할 시간 조각을 제공합니까? Google에 연결하고 요청을 처리하는 것처럼 다른 백만 명의 사용자 요청이 보류 중임을 의미하지 않습니까?
Sagaryal

또한 2. LAN과 같이 네트워크에 연결하려고 할 때 실제 물리적 포트와 같은 포트를 의미했습니다. 나는 여기서 단어를 잘못 해석하고 있을지도 모른다. 다시 Google에 연결한다고 가정 해 보겠습니다. 그리고 수백만의 다른 사람들이 단일 Google 서버에 연결하고 있습니다. 집과 그 백만 명의 사람들로부터 무선으로 Google에 연결합니다. 이러한 연결은 서버에서 어떻게 처리됩니까? 내 컴퓨터가 인터넷을 사용하는 것처럼 라우터의 포트 나 무선으로 연결해야합니다. 물리적으로 수백만 개의 그러한 포트가 있습니까? 이제 서버에 관한 것이 아니라 무선 연결이라고 생각합니까?
Sagaryal

" 일반적으로 소켓은 로컬 IP, 로컬 포트, 원격 IP 및 원격 포트의 조합과 연관되어 있습니다. " RFC의 정의에 따라 소켓 은 로컬 IP 주소 및 TCP 포트이며 원격 주소와 관련이 없습니다. . 연결이 때문에 로컬 IP 주소, 로컬 TCP 포트, 원격 IP 주소, 원격 TCP 포트, 로컬 및 원격 소켓의 조합입니다. 문제를 혼동했습니다.
Ron Maupin

2
" 서버 OS는 새 연결이 들어오고 있음을 청취 소켓의 소유자에게 알립니다. 서버 응용 프로그램은 연결을 수락하고이를 처리하기 위해 새 소켓을 만듭니다. " 소켓 이 아닌 새 연결 이 만들어집니다. 소켓이 무엇인지에 대한 OP의 혼란을 확장하고 있다고 생각합니다.
Ron Maupin

" 서버 OS는 소스 IP, 소스 포트, 대상 IP 및 대상 포트의 조합으로 소켓에 대한 패킷을 일치시켜 적절한 소켓으로 전달합니다. "다시, 소켓연결 이 혼동 됩니다 .
Ron Maupin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.