모든 컴퓨터는 네트워크 통신 시, 기본적으로 OSI 7계층 모델 혹은 TCP/IP 4계층 모델에 맞춰 동작한다.
네트워크 통신은 어떻게 일어나는가.
- 크롬 브라우저에 www.naver.com 입력
- 크롬은 이를 네트워크에서 통신 가능한 형태인 패킷으로 만듬.
- 네트워크 중간에 있는 기기(라우터) 들이 이 패킷을 읽고 네이버 서버로 전달.
- 네이버 서버는 이 패킷을 다시 풀어, 웹 서버가 읽을 수 있는 형태로 만들고, 웹 서버에 전달한다.
사람은 URL (www.naver.com) 을 입력했지만, 내부적으로 패킷같은 특정 형태로 데이터를 만든다. 이렇게 만들어진 패킷은, 수신 받는 쪽에서 다시 사람이 이해할 수 있는 데이터로 만들어진다.
OSI 7계층
송신 호스트 => 사용자 수신 호스트 => 네이버 서버
로 이해해보자.
- 먼저 사용자는 맨 위의 응용 (애플리케이션 계층) 에서 데이터 (네이버 주소 URL)을 입력한다.
- 이 데이터는 전송 전에 내부적으로 표현, 세션, 전송, 네트워크, 데이터 링크 계층을 차례대로 지나며 네트워크 통신에 필요한 데이터를 기존 데이터에 추가한다.
- 예를 들어, 데이터를 붙인다고 함은 어떤 IP인지 등의 정보이다.
- 물리 계층에서는 이렇게 만든 데이터 패킷을 실제로 네트워크에 전송한다.
- 네이버 서버는 이 데이터를 수신 받아서 물리 계층 -> 응용 계층 순으로 전달한다.
- 최종적으로 응용 계층에서는 요청을 웹 서버에 전달한 뒤, 웹 서버는 사용자에게 필요한 데이터만을 뺴서 (윗 계층으로 올라가며) 다시 데이터로 만들게 된다.프로토콜이란?두 사람이 편지를 주고 받는다고 예를 들면,이런 정보들이 필요하게 되고, 편지를 전달해주는 우체부는 위 내용을 보고 전달해줄 것이다.
위 형태처럼 통신을 위해 필요한 형태 또는 규악을 프로토콜이라고 한다. FROM: 보내는 사람 TO: 받을 사람 ADDRESS: 받는 사람의 주소 MESSAGE: 전달할 내용
네트워크에서는 많은 프로토콜이 존재한다. HTTP, TCP, UDP가 프로토콜의 대표적인 예시라고 볼 수 있다.
OSI 7 계층의 각 층에 대해 알아보자. (위에서부터)
네트워크 7계층은 가장 위의 응용 계층이 우리와 맞닿아있는 부분이다. 따라서 아래로 내려갈수록 하드웨어적인 측면이 커지는 것 같다.
마치 운영체제 표처럼 ...
응용 계층
- 웹 서비스의 UI, 사용자의 입출력 I/O를 담당한다.
- 프론트엔드와 백엔드가 이 레이어 위에서 동작한다.
표현 계층
- 응용 계층은 네트워크 계층을 위해 계층 간 데이터를 적절히 표현하는 부분이다.
- 이미지 압축이나, 데이터 암호화 등의 기능이 이 레이어 위에서 동작한다.
세션 계층
- 통신은 실제로 세션이라고 하는 단위 위에서 이뤄지고, 이 계층은 이러한 통신 세션을 구성한다.
전송 계층
- 컴퓨터로 들어온 네트워크 데이터를 어느 포트로 보낼지 담당한다.
- 예를 들어 스프링부트는 8080 포트에서 동작한다.
- 또한 네트워크가 끊기거나 데이터가 잘못된 점을 검사한다.
- TCP, UDP 방법이 이 계층에서 쓰인다.
네트워크 계층
- IP 주소를 사용해서 네트워크 데이터를 어느 컴퓨터로 보낼지 담당한다.
- IP 주소는 컴퓨터 당 하나가 부여되나, 중간에 바뀔 수 있고 소프트웨어적으로 존재한다.
- 라우터 < 기계가 역할을 담당한다.
데이터 링크 계층
- 네트워크 카드의 MAC 주소를 사용해 네트워크 데이터를 어느 컴퓨터로 보낼지 담당한다.
- IP랑은 다른 개념이다. 하드웨어 기기의 고유 포트 ,, ? 라고 보면 쉽다.
- 예를 들어, 내 맥북의 맥 주소 != 내 데스크탑의 맥 주소
물리 계층
- 디지털 데이터를 아날로그 적인 전기적 신호로 변환해 네트워크 전선에 흘려보낸다.
- 아날로그 신호를 디지털 신호로 바꾸는 역할을 한다.
TCP/IP 4계층 모델이란?
7계층 모델보다는 TCP, IP에 기반해 간소화 한 4계층 모델을 더 사용한다.
예시를 들어보자. 계층별로 실제 업무에 적용해보자.
데이터 링크 계층: 전국에서 서울시 주소를 찾는다.
네트워크 계층: 그 속에서 은평구 주소(IP)를 찾는다.
전송 계층: 통일로(PORT)를 찾고, 13길(Socket)에 도착한다.
응용 계층: 메일을 전달한다.
L1: Physical Layer(물리 계층)
먼저 기기를 전선이나 전압에 연결해야 네트워크에 진입할 수 있다. 이 계층은 이것을 담당하는 일을 한다.
- 물리적으로 연결된 링크에 맞는 실제 물리 신호를 생성한다.
- 시스템 간의 물리적 연결, 전기 신호에 대한 변환과 제어를 수행한다.
- 1 hop (노드에서 다음 노드의 거리 hop) = 한 번에 바로 전달 된 device 로 연결된 상대방에게 직접 정보를 전달한다.
- 아날로그 → 디지털 신호 변경 작업
- 단순한 데이터 전송 외에 다른 동작은 이뤄지지 않는다.
- 링크나 물리 매체에 따라 서로 다르다.
- Enternet:twistd-pair copper wire, coaxial cable
- wifi..LTE..
- Physical Layer issues
- 신호 및 시스템, 통신 이론
- data rates ..
- transmission medium (전송매체) 의 특징
L2: Data Link Layer (MAC Layer)
이제 물리적으로 연결이 되었으면 네트워크에 접속해서 데이터를 전송하는 방법을 찾아야 한다. 이 계층은 그런 역할을 한다.
- 전달받은 데이터에 물리적 주소인 MAC Address 등의 정보를 가지고 있는 헤더를 추가해 프레임을 구성한다.
- 통신 매체에 대한 접근 제어
- 여러 개체가 하나의 통신 매체를 공유하는 것에 대한 교통 정리.
- MAC address(물리 주소)가 이 층에서 쓰인다.
- Mac 주소란? → 네트워크에 여러개의 컴퓨터를 각각 구분하기 위해 할당된 컴퓨터의 주소들이다.
- L1 과 보통 세트이며, 링크의 물리 매체 특성에 영향을 많이 받는다.
L3: Internet Layer (Internet Protocol (IP)) → 우편 배달 시스템
- 네트워크 전체에 걸쳐 패킷의 논리적 전송과 관련된 프로토콜을 지정한다.
- 네트워크 내에서의 packet 흐름을 결정하는 핵심 역할을 한다.
- 데이터를 올바른 경로로 전송할 수 있도록 해준다.
- 경로와 주소를 정하고 데이터를 전송한다.
- 통신 상대를 지정하기 위해 IP가 이 계층에서 사용된다.
- Routing protocol 사용 (최적의 경로 판단 라우팅)
→ 이제 이 계층까지 오면 패킷이 IP 주소가 붙어 전달이 된 것이다.
L4: Transport Layer(TCP,UDP) → 우체통
→ 해당 IP 주소가 붙은 컴퓨터로 패킷이 도착했다. 패킷이 도착한 컴퓨터에는 많은 프로그램이 실행 중일텐데, 이 패킷을 어떤 프로그램이 가져가냐가 관건이다. ⇒ 이를 포트(Port) 번호라고 한다.
- application endpoint 간 packet 을 전달하는 역할을 한다. (누가 가져갈 것인가?)
- 데이터의 신뢰성을 확보하는 계층이다.
- 응용 프로세스 간의 논리적 통신을 제공한다. 덕분에 호스트들이 네트워크에 머무를 수 있게 된다.
- 오류와 신뢰성에 관한 역할도 하는데, 패킷이 누락되거나 중복되진 않았는지 최종 확인을 한다.
- 대표적인 프로토콜으로는 TPU, UDP 가 있다.
- TCP : connection- oriented, flow - control
- UDP : connectionless service (던지고 끝)
UDP 오류를 처리하지 않고 패킷 전달만 하는 사용자 데이터그램 프로토콜이다. TCP 반응 속도가 중요한 게임과 같은 프로그램을 사용할때 사용한다.
- 대표적인 프로토콜으로는 TPU, UDP 가 있다.
L5: Application Layer
- 통신 네트워크를 사용하는 실제 프로그램이나 app이다.
- end - user (사용자) 혹은 어플리케이션이 네트워크에 접속할 수 있도록 해준다.
- UI 를 지원한다. 사용자가 직접 볼 수 있다.
- 인터넷 브라우저나 e-mail클라이언트 등..
대표적인 프로토콜
HTTP웹
SMTP | 메일 |
FTP | 파일 |
DNS | 도메인 |
IP
🌐 IP 주소는 인터넷 통신을 가능하게 하는 국제 표준 규약
IP(Internet Protocol) 주소란 인터넷에 연결된 기기를 식별하는 값을 뜻한다. 우편번호가 특정한 주소를 가리키듯, IP 주소는 인터넷에 연결된 특정 기기를 가리킨다. 컴퓨터, 스마트폰 등은 인터넷으로 서로 통신하고 인터넷을 교환하는데에 주소인 IP가 꼭 필요하다.
1. 인터넷 통신은 데이터를 패킷으로 나눠 전송하는데, 이를 다시 조립해서 원상태로 복구하는 과정도 필요하다. 이러한 패킷 통신 과정에서는 IP 라우팅이 필요한데, 라우팅은 수 많은 인터넷 네트워크에서 패킷을 효율적으로 전달할 수 있는 경로를 찾는 것이다.
2. IP가 통신 규약이라면, IP 주소는 통신을 가능하게 하는 필수 요소이다.
3. IP 주소는 각 기계의 고유 주소로 인터넷 통신 과정에서 데이터 패킷의 수신, 발신 호스트를 식별하는 역할을 한다.
IPv4
- 32bit이고, 4개의 8bit숫자 그룹이 점으로 나누어진 형태이다.
- 172.15.254.1
- 보통 하나의 숫자그룹은 3자리 숫자로 구성되어 있고, 000~255까지 구성될 수 있다.
IPv6
- 128bit 숫자이며, 8개의 16bit 숫자 그룹이 콜론으로 나눠진 2001:0DB8:AC10:FE01:0000:0000:0000:0000 같은 형태이다.
- 0으로 구성되어있는 마지막 4그룹은 생략이 가능하다.
포트 란?
네트워크 연결이 시작되고 끝나는 가상 지점이다. 포트는 소프트웨어 기반이며, 컴퓨터의 운영 체제에서 관리한다. 각 포트는 특정 프로세스 또는 서비스와 연결된다. 포트틀 사용하면 컴퓨터가 또 다른 종류의 트래픽을 쉽게 구별할 수 있다.
- ex) 예를 들어 이메일은 동일한 인터넷 연결을 통해 컴퓨터에 도달하더라도 웹 페이지와 다른 포트로 이동한다.
포트 번호란?
포트는 네트워크에 연결된 모든 장치에서 표준화되고, 각 포트에는 번호가 할당된다.
대부분의 포트는 특정 프로토콜 용으로 예약되어 있다.
- HTTP 메세지는 포트 80으로 이동한다.
- IP주소를 사용하면 특정 장치와 메세지를 주고받을 수 있지만, 포트 번호를 사용하면 해당 장치 내의 특정 서비스 또는 애플리케이션을 대상으로 지정할 수 있다.
포트는 (L4)전송 계층의 일부분이다.
TCP 또는 UDP 의 전송 프로토콜만 패킷이 이동해야하는 포트를 나타낼 수 있다. TCP 및 UDP 헤더에는 포트 번호를 나타내는 섹션이 있다.
다른 포트 번호로는 무엇이 있을까?
포트 22 | 보안 셸 SSH |
포트 25 | SMTP 이메일에 사용 |
포트 53 | 도메인 네임 시스템 DNS |
포트 80 | 하이퍼 텍스트 전송 프로토콜 HTTP |
포트 443 | HTTPS 보안 HHTP+S |
HTTP VS HTTPS
HTTP는 hyper text transger protocols 의 약자로, 말 그대로 텍스트 문서를 주고 받기 위해 만들어진 프로토콜이다. 우리는 일상에서 사용하는 웹 브라우저를 이 HTTP를 통해 정보를 주고 받는다.
하지만, HTTP는 보안에 취약하기 때문에 통신하는 과정에도 응용 계층의 데이터를 암호화 할 필요가 느껴진다. 따라서 이로 인해 SSL(secure Socket Layer) 가 생기게 된다. 해당 레이어는 응용계층과 전송계층 사이에 존재한다.
이렇게 중간에 보안 역할을 하는 SSL이 존재하고, 이것을 기반으로 HTTP 통신을 하는 것을 HTTPS라고 한다.
HTTPS는 통신 보안을 포함하고 있으므로 당연히 HTTP보다 안전하다. 하지만 기본 로직은 좀 복잡해진다.
Packet
패킷은 인터넷 상에서 장치들이 서로 통신할 때 전송하는 데이터 조각이다.
- 클라이언트는 요청을 보낼 때 패킷에 IP 주소를 담고, Access Network를 통해 Network core로 보낸다.
- 이 패킷은 라우터가 받게 되는데, 라우터는 자신의 Network Layer에 있는 패킷 안의 IP를 확인하고 더 맞은 위치의 라우터로 보내게 된다. (라우터 알고리즘)IPIP 는 인터넷 상에서 상대를 식별하기 위해 사용된다.Port
- Port(8080등) 은, 인터넷 상에 여러 개의 프로그램이 켜져있을 때 한 프로그램을 식별하기 위해 사용된다.
- 클라이언트는 요청을 보낼 때 패킷에 IP 주소를 담고, Access Network를 통해 Network core로 보낸다.
- 이 패킷은 라우터가 받게 되는데, 라우터는 자신의 Network Layer에 있는 패킷 안의 IP를 확인하고 더 맞은 위치의 라우터로 보내게 된다. (라우터 알고리즘)
하지만, 만약 컴퓨터가 꺼져있거나 받지 못하는 상황일 때 등은 어떻게 해결할까?
➡️ TCP 로 해결한다!
TCP (3way-hand-shake)
상대가 지금 패킷을 받을 수 있는 상태인지 3 way hand-shake를 통해 체크하는 방법이 있다.
이름 그대로 악수한다는 것이다!
나 지금 데이터 너한테 전송하려고 하는데 너 받을 수 있어? (syn)
응 받을 수 있어! (syn,ack)
그럼 전송할게! (ack)
이렇게 세번의 악수를 거치면 서로 받을 수 있는 상태라는 것이 보증 된다.
🤝 3-hand-shake (TCP) 🤝
syn: 접속요청. 클라이언트가 서버에게 요청 ack: 요청 수락. 요청받은 서버가 클라이언트에게 요청을 수락함과 동시에 이에 대한 Syn을 함께 보낸다. syn : 클라이언트는 서버가 다시 보낸 syn에 대한 ack를 전송한다 |
순서 보장
TCP 데이터는 전송 순서 정보를 포함하고 있어서, 패킷의 전송 순서를 보장해준다.
이렇게 우리는 안전하게 데이터를 전송할 수 있다.
TCP 반대인 UDP 도 알아보자.
UDP
비연결 지향적 프로토콜, 연결 설정 없이 데이터를 전송한다.
- TCP보다 빠른 전송을 가능하게 함.
- 데이터의 순서나 신뢰성을 보장하지 않는다.
- UDP 는 연결을 맺고 끊는 과정이 없다.
서버의 종류
서버의 종류를 크게 나누자면, 정적 리소스를 처리하는 web server와 동적 리소스를 처리 가능한 WAS 가 존재한다.
Web Server
Web Server란 정적인 파일 (HTML,CSS,IMG) 를 제공하는 역할을 한다.
- Apache, Nginx가 있다.
- WAS도 정적 파일을 처리할 수는 있지만, 가벼운 web server가 더 잘한다.
WAS
WAS 서버는 동적인 컨텐츠를 생성하고, 데이터를 처리하는 역할을 한다.
- 웹 애플리케이션을 실행하기 위한 서버로, 사용자의 요청에 따라 데이터베이스 조회, 비즈니스 로직 처리 등 다양한 작업을 수행한다.
- 웹 애플리케이션의 실행 환경을 제공하며, 다른 서버와의 통신을 통해 필요한 데이터를 가져와 동적인 응답을 생성한다.
- Tomcat, 웹 스피어가 있다.
- 스프링이나 장고같은 웹 프레임워크를 실행시켜 요청받은 데이터를 처리하는 역할을 잘한다.
Web Server vs WAS (웹 애플리케이션 서버)
WAS도 정적 파일을 처리할 수 있다고 했는데, 왜 Web Server을 쓸까?
WAS가 정적 컨텐츠 요청까지 처리하게 된다면, 부하가 커지고 동적 컨텐츠 처리가 지연되며 수행 속도가 느려진다.
따라서, 이에 따라 페이지 노출 시간이 늘어나는 문제가 발생해 효율성이 크게 떨어진다.
'CS' 카테고리의 다른 글
CI/CD 에 대해서 (0) | 2023.11.07 |
---|---|
Docker (0) | 2023.11.06 |