2012-10-12 2 views
0

프로그래밍 지식을 닦고 의심의 여지가있었습니다.클라이언트가 연결 지향 통신에서 소켓 바인딩을하고 연결이 적은 통신이 아닌 이유

먼저 소켓에 대한 나의 이해를 설명하겠습니다.

  1. 소켓 바인딩은 소켓을 포트와 연관시킵니다.
  2. 소켓 바인딩은 커널이 들어오는 패킷을 전달해야하는 프로세스를 식별하도록 도와줍니다. 연결 지향 소켓 통신 설립

서버 측에서는

  • 아래와 같이 소켓이다() -> 결합() -> 청취() -> 수락() ... .
  • 클라이언트 측 소켓()입니다 -> 연결 -> ... 클라이언트가 소켓에 결합 할 필요가 왜

내 질문입니다. 클라이언트의 경우 요청을 보내면 소켓에 대한 응답을 얻어야하고 커널은 프로세스로 전달해야합니다. 이러한 일들은 바인딩이 필요하지 않습니다. 커널이 응답을 보낼 대상을 이해하는 방법이 아니라면 패킷? 연결이 적은 클라이언트 호출 bind socket.Why가 여기에 필요한 이유는 무엇입니까?

답변

-1

항상 소켓을 엽니 다. 이것은 커널을 통과하는 경로입니다. 소켓이 만들어진 후에 connect은 TCP가 발생한다고 말합니다.

TCP 클라이언트 대 UDP 클라이언트를 살펴보십시오. 당신이 명시 적으로 bind(...)없이 connect(...) 또는 listen(...)를 호출하는 경우 TCP

s = socket(options....) 
connect(s) 
send(s, data) 

UDP

s = socket(options....) 
send(s, data) 
+0

질문에 대답하지 않습니다. – EJP

-1

bind("0.0.0.0", 0)

(모든 인터페이스, 모든 포트)는 암시이다.

비 연결 상태에서도 모든 소켓을 로컬 포트에 연결해야 양방향 통신이 가능합니다 (그렇게하지 않더라도).

+0

'connect()'는 0.0.0.0에 바인드하지 않습니다. 대상으로 라우팅하는 데 필요한 IP 주소에 바인드합니다. – EJP

0

제 질문은 클라이언트가 소켓에 바인딩 할 필요가없는 이유입니다.

connect()을 호출 할 때 커널이 자동으로 바인드를 수행하기 때문에 소켓을 직접 바인딩하지 않은 경우입니다.

또한 연결없는 클라이언트 호출 바인드 소켓. 여기 왜 필요한거야?

그렇지 않으면 소켓이 IP 주소 : 포트에 바인딩되어 있지 않으므로 아무것도 보내거나받을 수 없습니다. 그것은 외부 세계에 대한 경로가 없습니다.