ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2장 네트워크
    Books/면접을 위한 CS 전공지식 노트 2023. 1. 25. 20:57

    - 네트워크는 컴퓨터 등의 장치들이 통신 기술을 이용하여 구축하는 연결망을 지칭하는 용어

     

    2.1 네트워크의 기초

    - 네트워크란 노드(node)와 링크(link)가 서로 연결되어 있으며 리소스를 공유하는 집합을 의미한다.

    - 여기서 노드란 서버, 라우터, 스위치 등 네트워크 장치를 의미하고 링크는 유선 또는 무선을 의미

     

    2.1.1 처리량과 지연시간

    - 네트워크를 구축할 때는 '좋은' 네트워크로 만드는 것이 중요하다

    - 좋은 네트워크란 많은 처리량을 처리할 수 있으며 지연 시간이 짧고 장애 빈도가 적으며 좋은 보안을 갖춘 네트워크

     

    처리량

    - 처리량(throughput)이란 링크를 통해 전달되는 단위 시간당 데이터 양

    - 단위로는 bps(bits per second)를 쓴다. 초당 전송 또는 수신되는 비트 수라는 의미

    - 처리량은 사용자들이 많이 접속할 때마다 커지는 트래픽, 네트워크 장치 간의 대역폭, 네트워크 중간에 발생하는 에러, 장치 하드웨어 스펙에 영향을 받는다

     

    * 대역폭

    - 주어진 시간 동안 네트워크 연결을 통해 흐를 수  있는 최대 비트 수

     

    지연시간

    - 지연시간(latency)이란 요청이 처리되는 시간을 말하며 어떤 메시지가 두 장치 사이를 왕복하는 데 걸린 시간을 말함

    - 지연시간은 매체 타입(무선, 유선), 패킷 크기, 라우터의 패킷 처리 시간에 영향을 받는다.

     

    2.1.2 네트워크 토폴로지와 병목 현상

    네트워크 토폴로지

    - 네트워크를 설계할 때 고려하는 네트워크 토폴로지를 알아보자!

    - 네트워크 토폴로지(network topology)는 노드와 링크가 어떻게 배치되어 있는지에 대한 방식이자 연결 형태를 의미

     

    1. 트리 토폴로지

    - 트리(tree) 토폴로지는 계층형 토폴로지라고 하며 트리 형태로 배치한 네트워크 구성을 말한다.

    - 노드의 추가, 삭제가 쉬우며 특정 노드에 트래픽이 집중될 때 하위 노드에 영향을 끼칠 수 있다

     

    2. 버스 토폴로지

    - 버스(bus) 토폴로지는 중앙 통신 회선 하나에 여러 개의 노드가 연결되어 공유하는 네트워크 구성을 말하며 근거리 통신망(LAN)에서 사용

    - 설치 비용이 적고 신뢰성이 우수하며 중앙 통신 회선에 노드를 추가하거나 삭제하기 쉽다.

    - 그러나 스푸핑이 가능한 문제점 존재

     

    스푸핑

    - 스푸핑은 LAN상에서 송신부의 패킷을 송신과 관련 없는 다른 호스트에 가지 않도록 하는 스위칭 기능을 마비시키거나 속여서 특정 노드에 해당 패킷이 오도록 처리하는 것을 말한다.

    - 스푸핑을 적용하면 올바르게 수신부로 가야 할 패킷이 악의적인 노드에 전달되게 된다

     

    3. 스타 토폴로지

    - 스타(star, 성형) 토폴로지는 중앙에 있는 노드에 모두 연결된 네트워크 구성을 말한다.

    - 노드를 추가하거나 에러를 탐지하기 쉽고 패킷의 충돌 발생 가능성이 적다.

    - 또한, 어떠한 노드에 장애가 발생해도 쉽게 에러를 발견할 수 있으며

        장애 노드가 중앙 노드가 아닐 경우 다른 노드에 영향을 끼치는 것이 적다.

    - 하지만 중앙 노드에 장애가 발생하면 전체 네트워크를 사용할 수 없고 설치 비용이 고가이다.

     

    4. 링형 토폴로지

    - 링형(ring) 토폴로지는 각각의 노드가 양 옆의 두 노드와 연결하여 전체적으로 고리처럼 하나의 연속된 길을 통해 통신을 하는 망 구성 방식

    - 데이터는 노드에서 노드로 이동을 하게 되며, 각각의 노드는 고리 모양의 길을 통해 패킷을 처리

    - 노드 수가 증가되어도 네트워크상의 손실이 거의 없고 충돌이 발생되는 가능성이 적고 노드의 고장 발견을 쉽게 찾을 수 있다

    - 하지만 네트워크 구성 변경이 어렵고 회선에 장애가 발생하면 전체 네트워크에 영향을 크게 끼치는 단점이 있다

     

    5. 메시 토폴로지

    - 메시(mesh) 토폴로지는 망형 토폴로지라고도 하며 그물망처럼 연결되어 있는 구조

    - 한 단말 장치에 장애가 발생해도 여러 개의 경로가 존재하므로 네트워크를 계속 사용할 수 있고 트래픽도 분산 처리가 가능

    - 하지만 노드의 추가가 어렵고 구축 비용과 운영 비용이 고가인 단점이 있다

     

    병목 현상

    - 네트워크의 구조라고도 일컫는 토폴로지가 중요한 이유는 병목 현상을 찾을 때 중요한 기준이 되기 때문이다.

    - 예를 들어 서비스를 만들었는데, 병목 현상이 일어나서 사용자가 서비스를 이용할 때 지연 시간이 길게 발생하고 있다

        ㆍ관리자가 지연 시간을 짧게 만들기 위해 대역폭을 크게 설정했음에도 성능이 개선되지 않았다.

        ㆍ관리자가 네트워크 토폴로지가 어떻게 되어 있나 확인했고,

             서버와 서버 간 그리고 게이트웨이로 이어지는 회선을 추가해서 병목현상 해결

    - 이처럼 네트워크가 어떤 토폴로지를 갖는지, 또한 어떠한 경로로 이루어져 있는지 알아야 병목 현상을 올바르게 해결할 수 있다.

     

    * 병목현상

    - 병목(bottleneck) 현상은 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상을 말한다

    - 예를 들어 병의 몸통보다 병의 목 부분 내부 지름이 좁아서 물이 상대적으로 천천히 쏟아지는 것에 비유할 수 있다

    - 서비스에서 이벤트를 열었을 때 트래픽이 많이 생기고

         그 트래픽을 잘 관리하지 못하면 병목 현상이 생겨 사용자는 웹 사이트로 들어가지 못한다.

     

    2.1.3 네트워크 분류

    - 네트워크는 규모를 기반으로 분류할 수 있다.

    - 사무실과 개인적으로 소유 가능한 규모인 LAN(Local Area Network)과

        서울시 등 시 정도의 규모인 MAN(Metropolitan Area Network),

        그리고 세계 규모의 WAN(Wide Area Network)으로 나뉜다.

     

    LAN

    - LAN은 근거리 통신망을 의미하며 같은 건물이나 캠퍼스 같은 좁은 공간에서 운영된다.

    - 전송 속도가 빠르고 혼잡하지 않다.

     

    MAN

    - MAN은 대도시 지역 네트워크를 나타내며 도시 같은 넓은 지역에서 운영된다.

    - 전송 속도는 평균이며 LAN보다는 더 많이 혼잡하다

     

    WAN

    - WAN은 광역 네트워크를 의미하며 국가 또는 대륙 같은 더 넓은 지역에서 운영된다.

    - 전송 속도는 낮으며 MAN보다 더 혼잡하다.

     

    2.1.4 네트워크 성능 분석 명령어

    - 애플리케이션 코드상에는 전혀 문제가 없는데 사용자가 서비스로부터 데이터를 가져오지 못하는 상황이 발생되기도 하며,

       이는 네트워크 병목현상일 가능성이 있습니다.

    - 네트워크 병목 현상의 주된 원인

        ㆍ네트워크 대역폭

        ㆍ네트워크 토폴로지

        ㆍ서버 CPU, 메모리 사용량

        ㆍ비효율적인 네트워크 구성

    - 이때는 네트워크 관련 테스트와 네트워크와 무관한 테스트를 통해 '네트워크로부터 발생한 문제점'인 것을 확인한 후 네트워크 성능 분석을 해봐야 한다.

    - 이때 사용되는 명령어들을 알아보자

     

    ping

    - ping(Packet INternet Groper)은 네트워크 상태를 확인하려는 대상 노드를 향해 일정 크기의 패킷을 전송하는 명령어

    - 이를 통해 해당 노드의 패킷 수신 상태와 도달하기까지 시간 등을 알 수 있으며

       해당 노드까지 네트워크가 잘 연결되어 있는지 확인할 수 있다.

    - ping은 TCP/IP 프로토콜 중에 ICMP 프로토콜을 통해 동작하며,

       이 때문에 ICMP 프로토콜을 지원하지 않는 기기를 대상으로 실행할 수 없거나

       네트워크 정책상 ICMP나 traceroute를 차단하는 대상의 경우 ping 테스팅은 불가능하다

    - ping [ IP 주소 또는 도메인 주소 ] 로 실행

    ping www.google.com -n 12

    - -n 12 옵션을 넣어서 12번의 패킷을 보내고 12번의 패킷을 받는 모습을 볼 수 있다.

     

    netstat

    - netstat 명령어는 접속되어 있는 서비스들의 네트워크 상태를 표시하는 데 사용되며

       네트워크 접속, 라우팅 테이블, 네트워크 프로토콜 등 리스트를 보여준다.

    - 주로 서비스의 포트가 열려 있는지 확인할 때 사용

    - 지금 내가 접속하고 있는 사이트 등에 관한 네트워크 상태 리스트를 볼 수 있다.

     

    nslookup

    - nslookup은 DNS에 관련된 내용을 확인하기 위해 쓰는 명령어

    - 특정 도메인에 매핑된 IP를 확인하기 위해 사용

     

    tracert

    - 윈도우에서는 tracert이고 리눅스에서는 traceroute라는 명령어로 구동

    - 이것은 목적지 노드까지 네트워크 경로를 확인할 때 사용하는 명령어

    - 목적지 노드까지 구간들 중 어느 구간에서 응답 시간이 느려지는지 등을 확인

    - 이외에도 ftp를 통해 대형 파일을 전송하여 테스팅하거나 tcpdump를 통해 노드로 오고 가는 패킷을 캡처하는 등의 명령어가 있으며

        네트워크 분석 프로그램으로는 wireshark, netmon 이 있음

     

    2.1.5 네트워크 프로토콜 표준화

    - 네트워크 프로토콜이란 다른 장치들끼리 데이터를 주고받기 위해 설정된 공통된 인터페이스를 말한다.

    - 이러한 프로토콜은 기업이나 개인이 발표해서 정하는 것이 아니라 IEEE 또는 IETF 라는 표준화 단체가 이를 정한다.

    - IEEE802.3은 유선 LAN 프로토콜로, 유선으로 LAN을 구축할 때 쓰이는 프로토콜이다.

    - 이를 통해 만든 기업이 다른 장치라도 서로 데이터를 수신 가능

    - 예를 들어 웹을 접속할 때 쓰이는 HTTP가 있다.

        ㆍ'서로 약속된' 인터페이스인 HTTP라는 프로토콜을 통해 노드들은 웹 서비스를 기반으로 데이터를 주고 받을 수 있다.

     

    2.2 TCP/IP 4계층 모델

    - 인터넷 프로토콜 스위트(internet protocol suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜의 집합이며,

       이를 TCP/IP 4계층 모델로 설명하거나 OSI 7계층 모델로 설명하기도 한다.

    - 이 책에서는 TCP/IP(Transmission Control Protocol/Internet Protocol) 4계층 모델을 중심으로 설명하며,

        이 계층 모델은 네트워크에서 사용되는 통신 프로토콜의 집합으로

        계층들은 프로토콜의 네트워킹 범위에 따라 네 개의 추상화 계층으로 구성

     

    2.2.1 계층 구조

    - TCP/IP 계층은 네 개의 계층을 가지고 있으며 OSI 7계층과 많이 비교한다.

    - TCP/IP 계층과 달리 OSI 계층은 애플리케이션 계층을 세 개로 쪼개고

        링크 계층을 데이터 링크 계층, 물리 계층으로 나눠서 표현하는 것이 다르며, 

        인터넷 계층을 네트워크 계층으로 부른다는 점이 다르다.

    - 이 계층들은 특정 계층이 변경되었을 때 다른 계층이 영향이 받지 않도록 설계되었다.

    - 예를 들어 전송 계층에서 TCP를 UDP로 변경했다고 해서 인터넷 웹 브라우저를 다시 설치해야 하는 것은 아니듯 유연하게 설계

    - TCP/IP 4계층

        ㆍ애플리케이션 계층 : FTP / HTTP / SSH / SMTP / DNS

        ㆍ전송 계층 : TCP / UDP / QUIC

        ㆍ인터넷 계층 : IP / ARP / ICMP

        ㆍ링크 계층 : 이더넷

     

    애플리케이션 계층

    - 애플리케이션(application) 계층은 FTP, HTTP, SSH, SMTP, DNS 등 응용 프로그램이 사용되는 프로토콜 계층이며

        웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 층이다.

    * 프로토콜 종류

    FTP 장치와 장치 간의 파일을 전송하는 데 사용되는 표준 통신 프로토콜
    SSH 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜
    HTTP World Wide Web을 위한 데이터 통신의 기초이자 웹 사이트를 이용하는 데 쓰는 프로토콜
    SMTP 전자 메일 전송을 위한 인터넷 표준 통신 프로토콜
    DNS 도메인 이름과 IP 주소를 매핑해주는 서버
    예를 들어 www.naver.com  에 DNS 쿼리가 오면 [Root DNS] → [.com DNS] → [.naver DNS] → [.www DNS] 과정을 거쳐 완벽한 주소를 찾아 IP주소를 매핑한다.
    이를 통해 IP 주소가 바뀌어도 사용자들에게 똑같은 도메인 주소로 서비스할 수 있다.
    예를 들어 www.naver.com  의 IP 주소가 222.111.222.111에서 222.111.222.122로 바뀌었음에도 똑같은 www.naver.com  이라는 주소로 서비스가 가능하다

     

    전송계층

    - 전송(transport) 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하며 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어를 제공할 수 있으며 애플리케이션과 인터넷 계층 사이의 데이터가 전달될 때 중계역할을 한다.

    - 대표적으로 TCP와 UDP가 있다.

    - TCP는  패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연결을 하여 신뢰성을 구축해서 수신 여부를 확인하며 '가상회선 패킷 교환 방식'을 사용한다.

    - UDP는 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 '데이터그램 패킷 교환 방식'을 사용한다.

     

    * 가상회선 패킷 교환 방식

    - 가상회선 패킷 교환 방식은 각 패킷에는 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 '순서대로' 도착하는 방식을 말한다.

    - 패킷이 어떠한 회선을 따라 순서대로 도착

     

    * 데이터그램 패킷 교환 방식

    - 데이터그램 패킷 교환 방식이란 패킷을 독립적으로 이동하며 최적의 경로를 선택하여 가는데, 하나의 메시지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있으며 도착한 '순서가 다를 수' 있는 방식을 뜻한다.

    - 패킷이 순서도 다르고 어떠한 회선을 중심으로 가는 것이 아니라 따로따로 이동하며 순서도 다르게 도착

     

    * TCP 연결 성립 과정

    - TCP는 신뢰성을 확보할 때 '3-웨이 핸드셰이크(3-way handshake)' 라는 작업을 진행한다.

    1. SYN 단계 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보낸다.
    ISN 은 새로운 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호를 말하며 이는 장치마다 다를 수 있다.
    2. SYN + ACK 단계 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보낸다.
    3. ACK 단계 클라이언트는 서버의 ISN +1 한 값인 승인번호를 담아 ACK를 서버에 보낸다.

    - 이렇게 3-웨이 핸드셰이크 과정 이후 신뢰성이 구축되고 데이터 전송을 시작한다.

    - 참고로 TCP는 이 과정이 있기 때문에 신뢰성이 있는 계층이라고 하며

       UDP는 이 과정이 없기 때문에 신뢰성이 없는 계층이라고 한다

     

    * SYN : SYNchronization 의 약자, 연결 요청 플래그

    * ACK : ACKnowledgemnet 의 약자, 응답 플래그

    * ISN : Initial Sequence Numbers 의 약어, 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호

     

    * TCP 연결 해제 과정

    - TCP가 연결을 해제할 때는 4-웨이 핸드셰이크(4-way handshake) 과정이 발생

    1. - 먼저 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보낸다.
    - 그리고 클라이언트는 FIN_WAIT_1 로 들어가고 서버의 응답을 기다린다.
    2. - 서버는 클라이언트로 ACK라는 승인 세그먼트를 보낸다.
    - 그리고 CLOSE_WAIT 상태에 들어간다.
    - 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.
    3. - 서버는 ACK를 보내고 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보낸다.
    4. - 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 된다.
    - 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제

    - TIME_WAIT : 그냥 연결을 닫으면 되지 왜 굳이 일정시간 뒤에 닫을까?

        ㆍ1. 첫번째는 지연 패킷이 발생할 경우를 대비하기 위함

              º 패킷이 뒤늦게 도달하고 이를 처리하지 못한다면 데이터 무결성 문제 발생

        ㆍ2. 두 장치가 연결이 닫혔는지 확인하기 위해서

              º 만약 LAST_ACK 상태에서 닫히게 되면 다시 새로운 연결을 하려고 할 때

                장치는 줄곧 LAST_ACK로 되어 있기 때문에 접속 오류가 나타나게 될 것

     

    * TIME_WAIT

    - 소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태를 말하며 지연 패킷 등의 문제점을 해결하는 데 쓰인다.

    - CentOS6, 우분투에는 60초로 설정되어 있으며 원도우는 4분으로 설정되어 있다.

    - 즉, OS마다 조금씩 다를 수 있다.

     

    * 데이터 무결성 (data integrity)

    - 데이터의 정확성과 일관성을 유지하고 보증하는 것

     

    인터넷 계층

    - 인터넷(internet) 계층은 장치로부터 받은 네트워크 패킷을 IP 주소로 지정된 목적지로 전송하기 위해 사용되는 계층

    - IP, ARP, ICMP 등이 있으며 패킷을 수신해야 할 상대의 주소를 지정하여 데이터를 전달

    - 상대방이 제대로 받았는지에 대해 보장하지 않는 비연결형적인 특징이 있다.

     

    링크 계층

    - 링크 계층은 전선, 광섬유, 무선 등으로 실질적으로 데이터를 전달하며 장치 간에 신호를 주고받는 '규칙'을 정하는 계층

    - 참고로 네트워크 접근 계층이라고도 함

    - 이를 물리 계층과 데이터 링크 계층으로 나누기도 하는데

       물리계층은 무선 LAN과 유선 LAN을 통해 0과 1로 이루어진 데이터를 보내는 계층을 말하며,

       데이터 링크 계층은 '이더넷 프레임'을 통해 에러 확인, 흐름 제어, 접근 제어를 담당하는 계층을 말한다.

     

    * 유선 LAN (IEEE802.3)

    - 유선 LAN을 이루는 이더넷은 IEEE802.3 이라는 프로토콜을 따르며 전이중화 통신을 쓴다

     

    ※ 전이중화 통신

    - 전이중화(full duplex) 통신은 양쪽 장치가 동시에 송수신할 수 있는 방식을 말한다.

    - 이는 송신로와 수신로로 나눠서 데이터를 주고받으며 현대의 고속 이더넷은 이 방식을 기반으로 통신하고 있다.

     

    CSMA/CD

    - 참고로 이전에는 유선 LAN에 '반이중화 통신' 중 하나인 CSMA/CD(Carrier SenseMultiple Access with Collision Detection) 방식을 썼다.

    - 이 방식은 데이터를 '보낸 이후' 충돌이 발생한다면 일정 시간 이후 재전송하는 방식을 말한다.

    - 이는 수신로와 송신로를 각각 둔 것이 아니고 한 경로를 기반으로 데이터를 보내기 때문에 데이터를 보낼 때 충돌에 대해 대비해야 했기 때문

     

    * 유선 LAN을 이루는 케이블

    - 유선 LAN을 이루는 케이블로는 TP 케이블이라고 하는 트위스트 페어 케이블과 광섬유 케이블이 대표적

     

    ※ 트위스트 페어 케이블

    - 트위스트 페어 케이블(twisted pair cable)은 하나의 케이블처럼 보이지만 실제로는 여덟개의 구리선을 두 개씩 꼬아서 묶은 케이블을 지칭

    - 케이블은 구리선을 실드 처리하지 않고 덮은 UTP 케이블과 실드 처리하고 덮은 STP로 나눠진다.

    - 여기서 우리가 많이 볼 수 잇는 케이블은 UTP 케이블로 흔히 LAN 케이블이라고 한다.

    - 참고로 이 LAN 케이블을 꽂을 수 있는 커넥터를 RJ-45 커넥터라고 한다.

     

    ※ 광섬유 케이블

    - 광섬유 케이블은 광섬유로 만든 케이블

    - 레이저를 이용해서 통신하기 때문에 구리선과는 비교할 수 없을 만큼의 장거리 및 고속 통신이 가능

    - 보통 100Gbps의 데이터를 전송하며, 광섬유 내부와 외부를 다른 밀도를 가지는 유리나 플라스틱 섬유로 제작해서 한 번 들어간 빛이 내부에서 계속적으로 반사하며 전진하여 반대편 끝까지 가는 원리를 이용

    - 참고로 빛의 굴절률이 높은 부분을 코어(core)라고 하며 낮은 부분을 클래딩(cladding)이라고 한다.

     

    * 무선 LAN(IEEE802.11)

    - 무선 LAN 장치는 수신과 송신에 같은 채널을 사용하기 때문에 반이중화 통신을 사용

     

    ※ 반이중화 통신

    - 반이중화 통신(half duplex)은 양쪽 장치는 서로 통신할 수 있지만, 동시에는 통신할 수 없으며 한 번에 한 방향만 통신할 수 있는 방식을 말한다.

    - 일반적으로 장치가 신호를 수신하기 시작하면 응답하기 전에 전송이 완료될 때까지 기다려야 한다.

    - 또한, 둘 이상의 장치가 동시에 전송하면 충돌이 발생하여 메시지가 손실되거나 왜곡될 수 있기 때문에 충돌 방지 시스템이 필요

     

    ※ CSMA/CA

    - CSMA/CA는 반이중화 통신 중 하나로 장치에서 데이터를 보내기 전에 캐리어 감지 등으로 사전에 가능한 한 충돌을 방지하는 방식을 사용한다.

    1. 데이터를 송신하기 전에 무선 매체를 살핀다.
    2. 캐리어 감지 : 회선이 비어 있는지를 판단한다.
    3. IFS(Inter FrameSpace) : 랜덤 값을 기반으로 정해진 시간만큼 기다리며, 만약 무선 매체가 사용 중이면 점차 그 간격을 늘려가며 기다린다.
    4. 이후에 데이터를 송신

    - 참고로 이와 반대되는 전이중화 통신은 양방향 통신이 가능하므로 충돌 가능성이 없기 때문에 충돌을 감지하거나 방지하는 매커니즘이 필요하지 않다.

     

    * 무선 LAN을 이루는 주파수

    - 무선 LAN(WLAN, Wireless Local Area Network)은 무선 신호 전달 방식을 이용하여 2대 이상의 장치를 연결하는 기술

    - 비유도 매체인 공기에 주파수를 쏘아 무선 통신망을 구축하는데, 주파수 대역은 2.4GHz 대역 또는 5GHz 대역 중 하나를 써서 구축한다.

    - 2.4GHz는 장애물에 강한 특성을 가지고 있지만 전자레인지, 무선 등 전파 간섭이 일어나는 경우가 많고

      5GHz 대역은 사용할 수 있는 채널 수도 많고

      동시에 사용할 수 있기 때문에 상대적으로 깨끗한 전파 환경을 구축할 수 있다.

    - 그렇기에 보통은 5GHz 대역을 사용하는 것이 좋다.

     

     와이파이

    - 와이파이(wifi)는 전자기기들이 무선 LAN 신호에 연결할 수 있게 하는 기술

    - 이를 사용하려면 무선 접속 장치(AP, Access Point)가 있어야 한다.

    - 흔히 공유기라고 하며,이를 통해 유선 LAN에 흐르는 신호를 무선 LAN 신호로 바꿔주어 신호가 닿는 범위 내에서 무선 인터넷을 사용할 수 있게 된다.

    - 참고로 무선 LAN을 이용한 기술로는 와이파이만 있는 것이 아니고 지그비, 블루투스 등이 있다.

    ※  BSS

    - BSS(Basic Serivce Set)는 기본 서비스 집합을 의미

    - 단순 공유기를 통해 네트워크 에 접속하는 것이 아닌 동일 BSS 내에 있는 AP들과 장치들이 서로 통신이 가능한 구조를 말한다.

    - 근거리 무선 통신을 제공하고, 하나의 AP만을 기반으로 구축이 되어 있어 사용자가 한 곳에서 다른 곳으로 자유롭게 이동하며 네트워크에 접속하는 것은 불가능하다.

    ※ ESS

    - ESS(Extended Service Set)는 하나 이상의 연결된 BSS 그룹이다.

    - 장거리 무선 통신을 제공하며 BSS보다 더 많은 가용성과 이동성을 지원

    - 즉, 사용자는 한 장소에서 다른 장소로 이동하며 중단없이 네트워크에 계속 연결 가능

     

    * 이더넷 프레임

    - 참고로 데이터 링크 계층은 이더넷 프레임을 통해 전달받은 데이터의 에러를 검출하고 캡슐화하며 다음과 같은 구조를 가진다.

    1. Preamble 이더넷 프레임이 시작임을 알린다.
    2. SFD(Start Frame Delimiter) 다음 바이트부터 MAC 주소 필드가 시작됨을 알린다.
    3. DMAC, SMAC 수신, 송신 MAC 주소를 말한다.
    4. EtherType 데이터 계층 위의 계층인 IP 프로토콜을 정의
    예를 들어 IPv4 또는 IPv6가 된다.
    5. Payload 전달받은 데이터
    6. CRC 에러 확인 비트

    * MAC 주소

    - 컴퓨터나 노트북 등 각 장치에는 네트워크에 연결하기 위한 장치(LAN 카드)가 있는데, 이를 구별하기 위한 식별번호를 말한다.

    - 6바이트(48비트)로 구성된다.

     

    계층 간 데이터 송수신 과정

    - 컴퓨터를 통해 다른 컴퓨터로 데이터를 요청한다면 어떠한 일이 일어날까?

    - 애플리케이션 계층에서 전송 계층으로 보내는 요청(request) 값들이 캡슐화 과정을 거쳐 전달되고,

      다시 링크 계층을 통해 해당 서버와 통신을 하고,

      해당 서버의 링크 계층으로부터 애플리케이션까지 비캡슐화 과정을 거쳐 데이터가 전송된다

     

    * 캡슐화 과정

    - 캡슐화 과정은 상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시키고 해당 계층의 헤더를 삽입하는 과정

    - 애플리케이션 계층의 데이터가 전송 계층으로 전달되면서 '세그먼트' 또는 '데이터그램'화되면 TCP(L4) 헤더가 붙여지게 된다.

    - 그리고 이후 인터넷 계층으로 가면서 IP(L3) 헤더가 붙여지게 되며 '패킷'화가 되고,

      이후 링크 계층으로 전달되면서 프레임 헤더와 프레임 트레일러가 붙어 '프레임'화가 된다.

     

    * 비캡슐화 과정

    - 비캡슐화 과정은 하위 계층에서 상위 계층으로 가며 각 계층의 헤더 부분을 제거하는 과정

    - 이렇게 캡슐화된 데이터를 받게 되면 링크 계층에서부터 타고 올라오면서 프레임화된 데이터는 다시 패킷화를 거쳐 세그먼트, 데이터그램화를 거쳐 메시지화가 되는 비캡슐화 과정이 일어난다.

    - 그 이후 최종적으로 사용자에게 애플리케이션의 PDU인 메시지로 전달

     

    2.2.2 PDU

    - 네트워크의 어떠한 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위를 PDU(Protocol Data Unit)라고 한다.

    - PDU는 제어 관련 정보들이 포함된 '헤더', 데이터를 의미하는 '페이로드'로 구성되어 있으며 계층마다 부르는 명칭이 다르다.

        ㆍ애플리케이션 계층 : 메시지

        ㆍ전송 계층 : 세그먼트(TCP), 데이터그램(UDP)

        ㆍ인터넷 계층 : 패킷

        ㆍ링크 계층 : 프레임(데이터 링크 계층), 비트(물리 계층)

     

    - 예를 들어 애플리케이션 계층은 '메시지'를 기반으로 데이터를 전달하는데, HTTP의 헤더가 문자열인 것을 예를 들 수 있다.

    - 응답(response) 헤더 값이 모두 문자열인 것으로 확인 가능

    - 참고로 PDU 중 아래 계층인 비트로 송수신하는 것이 모든 PDU 중 가장 빠르고 효율성이 높다.

    - 하지만 애플리케이션 계층에서는 문자열을 기반으로 송수신을 하는데, 그 이유는 헤더에 authorization 값 등 다른 값들을 넣는 확장이 쉽기 때문이다.

     

    2.3 네트워크 기기

    - 네트워크는 여러 개의 네트워크 기기를 기반으로 구축된다.

    2.3.1 네트워크 기기의 처리 범위

    - 네트워크 기기는 계층별로 처리 범위를 나눌 수 있다.

    - 물리 계층을 처리할 수 있는 기기와 데이터 링크 계층을 처리할 수 있는 기기 등이 있다.

    - 그리고 상위 계층을 처리하는 기기는 하위 계층을 처리할 수 있지만 그 반대는 불가능

    - 예를 들어 L7 스위치는 애플리케이션 계층을 처리하는 기기로, 그 밑의 모든 계층의 프로토콜을 처리할 수 있다.

    - 하지만 AP는 물리 계층밖에 처리하지 못한다.

     

        ㆍ애플리케이션 계층 : L7 스위치

        ㆍ인터넷 계층 : 라우터, L3 스위치

        ㆍ데이터 링크 계층 : L2 스위치, 브리지

        ㆍ물리 계층 : NIC, 리피터, AP

     

    2.3.2 애플리케이션 계층을 처리하는 기기

    - 애플리케이션 계층을 처리하는 기기로는 L7 스위치가 있다

     

    L7 스위치

    - 스위치는 여러 장비를 연결하고 데이터 통신을 중재하며 목적지가 연결된 포트로만 전기 신호를 보내 데이터를 전송하는 통신 네트워크 장비

    - L7 스위치는 로드밸런서라고도 하며, 서버의 부하를 분산하는 기기

    - 클라이언트로 부터 오는 요청들을 뒤쪽의 여러 서버로 나누는 역할을 하며 시스템이 처리할 수 있는 트래픽 증가를 목표로 한다.

    - URL, 서버, 캐시 쿠기들을 기반으로 트래픽을 분산한다.

    - 또한, 바이러스, 불필요한 외부 데이터 등을 걸러내는 필터링 기능 또한 가지고 있으며 응용 프로그램 수준의 트래픽 모니터링도 가능

    - 만약 장애가 발생한 서버가 있다면 이를 트래픽 분산 대상에서 제외해야 하는데, 이는 정기적으로 헬스 체크(health check)를 이용하여 감시하면서 이루어진다.

     

    * L4 스위치와 L7 스위치 차이

    - 로드밸런서로는 L7 스위치뿐만 아니라 L4 스위치도 있다.

    - L4 스위치는 전송 계층을 처리하는 기기로 스트리밍 관련 서비스에서는 사용할 수 없으며 메시지를 기반으로 인식하지 못하고 IP와 포트를 기반으로 ( 특히 포트를 기반으로 ) 트래픽을 분산한다.

    - 반면 L7 로드밸런서는 IP, 포트 외에도 URL, HTTP 헤더, 쿠키 등을 기반으로 트래픽을 분산한다.

    - 참고로 클라우드 서비스( AWS 등 )에서 L7 스위치를 이용한 로드밸런싱은  ALB( Application Load Balancer ) 컴포넌트로 하며,

       L4 스위치를 이용한 로드밸런싱은 NLB( Network Load Balancer ) 컴포넌트로 한다

     

    * 헬스 체크

    - L4 스위치 또는 L7 스위치 모두 헬스 체크를 통해 정상적인 서버 또는 비정상적인 서버를 판별

    - 헬스 체크는 전송 주기와 재전송 횟수 등을 설정한 이후 반복적으로 서버에 요청을 보내는 것을 말한다

    - 물론 이때 서버에 부하가 되지 않을 만큼 요청 횟수가 적절해야 한다.

    - TCP, HTTP 등 다양한 방법으로 요청을 보내며 이 요청이 정상적으로 이루어졌다면 정상적인 서버로 판별한다.

    - 예를 들어 TCP 요청을 보냈는데 3-웨이 핸드셰이크가 정상적으로 일어나지 않았다면 정상적이지 않다.

     

    * 로드밸런서를 이용한 서버 이중화

    - 로드밸런서는 대표적인 기능으로 서버 이중화를 들 수 있다.

    - 서비스를 안정적으로 운용하기 위해서는 2대 이상의 서버는 필수적이다.

     - 에러가 발생하여 서버 1대가 종료되더라도 서비스는 안정적으로 운용되어야 하기 때문이다.

    - 로드밸런서는 2대 이상의 서버를 기반으로 가상 IP를 제공하고 이를 기반으로 안정적인 서비스를 제공한다

    - 예를 들어, 로드밸런서가 제공한 0.0.0.12010 이란 가상 IP에 사용자들이 접근하고 뒷단에 사용 가능한 서버인 0.0.0.12011 과 0.0.0.12012 를 기반으로 서빙한다.

    - 이렇게 하면 0.0.0..12011 이란 서버에 장애가 발생해도 그것과는 무방하게 0.0.012012 서버를 기반으로 안정적인 서비스를 운용할 수 있다.

     

    2.3.3 인터넷 계층을 처리하는 기기

    - 인터넷 계층을 처리하는 기기로는 라우터, L3 스위치가 있다

     

    라우터

    - 라우터(router)는 여러 개의 네트워크를 연결, 분할, 구분시켜주는 역할을 하며 "다른 네트워크에 존재하는 장치끼리 서로 데이터를 주고받을 때 패킷 소모를 최소화하고 경로를 최적화하여 최소 경로로 패킷을 포워딩"하는 라우팅을 하는 장비

     

    L3 스위치

    - L3 스위치란 L2 스위치의 기능과 라우팅 기능을 갖춘 장비

    - L3 스위치를 라우터라고 해도 무방하다

    - 라우터는 소프트웨어 기반의 라우팅과 하드웨어 기반의 라우팅을 하는 것으로 나눠지고

       하드웨어 기반의 라우팅을 담당하는 장비를 L3 스위치라고 한다.

    구분 L2 스위치 L3 스위치
    참조 테이블 MAC 주소 테이블 라우팅 테이블
    참조 PDU 이더넷 프레임 IP 패킷
    참조 주소 MAC 주소 IP 주소

     

    2.3.4 데이터 링크 계층을 처리하는 기기

    - 데이터 링크 계층을 처리하는 기기로는 L2 스위치와 브리지가 있다

     

    L2 스위치

    - L2 스위치는 장치들의 MAC 주소를 MAC 주소 테이블을 통해 관리하며, 연결된 장치로 부터 패킷이 왔을 때 패킷 전송을 담당

    - IP 주소를 이해하지 못해 IP 주소를 기반으로 라우팅은 불가능하며, 단순히 패킷의 MAC 주소를 읽어 스위칭하는 역할을 한다.

    - 목적지가 MAC 주소 테이블에 없다면 전체 포트에 전달하고 MAC 주소 테이블의 주소는 일정 시간 이후 삭제하는 기능도 있다

     

    브리지

    - 브리지(bridge)는 두 개의 근거리 통신망(LAN)을 상호 접속할 수 있도록 하는 통신망 연결 장치로, 포트와 포트 사이의 다리 역할을 하며 장치에서 받아온 MAC 주소를  MAC 주소 테이블로 관리한다.

    - 브리지는 통신망 범위를 확장하고 서로 다른 LAN 등으로 이루어진 '하나의' 통신망을 구축할 때 쓰인다.

     

    2.3.5 물리 계층을 처리하는 기기 

    - 물리 계층을 처리하는 기기는 NIC, 리피터, AP가 있다

     

    NIC

    - LAN 카드라고 하는 네트워크 인터페이스 카드(NIC, Network Interface Card)는 2대 이상의 컴퓨터 네트워크를 구성하는데 사용하며,

       네크워크와 빠른 속도로 데이터를 송수신 할 수 있도록 컴퓨터 내에 설치하는 확장 카드

    - 각 LAN  카드에는 주민등록번호처럼 각각을 구분하기 위한 고유의 식별번호인 MAC 주소가 있다

     

    리피터

    - 리피터(repeater)는 들어오는 약해진 신호 정도를 증폭하여 다른 쪽으로 전달하는 장치를 말한다.

    - 이를 통해 패킷이 더 멀리 갈 수 있다.

    - 하지만 이는 광케이블이 보급됨에 따라 현재는 잘 쓰이지 않는 장치

     

    AP

    - AP(Access Point) 는 패킷을 복사하는 기기

    - AP에 유선 LAN을 연결한 후 다른 장치에서 무선 LAN 기술(와이파이 등)을 사용하여 무선 네트워크 연결을 할 수 있다

     

    2.4 IP 주소

    - 앞서 인터넷 계층에 IP 주소를 쓴다고 했는데 IP 주소에 대해 알아보자.

     

    2.4.1 ARP

    - 컴퓨터와 컴퓨터 간의 통신은 흔히들 IP 주소 기반으로 통신한다고 알고 있지만 정확히 이야기하자면

       IP 주소에서 ARP를 통해 MAC 주소를 찾아 MAC 주소를 기반으로 통신한다.

    - ARP( Address Resolution Protocol )란 IP 주소로부터 MAC 주소를 구하는 IP와 MAC 주소의 다리 역할을 하는 프로토콜

    - ARP를 통해 가상 주소인 IP 주소를 실제 주소인 MAC 주소를 변환

    - 이와 반대로 RARP를 통해 실제 주소인 MAC 주소를 가상 주소인 IP 주소로 변환하기도 한다.

    - 장치 A가 ARP Request 브로드캐스트를 보내서 IP 주소인 120.70.80.3에  해당하는 MAC 주소를 찾는다.

    -그러고 나서 해당 주소에 맞는 장치 B가 'ARP reply 유니캐스트'를 통해 MAC 주소를 반환하는 과정을 거쳐 IP 주소에 맞는 MAC 주소를 찾게 된다.

     

    브로드캐스트

    - 송신 호스트가 전송한 데이터가 네트워크에 연결된 모든 호스트에 전송되는 방식

    유니캐스트

    - 고유 주소로 식별된 하나의 네트워크 목적지에 1:1로 데이터를 전송하는 방식

     

    2.4.2 홉바이홉 통신

    - IP 주소를 통해 통신하는 과정을 홉바이홉 통신이라고 한다.

    - 여기서 홉(hop)이란 영어 뜻 자체로는 건너뛰는 모습을 의미한다.

    - 이는 통신망에서 각 패킷이 여러 개의 라우터를 건너가는 모습을 비유적으로 표현한 것

    - 수많은 서브네트워크 안에 있는 라우터의 라우팅 테이블 IP를 기반으로 패킷을 전달하고 또 전달해나가며 라우팅을 수행하며 최종 목적지까지 패킷을 전달한다.

    - 즉, 통신 장치에 있는 '라우팅 테이블'의 IP를 통해 시작 주소부터 시작하여 다음 IP로 계속해서 이동하는 '라우팅' 과정을 거쳐 패킷이 최종 목적지까지 도달하는 통신

     

    ※ 라우팅 : IP 주소를 찾아가는 과정

     

    라우팅 테이블

    - 라우팅 테이블(routing table)은 송신지에서 수신지까지 도달하기 위해 사용되며 라우터에 들어가 있는 목적지 정보들과 그 목적지로 가기 위한 방법이 들어 있는 리스트를 뜻한다.

    - 라우팅 테이블에는 게이트웨이와 모든 목적지에 대해 해당 목적지에 도달하기 위해 거쳐야 할 다음 라우터의 정보를 가지고 있다.

     

    게이트 웨이

    - 게이트웨이(gateway)는 서로 다른 통신망, 프로토콜을 사용하는 네트워크 간의 통신을 가능하게 하는 관문 역할을 하는 컴퓨터나 소프트웨어를 두루 일컫는 용어이다.

    - 사용자는 인터넷에 접속하기 위해 수많은 톨게이트인 게이트웨이를 거쳐야 하며 게이트웨이는 서로 다른 네트워크상의 통신 프로토콜을 변환해주는 역할을 하기도 한다.

    - 게이트웨이를 확인하는 방법은 라우팅 테이블을 통해 볼 수 있으며,

       라우팅 테이블은 윈도우의 명령 프롬프트에서 netstat -r 명령어를 실행하여 확인할 수 있다.

    - IPv4 경로 테이블, IPv6 경로 테이블이 있는데 이것이 바로 라우팅 테이블이며, 게이트웨이, 인터페이스 등이 나오는 것을 볼 수 있다.

     

    2.4.3 IP 주소 체계

    - IP 주소는 IPv4와 IPv6로 나뉜다.

    - IPv4는 32비트를 8비트 단위로 점을 찍어 표기하며, 123.45.67.89 같은 방식으로 IP 주소를 나타낸다.

    - IPv6는 64비트를 16비트 단위로 점을 찍어 표기하며, 2001:db8::ff00:42:8329 같은 방식으로 IP 주소를 나타낸다.

    - 추세는 IPv6로 가고 있지만 현재는 가장 많이 쓰이는 주소 체계는 IPv4 이다.

     

    클래스 기반 할당 방식

    - IP 주소 체계는 과거를 거쳐 발전해오고 있으며 처음에는 A, B, C, D, E 다섯 개의 클래스로 구분하는 클래스 기반 할당 방식( classful network addressing )을 썼다.

    - 앞에 있는 부분을 네트워크 주소, 그 뒤에 있는 부분을 컴퓨터에 부여하는 주소인 호스트 주소로 놓아서 사용

    - 클래스 A , B, C 는 일대일 통신으로 사용되고 클래스 D는 멀티캐스트 통신, 클래스 E는 앞으로 사용할 예비용으로 쓰는 방식

    - 예를 들어 클래스 A의 경우 0.0.0.0 부터 127.255.255.255 까지의 범위를 갖는다.

    - 맨 왼쪽에 있는 비트를 '구분 비트'라고 한다.

    - 클래스 A의 경우 맨 왼쪽에 있는 비트가 0이다

    - 클래스 B는 10이다.

    - 클래스 C는 110이다.

    - 클래스 A에서 가질 수 있는 IP 범위는 00000000.00000000.00000000.00000000 ~ 01111111.11111111.11111111.11111111 이다.

    - 이를 십진수로 표현하면 0.0.0.0 ~ 127.255.255.255 이다.

    - 다른 네트워크도 이런 식의 주소 범위를 가진다고 생각하면 된다.

    - 네트워크의 첫 번째 주소는 네트워크 주소로 사용되고 가장 마지막 주소는 브로드 캐스트용 주소로 네트워크에 속해 있는 모든 컴퓨터에 데이터를 보낼 때 사용

    - 예를 들어 클래스 A로 12.0.0.0 이란 네트워크를 부여받았다고 해보자.

        ㆍ그렇다면 12.0.0.1 ~ 12.255.255.254 의 호스트 주소를 부여받은 것이다.

        ㆍ이때 첫 번째 주소인 12.0.0.0 은 네트워크 구별 주소로 사용하면 안되고

            가장 마지막 주소인 12.255.255.255 의 경우 브로드 캐스트용으로 남겨두어야 하니 이 또한 사용하면 안된다.

        ㆍ그렇기 때문에 그 사이에 있는 12.0.0.1 ~ 12.255.255.254 를 컴퓨터에 부여할 수 있는 호스트 주소로 사용할 수 있다.

    - 하지만 이 방식은 사용하는 주소보다 버리는 주소가 많은 단점이 있었고, 이를 해소하기 위해 DHCP 와 IPv6, NAT가 나온다.

     

    DHCP

    - DHCP(Dynamic Host Configuration Protocol) 는 IP 주소 및 기타 통신 매개변수를 자동으로 할당하기 위한 네트워크 관리 프로토콜

    - 이 기술을 통해 네트워크 장치의 IP 주소를 수동으로 설정할 필요 없이 인터넷에 접속할 때마다 자동으로 IP 주소를 할당할 수 있다.

    - 많은 라우터와 게이트웨이 장비에 DHCP 기능이 있으며 이를 통해 대부분의 가정용 네트워크에서 IP 주소를 할당한다.

     

    NAT

    - NAT(Network Address Translation)는 패킷이 라우팅 장치를 통해 전송되는 동안 패킷의 IP 주소 정보를 수정하여 IP 주소를 다른 주소로 매핑하는 방법

    - IPv4 주소 체계만으로는 많은 주소들을 모두 감당하지 못하는 단점이 있는데, 이를 해결하기 위해 NAT로 공인 IP와 사설IP로 나눠서 많은 주소를 처리한다.

    - NAT를 가능하게 하는 소프트웨어는 ICS, RRAS, Netfilter 등이 있다.

    - 회사는 192.168.0.xxx 를 기반으로 각각의 다른 IP를 가지고 있다

        ㆍ이를 사설 IP라고 한다.

        ㆍ그리고 NAT 장치를 통해 하나의 공인 IP인 121.165.151.200 으로 외부 인터넷에 요청할 수 있다.

        ㆍ하나의 IP인 121.165.151.200 을 기반으로 각각의 다른 IP를 가지는 것처럼 인터넷을 사용할 수 있다.

        ㆍ이처럼 NAT 장치를 통해 사설 IP를 공인 IP로 변환하거나 공인 IP를 사설 IP로 변환하는데 쓰인다.

     

    * 공유기와 NAT

    - NAT를 쓰는 이유는 주로 여러 대의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위함이다.

    - 예를 들어 인터넷 회선 하나를 개통하고 인터넷 공유기를 달아서 여러 PC를 연결하여 사용할 수 있는데, 

       이것이 가능한 이유는 인터넷 공유기에 NAT 기능이 탑재되어 있기 때문이다.

     

    * NAT를 이용한 보안

    - NAT를 이용하면 내부 네트워크에서 사용하는 IP 주소와 외부에 드러나는 IP 주소를 다르게 유지할 수 있기 때문에 내부 네트워크에 대한 어느 정도의 보안이 가능해진다.

    * NAT의 단점

    - NAT는 여러 명이 동시에 인터넷을 접속하게 되므로 실제로 접속하는 호스트 숫자에 따라서 접속 속도가 느려질 수 있다는 단점이 있다.

     

    2.4.4 IP 주소를 이용한 위치 정보

    - IP 주소는 인터넷에서 사용하는 네트워크 주소이기 때문에 이를 통해 동 또는 구까지 위치 추적이 가능하다.

     

    2.5 HTTP 

    - 기본적으로 HTTP는 앞서 설명한 전송 계층 위에 있는 애플리케이션 계층으로서 웹 서비스 통신에서 사용된다.

    - HTTP/1.0 부터 시작해서 발전을 거듭하여 지금은 HTTP/3 이며 HTTP/1.0부터 HTTP/3까지 알아보자

     

    2.5.1 HTTP/1.0

    - HTTP/1.0 은 기본적으로 한 연결당 하나의 요청을 처리하도록 설계되었다.

    - 이는 RTT 증가를 불러오게 되었다.

    - 서버로부터 파일을 가져올 때마다 TCP의 3-웨이 핸드셰이크를 계속해서 열어야 하기 때문에 RTT가 증가하는 단점이 있다.

     

    * RTT : 패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간이며 패킷 왕복 시간

     

    RTT의 증가를 해결하기 위한 방법

    - 매번 연결할 때마다 RTT가 증가하니 서버에 부담이 많이 가고 사용자 응답 시간이 길어졌다

    - 이를 해결하기 위해 이미지 스플리팅, 코드 압축, 이미지 Base64 인코딩을 사용하곤 했다

     

    * 이미지 스플리팅

    - 많은 이미지를 다운받게 되면 과부하에 걸리기 때문에 많은 이미지가 합쳐 있는 하나의 이미지를 다운로드받고, 이를 기반으로 background-image의 position을 이용하여 이미지를 표기하는 방법

    - 하나의 이미지 background-image: url("icons.png");, background-position 등을 기반으로 이미지를 설정

     

    * 코드 압축

    - 코드 압축은 코드를 압축해서 개행 문자, 빈칸을 없애서 코드의 크기를 최소화하는 방법

    - 개행문자, 띄어쓰기 등이 사라져 코드가 압축되면 코드 용량이 줄어든다.

     

    * 이미지 Base64 인코딩

    - 이미지 파일을 64진법으로 이루어진 문자열로 인코딩하는 방법이다.

    - 이 방법을 사용하면 서버와의 연결을 열고 이미지에 대한 서버에 HTTP 요청을 할 필요가 없는 장점이 있다.

    - 하지만 Base64 문자열로 반환할 경우 37% 정도 크기가 더 커지는 단점이 있다.

     

    * 인코딩 : 정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해 다른 형태나 형식으로 변환하는 처리방식

     

    2.5.2 HTTP/1.1

    - HTTP/1.0에서 발전한 것이 바로 HTTP/1.1 이다

    - 매번 TCP 연결을 하는 것이 아니라 한 번 TCP 초기화를 한 이후에 keep-alive라는 옵션으로 여러 개의 파일을 송수신할 수 있게 바뀌었다.

    - 참고로 HTTP/1.0 에서도 keep-alive 가 있었지만 표준화가 되어 있지 않았고 HTTP/1.1 부터 표준화가 되어 기본 옵션으로 설정

    - 한 번 TCP 3-웨이 핸드셰이크가 발생하면 그 다음부터 발생하지 않는 것을 확인할 수 있다.

    - 하지만 문서 안에 포함된 다수의 리소스(이미지, css 파일, script 파일)를 처리하려면 요청할 리소스 개수에 비례해서 대기 시간이 길어지는 단점이 있다.

     

    HOL Blocking

    - HOL Blocking( Head Of Line Blocking ) 은 네트워크에서 같은 큐에 있는 패킷이 그 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상을 말한다.

    - 예를 들어 image.jpg와 style.css, data.xml 을 다운로드받을 때 보통 순차적으로 잘 받아지지만 image.jpg가 느리게 받아진다면 그 뒤에 있는 것들이 대기하게 되며 다운로드가 지연되는 상태가 되는 것이다.

     

    무거운 헤더 구조

    - HTTP/1.1 의 헤더에는 쿠키 등 많은 메타데이터가 들어 있고 압축이 되지 않아 무거웠다.

     

    2.5.3 HTTP/2

    - HTTP/2 는 SPDY 프로토콜에서 파생된 HTTP/1.x 보다 지연 시간을 줄이고 응답 시간을 더 빠르게 할 수 있으며 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜

     

    멀티플렉싱

    - 멀티플렉싱이란 여러 개의 스트림을 사용하여 송수신한다는 것이다.

    - 이를 통해 특정 스트림의 패킷이 손실되었다고 하더라도 해당 스트림에만 영향을 미치고 나머지 스트림은 멀쩡하게 동작할 수 있다.

     

    * 스트림(stream)

    - 시간이 지남에 따라 사용할 수 있게 되는 일련의 데이터 요소를 가리키는 데이터 흐름

     

    - 병렬적인 스트림들을 통해 하나의 연결 내 여러 스트림으로 데이터를 서빙할 수 있다.

        ㆍ스트림 내의 데이터들도 쪼개져 있다.

        ㆍ애플리케이션에서 받아온 메시지를 독립된 프레임으로 조각내어 서로 송수신한 이후 다시 조립하며 데이터를 주고 받는다.

    - 이를 통해 단일 연결을 사용하여 병렬로 여러 요청을 받을 수 있고 응답을 줄 수 있다.

        ㆍ이렇게 되면 HTTP/1.x 에서 발생하는 문제인 HOT Blocking 을 해결할 수 있다.

     

    헤더 압축

    - HTTP/1.x 에는 크기가 큰 헤더라는 문제가 있었다.

    - 이를 HTTP/2 에서는 헤더 압축을 써서 해결하는데, 허프만 코딩 압축 알고리즘을 사용하는 HPACK 압축 형식을 가진다.

     

    허프만 코딩

    - 허프만 코딩(huffman coding)은 문자열을 문자 단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트 수를 사용하여 표현하고,

       빈도가 낮은 정보는 비트 수를 많이 사용하여 표현해서 전체 데이터의 표현에 필요한 비트양을 줄이는 원리

     

    서버 푸시

    - HTTP/1.1 에서는 클라이언트가 서버에 요청을 해야 파일을 다운로드받을 수 있었다면,

        HTTP/2 는 클라이언트 요청 없이 서버가 바로 리소스를 푸시할 수 있다.

    - html 에는 css나 js 파일이 포함되기 마련인데 html을 읽으면서 그 안에 들어 있던 css 파일을 서버에서 푸시하여 클라이언트에 먼저 줄 수 있다.

     

    2.5.4 HTTPS

    - HTTP/2 는 HTTPS 위에서 동작한다

    - HTTPS 는 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말한다.

    - 이를 통해 '통신을 암호화' 한다.

     

    SSL/TLS

    - SSL(Secure Socket Layer) 은 SSL 1.0 부터 시작해서 SSL 2.0, SSL 3.0, TLS(Transport Layer Security Protocol) 1.0, TLS 1.3 까지 버전이 올라가며 마지막으로 TLS로 명칭이 변경되었으나, 보통 이를 합쳐 SSL/TLS 로 많이 부른다.

    ( 이 책에서는 최신 TLS 버전인 TLS 1.3을 기반으로 설명한다. )

    - SSL/TLS 은 전송 계층에서 보안을 제공하는 프로토콜이다.

    - 클라이언트와 서버가 통신할 때 SSL/TLS를 통해 제 3자가 메시지를 도청하거나 변조하지 못하도록 한다.

    - SSL/TLS 를 통해 공격자가 서버인 척하며 사용자 정보를 가로채는 네트워크상의 '인터셉터'를 방지할 수 있다.

    - SSL/TLS는 보안 세션을 기반으로 데이터를 암호화하며 보안 세션이 만들어질 때 인증 메커니즘, 키 교환 암호화 알고리즘, 해싱 알고리즘이 사용된다.

     

    보안 세션

    - 보안 세션이란 보안이 시작되고 끝나는 동안 유지되는 세션을 말하고, SSL/TLS는 핸드셰이크를 통해 보안 세션을 생성하고 이를 기반으로 상태 정보 등을 공유한다.

     

    * 세션

    - 운영체제가 어떠한 사용자로부터 자신의 자산 이용을 허락하는 일정한 기간을 뜻한다.

    - 즉, 사용자는 일정 시간동안 응용 프로그램, 자원 등을 사용할 수 있다.

     

    - 클라이언트와 서버와 키를 공유하고 이를 기반으로 인증, 인증 확인 등의 작업이 일어나는 단 한 번의 1-RTT가 생긴 후 데이터를 송수신하는 것을 볼 수 있다.

    - 클라이언트에서 사이퍼 슈트(cypher suites)를 서버에 전달하면 서버는 받은 사이퍼 슈트의 암호화 알고리즘 리스트를 제공할 수 있는 지 확인한다.

    - 제공할 수 있다면 서버에서 클라이언트로 인증서를 보내는 인증 메커니즘이 시작되고 이후 해싱 알고리즘 등으로 암호화된 데이터의 송수신이 시작된다.

     

    사이퍼 슈트

    - 사이퍼 슈트는 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약을 말하며, 다섯 개가 있다.

        ㆍTLS_AES_128_GCM_SHA256

        ㆍTLS_AES_256_GCM_SHA384

        ㆍTLS_CHACHA20_POLY1305_SHA256

        ㆍTLS_AES_128_CCM_SHA256

        ㆍTLS_AES_128_CCM_8_SHA256

    - 예를 들어 TLS_AES_128_GCM_SHA256 에는 세 가지 규약이 들어 있는데 TLS는 프로토콜, AES_128_GCM은 AEAD 사이퍼 모드, SHA256은 해싱 알고리즘을 뜻한다.

     

    AEAD 사이퍼 모드

    - AEAD(Authenticated Encryption with Associated Data)는 데이터 암호화 알고리즘이며, AES_128_GCM 등이 있다.

    - 예를 들어, AES_128_GCM이라는 것은 128비트의 키를 사용하는 표준 블록 암호화 기술과 병렬 계산에 용이한 암호화 알고리즘 GCM이 결합된 알고리즘을 뜻한다.

     

    인증 메커니즘

    - 인증 메커니즘은 CA(Certificate Authorities)에서 발급한 인증서를 기반으로 이루어진다.

    - CA에서 발급한 인증서는 안전한 연결을 시작하는 데 있어 필요한 '공개키'를 클라이언트에 제공하고 사용자가 접속한 '서버가 신뢰'할 수 있는 서버임을 보장한다.

    - 인증서는 서비스 정보, 공개키, 지문, 디지털 서명 등으로 이루어져 있다.

    - 참고로 CA는 아무 기업이나 할 수 있는 것이 아니고 신뢰성이 엄격하게 공인된 기업들만 참여할 수 있으며,

       대표적인 기업으로는 Comodo, GoDaddy, GlobalSign, 아마존 등이 있다

     

    CA 발급 과정

    - 자신의 서비스가 CA 인증서를 발급받으려면 자신의 사이트 정보와 공개키를 CA에 제출해야 한다.

    - 이후 CA는 공개키를 해시한 값인 지문(finger print)을 사용하는 CA의 비밀키 등을 기반으로 CA 인증서를 발급한다.

     

    * 개인키 : 비밀키라고도 하며, 개인이 소유하고 있는 키이자 반드시 자신만이 소유해야 하는 키

    * 공개키 : 공개되어 있느 키

     

    암호화 알고리즘

    - 키 교환 암호화 알고리즘으로는 대수곡선 기반의 ECDHE(Elliptic Curve Diffie-Hellman Ephermeral) 또는 모듈식 기반의 DHE(Diffe-Hellman Ephermeral)를 사용한다.

    - 둘 다 디피-헬만(Diffie-Hellman) 방식을 근간으로 만들어졌다.

     

    디피-헬만 키 교환 암호화 알고리즘

    - 디피 헬만 키 교환(Diffie-Hellman key exchange) 암호화 알고리즘은 암호키를 교환하는 하나의 방법

    - 처음에 공개 값을 공유하고 각자의 비밀 값과 혼합한 후 혼합 값을 공유한다.

        ㆍ그다음 각자의 비밀 값과 또 혼합한다.

        ㆍ그 이후에 공통의 암호키가 생성되는 것이다.

    - 이렇게 클라이언트와 서버 모두 개인키와 공개키를 생성하고 서로에게 공개키를 보내고 공개키와 개인키를 결합하여 PSK(사전 합의된 비밀키)가 생성된다면, 악의적인 공격자가 개인키 또는 공개키를 가지고도 PSK가 없기 때문에 아무것도 할 수 없다.

        ㆍ이를 통해 키를 암호화할 수 있는 것이다.

     

    해싱 알고리즘

    - 해싱 알고리즘은 데이터를 추정하기 힘든 더 작고, 섞여있는 조각으로 만드는 알고리즘이다.

    - SSL/TLS 는 해싱 알고리즘으로 SHA-256 알고리즘과 SHA-384 알고리즘을 쓰며,  이 중 SHA-256를 더 많이 쓴다.

     

    SHA-256 알고리즘

    - SHA-256 알고리즘은 해시 함수의 결괏값이 256비트인 알고리즘이며, 비트코인을 비롯한 많은 블록체인 시스템에서도 쓴다.

    - SHA-256 알고리즘은 해싱을 해야 할 메시지에 1을 추가하는 등 전처리를 하고 전처리된 메시지를 기반으로 해시를 반환한다.

     

    * 해시 : 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 값

    * 해싱 : 임의의 데이터를 해시로 바꿔주는 일이며 해시 함수가 이를 담당

    * 해시 함수 : 임의의 데이터를 입력으로 받아 일정한 길이의 데이터로 바꿔주는 함수

     

    - 참고로 TLS 1.3 은 사용자가 이전에 방문한 사이트로 다시 방문한다면 SSL/TLS에서 보안 세션을 만들 때 걸리는 통신을 하지 않아도 된다. 이를 0-RTT 라고 한다.

     

    SEO에도 도움이 되는 HTTPS

    - 구글은 SSL 인증서를 강조해왔고, 사이트 내 모든 요소가 동일하다면 HTTPS 서비스를 하는 사이트가 그렇지 않은 사이트보다 SEO 순위가 높을 것이라고 공식적으로 밝혔다.

    - SEO(Search Engine Optimization)는 검색엔진 최적화를 뜻하며 사용자들이 구글, 네이버 같은 검색엔진으로 웹 사이트를 검색했을 때 그 결과를 페이지 상단에 노출시켜 많은 사람이 볼 수 있도록 최적화하는 방법을 의미한다.

        ㆍ서비스를 운영한다면 SEO 관리는 필수다

        ㆍ이를 위한 방법으로 캐노니컬 설정, 메타 설정, 페이지 속도 개선, 사이트맵 관리 등이 있다.

     

    캐노니컬 설정

    <link rel="canonical" href="#" />

    - 사이트 link에 캐노니컬을 설정해야 한다.

     

    메타 설정

    - html 파일의 가장 윗부분인 메타를 잘 설정해야 한다.

     

    페이지 속도 개선

    - 사이트의 속도는 빨라야 한다.

     

    사이트맵 관리

    - 사이트맵(sitemap.xml)을 정기적으로 관리하는 것은 필수이다.

    - 사이트맵 제너레이터를 사용하거나 직접 코드를 만들어 구축해도 된다.

    - 사이트맵은 다음과 같은 형식의 xml 파일을 말한다.

    <?xml version="1.0" encoding="utf-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
    <loc>http://kundol.co.kr/</loc>
    <lastmod>수정날짜</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.1</priority>
    </url>
    </urlset>

     

    HTTPS 구축 방법

    - HTTPS 구축 방법은 크게 세 가지다.

        ㆍ직접 CA에서 구매한 인증키를 기반으로 HTTPS 서비스 구축

        ㆍ서버 앞단의 HTTPS를 제공하는 로드밸런서를 둔다.

        ㆍ서버 앞단에 HTTPS를 제공하는 CDN을 둬서 구축

     

    2.5.5 HTTP/3

    - HTTP/3 은 HTTP/1.1 및 HTTP/2 와 함께 World Wide Web 에서 정보를 교환하는데 사용되는 HTTP의 세번째 버전이다.

    - TCP 위에서 돌아가는 HTTP/2 와는 달리 HTTP/3 은 QUIC이라는 계층 위에서 돌아가며, TCP 기반이 아닌 UDP 기반으로 돌아간다.

    - 또한, HTTP/2 에서 장점이었던 멀티 플렉싱을 가지고 있으며 초기 연결 설정 시 지연 시간 감소라는 장점이 있다.

     

    초기 연결 서정 시 지연 감소

    - QUIC 은 TCP를 사용하지 않기 때문에 통신을 시작할 때 번거로운 3-웨이 핸드셰이크 과정을 거치치 않아도 된다.

    - QUIC 은 첫 연결 설정에 1-RTT 만 소요된다.

    - 클라이언트가 서버에 어떤 신호를 한번 주고, 서버도 거기에 응답하기만 하면 바로 본 통신을 시작할 수 있다는 것이다.

    - 참고로 QUIC은 순방향 오류 수정 메커니즘(FEC, Forword Error Correction)이 적용되었다.

    - 이는 전송한 패킷이 손실되었다면 수신 측에서 에러를 검출하고 수정하는 방식이며

       열악한 네트워크 환경에서도 낮은 패킷 손실률을 자랑한다.


    예상질문

    Q. OSI 7계층과 TCP/IP 4계층의 차이점은 무엇인가?

    A. TCP/IP 계층과 달리 OSI 계층은 애플리케이션 계층을 세 개로 쪼개고 링크 계층을 데이터 링크 계층, 물리 계층으로 나눠서 설명하는 것이 다르며, 인터넷 계층을 네트워크 계층으로 부른다는 점이 다르다.

     

    Q. HTTP/2 를 설명하고 장점 두 가지를 설명하세요.

    A.

    - HTTP/2 는 HTTP/1.x 보다 지연 시간을 줄이고 응답 시간을 더 빠르게 할 수 있으며 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜이다.

    - 장점 두 가지로 멀티 플렉싱과 서버 푸시가 있다.

    - 멀티 플렉싱이란 여러 개의 스트림을 사용하여 송수신한다는 것이다.

        ㆍ이를 통해 특정 스트림의 패킷이 손실되었다고 하더라도 해당 스트림에만 영향을 미치고 나머지 스트림은 멀쩡하게 동작 가능

    - 서버 푸시란 HTTP/1.1 에서 클라이언트가 서버에 요청을 해야 파일을 다운로드 받을 수 있다면, HTTP/2는 클라이언트 요청 없이 서버가 바로 리소스를 푸시하는 것을 말한다.

        ㆍhtml에는 css나 js 파일이 포함되기 마련인데

           html을 읽으면서 그 안에 들어 있던 css파일을 서버에서 푸시하여 클라이언트에 먼저 줄 수 있다.

     

    Q. www.naver.com을 주소창에 입력하면 어떻게 될까요?

    A. https://youtube/5MM8NDzWHdE

    'Books > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글

    5장 자료구조  (0) 2023.02.03
    4장 데이터베이스  (0) 2023.02.02
    3장 운영체제  (0) 2023.01.31
    1장 디자인 패턴과 프로그래밍 패러다임  (0) 2022.12.31

    댓글

Designed by Tistory.