2012-09-24 2 views
-1

C++ 소켓 프로그래밍에 대해 몇 가지 질문이 있습니다. 내가 깊이 묻는 방식이 잘못 되었다면, 깊은 것을 파헤 치고 올바른 것을 도우십시오.socket() 및 bind()는 어떻게 작동합니까?

  1. OS 수준의 각 포트마다 하나의 파일 설명자가 있습니까?
  2. 여러 포트가 동일한 네트워크 인터페이스를 사용하는 방법은 무엇입니까? 프로세서에서 스레드가 처럼 전환됩니까? 따라서 사용 포트 수가 증가하면 특정 포트에 대해 지연된 데이터가 일 수 있습니까?
  3. 소켓을 만들 때 OS 레벨은 어떻게됩니까? IO 파일 디스크립터에 대한 참조를 작성합니까?
  4. 그러면 bind() 호출이 OS 레벨에서 어떻게됩니까? 소켓과 NIC 주소를 어떻게 연결합니까?
  5. 재사용 가능한 소켓을 사용하면 어떻게됩니까? 여러 소켓을 한 포트에 바인딩하는 방법은 무엇입니까? 하나의 포트에서 스레드와 같은 스위치를 사용합니까?
  6. 특정 주소 또는 포트에 bind()없이 보내거나받을 때? 논리 OS가 어떻게 그리고 무엇을 선택하여 주소와 포트를 선택합니까?
+1

여기에는이 형식에 대한 광범위한 내용이있을 수 있습니다. 소켓에 대한 구현 세부 사항을 묻는 중입니다. 소켓에 대한 세부 사항은 시스템마다 다를 수 있습니다. 사용하는 프로토콜에서 * port *가 실제로 무엇인지 이해하기 위해 네트워킹 설명서를 선택하는 것이 좋습니다. –

+0

@ David Rodríguez - dribeas : Linux 또는 Unix 환경에 대한 세부 정보를 찾고 있습니다. 온라인으로 읽은 참고 서적을 몇 권 읽었습니다. 그러나 그 책들은 너무 지저분합니다. 이 시스템이 어떻게 작동하는지 간단한 생각이 필요합니다. 나는 소켓 프로그래밍을하고있는 사람들이 그 옳은 것이 무엇인지 생각해야한다고 생각한다. –

+0

이 시스템들은 복잡하기 때문에 "리눅스 네트워킹이 어떻게 작동하는지 간단하게"생각하지 않을 것입니다. –

답변

2

OS 수준의 각 포트마다 하나의 파일 설명자가 있습니까?

아니요. 수신 대기 소켓에서 연결을 허용하는 서버의 경우 동일한 로컬 포트 ​​번호를 모두 나타내는 10,000 개의 파일 설명자가있을 수 있습니다.

여러 포트가 동일한 네트워크 인터페이스를 사용하는 방법은 무엇입니까? 프로세서의 쓰레드처럼 바뀌고 있습니까? 따라서 사용 포트 수가 증가하면 특정 포트의 데이터를 지연시킬 수 있습니까?

답변이 너무 복잡합니다.

소켓을 만들 때 OS 수준은 어떻게됩니까? IO 파일 디스크립터에 대한 참조를 작성합니까?

이들은 매우 유사한 것으로, 일부 운영 체제에서는 심지어 똑같습니다. 하나는 소켓을 의미하고, 다른 하나는 열린 파일을 의미합니다.

그러면 호출이 bind() 될 때 OS 레벨에서 어떤 일이 발생합니까?

포트와 IP 주소가 소켓에 할당됩니다. IP 주소는 0.0.0.0이 될 수 있습니다.지정된 포트가 0이면 시스템은 사용 가능한 포트에서 하나를 선택합니다.

어떻게 소켓과 NIC 주소를 상호 연결합니까?

위 참조.

재사용 가능한 소켓을 사용하면 어떻게됩니까?

'재사용 가능한 소켓'과 같은 것은 없습니다. 포트를 다시 사용 하시겠습니까?

특정 주소 또는 포트에 bind()없이 보내거나받을 때? 어떻게 그리고 무엇이 논리 OS는 주소와 포트를 선택합니다.

bind()은 자신을 아직 실행하지 않은 경우 무대 뒤에서 실행됩니다. 위와 같이 같은 규칙이 bind()에 적용됩니다.

+0

직접 답변을 보내 주셔서 감사합니다. 실제로 나는 많은 것을 읽었고 지금은 약간의 생각이 있습니다. 여기 소켓 옵션으로 포트를 다시 사용하는 것에 대해 언급합니다. 여기 나는 대답을 얻었다. http://www.unixguide.net/network/socketfaq/4.5.shtml –

+0

@NayanaAdassuriya 그게 TCP에서하는 것입니다. UDP의 경우 완전히 다른 이야기입니다. – EJP

3

소켓의 "성경"보다 영향력있는 네트워크 프로그래밍 텍스트 인 W Richard Stevens : Unix Network Programming을 찾기가 어려울 것입니다. 소켓 프로그래밍은 밤새도록 오는 것이 아니기 때문에 기대하지 마십시오. 그것은 규율이며 평범하고 단순합니다. 그리고 모든 학문과 마찬가지로, 그것은 연마되어야합니다.

0

소켓 프로그래밍을 읽어야한다고 생각합니다. 기본 개념은 무엇인지 묻고 서버, 클라이언트, TCP, UDP, 로컬 호스트, 원격 호스트 같은 용어를 이해해야합니다. socket()은 프로세스와 전송 계층 사이의 인터페이스를 생성하고, 소켓의 특성을 생성하고 알려줍니다. bind()는 소켓을 로컬 주소에 바인드합니다. 매뉴얼 페이지 1 또는 2를 점검하면 포괄적 인 대답을 찾을 수 있습니다.

관련 문제