서버개발 SpringBoot

서버 클라이언트 통신 / OSI 7 계층 / TCP / IP(패킷 헤더, IPv4, IPv6, 도메인) / Port(포트번호, 포트리스닝, 인바운드/아웃바운드) / 포트포워딩(외부IP/내부IP, 외부Port/내부Port) / AWS EC2

아뵹젼 2022. 4. 1.

서버와 클라이언트 통신 방법

http 통신

- client의 요청(Request)이 있을 때만 서버가 응답(response)하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식이다. 이는 단방향적 통신으로 서버가 클라이언트 쪽으로 요청을 보낼수는 없다.

- 실시간 연결이 아니고, 필요한 경우에만 Server로 요청을 보내는 상황에 주로 사용된다.

socket 통신

- 서버와 클라이언트가 특정 port를 통해 연결하여 실시간 양방향 통신을 하는 방식이다. http통신과 달리 socket통신은 서버 역시 클라이언트로 요청을 보낼 수 있고, 실시간으로 연결이 유지된다.

- 실시간 동영상 Streaming이나 온라인 게임 등과 같은 경우에 자주 사용된다.

 

 

네트워크 계층

OSI 7 계층 

- 물리계층

전기, 기계적인 신호를 주고받는 역할을 하는 계층으로, 물리적인 현상이 일어난다. 디지털에서 아날로그 혹은 그 반대로 신호를 변환한다. 전송 단위는 bit이며, 대표적인 장비로는 통신 케이블, 허브, 어댑터, 리피터, 모뎀 등이 있다.

 

- 데이터링크계층

물리계층을 통해 송수신되는 정보의 오류와 흐름을 관리하여 안전한 정보 전달을 담당하는 계층이다. 통신에서의 에러를 검출하고, 재전송, 흐름 제어의 역할을 하기도 한다. 전송 단위는 frame이며, 대표적인 장비로는 스위치, 브릿지, 이더넷 등이 있다.

 

- 네트워크계층

종단 간 경로(route)와 주소(ip)를 정하고 패킷을 전달해주는 계층이다. 라우팅 기능을 맡고 있으며 목적지까지 최적경로 알고리즘을 사용한다. 전송 단위는 packet이며, 대표적인 장비로는 라우터, 공유기 등이 있다.

 

- 전송계층

종단 간 신뢰성 있고 정확한 데이터 전송을 담당하는 계층이다. 따라서 오류 검출, 복구, 흐름 제어, 중복 검사 등을 수행한다. 데이터 전송을 위해 port 번호를 사용하며, 대표적인 프로토콜로는 TCP 세그먼트, UDP 데이타그램이 있다. 방화벽이나 프록시 서버가 이 계층에 해당한다.

 

- 세션계층

통신 장치 간의 상호작용 및 동기화를 제공하는 계층이다. TCP/IP 세션을 만들고 없애는 역할을 한다.

 

- 표현계층

데이터의 표현 방법을 정하는 계층이다. 데이터 인코딩/디코딩, 압축/해제, 암호화/복호화를 수행한다.

 

- 응용계층

사용자와 가장 밀접한 계층으로 인터페이스 역할을 하는 계층이다. 응용 프로세스 간의 정보 교환을 담당하며, HTTP, FTP, DNS 등의 프로토콜이 응용 계층에 속한다.

 

 

TCP/IP

- 패킷 통신을 위한 인터넷 규약

- TCP

데이터의 전달을 보증하고, 보낸 순서대로 받게 해준다.

도착한 조각들을 점검하여 망가졌거나 빠뜨린 조각을 다시 요청한다.

3way-handshake 을 이용해, 패킷이 잘 보내졌는지 여부를 확인한다.

 

- IP

패킷 단위로 지정한 IP 주소에 데이터를 전달한다.

데이터의 조각들을 최대한 빨리 목적지로 보내는 역할을 한다.

패킷들의 순서가 뒤바뀌거나 일부가 누락되더라도 상관하지 않고, 보내는 데 집중을 한다.

따라서 IP 프로토콜은 패킷의 순서 보장을 할 수 없으며, 패킷이 중간에 유실되는 것에 대할 보장을 하지 않는다.

 

- TCP/IP 4계층

애플리케이션 계층 — HTTP, FTP인터넷 계층 — IP

네트워크 엑세스 계층 — Ehternet(이더넷)

전송 계층 — TCP, UDP

 

IP

Packet

 

Header

버전 : IP vesion

헤더 길이 : 옵션 필드를 포함한 헤더의 총 길이

서비스타입 : 각 패킷의 중요성(우선 순위)을 구분하는 역할

우선권필드 3bit, type-of-service필드 4bit, 예약 필드 1bit

전체길이 : 패킷 전체의 길이를 바이트 단위로 나타냄

식별자 : 상위 계층으로부터 각 IP 데이터그램을 구분하기 위한 식별번호

플래그 : IP 데이터그램의 단편화에 관한 정보를 나타냄

단편화 옵션 : 단편화된 데이터그램의 순서를 나타냄

TTL : 패킷이 라우터를 최대 몇 번 거쳐서까지 살아 남을 것인지를 나타내는 필드

프로토콜 : IP 데이터그램의 데이터(페이로드) 에 담겨져 있는 상위 계층의 프로토콜을 알려줌

헤더 체크섬 : 헤더 필드의 오류를 검출할 수 있는 정보가 담긴 필드

송신측 IP 주소 : 패킷을 보낸 노드의 IP 주소

수신측 IP 주소 : 패킷이 도착해야하는 목적지의 IP 주소

 

Body

전달할 데이터가 담김

 

 

IPv4

세계적으로 사용된 첫 번째 인터넷 프로토콜 주소

주소는 32비트 방식이며, 8비트씩 4자리로 각 자리는 온점으로 구분

2^32 개의 주소를 가질 수 있는데, 인터넷 사용자 수가 급증하면서 고갈될 위기에 처해서 나오게 된 것이 IPv6이다.

 

 IPv6

IPv4의 주소체계를 128비트 크기로 확장한 차세대 인터넷 프로토콜 주소

16비트씩 8자리로 각 자리는 콜론으로 구분

2^128 개의 주소를 가질 수 있어 사실상 거의 무한에 가깝다

 

- IPv4 vs IPv6

 

Domain

- 인터넷에 연결되어 있는 장치들은 각각의 장치를 식별할 수 있는 주소를 가지고 있는데 이를 ip 라고 한다. ex)192.168.0.1

 

- ip 는 사람들이 이해하고 기억하기 어렵기 때문에 각 ip 에 이름을 부여한 것이 도메인이다.

 

- 도메인과 ip주소 예시

 

- 컴퓨터의 이름과 최상위 도메인으로 구성됨

opentutorials.org

  • opentutorials : 컴퓨터의 이름
  • org : 최상위 도메인 - 비영리단체

daum.co.kr

  • daum : 컴퓨터의 이름
  • co : 국가 형태의 최상위 도메인을 의미
  • kr : 대한민국의 NIC에서 관리하는 도메인을 의미

 

 Port

서버에서 포트란?

- IP 내에서 애플리케이션 상호 구분(프로세스 구분) 을 위해 사용하는 번호

- 포트 숫자는 IP 주소가 가리키는 PC에 접속할 수 있는 통로(채널)을 의미함

- [IP address, Port] => IP address는 컴퓨터를 찾을 때 필요한 주소를 나타내며, Port는 컴퓨터 안에서 프로그램을 찾을 때 사용됨

  • 즉, URL 또는 IP 를 토대로 해당 서버가 있는 컴퓨터로 찾아가고, 그 컴퓨터에서 실행 중인 여러 개의 프로그램 중 어느 프로그램에 접속하려는지 port 를 통해 컴퓨터에게 알려준다.

 

프로토콜별 포트 번호 정리

- 포트는 총 0번 ~ 65535번으로 이루어져 있습니다. 그리고 크게 3가지 종류로 구분됨

  • 0번 ~ 1023번 : Well-known port, 잘 알려진 포트(IANA에서 할당한 TCP, UDP 포트) : 유명한 서버, 특정 서버들)
  • 1024번 ~ 49151번 : registered port, 등록된 포트(기관이나 사업자들을 위해 IANA에서 관리하는 포트)
  • 49152번 ~ 65535번 : dynamic port, 동적 포트(일반 사용자들이 자유롭게 사용할 수있는 포트)

- well-known port 중 자주 사용되는 포트번호

포트리스닝

- 현재 열려있는 포트로써, 서버의 접속을 기다리고 있는 포트이다.

- netstate 명령어를 이용하여 내 컴퓨터의 포트상태를 확인할 수 있다.

- netstate

  • Proto : 현재 사용한 프로토콜
  • Local Address : 현재 열려 있는 사용자 컴퓨터의 IP/호스트 네임과 사용중인 포트
  • Foreign Address : 현재 사용자의 컴퓨터에 접속되어 있는 IP/호스트 네임과 사용중인 포트
  • State : 연결 상태를 나타내는 것
  • ESTABLISHED : 현재 연결되어 있다는 뜻
  • LISTENING : 연결을 위하여 접속을 기다리는 상태
  • TIME_WAIT : 이미 해당 사이트와 연결이 종료되었거나 다음 연결을 위해 기다리는 상태
  • SYN_SENT : 접속하기 위해 패킷을 보냈다는 뜻

 

인바운드 / 아웃바운드

- 인바운드/아웃바운드는 트래픽 네트워크 간에 이동하는 방향을 말한다.

 

인바운드

- 네트워크에 들어오는 정보

- 클라이언트 → 서버

ex) 첨부파일을 서버에 업로드할 때

 

아웃바운드

- 네트워크에서 나가는 정보

- 서버 → 클라이언트

ex) 첨부파일을 다운로드 할 때

 

Port forwarding 

- 포트 포워딩한 IP주소로 다른 네트워크기기의 외부 접속을 가능하게 해줌

 

- 외부 IP (공인 IP)

인터넷 사용자의 로컬 네트워크를 식별하기 위해 인터넷 서비스 공급자(ISP)가 제공하는 IP 주소

전세계에서 유일한 IP 주소를 갖으며 외부에 공개되어 있기 때문에 인터넷에 연결된 다른 PC로부터의 접근이 가능

 

- 내부 IP (사설 IP)

- 일반 가정이나 회사 내에 할당된 네트워크 IP 주소 (라우터, 공유기)

- 공유기 내부 네트워크 상에서만 사용되는 주소로, 인터넷상에서는 사용할 수 없음

- 하나의 네트워크 안에서 유일

 

- 외부 포트

- 외부에서 접근할 포트번호

 

- 내부 포트

- 지정된 컴퓨터로 외부포트에서 연결을 했을 때, 그 지정된 내부 pc 에서는 어떤 포트를 사용할 것인지를 지정해야 한다.

- 즉, 실제로 열고 싶은 포트로, 보안을 위해 내부 포트와 외부 포트를 다르게 설정하는 경우가 있음

  • 예) 내부 아이피 번호가 192.168.0.4인 A컴퓨터에서 외부포트는 10포트, 내부포트는 웹서버 기본 포트인 80으로 잡았다고 하자.
  • 공인 IP의 10포트 입력 (예 - 123.123.456.456:10) > 192.168.0.4를 내부아이피로 갖는 컴퓨터로 연결 > 그 중 80포트 사용
  • → 123.123.456.456:10 을 입력하면 내부 아이피의 192.168.0.4:80으로 연결한 것과 같음.
  • 외부, 내부포트를 나눈 이유→ 보안, 포트중첩
  • 보안
    • 잘 알려진 포트로 공격이 들어오기 때문에 외부 포트는 랜덤포트로 하고 내부 포트는 실서비스 하는 포트로 한다.
  • 포트중첩
    • 내부에서 사용하는 서비스가 많고 포트가 중첩될경우를 방지한다. ex) 외부ip:80 -> 192.168.0.1:80 외부ip:80 -> 192.168.0.2:80 일 경우 포트 중첩이 되어 설정 할 수 없어 이경우 외부 ip:80을 외부ip:8080으로 다르게 해 줘야 한다.

 

게이트웨이

- 현재 사용자가 위치한 네트워크에서 다른 네트워크로 이동하기 위해 반드시 거쳐야 하는 거점을 의미

- 두 컴퓨터가 네트워크 상에서 서로 연결되려면 동일한 통신 프로토콜을 사용해야 합니다. 따라서 프로토콜이 다른 네트워크 상의 컴퓨터와 통신하려면 두 프로토콜을 적절히 변환해 주는 변환기가 필요한데, 게이트웨이가 바로 이러한 변환기 역할을 함

ex) 공유기 - 사용자 컴퓨터의 네트워크와 인터넷을 연결하여 사용자가 웹 사이트에 접근할 수 있도록 관문을 열어줌

 

방화벽

- 미리 정의된 보안 규칙에 기반한, 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 네트워크 보안 시스템

 

AWS EC2

- 아마존 웹 서비스(AWS)에서 제공하는 클라우드 컴퓨팅 서비스이다.

- 이 서비스를 통해서 아마존이 각 세계에 구축한 데이터 센터의 서버용 컴퓨터들의 자원을 원격으로 사용할 수 있다.

- AWS 는 나라(리전)별로 데이터 센터를 가지고 있다.

- EC2는 독립된 컴퓨터 한 대를 임대해서 사용할 수 있게 해주는 서비스이다.

- EC2의 장점

  • 용량을 늘리거나 줄일 수 있다. (탄력성)
  • 사용한만큼 지불하므로 저렴하다.
  • 사용자가 인스턴스를 완전히 제어할 수 있다.
  • 보안 및 네트워크 구성, 스토리지 관리 효과적이다.
  • 하나의 EC2 Instance → 컴퓨터 한 대를 의미

 

 

댓글