네트워크

소켓과 클라이언트&서버 연결 과정

peanutwalnut 2023. 3. 8. 18:38

프로그램이 네트워크에서 데이터를 주고받을 수 있도록 두 프로그램 간 양방향 통신의

하나의 엔드 포인트이다. IPC의 일종이다.

소켓은 포트 번호에 바인딩되어 OSI 중 4레이어에서 데이터가 전달되야하는 애플리케이션을 식별할 수 있게 한다.

IP와 포트를 통해 연결한다.

 

엔드 포인트의 정의 )) 데이터의 송수신이 이루어지는 지점. ip와 포트 번호 또는 url로 식별된다.

 

프로세스 간 통신에 사용되는 Socket을 이용한 통신 프로그래밍을 socket Programming이라고 한다.

Client Socket과 Server Socket로 구분된다.

 

클라이언트에서 하는 일

- 소켓 생성,

- 연결 요청(IP주소와 포트 번호로 연결하고 싶은 타겟대상을 특정),

- 데이터 송수신(수신하는 API는 별도의 Thread에서 진행하게 된다.),

- 소켓 닫기

 

서버에서 하는 일

- 소켓 생성(껍데기 소켓을 생성),

- bind

   소켓에 로컬 ip 주소와 포트 번호를 할당하는 과정. 

   바인딩을 통해 소켓이 어느 네트워크 인터페이스를 사용할 지 지정할 수 있다.  

   또한, 운영체제로부터 해당 주소와 포트로 들어오는 패킷을 수신하게 된다. 

   일반적으로 서버는 고정된 주소와 포트에 바인딩되어 클라이언트의 요청을 기다리고, 클라이언트는 os에 의해 임의의       포트가 할당되는 경우가 많다.  

 

- listen (클라이언트가 연결 요청을 할 때까지 기다리다가 오면 대기 상태를 종료하고 리턴)

- accept 

   연결 요청을 받아들임과 동시에 새로운 소켓(연결 소켓)을 생성한다. 이 새 소켓들은 클라이언트와의 개별 연결을 나타내 며, 모두 같은 서버 포트 번호를 사용하지만 클라이언트의 ip와 포트 번호가 달라져서 네트워크 상에서 유일하게 식별된다.

- 데이터 송수신,

- 소켓 닫기