네트워크

최창효·2022년 4월 13일
0

CS 핵심

목록 보기
1/3
post-thumbnail

OSI 7계층

개요

  • OSI 7계층은 ISO 국제표준 국가에 의해 재정되었으며 네트워크 통신이 일어나는 과정을 7단계로 구분한 것을 말합니다.
  • 정보통신 산업 초기에 제조사가 다르면 서로 통신이 불가능한 문제를 해결하기 위해 등장한 개념입니다.
  • 현대의 인터넷은 OSI 7계층 모델이 아닌 TCP/IP모델을 따르고 있으며 그 이유는 TCP/IP모델이 시장경쟁에서 승리했기 때문입니다. 오늘날 두 모델은 거의 유사하기 때문에 TCP/IP모델로 OSI 7계층을 설명하겠습니다.

사전 개념

  • 각 계층을 구분함으로써 특정 계층의 내용을 변경해도 다른 계층에 영향을 미치지 않는 모듈화의 장점을 가지지만, 여러 계층을 움직이면서 딜레이 및 오버헤드가 발생한다는 단점도 존재합니다.
  • 하나의 계층에는 특정 기능을 하는 인코더와 디코더가 존재합니다.
    • 인코더는 상위계층의 데이터에 자신의 특성을 더하는 캡슐화 작업을 진행한 뒤 하위계층에 데이터를 전달합니다.
    • 디코더는 하위계층의 데이터를 분해하는 역캡슐화 작업을 통해 데이터를 분석합니다. 자신의 계층에서 해결할 수 있는 문제를 해결한 뒤 상위계층에 나머지 데이터를 전달합니다.

physical layer(1계층)

  • 컴퓨터로 데이터를 전송한다는 건 0과 1의 신호를 주고받는다는 것과 같습니다.
  • 0과1의 데이터는 0~무한대의 주파수를 가지고, 이러한 범위의 전기신호를 통과시킬 수 있는 전선은 존재하지 않습니다.
  • 그래서 우리는 0과 1의 신호를 아날로그 신호로 바꿔서 전송해야 하며 이러한 역할을 하는 계층이 바로 physical layer입니다.
  • physical layer 기술은 PHY칩(하드웨어)에 구현되어 있습니다.

여러 대의 컴퓨터가 통신하려면?

우리는 전선에 아날로그 신호를 흘려보내면 데이터를 주고받을 수 있습니다.
그렇다면 우리는 통신하고 싶은 컴퓨터가 새롭게 추가될 때마다 전선을 연결해야 할까요?
이러한 문제를 해결하기 위해 하나의 전선을 여러 사람들이 공유하는 형태를 활용하기 시작했습니다.

더미허브를 통해 여러 대의 컴퓨터를 연결한 건 좋지만, 원하는 목적지에 데이터를 전송하는 기술이 필요해 졌습니다.
스위치를 통해 이러한 문제를 해결했습니다. 스위치는 MAC주소를 활용해 메시지를 원하는 목적지까지 전송해 줍니다.

  • 여기서 flooding방식이 사용되기도 합니다. flooding은 자신의 MAC테이블에 원하는 주소가 없을 때 자신과 연결된 모든 곳에 프레임을 흘려보내 MAC주소를 찾는 방식입니다.

라우터는 스위치와 스위치를 연결합니다. 라우터를 통해 우리는 다른 스위치에 있는 컴퓨터에도 데이터를 전송할 수 있습니다.
그리고 스위치와 라우터로 전 세계의 컴퓨터를 연결한 걸 우리는 인터넷이라고 부릅니다.

  • 물리적으로 연결된 네트워크에서 정보를 안전하게 전달하기 위해 필요한 계층입니다.
  • MAC주소를 헤더에 넣어 목적지를 설정합니다. 이때 MAC주소는 목적지 컴퓨터의 주소가 아니라 본인 공유기의 주소입니다.
    • 공유기까지 데이터를 전송하면 이후에는 라우팅과 포워딩을 통해 목적지를 찾아갑니다.
      • MAC주소는 목적지에 도달하기 위해 거쳐가야 하는 가장 가까운 라우터의 주소로 계속 갱신됩니다.
    • ARP프로토콜이 사용됩니다.
  • Framing작업을 수행합니다.
    • 1계층에서 전달된 데이터를 프래임 단위로 묶는 작업입니다.
  • Data-link layer기술은 랜카드(하드웨어)에 구현되어 있습니다.

Network Layer(3계층)

  • 수많은 네트워크의 연결 속에서 데이터를 목적지에 올바르게 전달해 주는 역할을 담당합니다.
  • 주요 기술로는 routing과 forwarding이 있습니다.
    • 출발지부터 목적지까지의 경로를 정하는 걸 라우팅이라 합니다.
    • 실제로 패킷을 출발지부터 목적지까지 이동시키는 걸 포워딩이라 합니다.
  • Network Layer기술은 운영체제의 커널에 구현되어 있습니다.
A에서 B로 데이터를 전달할 때 A는 데이터 앞에 목적지(B)의 주소를 붙입니다.
이러한 작업은 당연히 목적지의 주소를 알고 있어야 가능합니다.
여기서 주소란 IP를 의미합니다. IP는 컴퓨터만의 고유 주소로 127.0.0.1과 같은 모양을 가지고 있습니다.
우리는 DNS에게 목적지의 도메인 주소를 보내면 목적지의 IP주소를 알아낼 수 있습니다.
  • 3계층에서 데이터 앞에 목적지 주소를 붙여 나온 값을 패킷이라 부릅니다.
데이터는 패킷 형태로 네트워크를 이동합니다.
최초에 자신의 PC와 연결된 라우터에 패킷을 전달합니다.
이후 목적지에 도달하기 위해 여러 라우터를 거쳐갑니다.
라우터는 모든 계층의 인코딩과 디코딩 작업을 수행할 수 있습니다.
디코딩을 통해 전달받은 데이터의 목적지를 확인합니다.
라우터는 목적지를 확인한 뒤 다시 인코딩을 진행해 패킷을 만들고 이를 다음 라우터에 전달합니다.
이렇게 라우터끼리의 이동을 거쳐 패킷은 최종PC에 도착합니다.


이미지 출처: https://terms.naver.com/entry.naver?docId=3431874&cid=58437&categoryId=58437

Transport Layer(4계층)

  • 포트번호를 통해 송신자 컴퓨터의 최종 프로세스에 데이터를 전송하는 역할을 담당합니다.
    • 포트번호란 하나의 컴퓨터에서 동시에 실행되는 프로세스가 겹치지 않게 가지고 있는 정수값 입니다.
    • 송신자는 수신자에게 포트번호를 전달받거나, well-known포트번호를 활용합니다.
  • 우리는 4계층에서 TCP와 UDP 프로토콜을 많이 사용합니다.
  • Transport Layer 기술은 운영체제의 커널에 구현되어 있습니다.

Handshake

  • TCP 프로토콜은 연결지향형 프로토콜로 연결할 때 Handshake를 사용합니다.
  • 연결할 때 3-Way-Handshaking을, 연결을 끊을 때 4-Way-Handshaking을 사용합니다.
// 연결 요청시
Client				Server
   A ------SYN------> B
   A <---SYN,ACK----- B
   A ------ACK------> B

// 연결 종료시
Client				Server
   A ------FIN------> B
   A <------ACK------ B
   A <------FIN------ B
   A ------ACK------> B
  • Time wait: 클라이언트는 서버로부터 FIN요청을 받았더라도 일정시간 동안 소켓을 닫지 않고 아직 도착하지 않은 잉여 패킷을 기다리며 이 작업을 Time wait이라고 합니다.

TCP의 신뢰성

  • TCP는 연결지향형 프로토콜이면서 신뢰할 수 있는 전송방식이기도 합니다.

    • 비연결지향형이면서 신뢰할 수 없는 프로토콜로 UDP가 있습니다.
  • TCP는 흐름제어, 오류제어, 혼잡제어를 통해 신뢰성을 보장하고 있습니다.

    • 흐름제어: 송신측과 수신측의 데이터 처리 속도가 다른 문제를 해결합니다.

      • 송신측과 수신측 간의 문제를 해결합니다.
      • stop and wait: 한 번에 1개의 세그먼트만 전달합니다. 전송한 세그먼트에 대한 응답을 받아야 다음 세그먼트 전송이 가능합니다.
      • 슬라이딩 윈도우: 서버 측 ack를 기다리지 않고 여러 패킷을 전송하는 방식입니다.

      • 전송을 100으로 하는데 받는 쪽이 10밖에 못받는다면? 나머지 90은 버려짐. 그렇기 때문에 전송을 10으로 낮춰줘야 함 -> 흐름제어
    • 오류제어: 오류를 감지하고 재전송합니다.

      • 비트 에러와 패킷 로스 문제를 해결합니다.
        • 비트 에러: 전송한 패킷의 비트값이 바뀐 경우입니다.
        • 패킷 로스: 전송한 패킷이 전달되지 않은 경우입니다.
      • ARQ(Automatic Repeat Request)방식: 통신 오류가 발생하면 해당 데이터를 재전송 합니다.
    • 혼잡제어: 송신측에서 보내는 데이터의 전송 속도가 다른 문제를 해결합니다.

      • 송신측과 라우터(네트워크)간의 문제를 해결합니다.
      • AIMD: Addictive Increase Multiplicative Decrease
        • 패킷손실이 일어날 때까지 패킷의 양을 점진적으로 높입니다.
        • 손실이 일어나면 전송량을 대폭 낮춘 뒤 다시 점진적으로 손실이 일어날 때까지 전송량을 높입니다.
      • 슬로우 스타트: 전송량을 1개부터 손실이 일어날 때까지 지수승으로 증가시킵니다. 손실이 발생하면 다시 1개부터 지수승으로 전송합니다.

      • 중간 라우터는 100밖에 못받는데 100짜리 요청이 2개가 들어오고 있다면? 나머지 100은 버려지게 됨. 중간 라우터가 받을 수 있는 만큼만 전송하도록 연결된 나머지 것들에서 전송량을 중여야 함 -> 혼잡제어

Application Layer(5계층)

  • 애플리케이션이 다루는 데이터 형식과 처리 순서를 결정하는 역할을 담당합니다.
    • 클라이언트 애플리케이션이 서버 측의 애플리케이션과 통신하기 위해 필요한 프로토콜 입니다.
  • 우리에게 익숙한 HTTP 프로토콜이 여기에 해당합니다.
    • NNTP,SIP,SSI,DNS,FTP 등 상당히 다양한 프로토콜이 사용됩니다.
`데이터` - (5계층) -> `Http header + (데이터)` 
- (4계층) -> `포트번호 + (Http header + 데이터)` // 세그먼트 
- (3계층) -> `IP주소 + (포트번호 + Http header + 데이터)` // 패킷 
- (2계층) -> `MAC주소 + (IP주소 + 포트번호 + Http header + 데이터)` // 프레임
- (1계층) -> `아날로그 신호` 
------> (라우팅과 포워딩) ------> 서버측 1계층~5계층 

네트워크 장비

네트워크

  • 네트워크란 두 개 이상의 컴퓨터가 데이터를 주고 받을 수 있는 환경을 말합니다.
  • 네트워크 구성요소
    • 단말장치: 데이터를 주고받는 주체(스마트폰, 노트북, 데스크탑 등)
    • 전송매체: 데이터를 전달하는 역할(랜선 등)
    • 네트워크 장비: 데이터가 최종 도착지까지 전달될 수 있도록 경로를 준비하는 장비
      단말장치로부터 받은 데이터를 어떤 단말장치에게 전달해 주어야 하는지를 판단하는 역할
      허브, 스위치, 라우터 등

허브

  • 하나의 네트워크에 여러 개의 단말장치가 연결될 수 있도록 단말 수만큼 포트 수를 늘려 분배하는 역할
  • 단순히 네트워크를 분배하는 역할만을 수행함
    즉, 허브는 받은 메시지를 어디로 보내야 하는지를 판단하지 않음
  • 허브에 연결된 기기 A가 같은 허브에 연결된 기기 C에 데이터를 전송하고 싶다면?
    • A는 허브에 데이터(도착지 MAC주소가 포함되어 있음)를 전송함
    • 허브는 해당 데이터를 A를 제외한 모든 단말기기에 전송함
    • 허브에 연결된 각각의 단말장치는 데이터의 도착지 MAC주소가 본인과 일치하는지 확인함
    • 일치하지 않으면 무시하고 일치하면 수신함

결론
허브의 통신은 원하는 도착지에게만 데이터를 보내는 게 아니라, 모든 단말장치에 데이터를 보내고 데이터를 받은 단말장치가 자신에게 보낸 데이터가 맞는지를 판단하는 과정으로 데이터를 주고받음

스위치

  • 허브와 달리 도착지 한 곳에만 데이터를 전달함
    • 이 과정에서 MAC주소 테이블을 이용함.
      • MAC주소 테이블이란 도착지 위치(포트)를 알기 위해 스위치에 연결된 각 단말장치의 위치를 적어둔 정보, MAC주소를 기준으로 단말 장치가 스위치 어느 포트에 연결되어있는지가 담겨 있음
  • 스위치에 연결된 기기 A가 같은 스위치에 연결된 기기 C에 데이터를 전송하고 싶다면?
    • A는 스위치에 데이터(도착지 MAC주소가 포함되어 있음)를 전송함
    • 스위치는 MAC주소 테이블을 통해 도착지 MAC주소로 데이터를 전송할려면 어느 포트로 데이터를 전달해야 하는지를 파악함
    • 스위치는 해당 포트로 데이터를 보냄
  • MAC주소 테이블의 정보는 ARP 프로토콜을 통해 채워짐
    • ARP: Address Resolution Protocol(주소 결정 프로토콜), 네트워크에서 IP주소에 대응되는 MAC주소를 결정하는 규약, 도착지 MAC주소를 모르는 상황에서 IP주소를 이용해 MAC주소를 찾게 해줌
    • ARP로 도착지 MAC주소를 찾는 과정(위에 A에서 C로 데이터를 전송하는 과정에서 만약 MAC주소 테이블에 정보가 안채워진 상황이라면)
      • 단말장치 A는 스위치에게 ARP요청 메시지를 보냄
      • 스위치는 x번 포트에서 단말장치 A가 요청을 보냈다는 걸 알고 해당 정보를 MAC주소 테이블에 채워 넣음
      • ARP요청 메시지를 받은 스위치는 단말장치 A를 제외한 모든 단말 장치에게 해당 메시지를 복사하여 전달함(Flooding)
        • 플러딩: 데이터를 수신한 단말장치 이외의 나머지 모든 단말장치로 데이터를 단순 복사하여 전송하는 과정
      • ARP요청 메시지를 받은 나머지 단말장치는 자신의 IP정보와 메시지 속 정보를 비교해봄
      • 불일치하면 무시하고 일치하면 ARP응답 메시지를 스위치에게 전송함
      • 스위치는 ARP응답 메시지를 확인해 y번 포트에 C가 연결되었다는 걸 알게되고 해당 정보를 MAC주소 테이블에 채워 넣음

결론
스위치는 MAC주소 테이블에 정보가 있으면 해당 정보를 활용하고, 그렇지 않으면 허브와 유사한 방식으로 동작함 (DP같은 느낌?)
1. MAC주소 테이블에 목적지 정보가 있으면 해당 단말장치에만 정보를 전송
2. MAC주소 테이블에 목적지 정보가 없으면 ARP프로토콜을 통해 모든 단말장치에 정보를 전송(Flooding) // 이때 ARP프로토콜을 요청한 단말장치 및 포트번호를 MAC주소 테이블에 저장
3. ARP프로토콜에 응답한 단말장치 및 포트번호를 MAC주소 테이블에 저장

라우터

  • 서로 다른 네트워크 사이를 중계하는 역할
    • 허브와 스위치는 하나의 네트워크에서 여러 단말기기를 연결하는 역할
  • 스위치에서 MAC주소 테이블이라는 테이블로 정보를 관리했듯이, 라우터 역시 라우팅 테이블이라는 테이블로 정보를 관리하고 있음
    • 라우팅 테이블은 네트워크 주소, 서브넷 마스크, 출력 인터페이스 (포트정보)를 정보로 가짐
  • 라우터 작동원리
    • 라우터는 메시지에 담긴 도착지IP를 통해 다음 경로를 설정함
      라우팅 테이블에 있는 모든 서브넷 마스크메시지에 담긴 도착지IP를 비교해 메시지를 전달해야 하는 네트워크의 주소를 확인함. 이를 통해 메시지를 전달해야 하는 네트워크 주소를 알게 되고, 해당 주소와 매핑되어 있는 포트번호(출력 인터페이스)로 데이터를 전송함

브라우저에 www.naver.com을 치면 어떤 과정이 일어날까?

  • 위에서 설명한 5계층부터 1계층까지의 동작은 당연히 모두 발생합니다.

1. 브라우저의 url을 파싱합니다.

  • 브라우저는 입력받은 url을 해석합니다.
    • 파싱으로 얻는 값은 Protocol,Url,Port입니다.
    • https가 프로토콜, www.naver.com이 url, 443이 포트번호가 됩니다.
  • 그런데 우리는 https와 443이라는 포트번호를 입력하지 않았는데 어떻게 브라우저가 https와 443이라는 정보를 얻게 될까요?
    • 명시적으로 포트번호를 선언하지 않으면 브라우저는 기본값을 사용합니다.
      • http의 기본 포트번호는 80번, https의 기본 포트번호는 443번 입니다.
    • 프로토콜 역시 브라우저는 기본값을 사용하게 되며 이때의 기본값은 http입니다.
      • 이때 해당 url이 https접속이 가능한 페이지라면 http접속을 301, 302 HTTP Method를 통해 https접속으로 하라는 리다이렉트를 브라우저에게 보내고 이를 통해 HTTPS로 접속하게 됩니다.
      • 이렇게 https로의 접속이 진행되었다면 해당 페이지는 HSTS목록에 저장됩니다. HSTS에 값이 존재하면 http접속을 요청하지 않고 곧바로 https접속을 요청합니다.

2. DNS로부터 IP주소를 얻어옵니다.

  • DNS는 도메인 주소를 IP주소로 반환해 줍니다.

3. 본인의 공유기로 데이터가 이동합니다.

  • ARP로 자신의 공유기 MAC주소를 알아낸 뒤 데이터를 공유기에 전달합니다.

4. 라우팅과 포워딩을 통해 naver 서버까지 이동합니다.

5. naver 서버와 TCP연결을 시도합니다.

  • 3-way-handshaking이 발생합니다.
  • https요청의 경우 SSL Handshaking이 추가적으로 발생합니다.

6. 브라우저가 naver 서버에게 http를 요청합니다.

  • GET요청으로 www.naver.com 웹페이지를 요구합니다.

7. 서버가 요청을 처리한 뒤 response를 생성해 돌려줍니다.

  • 이 응답에는 웹페이지,상태 코드,압축 유형,페이지 캐시 방법,설정할 쿠키,개인정보등의 내용이 들어있습니다.

8. 브라우저가 HTML Content를 보여줍니다.

9. 4-way-handshake를 통해 연결이 종료됩니다.

HTTP와 HTTPS

HTTP

  • 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜 입니다.
  • 서버에서 브라우저로 데이터를 전송하는 용도로 가장 많이 사용합니다.
  • 서버에서 브라우저로 전송되는 데이터가 암호화되지 않는다는 문제점 존재합니다.

HTTP1.0의 keep alive

http 커넥션을 계속 유지하기 위한 헤더입니다.
keep alive를 사용하면 여러 번의 통신을 주고받을 때마다 handshake를 하지 않을 수 있습니다.

HTTP2.0의 주요 특징

  • HTTP Header Data Compression

    • Header의 내용이 이전과 중복된다면 해당 필드를 재전송하지 않습니다.
  • Server Push

    • 클라이언트가 요청 하지 않은 JavaScript, CSS 등의 리소스를 필요할 것으로 예상되는 파일을 HTTP응답시 함께 전송할 수 있습니다.
    • 클라이언트 요청을 최소화 해 성능을 향상시킵니다.
  • HOLB 해결

    • head of line blocking: 여러 파일을 전송할 때 첫번째 요청에 대한 응답이 느려지면 나머지 응답도 같이 지연되는 현상을 말합니다.
    • HTTP2.0에서는 여러 파일을 한번에 병렬 전송하여 HOLB 문제를 해결했습니다.
  • HTTP3.0

    • http3.0은 기존의 TCP기반이 아닌 UDP기반의 QUIC을 사용합니다.
      그 이유는 커스터마이징이 용이하기 때문입니다.

HTTPS

  • HTTP에 SSL(보안 소켓 계층)을 사용한 프로토콜 입니다.
  • HTTPS의 특징은 다음과 같습니다.
    1. 보안성이 우수합니다. 해커가 중간에서 데이터를 가로채도 암호화되어있기 때문에 무슨 내용인지 알 수 없습니다.
    2. SEO(검색엔진최적화)에 유리합니다. 구글은 HTTPS웹 사이트에 가산점을 주고 있습니다.
    3. 모바일 환경에서 우수한 성능을 보이는 AMP(Accelerated Mobile Pages)를 만들기 위해서는 HTTPS를 사용해야 합니다.

SSL과TLS

  • SSL: Secure Sockets Layer, 서버와 브라우저 사이의 안전한 연결을 보장해 주고 주고받는 정보의 도난을 막아줍니다.
  • TLS: SSL 프로토콜이 발전한 형태입니다.
  • TLS는 응용 계층전송 계층 사이에서 데이터의 암/복호화를 진행합니다.
  • SSL은 공개키 방식과 대칭키 방식을 혼합해서 사용합니다.

대칭키 방식

  • 동일한 키로 암호화와 복호화를 수행합니다.
  • 암호화 및 복호화가 쉽다는 장점이 있습니다.
  • 전달중인 키를 도둑맞으면 정보가 유출되는 단점이 있습니다.

공개키 방식

  • 서로다른 키로 암호화와 복호화를 수행합니다.
  • 데이터 암호화에는 공개키를 사용하고, 데이터 복호화에는 개인키를 사용합니다.
  • 공개키를 도난당해도 정보가 유출되지 않습니다. 대칭키 방식보다 안전합니다.
  • 대칭키 방식보다 암호화 연산의 시간이 더 길어 비용적으로 불리합니다.

SSL 통신 과정

두 컴퓨터 간의 통신

    1. A가 B에게 접속을 요청합니다.
    1. B는 A에게 자신의 공개키를 전달합니다.
    1. A는 B의 공개키로 자신의 대칭키를 암호화 합니다.
    1. 3에서 암호화 한 대칭키를 B에게 전달합니다.
    1. B는 자신의 개인키로 4에서 받은 암호화된 대칭키를 복호화 합니다.
    1. 5의 결과로 A와 B는 서로의 대칭키를 가지게 되었고, 이를 통해 암호화된 통신이 가능해 졌습니다.

CA를 활용한 사이트 인증

    1. 사이트는 사이트 인증서를 받기 위해 사이트 정보와 사이트 공개키를 인증기관에 전송합니다.
    1. 인증기관은 사이트에게 받은 사이트 정보와 사이트 공개키를 검증합니다. 검증이 완료되면 인증기관의 개인키로 사이트의 정보와 사이트 공개키를 서명합니다.

    1. 서명으로 생성된 사이트 인증서를 해당 사이트에 돌려줍니다.
    1. 인증기관은 사용자에게 인증기관 공개키를 전달합니다.
    1. 사용자가 해당 사이트에 접속을 요청하면 사이트는 자신의 인증서를 사용자에게 전달합니다.
    1. 사용자는 전달받은 사이트 인증서를 인증기관의 공개키로 복호화 해 들어있는 내용을 확인합니다.
    1. 사용자는 사이트의 공개키로 자신의 대칭키를 암호화한 뒤 사이트에 전달합니다.

    1. 사이트는 자신의 개인키로 7에서 받은 암호화된 대칭키를 복호화 합니다.
    1. 8의 결과로 A와 B는 서로의 대칭키를 가지게 되었고, 이를 통해 암호화된 통신이 가능해 졌습니다.

References

profile
기록하고 정리하는 걸 좋아하는 개발자.

0개의 댓글