소켓
- an end-point in the IP networking protocol.
- 1989년 미국의 UC 버클리 대학에서 C기반으로 처음 계발됨.
- 네트워크 상에서 돌아가는 두 개의 프로그램 간 양방향 통신의 하나의 엔트 포인트.
- endpoint:
- 아이피 주소와 포트 번호의 조합을 가진 소프트웨어 장치.
- TCP 연결은 2개의 앤드 포인트로 유일하게 식별되어질 수 있음(클라이언트와 서버 간 여러 개의 연결이 맺어질 수 있음)
- 두 소겟이 연결되면 서로 다른 프로세스끼리 데이터를 전달할 수 있다.
- TCP/IP 4계층에서 응용계층 바로 아래에 소켓 계층을 만들어서 응용계층 하위단계의 자세한 내용을 모른다 하더라도 소켓을 이용하면 응용계층만 신경쓰고 네트워크 프로그램을 개발 할 수 있음.
Client 소켓과 Server 소켓
소켓을 통해 데이터 통신을 위한 연결(Connection)을 만들기 위해서는, 연결 요청을 보내는지 또는 요청을 받아들이는지에 따라 소켓의 역할에 나뉘는 데, 전자에 사용되는 소켓을 클라이언트 소켓(Client Socket), 후자에 사용되는 소켓을 서버 소켓(Server Socket)이라고 한다.
클라이언트 소켓(Client Socket)과 서버 소켓(Server Socket)이 태생적으로 구조가 다른, 전혀 별개의 소켓(Socket)인 것처럼 여겨질 수 있다. 하지만 두 소켓(Socket)은 동일하다. 단지 역할에 따라 처리되는 흐름, 즉, 호출되는 API 함수의 종류와 순서들이 다를뿐이다.
소켓의 흐름
<서버>
1) socket()함수를 이용하여 소켓을 열음.
2) bind()함수를 이용하여 ip와 port번호를 설정.(listening port 링크)
3) listen()함수를 이용하여 클라이언트들이 접근을 할때 수신 대기열을 만들어서 몇개의 클라이언트를 대기 시킬지 설정.
4) accept()함수를 이용하여 클라이언트의 연결을 기달린다. - 연결이 되면 accept()함수가 클라이언트의 소켓 디스크립터(socket descriptor)를 반환.
5) read(), write()
6) close()
<클라이언트>
1) socket함수를 이용하여 소켓을 열음.
2) connect()함수를 이용하여 통신 할 서버의 ip와 port번호를 인수를 넣어서 서버에 통신을 시도.(speakint port 링크)
3) read(), write()
4) close()
<TCP연결>(클라이언트-서버)
write(), read()함수를 통해서 통신을 함.
서버 소켓은 클라이언트 소켓의 연결 요청을 받아들이는 역할만 수행할 뿐, 직접적인 데이터 송수신은 서버 소켓의 연결 요청 수락의 결과로 만들어지는 새로운 소켓을 통해 처리된다.
스트림
- 데이터, 패킷, 비트 등의 일련의 연속성을 갖는 흐름을 의미.
- 음성, 영상, 데이터 등이 작은 조각들로 하나의 줄기를 이루며 전송되는 데이터 열.
- 입출력 데이터를 입출력 순서에 의해서 순차적으로 처리되는 데이터 열.
- 통신을 목적으로한 바이트 단위의 집합.
- 장치의 독립성
- 네트워크, 메모리, 프린터, 다른 종류 기기 상관 없이 오직 데이터만 전달한다.
- 문자(바이트) 또는 바이너리로 처리하기 때문에 입출력 장치의 종류에 따라 다르게 프로그램을 작성할 필요 없음.
- 버퍼 사용 유무
- 스트림은 버퍼라는 임시 저장 공간을 갖고 있어, 일정량을 모아두었다가, 시스템 효율을 고려하여 큰 데이터 덩어리 씩 처리할 수 있다.(Buffer)
- 스트림이 버퍼를 사용할때는 cpu와 입출력 장치 간의 속도 차이 때문이다.
- 읽어온 데이터및 쓰는 데이터는 문자(byte) 또는 바이너리 형식으로 처리
- InputStream(Input 객체)은 Input객체를 통해 외부로 부터 받아온 데이터를 문자(byte) 또는 바이너리로 처리한 후 에 Input 처리 관련 객체및 파일에 저장된다.
- OutputSteam(데이터)은 해당 목표지점(객체, 파일)에 해당 데이터를 스트림을 통해 전달하여 저장하게 된다.
'네트워크' 카테고리의 다른 글
파이썬으로 소켓프로그래밍 구현 (0) | 2022.06.22 |
---|---|
공인IP/사설IP 와 고정IP/유동IP (0) | 2022.06.22 |
인터넷과 네트워크 주소(IP, PORT, MAC) (0) | 2022.06.22 |
네트워크 기본2(프로토콜 디자인과 각 계층의 기능) (0) | 2022.05.28 |
네트워크 기본1(네트워킹과 Network 물리적 구조) (0) | 2022.05.28 |