프로토콜(Protocol)
서로 다른 시스템에 있는 개체 간에 성공적으로 데이터를 전송하는 통신 규약
컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계
인터넷
회선교환(Circuit Switching) 방식
정보 전송 시작할 때 물리적인 견결을 확립하고 전송이 종료될 때까지 연결 유지
전송할 데이터가 있다고 하면 전용선을 할당하고 해당 선로로 모든 데이터를 전송
대용량 + 고속 데이터 처리에 우수
회선 이용 효율이 떨어짐
패킷 교환(Packet switching) 방식
패킷 교환(Packet switching)은 컴퓨터 네트워크와 통신의 방식 중 하나로 현재 가장 많은 사람들이 사용하는 통신 방식
작은 블록의 패킷으로 데이터를 전송하며 데이터를 전송하는 동안만 네트워크 자원을 사용하도록 하는 방법
전용선의 개념이 없고 start to end만 기억하고 가는 것
회선 이용률이 높고 에러 및 장애에 강함
경로 탐색과정에서 지연이 발생
회선 교환은 전화 처럼 회선을 사용하고 있으면 다른 사람은 사용하지 못한다는게 단점인데 패킷 교환 시스템은 그런게 없기 때문에 패킷 교환을 씀!
패킷 스위칭 방식의 경우 도착하는 속도가 내보내는 속도보다 크다면 대기를 위한 지연이 생기고 queue가 꽉차면 손실이 발생하게 된다
네트워크 지연, 손실, 처리율
1. 처리 지연(processing delay)
- 패킷 헤더를 조사하고 패킷을 어디로 보낼지 결정하는 시간
- 놀이공원에 갔는데 롤러코스터를 타려면 어디로 어떻게 갈지 결정하는 시간
2. 큐잉 지연(queuing delay)
- 큐에 저장되어 링크로 전송되기를 기다리는 패킷의 수에 따라 결정
- 롤러코스터를 타러 갔는데 앞서 도착한 사람들이 있어서 걸리는 시간
3. 전송 지연(transmission delay)
- 패킷의 모든 비트를 링크로 전송하는데 필요한 시간
- 롤러코스터에 탑승할 차례가 되어 자리에 앉기까지 걸리는 시간
4. 전파 지연(propagation delay)
- 링크의 처음부터 목적지 라우터까지의 전파에 필요한 시간
- 롤러코스터가 출발해서 한코스를 도는 시간
처리율(Throughput)
송신자와 수신자 사이에 전송되는 비트의 속도. 즉, 초당 몇 비트를 받을 수 있는지
프로토콜 계층구조
OSI 7계층
계층 | 이름 | 역할 |
7계층 | 응용 계층 | 이메일 및 파일 전송, 웹사이트 조회 등 애플리케이션 관련 서비스 제공 |
6계층 | 표현 계층 | 문자 코드, 압축, 암호화 등 데이터 변환 |
5계층 | 세션 계층 | 세션 체결, 통신 방식 결정 |
4계층 | 전송 계층 | 신뢰할 수 있는 통신 구현 |
3계층 | 네트워크 계층 | 다른 네트워크와 통신하기 위한 경로 설정 및 논리 주소 결정 |
2계층 | 데이터 링크 계층 | 네트워크 기기 간 데이터 전송 및 물리 주소 결정 |
1계층 | 물리 계층 | 시스템 간 물리적 연결과 전기 신호 변환 및 제어 |
네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말함
통신이 일어나는 과정을 단계별로 파악 가능하기 때문에 계층을 나눈 것
TCP/IP 모델
TCP/IP는 OSI 참조 모델을 기반으로 상업적이고 실무적으로 이용될 수 있도록 단순화된 모형
네트워크 전송 시 데이터 표준을 정리한 것이 OSI 7계층, 이 이론을 실제 사용하는 인터넷 표준 TCP/IP
소켓(Socket)
사전적으로 구멍, 연결, 콘센트 의미
프로그램이 네트워크에서 데이터를 송수신할 수 있도록, 네트워크 환경에 연결할 수 있게 만들어진 연결부
근데 이런 연결부를 아무런 규약없이 만들면 큰일나겠지? 그래서 110V, 220V처럼 통신을 위한 프로토콜에 맞게 만들어져야함
따라서, 우린 TCP상에서 동작하는 소켓을 주로 사용하는데 TCP소켓, TCP/IP소켓 이라고 부름
UDP에서 동작하는 소켓은 UDP소켓이라고 부르겠지?
WebSocket
웹 페이지의 한계에서 벗어나 실시간으로 상호작용하는 웹 서비스를 만드는 표준 기술
웹 소켓을 얘기하려면 push, pull 이런 얘기를 해야겠지??
UDP
TCP의 대안이며, IP와 함께 쓰일 때에는 UDP/IP라고 표현하기도함
TCP와 마찬가지로 실제 데이터 단위를 받기 위해 IP를 사용함
그러나 TCP와 달리, 메세지를 패킷으로 나누고, 반대편에서 재조립하는 등의 서비스 제공x
즉, 여러 컴퓨터를 거치지 않고 데이터를 주고 받을 컴퓨터끼리 직접 연결하고자 할 때 UDP 사용
컴퓨터를 거쳐서 목적지까지 도달할 수도 있는데 도착하지 않을 수도 있음. 정보를 받는 컴퓨터에서는 포트를 열어두고 패킷이 올 때까지 기다리며 데이터가 온다면 모두 다 받아드림 ==> 이런 특성 때문에 안정적이지 않은 프로토콜인데 TCP에 비해 속도가 빨라서 데이터의 유실이 일어나도 크게 상관엇ㅂ는 스트리밍이나 화면전송에 사용됨
캡슐화와 역캡슐화
데이터를 보낼 때는 데이터 앞부분에 전송에 필요한 정보를 붙여서 다음 계층으로 전달한다. 이때 정보를 헤더라고 하며, 헤더에는 데이터를 전달받는 상대에 대한 정보도 포함되어 있다.
이처럼 헤더를 데이터에 붙이는 것을 캡슐화라고 한다. 반대로 데이터를 수신하는 측에서는 헤더를 하나씩 제거해야하며 이를 역캡슐화라고 한다.
OSI모델의 캡슐화와 역캡슐화의 전체 흐름을 보면 아래 그림과 같다. (세션 계층과 표현 계층은 응용 계층에 포함)
- 데이터 송신 측 컴퓨터에서 웹 사이트에 접속하려면 접속을 위한 요청 데이터가 만들어진다.
- 이 데이터는 전송 계층에 전달되며, 신뢰할 수 있는 통신이 이루어지도록 데이터에 헤더를 붙인다.
- 이 데이터 및 헤더는 네트워크 계층에 전달되며, 다른 네터워크와 통신하기 위한 헤더를 붙인다.
- 이 데이터 및 헤더는 데이터 링크 계층에 전달되며, 물리적 통신 채널을 연결하기 위한 헤더와 트레일러를 붙인다. 트레일러란 데이터를 전달할 때 마지막에 추가하는 정보를 말한다.
- 이 데이터 및 헤더는 최종적으로 물리 계층에서 전기 신호로 변환되어 수신 측에 전송한다.
- 수신 측은 데이터 링크 계층에서 응용 계층 순서로 데이터를 전달하며 각 계층에서 헤더를 제거한다. 응용 계층은 최종적으로 모든 헤더가 제거된 데이터를 받는다.
1. 클라이언트 서버 모델
- 서버가 항상 켜져있어야 함.
- 서버는 고정된 IP 주소를 갖고 있어야 함.
- 클라이언트는 인터넷에 연결만 되면 가능 + 서버와 다르게 주소가 변동되어도 됨.
- 항상 클라이언트가 먼저 통신 시도, 데이터 요청.
2. P2P 모델
- 특정한 서버가 존재하지 않음.
- 모든 디바이스가 서버가 될 수도, 클라이언트가 될 수도 있음.
- 서로 직접적으로 연결되어 통신을 함
- Self scalability (클라이언트 수가 많아지더라도 서비스를 지속적으로, 안정적으로 할 수 있다.)
피어의 수가 늘어나는 만큼 데이터 요구량도 늘어나지만, 거기에 맞춰 데이터 용량도 늘어남. 항상 scalable 함.
다중화(Multiplexing)와 역다중화(Demultiplexing)
(1) 다중화
다중화(Multiplexing)와 역다중화(Demultiplexing)이라는 단어가 있다.
전송(Transport) 계층에서 다중화(Multiplexing)란 애플리케이션(Application) 계층의 여러 개의 소켓에서 전송되는 데이터를 모아 하나로 모으는 것이다. 이렇게 모아진 메시지 데이터를 세그먼트(Segment)라 한다.
여러 개의 소켓에서 전송된 데이터를 다중화하면 세그먼트(Segment)가 된다.
다중화는 전송(Transport) 계층에서만 할 수 있는 것이 아니라, 어느 계층에서든 여러 곳에서 나온 데이터를 하나로 묶을 때에 사용한다.
전송 계층에서의 다중화 데이터는 세그먼트라 부르지만 네트워크 계층에서 다중화한 것은 다른 이름으로 부르는데, 그 경우에는 패킷이라 부른다.
계층마다 다중화했을 때 메시지의 이름이 다르므로 헷깔릴 수 있다.
이렇게 다중화한 메시지엔 헤더(Header)가 붙게 된다.
헤더란 메시지 앞에 붙은 정보를 말한다.
실제 전송하고자 하는 데이터는 헤더 다음에 붙게 된다.
그럼 헤더는 어떤 기능을 하느냐?
헤더는 우편 배달을 할 때 주소 역할을 한다.
데이터가 원하는 곳에 전달되고, 정상적으로 전달될 수 있도록 데이터를 포함하고 있다.
(2) 역다중화
전송을 위해 여러 개를 하나로 묶는 것(Multiplexing)이 있다면, 전송이 되었을 때 이를 적절한 소켓에 전달해주는 것도 필요할 것이다.
이를 역다중화(Demultiplexing)라 한다.
역다중화(demultiplexing)는 전송받은 세그먼트의 데이터를 적절한 소켓에 전달해주는 것이다.
mutliplexing이 여러 개를 하나로 묶어주고, demultiplexing은 반대로 하나의 데이터를 적절하게 분배해주는 역할을
HTTP
하이퍼텍스트 전송 프로토콜
인터넷에서 데이터를 주고 받을 수 있는 프로토콜
특징
- 클라이언트 서버 구조
- 무상태 프로토콜(Stateless) => 서버가 클라이언트 상태를 보존하지 않음, 이래서 쿠키,세션,토큰이 나옴
- 비 연결성(Connectionless)
HTTP 버전
- HTTP/1 : non-persistent HTTP
이미지, 텍스트, 동영상 오브젝트를 전달하는 데 TCP 연결이 별도로 하나씩 필요했음. - HTTP/1.1 : persistent HTTP
TCP 연결을 끊지 않고 열어두었다가 다음 오브젝트가 요청되면 그 TCP 연결을 또 사용함.
response 와 request가 순서대로 날아가고 순서대로 날아옴. 앞선 request에 대한 response가 안왔다면 지연시간이 약간 더 발생 - HTTP/2 : Asynchronous order를 허용
- Multiplexing : 프레임 단위로 나눠서 전송 관리 가능하게 됨 (다수의 요청과 응답이 가능한 구조)
- 데이터 전송 방식 : 바이너리로 인코딩하여 전송
- ServerPush 사용 : 브라우저에서 필요한 리소스들을 서버가 알아서 찾아다가 내려주는 것
다중 클라이언트를 처리하기 위해서는 멀티프로세싱, 멀티스레딩, 멀티플렉싱 등을 활용해야함
프로세스와 스레드의 차이(Process vs Thread)
Program : 특정 작업을 위해 동작하는 파일, 실행할 수 있는 파일
Process : 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램, 메모리에 올라와 실행되고 있는 프로그램의 인스턴스
Thread : 프로세스 내에서 실행되는 흐름의 단위
Multi-processing
말 그대로, 프로세스를 여러 개 사용하여 클라이언트를 처리할 수 있음. 프로세스 당 하나의 클라이언트를 처리함
근데 딱봐도 프로세스 자체를 여러개 돌리는거니까 클라이언트-프로세스 잡기 때문에 안정성이 높고 송수신데이터가 큰 경우 좋겠지?
하지만, 프로세스 하나를 잡아먹기 때문에 메모리비용이 증가하고 프로그램 자체의 성능이 떨어질 수 있지
Multi-threading
여러 클라이언트를 처리하는 간단한 방법은, 서버에 연결된 모든 새 클라이언트에 대해 새 thread를 생성한다
thread이기 때문에 자원이나 메모리비용이 줄어들어서 좋음, 하지만 코딩, 디버깅이 어렵고 예측할 수 없은 결과가 많이 발생함
많은 수의 클라이언트에 대해 확장은 불가능, 교착상태 발생 가능
Segments : Transport 전송계층에서 사용하는 데이터 단위
Packets : Network 계층에서 사용하는 데이터 단위
Frames : Data Link 계층에서 사용하는 데이터 단위
'CS' 카테고리의 다른 글
[CS] 데이터베이스 정규화와 이상현상(Normalization & Anomaly) (0) | 2023.04.19 |
---|---|
개발하면서 자주 만났던 이슈 및 용어 정리 (0) | 2023.04.19 |
[CS] Main Memory (0) | 2023.02.19 |
[CS] UI & UX에 대해 (0) | 2023.01.29 |
[CS] 웹에서 일어나는 Push, Pull, Polling, WebSocket에 대해 (0) | 2023.01.29 |