일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- graphql
- graphql react native
- 지보싶 신촌점
- 비동기배열
- 비동기배열처리방법
- graphql 400
- apollo react native
- 신촌 소문난집
- 토라비
- graphql mutation error
- 앙버터마카롱
- 화이트 해커를 위한 웹 해킹의 기술
- 홍대 토라비
- 고르드
- typescript
- 잠실새내 도그존
- useMutation error
- graphql with RN
- promise처리
- 금별맥주
- 화이트해커를 위한 웹 해킹의 기술
- 예쁜술집 예술
- apolloclient
- 홍대 카페 장쌤
- promise메서드
- 도그존
- 홍대 예술
- 운정 소바동
- graphql with reactnative
- 잠실새내
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
소켓(Socket) 통신 본문
소켓(Socket): 클라이언트와 서버가 연결, 통신하도록 도와주는 소프트웨어(도구)
네트워크 상에서 클라이언트 프로그램과 서버 프로그램간 양방향 통신 엔드포인트 프로세스가 데이터를 송수신할 때 반드시 소켓을 열어 소켓에 데이터를 작성하거나 소켓으로부터 데이터를 읽어야한다.
엔드 포인트: IP주소와 Port 번호의 조합
소켓 통신: Client가 port를 통해 실시간으로 양방향 통신을 한다.
-Server와 Client가 계속 연결을 유지하는 양방향 통신
-Server와 Client가 실시간으로 데이터를 주고받는 상황이 필요한 경우에 사용한다.
-실시간 동영상 Streaming이나 온라인 게임 등과 같은 경우에 주로 사용한다.
HTTP 통신: Client의 요청이 있을 때만 서버가 응답하여 해당 정보를 전송하고 곧바로 연결을 종료
-Client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통신
-Server로부터 응답을 받은 후에는 연결이 바로 종료된다
-실시간 연결이 아니라 필요한 경우에만 Server로 요청을 보내는 상황에 유용하다.
-요청을 보내 Server의 응답을 기다리는 어플리케이션 개발에 주로 사용
소켓 통신 과정
클라이언트는 Client Socket을 사용하고 서버는 Server Socket을 사용한다.
Client Socket
: 요청대기가 필요하지 않음, 바로 소켓을 생성하고 서버 프로그램에 연결을 요청하고 데이터를 전송한다.
Server Socket
: 서버에서 사용하는 소켓, 클라이언트의 연결 요청을 기다리며, 요청 발생 시 클라이언트와 연결을 맺거나 다른 소켓을 만든다.
소켓(Socket) 통신의 자세한 흐름
소켓은 운영체제가 제공을 해준다.(운영체제로부터 빌려서 사용한다=소켓 요청을 한다)
Server Socket의 과정
1. socket(): 서버 소켓을 사용하기 위해 소켓 생성
2. bind(): IP 주소와 Port 번호 설정
bind() ; 소켓 바인딩, 소켓 바인드
서버 소켓은 고정된 port번호를 사용하는데, 운영체제가 특정 포트 번호를 서버 소켓이 사용하도록 만들기 위해 소켓과 포트번호를 결합할 때 사용하는 API이다.
3. listen(): 함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정하고 client에 의한 연결 요청이 수신될 때까지 기다림
4. accept(): 연결 요청을 받아들여 소켓 간의 실질적인 연결 수립
5. send()/recv(): 연결된 소켓을 통해 데이터를 송수신
6. close(): 더이상 데이터 송수신이 필요없게 되면, 소켓을 닫기 위해 호출, 닫힌 소켓은 더이상 유효하지 않으며 해당 소켓을 사용하여 데이터를 송수신 할 수 없다.
Client Socket의 과정
1. socket(): 소켓 통신을 위한 소켓 생성 (소켓 종류를 지정할 수 있다.)
2. connect(): IP 주소와 port 번호로 식별되는 대상으로 연결 요청을 전송
3. send()/recv(): 연결된 소켓을 통해 데이터를 송수신
4. close(): 소켓을 닫기 위해 호출
소켓의 종류
STREAM(스트림)
-TCP 프로토콜 기반
-양방향으로 바이트 스트림을 전송할 수 있는 연결 지향형 소켓
-양쪽 어플리케이션이 모두 데이터를 주고 받을 수 있음
-송신된 순서에 따라 중복되지 않게 데이터를 수신
-각 메시지를 보내기 위해 별도의 연결을 맺기 때문에 오버헤드 발생
-오류 수정, 전송 처리, 흐름 제어 등을 보장
-대량의 데이터 전송에 적합
데이터그램(DATAGRAM)
-UDP 프로토콜 기반
-명시적으로 연결을 맺지 않은 상태로 데이터를 주고 받는 비연결형 소켓
-스트림 소켓이 신뢰성 높은 방법이지만 연결 수립시 오버헤드가 발생한다.
-빠르기가 중요한 소량의 데이터 전송 시 연결이나 해체 과정이 없어 속도가 빠른 데이터그램 소켓 사용
-데이터 크기에 제한, 확실한 전달이 보장되지 않는다. (데이터가 손실되어 오류가 발생하지 않음)
-실시간 멀티미디어 정보를 처리하기 위해 주로 사용