[우아한테크코스] 7월 18일 TIL

7 minute read

[Network] 네트워크 총정리

인터넷이란? 컴퓨터들이 서로 통신할 수 있는 거대한 네트워크로 물리적/무선으로 연결되어야 한다.
하나씩 연결이 복잡해지는 것을 해결하기 위해 라우터 사용, 모든 것을 라우터에 보내고 라우터로부터 받는다. 라우터들도 추가해 라우터간 연결, 라우터를 통한 컴퓨터 연결이 된다.
전국에서 서울시 주소 (MAC addr)를 찾고 - Data Link Layer
마포구 주소(IP Addr)를 찾아 - Network Layer
월드컵로(Port)를 찾은 뒤
10길(Socket)에 도착하여 : Transport Layer
메일을 전달한다 : Application Layer

Application layer

Client - Server로 통신할 수도 Peer to Peer로 직접 통신할 수도 있다.

  • socket programming
    프로세스가 데이터를 송수신하기 위해 데이터를 읽거나 쓰는 것으로 통신할 때 다 사용된다.
    프로토콜, ip 주소, 포트 번호로 정의되어 있다.
    소켓을 통해 udp/tcp로 transport layer로 전송된다.

Protocol

원격 접속, 파일 전송, 전자 메일, 네트워킹 지원, 호스트 초기화, 원격 호스트 관리

  • HTTP
    Client - Server 통신을 한다.
    request: 메서드, uri, 프로토콜 버전, 옵션 리퀘스트 헤더필드, 엔티티로 구성
    response: 프로토콜 버전, 상태 코드, 옵션 리스펀드 헤더필드, 바디로 구성
    지속 연결로 접속량 절약, 파이프라인화, 무상태로 쿠키 사용

  • DNS
    DNS 서버는 LAN 안에 있는 클라이언트로부터 조회 받아 클라이언트 대신 인터넷에 조회해주는 캐시 서버와 외부 호스트로부터 자신이 관리하는 도메인(zone 파일이란 db에서 관리) 조회받는 콘텐츠 서버로 나뉜다.
    캐시서버가 트리의 오른쪽부터 도메인명 관리하는 서버 찾아 ip주소 알려주는 것이 이름 해결
    이 dns 서버는 tcp, udp 둘 다 사용
    참고

  • HTTPS
    HTTPS에 보안 기능을 추가한 것으로 Tranfer Layser Security로 전송 계층에서 보안을 설정하는 것을 이야기한다.
    SSL이라고 웹 사이트와 브라우저 간 데이터를 암호화하여 유지하는 기술을 사용한다. 패킷 스니핑을 하면 전송계층에서 보내지는 패킷이 무엇인지 볼 수 있는데 tcp/ip는 이 데이터가 평문이라 중요한 정보를 탈취하기 쉽다.
    이를 피하기 위해 tls라는 설정을 사용해 데이터를 암호화한다. tls는 데이터를 암호화하여 주고받는다. 이 과정에서 클라이언트와 서버 간의 인증이 유효한지, 세션키가 존재하는지 등의 확인을 handshake로 하는 과정이 존재한다.

    핸드셰이크 과정

    1. Client Hello: 클라이언트는 서버에게 지원 가능한 방식(암호, 키교환, 서명 등)을 서버에 알려준다.
    2. Server Hello: 서버는 클라이언트에게 지원 가능한 방식을 응답
    3. Certificate Message: 서버는 공개키(RSA 암호)가 포함된 서버 인증서 클라이언트에 발송
    4. Server Hello Done: 서버의 전송 끝나면 메시지 전달
    5. Client Certificate: 서버가 클라이언트 인증서를 요구할 때 클라이언트가 서버에 인증하기 위한 SSL 인증서 전송
    6. 클라이언트는 전송받은 서버 인증서가 유효한지 확인하고, 세션키로 사용될 Pre-Master Key를 랜덤으로 생성해 공개키로 암호화해 서버로 전송, ClientKeyExchange 메시지에 Pre-Master Key가 포함된다.
    7. 서버는 자신의 개인키로 클라이언트에게 전송받은 세션키(대칭키) 복호화해서 Pre-Master key를 알아낸뒤 이를 이용해 master secret 생성
      이후로 master secret에서 세션 키 생성해내고 서버-클라이언트 간 통신을 암호화하는 데에 사용한다.
    8. 서로에게 ChangeCipherSpec 메시지를 보내고, Finished 메시지를 보내 과정이 끝남을 알린다.

이렇게 설정된 tls와 같이 비즈니스 로직이 아닌 과정에서 문제를 일으키고 싶지 않은 경우 reverse proxy를 사용한다. 대표적으로 nginx와 같은 기술로 구현되는 리버스 프록시는 지역끼리 연결된 것을 wan으로 관리되도록 도와주는 포워드 프록시와 다르게 wan을 lan으로 옳겨준다.
사용자가 접근하면 자신과 lan으로 연결된 비즈니스 로직에 요청을 전송하는데 이 과정에서 tls가 적용되어 암호화 된 것이 proxy로, 프록시에서 그 암호를 풀어 비즈니스 로직으로 전송하는 과정이 이루어진다.
포워드 프록시는 여러 클라이언트에 대해 적용되고, 리버스 프록시는 여러 서버에 대해 적용된다.
리버스 프록시를 통해 보안성, 성능, 확장성 등이 상승될 수 있다.

  • TELNET
    인터넷, 로컬 영역 네트워크 연결에 사용
    23번 포트를 사용하는 것

  • FTP
    TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일 전송 담당
    20번 포트(데이터), 21번 포트(제어)를 사용하는 것

  • SMTP
    TCP 25번 포트를 이용해 이메일을 보내기 위한 간이 전자 우편 전송 프로토콜

Transport layer

  1. 송신측 transport layer: application layer에서 받은 message를 segment로 나누어 network layer에 전달
  2. 수신측 transport layer: network layer에서 받은 segment를 message 단위로 합쳐 application layer에 전달

TCP VS UDP

  • TCP: 흐름제어, 혼잡 제어, connection setup(가상의 연결), data re-transmit(data loss 안되도록 함), 데이터가 data stream으로 전달되고 송신측이 보낸 순서와 수신측이 받는 순서가 같다.
  • UDP: TCP가 하는 모든 일을 하지 않고 데이터를 data segment 형식으로 전달한다.
    둘다 속도, 시간에 대한 보장은 하지 않는다.

흐름제어

수신측이 수용할 수 있는 용량에 따른 송신측의 전송 속도 조절로 송신측과 수신측 간의 데이터 처리 속도 차이를 해결하고자 한다.

  • Stop and Wait
    매번 전송한 패킷에 대해 확인 응답을 받아야지만 다음 패킷을 전송하는 방법이다.
  • Sliding Window(Go Back n ARQ)
    수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답없이도 세그먼트를 전송할 수 있게 해 데이터 흐름을 동적으로 제어한다.

혼잡제어

송신측의 전송 속도 조절로 네트워크의 데이터 처리 속도와 송신측의 데이터 전송 속도 차이를 해결하고자 한다.

  • Additive Increase / Multiplicative Decrease
    처음에 하나씩 패킷을 보내고 잘 도착하면 1씩 증가시켜가며 전송한다.
    전송이 실패하거나 일정 시간을 넘으면 패킷을 보내는 속도를 절반으로 줄인다.
  • Slow Start
    패킷을 하나씩 보내면서 문제없이 도착하면 ack 패킷마다 크기를 1씩 늘린다. 하나의 주기가 지나면 크기가 두배가 된다.
    그렇게 보내다가 문제가 발생하면 크기를 다시 1로 바꾼다. 문제가 발생했던 크기의 절반까지 2배씩 증가시키고, 그 이후로는 다시 1씩 늘린다.(혼잡 회피, Congestion Avoidance)
  • Fast Retransmit
    수신측에서 순번에 맞지 않는 패킷이 도착한 경우에도 긍정 응답을 보낸다.
    송신측은 순서대로 도착한 패킷의 마지막 패킷을 기준으로 다시 패킷을 보내므로 중복 패킷을 받게 된다. 그러면 문제가 되는 패킷도 다시 보내게 된다. 같은 순서를 3개 받으면 문제가 일어난 것을 감지하고 재전송하고 window의 크기를 줄인다.
  • Fast Recovery
    혼잡해지면 1이 아닌 절반으로 줄이고 선형증가하는 방법

오류제어

데이터가 중간에 손실되지 않았는지, 변형이 일어나지 않았는지 확인하고 제어한다.

Network layer

네트워크 계층은 라우팅과 포워딩을 한다고 생각하면 된다.
네트워크 계층은 IP 주소를 기반으로 서로 다른 네트워크의 소통을 가능하게 한다.

IP

네트워크 환경에서 패킷 교환을 위해 네트워크를 찾아가는 주소로 컴퓨터(노드) 간 통신하기 위해 각 컴퓨터에게 부여된 네트워크 상 주소로 변화할 수 있다.
IPv4와 확장하기 위한 IPv6가 존재한다.

한정되어 있는 IP 주소를 잘 쪼개서 사용하는 방법

네트워크의 크기에 따라 하나의 네트워크에서 가질 수 있는 호스트 IP 개수를 나눈 A, B, C, D, E 클래스가 존재한다.
사설 IP는 공인 IP에 할당된 공유기에 연결된 기기들은 내부에서만 사용할 수 있도록 하는 것이다.
NAT를 통해 공인 IP와 사설 IP를 변환할 수 있다.
포트포워딩을 통해 특정 포트로 들어온 접속을 사설 IP의 특정 포트로 전달하도록 설정할 수 있다.
서브넷 마스크를 이용해 하나의 네트워크를 나누어 효율적으로 사용하는 것을 서브넷이라고 한다.
CIDR은 클래스로 나누는 것보다 유연하게 IP 주소를 나누는 것으로 a.b.c.d/x로 표현한다.
DHCP는 클라이언트-서버 프로토콜로 동적으로 IP 주소를 할당해주는 것이다.

라우터

라우팅, 즉 Path Determination (경로결정)Switching (스위칭) 을 주로 하는 장비

라우팅 프로토콜

  • RIP
    현재까지 가장 많이 사용되는 프로토콜로 DVRP(Distance Vector Routing Protocol) 방식을 사용하는 LAN 구간에서의 대표적인 프로토콜이다. 메시지 송수신에 UDP 포트를 사용한다.
  • VRRP
    정적으로 구성된 라우터 사용 시 하나의 라우터를 LAN 상의 호스트 그룹에서 패킷을 전달하기 위한 라우터로 사용하도록 하여 하나 이상의 백업 라우터를 가질 수 있도록 하는 프로토콜이다.
  • OSPF
    최단경로를 우선으로 하는 프로토콜로, 모든 라우터가 동일한 네트워크 topology database와 Link state 알고리즘을 사용해 경로 계산하는 프로토콜이다.
  • IGRP
    주기적으로 인접 라우터와 라우팅 정보 교환하는 프로토콜이다.
  • BGP
    정해진 정책에 의하여 최적 라우팅 경로 수립, 경로 벡터(Distance Vector) 방식의 라우팅 프로토콜이다.

게이트웨이

서로 다른 통신망, 프로토콜을 사용하는 네트워크가 연결해주기 위해 지나는 네트워크 포인트로 주로 1번이나 254번을 할당한다.
종류가 다른 네트워크 간의 통로 역할로, 외부와 내부 네트워크를 연결하는 인터페이스가 될 수도 있다.

캐스트

  • 브로드캐스트
    image
    같은 네트워크에 있는 모든 장비에 프레임을 보내는 통신이다.
  • 유니캐스트
    image
    MAC 주소 기반, 출발지 == 목적지여야 하는 일대일 통신
  • 멀티캐스트 image
    네트워크에 연결되어 있는 시스템 중 특정 그룹에게만 정보를 전송하는 방법
  • 애니캐스트
    가장 가까운 노드와 통신

Network Access layer

데이터링크의 기능인 흐름 제어, 에러 검출 및 정정, 반이중/전이중 통신, 프레이밍 중 하나이다.
물리적인 주소로 MAC 주소를 사용한다.
송신 전이나 수신 후에 바르게 데이터를 송수신하는 순서를 정의한다. 세그먼트 범위(허브에 연결되어 있는 범위, 라우터 사이) 내에서 송수신을 관리한다.
이더넷: LAN의 표준 프로토콜로 주소를 통해 자신과 데이터를 보내는 상대의 위치를 정한다.

허브

여러 케이블을 연결해 네트워크를 구축함과 동시에 신호의 증폭과 재생 담당해 케이블이 분배되는 효과가 있다.

  • flooding
    허브가 연결된 기기에게 신호를 송신하는 방법으로 수신 포트 이외에 모든 포트에 신호를 송신하는 것
  • 충돌
    인접한 두 개 이상의 허브가 동시에 플러딩하면 발생하는 것

  • Carrier Sense Multiple Access/Collision Detection
    허브에서 동시 플러딩으로 인해 충돌이 발생한 경우 제어하는 것
    Carrier Sense: 사용하려는 통신 매체가 사용중인지 검사
    Multiple Access: 사용 중이면 대기, 사용하지 않고 있으면 전송
    Collision Detection: 데이터 전송 후 충돌 여부 확인(ACK)

충돌이 발생하면 임의의 시간동안 대기(backoff)한 후 재전송

스위치

신호가 지나가는 길을 나누어 신호가 들어오면 그 길에 따라 전송되도록 함

Mac 주소

데이터를 전송하기 위해 존재하는 각 하드웨어가 가진 고유한 물리적 주소
IP주소를 MAC 주소로 변환해(ARP) 데이터 전송
NIC(랜카드) 내에 ROM(기본적인 OS 관련 정보 고유)에 존재

  • 구성
    mac

  • MAC 주소 테이블
    스위치나 브릿지에 연결된 사용자들이 맥 주소를 저장한 것
    데이터가 스위치를 거치는 순간 자동으로 스위치의 맥 주소 테이블에 등록된다.

  1. 학습
    포트에 연결되어 있는 컴퓨터의 MAC 주소를 기억해 table에 기록한다.
  2. 포워딩/필터링/플러딩
    • 포워딩: 스위치 포트로 수신한 프레임의 송신처 MAC 주소가 자신의 table에 학습되어 있으면 그 포트로만 전송
    • 필터링: 포워딩 포트 외에 다른 포트에 가지 못하도록 함, 학습되지 않은 프레임은 플러딩함 => 충돌 제거 가능
    • 에이징: table을 관리하기 위해 일정 시간 후에 저장된 주소 삭제

버퍼링

수신처가 같은 프레임이 동시에 스위치에 도달했을 때 충돌을 일으키지 않는 방법
충돌할 것 같은 프레임을 버퍼에 저장해두고 송신이 끝나면 버퍼에 있던 프레임을 송신한다.

전이중 반이중 통신

  • 전이중
    두 개의 통신 장치가 동시에 통신이 가능한 방식 ex) 전화기, 스위치

  • 반이중
    두 개의 통신 장치가 각각으로 한쪽 방향으로만 통신할 수 있는 방식 ex) 무전기, 허브의 CSMA/CD

패킷 스위치

네트워크 통신 방법 중 하나로 패킷으로 데이터를 전송하고 전송하는 동안만 네트워크 자원을 사용하도록 한다.
패킷에는 IP 주소가 포함되어 있다.

  • 패킷 스위칭(Packet Switching): 패킷 교환 데이터를 패킷이라는 작은 조각으로 나눈 뒤 datagram으로 전송하는 것
    Store-and-Forward: 저장 후 전달, 스위치가 출력 링크로 패킷의 첫 비트를 전송하기 위해 전체 패킷을 받아야 함
    Queueing delay, loss: 큐잉 지연, 패킷 손실, 패킷 스위치는 출력 버퍼(큐)를 가지고 있으며, 그 링크로 송신하려는 패킷은 버퍼에 저장되어 있다.

  • 서킷 스위치(Circuit Switching): 회선 교환
    Virtual Circuit으로 두 장비 간의 통신을 통해 네트워킹하는 것으로 통신 경로가 두 장비로 고정되어 있다.

프레임

프레임
data link 계층의 데이터단위 PDU(Protocol Data Unit)이다.
상위 계층에서 보낸 전송 데이터에 오류 확인을 위한 체크섬, 송수신 호스트의 주소, 기타 프로토콜에서 사용하는 제어 코드 등의 정보가 포함된다.

데이터그램을 캡슐화해 프레임 단위로 만들고 헤더와 트레일러를 추가한 것이 프레임이다. 프레임에는 MAC 주소가 포함된다.

  • 헤더: 목적지, 출발지 주소와 데이터 내용을 정의한 것
  • 트레일러: 비트 에러를 감지하는 역할