소켓이란?

소켓이란?

소켓은 네트워크 상에서 돌아가는 두 개의 프로그램 간 양방향 통신의 하나의 엔드포인트이다. 소켓은 포트 번호에 바인딩되어 TCP레이어에서 데이터다 전달되어야 하는 어플리케이션을 식별할 수 있게 한다.

엔드 포인트

아이피 주소와 포트번호 의 조합

소켓 객체

socket() 함수는 첫 번째 인자로 AAddress Familly(AF)와 Socket Type(Enum 형태의 Int값)을 받는다.

socket() 함수 인자는 Address Familly와 Socket Type의 기본값은 각각 AF_INET, SOCKET_STREAM이다.

서버 소켓(요청 수신 및 응답)과 클라이언트 소켓(요청 송신)으로 나누어 설명한다.

서버 소켓

대기 소켓(수신 소켓)과 실제 통신을 담당하는 소켓(응답 소켓 또는 반환 소켓)으로 설정한다.

서버 소켓은 연결 요청을 대기하다가 연결을 수락하는 경우 새로운 Socket 객체를 반환한다.

실제 외부와의 통신은 여기서 반환된 새로운 Socket객체를 통해 통신한다.

socket.bind(address) - 소켓 맵핑

생성한 소켓에 고유한 호스트와 포트를 매핑한다.

인자로 address(호스트와 포트 정보)를 튜플 형태로 전달 받는다. (socket.bind(HOST,PORT))

Socket 객체(프로그램 인터페이스)에 고유한 네트워크 IP자원(호스트와 포트)를 맵핑함으로써 프로그램 인터페이스와 네트워크 지원을 연결시킨다.

socket.listen() - 연결 요청 대기 상태 설정

소켓은 생성된 이후 연결 요청 대기를 한 이후에만 연결이 가능하므로 소켓 맵핑 후에는 반드시 연결 요청 대기 상태를 설정해야 한다.

연결 대기 상태는 오로지 대기(listen)만 할 뿐 실제 연결이 성립되면 새로운 소켓을 반환한다.

socket.accept() - 연결 승낙 후 실제 통신 소켓 반환

연결 요청 대기 중인 소켓은 socket.accept() 를 사용하여 연결을 승낙하고 연결이 성립된 새로운 소켓과 주소정보를 반환한다.

실제 외부와의 통신은 여기서 생성된 새로운 소켓을 이용한다.

socket.close() - 연결 요청 대기 종료

socket.close() 를 사용할 경우 해당 소켓은 종료 된다.