※ 목차
01. 소켓(Socket)이란?
02. 대표적인 통신 방법들
03. 소켓 통신의 동작 방식
04. 참조
01. 소켓이란?
소켓(Socket) 통신은 네트워크(Network) 상에서 프로세스끼리 데이터를 주고 받기 위한 통신 기술의 핵심 개념으로
CS(Computer Science)에서 소켓은 네트워크 통신의 종단점을 추상화한 인터페이스라고 설명한다.
이러한 소켓은 OS의 핵심 부분에 의해 구현되며, 일종의 파일로 취급될 수 있다. 파일로 취급될 수 있다는 의미는
파일 입출력(I/O)과 유사한 방식으로 네트워크 통신을 관리할 수 있게 해주며,
개발자가 파일을 읽고(Read) 쓰듯(Write) 소켓을 통해 데이터를 송수신할 수 있다는 의미이다.
파일 시스템에서 파일은 데이터를 순차적으로 읽고 쓰는 스트림(Stream) 형태로 관리된다.
이러한 스트림 처리 방식은 데이터를 연속된 바이트의 흐름으로 보고, 이를 순서대로 처리하는 방법을 의미한다.
소켓 통신 역시 이와 유사하게, 네트워크를 통해 전송되는 데이터를 스트림으로 처리하여 송수신하는 프로세스
간에 연속된 데이터 흐름을 생성한다.
* 프로세스 : 실행 중인 프로그램
* 추상화 : 복잡한 내용을 간단하고 이해하기 쉬운 개념으로 바꾸는 과정
* 스트림 : 데이터를 연속적인 흐름으로 처리하는 방식
소켓을 비유적으로 설명한 자료 중 괜찮은 내용이 있어 추가 <2024.03.24>
종이컵 2개와 실을 연결하여 음성을 주고 받는 종이컵 전화기와 소켓 통신을 비유한 영상을 보았다.
연결부의 종단점에 있는 종이컵을 소켓으로, 종이컵을 잇는 실을 스트림으로 비유하고 있었다.
02. 대표적인 통신 방법들
소켓 통신 외에도 다양한 통신 방법들이 존재한다.
<작성 예정 / 공부 중>
03. 소켓 통신의 동작 방식
앞서 소켓은 일종의 파일이라고 언급했다.
하지만 그 파일이 tcp 스택에 대한 추상화된 인터페이스를 제공할 경우 파일이 아닌, TCP Socket이라 부르는 것이다.
아래는 TCP Socket 통신의 동작 방식을 플로우 차트로 정리한 자료이다.
상기의 플로우 차트를 기반으로 TCP Server와 Client의 동작을 알아보도록 하겠다.
※ 서버 측 동작 과정
1. socket : 소켓을 생성하여, 네트워크를 통해 통신할 준비를 한다.
2. bind : 생성한 소켓을 서버의 특정 IP주소&포트번호에 연결(바인드)한다.
3. listen : 서버가 클라이언트의 연결 요청을 받을 준비를 한다. 서버는 리스닝 상태가 된다.
4. accept : 서버가 클라이언트의 연결 요청을 수락한다.
5. receive/send : 서버가 클라이언트와 데이터를 주고 받는다.
6. close : 서버는 통신을 종료하고 소켓 연결을 닫는다.
※ 클라이언트 측 동작 과정
1. socket : 클라이언트 측도 소켓을 생성하여, 네트워크를 통해 통신할 준비를 한다.
2. connect : 클라이언트가 서버에 연결을 시도한다. 서버의 IP주소와 포트번호를 사용하여 연결한다.
3. send/receive : 클라이언트와 서버가 데이터를 주고 받는다.
4. close : 통신이 종료되면 소켓 연결을 닫는다.
* bind : 서버가 특정 포트에 자신을 연결하여, 다른 컴퓨터들이 찾아와 연결할 수 있도록 하는 과정
* IP 주소 : 인터넷 상에서 컴퓨터나 다른 기기를 식별하는 고유한 번호
* 포트 번호 : IP가 기기를 식별한다면, 포트는 그 기기 내에서 특정 프로그램을 식별하는 번호
* TCP : 인터넷 통신 규약 중 하나로, 데이터의 정확하게, 순서대로, 신뢰성 있게 전달하는 방식
* UDP : TCP보다 덜 복잡하며, 데이터를 빠르지만, 순서나 정확성을 보장하지 않는 전달 방식
>포트, IP, TCP, UDP 등에 관한 내용은 추후 별도로 정리된 게시물 업로드 예정입니다.
04. 참조
ㆍhttps://www.youtube.com/watch?v=3jQ2dBpiqPo
ㆍhttps://www.researchgate.net/figure/TCP-client-server-socket-flow_fig6_370038185
'~2024.10' 카테고리의 다른 글
[자바] 객체의 생성 과정(feat. 메모리 할당) (0) | 2024.03.31 |
---|---|
[Android] 안드로이드 스튜디오에서 git을 통한 버전 관리 세팅 (0) | 2024.03.28 |
[Android] Java.Nio 패키지 정리 글 (0) | 2024.03.19 |
[깡쌤 안드로이드 강의 노트] 3장. JetPack(비공개) (0) | 2024.03.18 |
[GPT4 답변 공유] 제조업 안드로이드 개발자에게 유용한 API 탑10 (0) | 2024.03.17 |