네트워크의 기초
네트워크: 컴퓨터와 다른 디바이스들이 데이터를 주고 받을 수 있도록 연결된 구조를 말한다. 이 디바이스들은 컴퓨터, 프린터, 라우터, 스위치, 서버 등이 될 수 있다. 노드와 링크가 서로 연결되어 있거나 연결되어 있지 않은 집합체를 의미한다.
노드: 서버, 라우터, 스위치 와 같은 네트워크 장치
링크: 유선, 무선
네트워크에서는 디바이스 간의 통신을 관리하기 위해 프로토콜이 사용된다. 프로토콜은 데이터를 어떻게 주고 받을지에 대한 규약을 정의한다.
LAN(Local Area Network): 지역 네트워크로 한정된 지리적 범위 내에서 디바이스들이 연결된 지역 네트워크를 나타낸다. 공유기나 스위치등을 이용해서 연결된 지역 네트워크이며 이더넷 프로토콜을 주로 사용한다.
WAN(Wide Area Network): 광역 네트워크의 약자로 지리적으로 넓은 범위에 걸친 네트워크를 의미한다. LAN과 LAN 사이를 구성하며 ISP(Internet Service Provider, SKT, LG, KT) 네트워크망을 통해 접속하게 된다.
허브: 단순 분배를 하는 중계장치. 여러대의 컴퓨터를 연결하여 네트워크를 만든다.
라우터: 여러 네트워크 간의 데이터를 전달하는 역할을 한다. L3(네트워크 계층)에 속하는 장치이며 IP주소를 기반으로 디바이스 위치를 파악하고 통신한다.
스위치: 네트워크 내에서 디바이스 간에 직접 통신할 수 있도록 연결을 관리한다. L2(데이터 링크 계층)에 속하는 장치이며 MAC 주소를 기반으로 디바이스 위치를 파악하고 통신한다.
IP: 각 디바이스는 네트워크에서 고유한 식벼자인 IP주소를 가진다. 이를 통해 특정 디바이스에 데이터를 전송할 수 있다.
서브넷: 네트워크 내부의 네트워크. 서브넷을 통해 네트워크 트래픽은 불필요한 라우터를 통과하지 않고 더 짧은 거리를 이동하여 대상에 도달할 수 있다.
프라이빗 IP: 일반 가정이나 회사 내 등에 할당된 네트워크의 IP 주소이며, 로컬 IP, 가상 IP라고도 한다.
퍼블릭IP: 인터넷 사용자의 로컬 네트워크를 식별하기 위해 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소이다. 공용 IP 주소라고도 불리며 외부에 공개되어 있는 IP 주소이다.
처리량과 지연시간
처리량: 링크를 통해 전달되는 단위 시간당 데이터양을 말한다. 단위로는 bps(bits per second)를 사용하며 초당 전송 또는 수신되는 비트 수라는 의미이다.
처리량은 사용자들이 접속할 때마다 커지는 트래픽, 네트워크 장치 간의 대역폭, 네트워크 중간에 발생하는 에러, 장치의 하드웨어 스펙에 영향을 받는다.
대역폭: 주어진 시간 동안 네트워크 연결을 통해 흐를 수 있는 최대 비트 수
지연 시간: 요청이 처리되는 시간을 말하며 어떤 메시지가 두 장치 사이를 왕복하는 데 걸린 시간을 말한다.
네트워크 토폴로지
- 트리 토폴로지: 계층형 토폴로지라고 하며 트리 형태로 배치한 네트워크 구성을 말한다. 노드의 추가, 삭제가 쉬우며 특정 노드에 트래픽이 집중될 때 하위 노드에 영향을 끼칠 수 있다.
- 버스 토폴로지: 중앙 통신 회선 하나에 여러 개의 노드가 연결되어 공유하는 네트워크 구성을 말한다. 근거리 통신망 LAN에서 사용한다. 설치 비용이 적고 신뢰성이 우수하며 중앙 통신 회선에 노드를 추가하거나 삭제하기 쉽다.
- 스타 토폴로지(성형): 중앙에 있는 노드에 모두 연결된 네트워크 구성을 말한다. 노드를 추가하거나 에러를 탐지하기 쉽고 패킷의 충돌 발생 가능성이 적다. 또한, 어떤한 노드에 장애가 발생해도 쉽게 에러를 발견할 수 있으며, 장애 노드가 중앙 노드가 아닐 경우 다른 노드에 영향을 끼치는 것이 적다.
- 링형 토폴로지: 각각의 노드가 양 옆의 두 노드와 연결하여 전체적으로 고리처럼 하나의 연속된 길을 통해 통신을 하는 망 구성 방식이다. 노드 수가 증가되어도 네트워크 상의 손실이 거의 없고, 충돌이 발생되는 가능성이 적고 노드의 고장 발견을 쉽게 찾을 수 있다. 하지만 네트워크 구성 변경이 어렵고 회선에 장애가 발생하면 전체 네트워크에 영향을 끼친다.
- 메시 토폴로지(망형): 그물망처럼 연결되어 있는 구조이다. 한 단말 장치에 장애가 발생해도 여러 개의 경로가 존재하므로 네트워크를 계속 사용할 수 있고 트래픽 분산 처리가 가능하다. 다만, 노드의 추가가 어렵고 구축 비용과 운용 비용이 고가이다.
스푸핑: LAN 상에서 송신부 패킷을 송신과 관련없는 다른 호스트에 가지 않도록 하는 스위칭 기능을 마비시키거나 속여서 특정 노드에 해당 패킷이 오도록 처리하는 것을 말한다.
병목 현상
병목 현상: 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상을 말한다. 서비스에서 이벤트를 열었을 때 트래픽이 많이 생기고, 그 트래픽을 잘 관리하지 못하면 병목 현상이 생겨 사용자는 웹사이트에 접속하지 못한다.
네트워크 토폴로지가 어떻게 구성되어 있는지 알 수 있다면, 병목 현상을 올바르게 해결할 수 있다. 병목 현상의 원인으로는 다음과 같을 수 있다.
- 네트워크 대역폭
- 네트워크 토폴로지
- 서버 CPU, 메모리 사용량
- 비효울적인 네트워크 구성
인터넷 네트워크
IP
IP(Internet Protocal): 네트워크 상에서 데이터를 주고 받는 데 사용되는 주소 체계 및 프로토콜.
인터넷 망에서 클라이언트와 서버는 IP주소를 통해서 메시지를 주고 받는다. 이때 패킷이라는 통신 단위로 데이터를 전달하는데, IP 패킷에는 출발지 IP, 도착지 IP, 데이터가 담겨 있다. 이 IP패킷은 인터넷망 내 노드들을 거쳐 서버에 도착한다.
하지만, 이 IP 프로토콜에는 단점이 존재한다. 이를 보완하기 위해 나타난 것이 TCP, UDP이다.
- 비연결성
- 클라이언트는 서버의 상태를 알 수 없기 때문에 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.
- 비신뢰성
- 중간에 패킷이 사라지거나, 여러개의 패킷을 보냈을 때 순서대로 도착하지 않을 수 있다.
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 때 어떤 패킷이 어떤 애플리케이션을 위한 것인지 알 수 없다.
ARP
ARP(Address Resolution Protocol): IP주소로부터 MAC 주소를 구하는 IP와 MAC 주소의 다리 역할을 하는 프로토콜이다.
컴퓨터와 컴퓨터 간의 통신은 흔히 IP 주소 기반으로 통신한다고 알고 있지만, 정확히 이야기 하면 IP 주소에서 ARP를 통해 MAC 주소를 찾아 MAC 주소를 기반으로 통신한다. ARP를 통해 가상 주소인 IP주소를 실제 주소인 MAC 주소로 변환한다. 이와 반대로 RARP를 통해 실제 주소인 MAC 주소를 가상 주소인 IP주소로 변환하기도 한다.
홉 바이 홉 통신: IP 주소를 통해 통신하는 과정을 홉 바이 홉 통신이라고 한다. 각각의 라우터에 있는 라우팅 테이블의 IP를 기반으로 패킷을 전달하고 다시 전달하는 과정을 말한다. 즉, 통신 장치에 있는 라우팅 테이블의 IP를 통해 시작 주소부터 시작하여 다음 IP로 계속해서 이동하는 라우팅 과정을 거쳐 패킷이 최종 목적지까지 도달하는 통신을 말한다.
라우팅 테이블: 송신지에서 수신지까지 도달하기 위해 사용되며 라우터에 들어가 있는 목적지 정보들과 그 목적지로 가기 위한 방법이 들어있는 리스트를 뜻한다. 라우팅 테이블에는 게이트웨이와 모든 목적지에 대해 해당 목적지에 도달하기 위해 거쳐야 할 다음 라우터의 정보를 가지고 있다.
IP 주소 체계
IP주소는 IPv4, IPv6로 나뉜다. IPv4는 32비트를 8비트 단위로 점을 찍어 표기하며, 123.45.67.89 같은 방식으로 IP주소를 나타낸다. IPv6는 64비트를 16비트 단위로 점을 찍어 표기하며, 2001:db8::ff00:42:8329 같은 방식으로 IP 주소를 나타낸다.
IPv4:
- 가장 대중적인 인터넷 프로토콜이다.
- 전 세계적으로 사용 가능한 주소가 한정되어 있어 주소 고갈 문제가 발생한다.
- 서브넷팅과 네트워크 주소, 호스트 주소로 나누어 관리된다.
- NAT 등의 기술을 사용하여 주소를 재사용하려는 노력을 진행중이다.
IPv6:
- 주소 고갈 문제를 해결하기 위한 대안으로 등장했다.
- IPv4와 호환성을 갖추고 있어 기존의 IPv4네트워크와 함께 운영될 수 있다.
NAT(Network Address Translation): 사설 IP 주소와 공인 IP 주소 간에 주소 변환을 해 사설 네트워크에서 인터넷으로 통신이 가능하게 한다. 주소 변환 기술이며, 주로 라우터에 의해 구현된다.
TCP
TCP(Transmission Control Protocol): 신뢰성 있는 연결 지향 통신을 제공하는 프로토콜. 가상회선 패킷 교환 방식을 사용한다.
TCP는 IP를 보완해준다. TCP의 세그먼트에는 출발지 Port, 목적지 Port, 전송제어, 순서, 검증 정보가 들어있다.
- 연결지향(3way handshake)
- 데이터 전송 전에 연결을 설정하고 데이터 전송 후에 연결을 해제한다. 이를 통해 신뢰성있는 통신을 보장한다.
- 클라이언트가 서버에게 접속을 요청하는 SYN플래그를 보낸다. 서버는 Listen상태에서 SYN이 들어온 것을 확인하고 SYN_RECV상태로 바꾸어 SYN + ACK 플래그를 클라이언트에게 전송한다. 그 후 서버는 다시 ACK 플래그를 받기위해 대기 상태로 변경된다. SYN + ACK 상태를 확인한 클라이언트는 ACK를 보내고 연결 성립이 된다. 이 과정을 3 way handshake라 부른다.
- 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송한다. 보낸 후에 FIN-WAIT-1 상태로 변한다. FIN 플래그를 받은 서버는 확인 메시지인 ACK를 클라이언트에게 보낸다. 그후 CLOSE-WAIT 상태로 변한다. 클라이언트도 마찬가지로 서버에게 종료될 준비가 됐다는 FIN을 받기위해 FIN-WAIT-2상태가 된다. Close 준비가 된 후 서버는 Client에게 FIN플래그를 전송한다. 클라이언트는 해지 준비가 되었다는 정상 응답인 ACK를 서버에게 보낸다. 이 때 클라이언트는 TIME-WAIT 상태로 변한다. 이 과정을 4 way handshake라 부른다.
- 데이터 전달 보증
- 중간에 데이터가 누락이 되더라도 알 수 있다.
- TCP는 데이터 전송 시 각 데이터에 일련번호(Sequence Number)를 할당한다. 수신자는 수신한 데이터의 일련번호를 확인하여 중복된 데이터나 누락된 데이터를 감지할 수 있다.
- 누락된 데이터는 수신자가 해당 데이터의 재전송을 요청할 수 있도록 하여 데이터의 신뢰성을 보장한다.
- 순서 보장
- 수신자는 Sequence Number를 통해 데이터를 정확한 순서대로 재조립한다. 따라서 네트워크에서 데이터가 섞이거나 순서가 바뀌더라도 TCP는 이를 정확한 순서로 재조립하여 서에 전달한다.
- 흐름 제어
- 수신자와 송신자 간의 데이터 전송 속도를 조절하여 네트워크의 혼잡을 방지한다.
- 수신자는 자신의 수신 버퍼 상태를 송신자에게 알려주는 윈도우 크기를 지정한다.
- 송신자는 이 윈도우 크기 내에서만 데이터를 전송하도록 조절하여 수신자의 버퍼 오버플로우를 방지한다.
- 혼잡 제어
- 네트워크의 혼잡 상태를 감지하고, 혼잡을 피하기 위해 데이터 전송 속도를 동적으로 조절하는 메커니즘이다.
- 송신자는 네트워크의 혼잡을 감지하면 송신 속도를 줄이고, 혼잡이 완화되면 다시 송신 속도를 증가시킨다.
- 주요 알고리즘으로는 AIMD(Additive Increase Multiplicative Decrease)가 사용된다.
UDP
UDP(User Datagram Protocal, 사용자 데이터그램 프로토콜): 신뢰성이 낮지만 빠른 데이터 전송을 지원하는 프로토콜이다. 데이터 그램 패킷 교환 방식을 사용한다.
비 연결지향적 프로토콜로 데이터 전달을 보증하지 않고 순서를 보장하지 않는다. TCP와 비교해서 기능이 거의 없어 단수하다. 때문에 오로지 빠르게 패킷을 보내는 목적을 가지고 있다. IP와 거의 같다고 보면된다. PORT와 체크섬(메시지를 검증해주는 데이터) 정도만 추가된 형태이다. 데이터 그램 UDP 패킷을 사용하며, UDP는 스트리밍 서비스에 어울리는 프로토콜이다.
TCP/IP 4계층 vs OSI 7계층
OSI 7계층
OSI 7계층은 네트워크 프로토콜 디자인과 데이터 통신을 계층으로 나눠 표준화한 것이다. 이 계층들은 특정 계층이 변경되었을 때, 다른 계층이 영향을 받지 않도록 설계되었다. 예를 들어 전송 계층에서 TCP를 UDP로 변경했다고 해서 인터넷 웹 브라우저를 다시 설치하는 것이 아니듯 유연하게 설계되었다.
- 물리 계층 (Physical Layer):
- 주로 하드웨어와 관련이 있으며, 데이터 전송 매체(전선, 광섬유, 무선, 허브, 리피터 등)를 통한 비트 스트림의 송수신을 다룬다(0 or 1)
- 전기적, 기계적, 기능적인 특성을 다루어 물리적 연결을 관리한다.
- 데이터 링크 계층 (Data Link Layer):
- 프레임(Frame) 단위로 데이터를 전송하고, 오류와 흐름을 관리한다.
- 물리적인 링크에서의 주소(MAC 주소)를 기반으로 통신을 제어한다.
- 이더넷, 투 포인트 프로토콜(HDLC, ADCCP), 근거리 네트워크 프로토콜(LLC, ALOHA)
- 네트워크 계층 (Network Layer):
- 패킷(Packet)을 이용하여 목적지(IP)까지의 경로를 설정하고, 라우팅을 수행한다.
- IP 주소를 사용하여 호스트 간의 통신을 관리한다.
- 라우터, 스위치
- 전송 계층 (Transport Layer):
- 데이터를 신뢰성 있게 송수신하기 위해 에러 복구 및 흐름 제어를 담당한다.
- 전송 계층에서는 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)가 주로 사용된다.
- 데이터 전송을 위해 Port번호를 활용한다.
- 세션 계층 (Session Layer):
- 데이터 교환의 세션(통신 장치 간의 반영구적 연결 상태 다이얼로그)을 설정, 유지, 종료하며, 동기화를 담당한다.
- 네트워크 상 논리적인 연결을 관리하고 지속시켜주는 계층이다. 데이터를 만들어내는 영역이다.
- 다중 사용자 환경에서의 통신을 관리하고 통신 동안 발생할 수 있는 에러를 처리한다.
- TCP/IP 기반으로 만들어진다.
- 표현 계층 (Presentation Layer):
- 데이터의 표현과 변환을 담당한다. 데이터 압축, 암호화, 인코딩 등의 기능을 수행하여 응용 프로그램 간의 데이터 형식 변환을 지원한다.
- 응용 계층 (Application Layer):
- 최종 사용자와 상호 작용하도록 응용 프로그램에 서비스를 제공한다.
- 프로토콜(FTP, HTTP, SMTP 등)을 통해 네트워크와 통신하고 사용자 인터페이스 서비스를 제공한다.
TCP/IP 4계층
TCP/IP 4계층은 OSI 7계층 모델보다 간소하면서도 실제 인터넷 프로토콜의 기반이 되는 모델이다.
데이터 전송시, 데이터는 상위 계층에서 하위 계층으로 이동하고, 계층 이동마다 필요한 정보를 추가한다. 이를 캡슐화라 부른다. 데이터 수신시, 데이터는 하위 계층에서 상위 계층으로 이동하고, 계층 이동 마다 추가된 헤더를 읽고 알맞은 행동을 취한 후, 헤더를 제거한다. 이를 역캡슐화라 부른다.
- 네트워크 인터페이스 계층 (Network Interface Layer 또는 Link Layer):
- 하드웨어와 관련된 부분으로, 물리적인 네트워크와 상호 작용한다.
- 데이터 단위는 프레임, 전송 주소는 MAC 주소를 참조한다.
- 이더넷(Ethernet), Wi-Fi, PPP(Point-to-Point Protocol) 등
- 물리적인 네트워크에 대한 접근을 제어하고, 데이터 링크 계층에서 패킷을 생성하거나 수신한다.
- 인터넷 계층 (Internet Layer):
- 패킷을 목적지까지 전달하고 라우팅을 수행한다.
- 데이터 단위는 패킷, 전송 주소는 IP주소를 잠조한다.
- 패킷은 세그먼트르 목적지에 전송하기 위해 시작, 목적지의 논리주소를 붙인 단위이다.
- IP(Internet Protocol), ICMP(Internet Control Message Protocol) 등
- IP 주소를 사용하여 호스트 간의 통신을 제어하고, 패킷의 경로를 설정하며, 서브넷에 대한 라우팅을 수행한다.
- 전송 계층 (Transport Layer):
- 종단 간 통신을 담당하며, 신뢰성 있는 데이터 전송을 제공한다.
- TCP(Transmission Control Protocol), UDP(User Datagram Protocol) 등
- 에러 복구와 흐름 제어를 담당하며, 데이터를 세그먼트로 분할하거나 재조립한다. 전송 주소는 Port를 사용한다.
- 응용 계층 (Application Layer):
- 최종 사용자와 상호 작용하는 응용 프로그램에 대한 서비스를 제공한다.
- HTTP(Hypertext Transfer Protocol), FTP(File Transfer Protocol), SMTP(Simple Mail Transfer Protocol) 등
- 사용자 인터페이스, 메일 전송, 파일 전송 등 다양한 응용 프로그램 서비스를 지원한다.
동작 순서
- 송신 측 클라이언트의 애플리케이션 계층에서 어느 웹 페이지를 보고 싶다라는 HTTP 요청을 한다.
- 전송 계층에서 애플리케이션 계층에서 받은 데이터를 통신하기 쉽게 분해하여 안내 번호와 포트 번호를 붙여 인터넷 계층에 전달한다.
- 인터넷 계층에서 데이터에 IP 패킷을 추가해 링크 계층에 전달한다.
- 링크 계층에서는 수진지 MAC 주소와 이더넷 프레임을 추가한다.
- 수신 측 서버는 링크 계층에서 데이터를 받아들여 순서대로 위의 계층에 전달하여 애플리케이션 계층까지 도달한다.
PDU
PDU(Protocol Data Unit): 네트워크의 어떠한 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위.
PDU는 제어 관련 정보들이 포함된 '헤더', 데이터를 의미하는 '페이로드'로 구성되어 있으며 계층마다 부르는 명칭이 다르다.
- 애플리케이션 계층: 메시지
- 전송 계층: 세그먼트(TCP), 데이터 그램(UDP)
- 인터넷 계층: 패킷
- 링크 계층: 프레임(데이터 링크), 비트(물리)
네트워크 기기
네트워크 기기는 계층 별로 처리 범위를 나눌 수 있다. 상위 계층을 처리하는 기기는 하위 계층을 처리할 수 있지만, 그 반대는 불가능하다. 예를 들어 L7 스위치는 애플리케이션 계층을 처리하는 기기로, 그 밑의 모든 계층의 프로토콜을 처리할 수 있다. 하지만 AP는 물리 계층 밖에 처리하지 못한다.
- 애플리케이션 계층: L7 스위치
- 인터넷 계층: 라우터, L3 스위치
- 데이터 링크 계층: 브리지, L2 스위치
- 물리 계층: NIC, 리피터, AP
L7 스위치
애플리케이션 계층을 처리하는 네트워크 기기
- 스위치는 여러 장비를 연결하고 데이터 통신을 중재하며 목적지가 연결된 포트로만 전기신호를 보내 데이터를 전송하는 통신 네트워크 장비이다.
- L7 스위치는 로드밸런서라고도 하며, 서버의 부하를 분산하는 기기이다.
- 클라이언트로 부터 오는 요청들을 여러 서버로 나누는 역할을 하며 시스템이 처리할 수 있는 트래픽 증가를 목표로한다.
- 만약 장애가 발생한 서버가 있다면 이를 트래픽 분산 대상에서 제외해야 하는데, 이는 정기적으로 헬스 체크를 이용하여 감시하면서 이루어진다.
L7 스위치 vs L4 스위치
로드밸런서로 L4스위치도 존재한다. L4 스위치는 인터넷 계층을 처리하는 기기로 스트리밍 관련 서비스에서는 사용할 수 없으며 메시지를 기반으로 인식하지 못하고 IP와 포트를 기반으로 트래픽을 분산한다. 반면 L7 로드밸런서는 IP, 포트 외에도 URL, HTTP 헤더, 쿠키 등을 기반으로 트래픽을 분산한다. AWS에서는 L7스위치를 이용한 로드밸런싱은 ALB 컴포너트로 하며, L4 스위치를 이용한 로드밸러싱은 NLB컴포넌트로 한다.
라우터, L3 스위치
인터넷 계층을 처리하는 네트워크 기기
- 라우터
- 여러 개의 네트워크를 연결, 분할, 구분시켜주는 역할을 하며 "다른 네트워크에 존재하는 장치끼리 서로 데이터를 주고 받을 때 패킷 소모를 최소화하고 경로를 최적화하여 최소 경로로 패킷을 포워딩" 하는 라우팅을 하는 장비이다.
- L3스위치
- L2 스위치의 기능과 라우팅 기능을 갖춘 장비이다. L3 스위치를 라우터라 해도 무방하다. 라우터는 소프트웨어 기반의 라우팅과 하드웨어 기반의 라우팅을 하는 것으로 나눠지고 하드웨어 기반의 라우팅을 담당하는 장치를 L3스위치라고 한다.
L2 스위치, 브리지
데이터 링크 계층을 처리하는 네트워크 기기
- L2 스위치
- 장치들의 MAC 주소를 MAC 주소 테이블을 통해 관리하며, 연결된 장치로부터 패킷이 왔을 때 패킷 전송을 담당한다.
- IP 주소를 이해하지 못해 IP 주소를 기반으로 라우팅은 불가능하며 단순히 패킷의 MAC 주소를 읽어 스위칭하는 역할을 한다.
- 브리지
- 두 개의 LAN을 상호 접속할 수 있도록 하는 통신망 연결 장치로, 포트와 포트 사이의 다리 역할을 하며 장치에서 받아온 MAC주소를 MAC 주소 테이블로 관리한다.
- 브리지는 통신망 범위를 확장하고 서로 다른 LAN등으로 이루어진 '하나의' 통신망을 구축할 때 쓰인다.
NIC, 리피터, AP
물리계층을 처리하는 네트워크 기기
- NIC
- LAN카드라고 하는 네트워크 인터페이스 카드는 2대 이상의 컴퓨터 네트워크를 구성하는 데 사용하며, 네트워크와 빠른 속도로 데이터를 송수신할 수 있도록 컴퓨터 내에 설치하는 확장 카드이다.
- 리피터
- 약해진 신호를 증폭하여 다른 쪽으로 전달하는 장치를 말한다.
- 이를 통해 패킷을 더 멀리 보낼 수 있다. 이는 현재 잘 쓰이지 않는 장치이다.
- AP
- 패킷을 복사하는 기기이다.
- AP에 유선 LAN을 연결한 후 다른 장치에서 무선 LAN기술을 사용하여 무선 네트워크 연결을 할 수 있다.
HTTP
HTTP(HyperText Transfer Protocol) : 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 규약을 정해두었기 때문에 모든 프로그램은 이 규약에 맞춰 개발하여 서로 정보를 교환할 수 있게 되었다.
80번 포트를 사용한다.
- HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않은 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성된다.
- 비연결성, 무상태성의 특징을 가지는 통신 프로토콜이다. 때문에 쿠키나 세션, JWT 토큰을 통해 클라이언트의 상태를 유지한다.
- 클라이언트에서 요청을 보내면, 서버에서는 해당 요청 사항에 맞는 응답을 클라이언트에 전송하는 형태로 동작한다.
- HTML 문서, Palin Text, Json, XML과 같은 형태로 데이터를 주고 받는다.
- HTTP는 암호화가 되지 않는 평문 데이터를 전송하는 프로토콜이기 때문에 제 3자가 정보를 조회할 수 있다. 이런 보안 문제를 해결하기 위해 등장한 것이 HTTPS
HTTP 구조
Request
요청은 start-line, header, empty-line, body로 구성되어 있다.
start-line:
- HTTP METHOD: GET, POST, PATCH, PUT, DELETE와 같은 http 메소드를 적는 부분이다.
- URL: 리소스를 요청하는 주소를 의미한다.
- Protocol version: http 버전을 의미한다. HTTP/1.1을 가장 많이 사용하며 최근에는 HTTP/2의 사용이 늘고 있다.
Header
- Content-Type: Body에 들어가는 요청 전문의 Type을 의미한다. Json의 경우 application/json
- Accept: 응답받을 메시지 타입
- connection: 주로 keep-alive로 셋업한다. 매 요청 시 커넥션을 다시 맺지 않고, 커넥션을 유지하기 때문에 성능향상을 기대할 수 있다.
- User-Agent: 사용자의 기기를 식별한다. 기기/OS/브라우저 별 예외를 처리할 때 많이 사용된다.
- Authorization: 인증 정보를 담을 때 사용하는 Header이다. 주로 인증 토큰을 Authorization Header에 담아 보낸다.
- Cookie: 개인 브라우저에 저장되는 Cookie 정보를 보낼 때 사용하는 Header
- session-id: Session에 대한 id 값을 지정하는 부분이다.
empty-line
Header와 body를 구분하는 부분
Body
메시지 전문이 들어간다. Header의 Content-Type과 맞춰야 된다.
Response
start-line
- Protocal version
- Http Status code
- 1xx(정보) : 요청을 받았으며 프로세스를 계속 진행합니다.
- 2xx(성공) : 요청을 성공적으로 받았으며 인식했고 수용하였습니다.
- 3xx(리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요합니다.
- 4xx(클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다.
- 5xx(서버 오류) : 서버가 명백히 유효한 요청에 대한 충족을 실패했습니다.
- Http Status
- 응답 메시지
나머지는 Request랑 동일하다.
HTTPS
HTTPS: 기존의 HTTP를 암호화한 버전이 HTTPS인 것이다. SSL이라는 프로토콜을 사용해 주고 받는 정보를 암호화한다. 443포트를 기본으로 사용한다.
암호화 방식
- 공개키와 비밀키: 공개키는 모두가 볼 수 있는 키이며, 비밀키는 소유자만이 가지고 있는 키로 암/복호화에 사용된다.
- 대칭키 암호화: 서버와 클라이언트가 암호화/복화하에 동일한 비밀키를 사용하는 방식
- 비대칭키 암호화: 서버와 클라이언트가 암호화/복화화에 각각 다른 비밀키를 사용하는 방식, 공개키를 통해서 암호화하고 비밀키를 통해서 복호화한다.
- 인증 기관: 클라이언트가 접속을 요청한 서버가 의도한 서버가 맞는지 인증해주는 역할을 하는 보증된 기업이다. 클라이언트는 서버에 요청하여 CA가 발급한 인증서를 받은 뒤 CA의 공개키로 복호화하여 신뢰할 만한 인증서인지 검증한다. CA의 공개키로 복호화되는 자료는 오직 CA의 비밀키로 암호화한 경우밖에 없기 때문에 복호화되면 신뢰할 수 있다.
동작 방식
- 인터넷 사이트는 공개키와 개인키를 만들고, 신뢰할 수 있는 인증 기관(CA)에 자신의 정보와 공개키를 관리해달라고 계약한다.
- 이 때, 계약을 완료한 인증기관은 기관만의 공개키와 개인키가 있다. 인증 기관은 사이트가 제출된 데이터를 검증하고, 인증 기관의 개인키로 사이트에서 제출한 정보를 암호화해서 인증서를 만들어 제공한다.
- 인증기관은 웹 브라우저에 자신의 공개키를 제공한다.
- 사용자가 사이트에 접속하면 서버는 자신의 인증서를 클라이언트에게 보낸다.
- 클라이언트는 미리 알고있던 인증기관의 공개키로 인증서를 해독하여 검증한다.
- 이렇게 얻은 서버의 공개키로 대칭키를 암호화해서 다시 사이트에 보낸다.
- 사이트는 개인키로 암호문을 해독하여 대칭키를 얻게 되고, 이제 대칭키로 데이터를 주고 받을 수 있게 된다.
웹 사이트 접속 과정
- 사용자가 브라우저에 URL을 입력한다.
- 브라우저가 해당 주소 도메인의 IP 주소를 찾기 위해 캐시에서 DNS 기록을 확인한다.
- 만약 URL의 캐시가 없다면, ISP의 DNS 서버가 DNS쿼리로 해당 도메인을 호스팅하는 서버의 IP 주소를 찾는다.
- 브라우저가 해당 서버와 TCP 연결을 시작한다.
- 브라우저가 웹서버에 HTTP 요청을 보낸다.
- 서버가 요청을 처리하고 응답을 보낸다.
- 서버가 HTTP 응답을 보낸다.
- 브라우저가 HTML 컨텐츠를 보여준다.
ISP(Internet Service Provider): 개인이나 기업체에게 인터넷 접속 서비스, 웹 사이트 구축 및 웹 호스팅 서비스 등을 제공하는 회사(KT, SK, LG)
DNS(Domain Name System) : 웹 사이트의 IP주소와 도메인 주소를 이어주는 시스템. IP 주소를 특정 도메인 주소와 같다고 기록을 저장해두고, 인터넷 사용자들이 도메인 주소를 검색했을 때 IP주소로 연결되도록 도와줌(도메인을 IP 주소로 변)
'CS' 카테고리의 다른 글
[운영체제] 운영체제 개념 정리 (2) | 2023.11.17 |
---|