9 분 소요

용어 정리

IP 주소 : 인터넷에 연결되기 위해 필요한 인터넷 상의 주소

모뎀(modem) : 네트워크 통신에 필요한 신호변환 장치

공유기(home router)
여러 기기들을 인터넷에 연결될 수 있도록 하는 장치
하나의 IP주소로도 동시에 인터넷 사용 가능
공유기에 연결된 기기들은 같은 네트워크 소속
스위치(switch)
같은 네트워크 내의 기기들이 서로 통신할 수 있도록 하는 장치
보통 공유기의 랜(LAN) 포트 수가 부족할 때 사용
스위칭 허브 혹은 허브 라고 불린다
네트워크
기기들이 리소스 공유 or 데이터 통신을 위해 연결된 유/무선 통신 체계
lan(Local area network)
제한된 범위 내에서 기기들을 연결한 네트워크
유선 : 이더넷
무선 : 와이파이
WAN(wide area network)
여러 LAN이나 다른 종류의 네트워크들을 하나로 묶어
멀리 떨어진 기기들도 통신이 가능하도록 만든 네트워크
(ex : 은행 ATM, Internet)
인터넷
네트워크 의 네트워크
가장 큰 WAN
글로벌 네트워크
ISP(internet service provider)
일반 사용자, 회사, 기관 등이 인터넷을 사용할 수 있게
인터넷 연결 서비스를 제공하는 존재
(ex : KT, LG 등)

ISP들끼리 관리하는 네트워크가 연결되어,
내가 원하는 위치로 데이터를 보내는 것
(tier가 나뉨)

tier1 : 국제 범위 네트워크, 인터넷의 모든 네트워크 접근 가능
(backbone : 인터넷의 중추 역할)
(트래픽 전송 비용 x, tier1이 다른 네트워크를 이용할때의 이야기)
tier2 : 국가 / 지방 범위 네트워크
일반 사용자, 기업 대상 서비스
모든 영역 연결을 위하여, tier1 ISP에 비용을 내고 트래픽을 전송
(KT,LG)

tier3 : 작은 지역 범위 서비스 제공
일반 사용자, 기업 대상 서비스
상위 ISP에 비용을 내고, 트래픽을 구매하여 서비스 제공

라우터(router)
목적 네트워크에 데이터를 보내는 장치
노드(node)
네트워크를 이루는 각각의 장치
end system, 호스트(host)
네트워크 끝에 있는 노드
네트워크를 사용하기 위해 연결된 노드
(이들은 구축하기 위함이 아닌, 서비스 사용을 위함)

end system은 클라이언트/서버로 나뉜다

클라이언트(client)
다른 호스트의 데이터나 리소스를 요청하는 호스트
서버(server)
다른 호스트에게 서비스를 제공하는 호스트
요청에 따라 데이터나 리소스를 제공
클라이언트 - 서버 모델
위처럼, 데이터를 요청하여 사용하는 측과 데이터를 제공하는 측의 프로그램을 제작하는 경우,
클라이언트-서버 모델을 따른다고 한다

프로토콜

네트워크는 여러가지 역할을 수행해야 한다

  • 어플리케이션 목적에 맞는 통신 방법 제공
  • 신뢰할 수 있는 데이터 전송 방법 제공
  • 네트워크 간의 최적의 통신 경로 결정
  • 목적지로 데이터 전송
  • 노드 사이의 데이터 전송

=> 네트워크에 참여한 자들 사이에서 ‘약속된 통신 방법’이 있어야 함!
네트워크 통신을 하기 위해, 통신에 참여하는 주체들이 따라야 하는
‘형식’, ‘절차’, ‘규약’이 존재한다

그것이 네트워크 프로토콜!
(network protocol)

다만 각종 기술을 하나의 프로토콜로 구현할 수 없음
-> 모듈화!
(기능별 분리 후 구현)

OSI 7 계층

osi 7 layer [출처] : https://shlee0882.tistory.com/110

범용적인 네트워크 구조
TCP/IP 는 ‘인터넷’에 특화된 네트워크 구조이다
(다만 엄밀하게 일치하지는 않음)

(OSI 7 계층은 네트워크 시스템구성을 위한 범용적이고 개념적인 모델)
(TCP/IP 스택은 인터넷이 발명되면서 함께 개발된 프로토콜 스택)
(TCP, UDP, IP 프로토콜의 스펙은 RFC 문서에 정리되어 있음)

각각의 레이어에 맞게 프로토콜이 세분화 되어 구현됨
각 레이어의 프로토콜은 ‘하위 레이어’의 프로토콜이
제공하는 기능을 사용하여 동작

  • Application Layer(L7)
    어플리케이션 목적에 맞는 통신 방법 제공
    (관련 프로토콜 : HTTP, DNS, SMTP,FTP)
    웹페이지 : HTTP
    파일 전송 : FTP
    도메인을 이름으로 : DNS
    이메일 주고 받기 : SMTP
    (그 외에도 여러 프로토콜 존재)
    • HTTP(HyperText Transfer Protocol)
      웹 브라우저와 웹 서버 간 문서를 전송하는데 사용하는 프로토콜
      클라이언트 - 서버 모델을 기반으로 한다
      (TCP/IP 기반이며, TCP 포트 80번을 기본 포트로 사용)
      (+ 보안을 위해 HTTPS가 등장, SSL/TLS 프로토콜 사용)
  • Presentation Layer(L6)
    어플리케이션 간 통신에서 메시지 포맷 관리
    인코딩 <-> 디코딩
    암호화 <-> 복호화
    압축 <-> 압축풀기

    MIME 인코딩을 해준다던가,
    EBCDIC를 ASCII로 인코딩한 파일로 바꿔준다던가
    해당 데이터가 TEXT 인지, 그림인지, GIF인지 판단

    • MIME (Multipurpose Internet Mail Extension)
      다양한 형식의 데이터를 주고 받을 수 있도록 하는 표준 형식
      텍스트, 그림, 오디오, 비디오 등 다양한 형식을 지원
      Content-Type 헤더를 통해 해당하는 데이터의 유형(Type)을 식별
      문자 인코딩을 지원
  • Session Layer(L5)
    어플리케이션 간의 통신에서 세션을 관리
    (관련 프로토콜 : RPC(remote procedure call))

    통신을 위한 ‘논리적 연결’을 뜻한다
    세션 설정, 유지, 종료, 동기화 등의 기능이 있다

    1. 세션 설정 : 통신하는 장치간 세션을 설정
      통신 프로토콜에 따라 연결을 초기화 및 확인
    2. 세션 유지 : 세션이 유지되는 동안 데이터 전송을 관리,
      오류,중단을 탐지하고 복구한다
      전송 중에도 세션을 활성 상태를 유지해, 안정적인 통신을 지원
    3. 세션 종료 : 세션이 더 이상 필요하지 않을 때,
      세션을 종료하고 연결 해제
    4. 동기화 : 데이터의 순서를 관리하고, 통신하는 장치 간에 일정한
      동기를 유지
    • 세션?
      네트워크 통신에서 사용자나 시스템 간의 통신 연결을 관리
      데이터 교환을 위한 가상의 연결을 표현

    L5~L7 까지를 Application 으로 표현하기도 한다
    (TCP/IP)

  • Transfort Layer(L4)
    어플리케이션 간의 통신 담당
    목적지 어플리케이션으로 데이터 전송
    안정적이고 신뢰할 수 있는 데이터 전송 보장(TCP)
    필수 기능만 제공(UDP)

    주요 기능은

    1. 데이터 전송 : 데이터를 안정적으로 전달하는 역할이며, 이를 위해
      데이터를 세그먼트로 나누어 전송
    2. 신뢰성 확보 : 정확한 전달과 순서를 유지하며, 신뢰성 있는 통신 제공,
      에러 검출 및 복구, 흐름 제어, 재전송 등의 매커니즘 존재
    3. 흐름 제어 : 송신 측과 수신 측 간에 데이터 전송 속도를 조절하여
      네트워크의 혼잡을 방지하고, 수신측이 처리할 수 있는 속도로 데이터 전송

      등이 있음
    • TCP 프로토콜
      양 종단 호스트 내 프로세스 상호 간 신뢰적인 연결지향성 서비스 제공
      ‘신뢰적인 전송’을 보장함
      1. 신뢰성 : 세그먼트 손실, 중복, 순서바뀜 등이 없도록 보장
      2. 연결지향적 : 연결을 관리하기에, 설정과 해제 필요
      TCP 3단계 설정(3Way handShake)
      송신자가 수신자에게 먼저 동기화 메시지 전달,(SYN)
      수신자가 동기화를 받겠다 응답(SYN-ACK)
      송신자가 동기화 하겠다고 통보(ACK)

      SN : 시퀀스 넘버 (패킷의 티켓 넘버)
      ISN : 초기 시퀀스 넘버
      SYN : 동기화 플래그 (처음 통신할때 1, 데이터 전송이면 0)
      ACK : 응답 플래그(응답용인 경우 1, 아니면 0)
      ACK 넘버 : 다음에 서버가 받을 시퀀스 넘버(처음엔 0, 이후는 받은 시퀀스 넘버에 점차적으로 1 더해줌)

      클라측 처음 SYN 보낼 떼,
      SYN 플래그 1, ACK 플래그 0,
      시퀀스 넘버 는 클라측 ISN, ACK 넘버 는 0

      서버가 응답할 때,
      SYN 플래그 1, ACK 플래그 1,
      시퀀스 넘버는 서버측 ISN, ACK 넘버는 클라측 ISN + 1

      클라가 응답할 때,
      SYN 플래그 0, ACK 1,
      시퀀스 넘버는 클라측 ISN + 1, ACK 넘버는 서버측 ISN + 1

      TCP 종료 4단계(4Way handshake)
      FIN : 종료 플래그
      (종료 요청 시 1)

      특이점은
      클라가 서버에게 종료 요청(FIN)
      서버가 클라에게 응답

      일정 시간 대기 (이루어지지 않은 패킷 교환을 시행)

      서버가 클라에게 종료 요청(FIN)
      클라가 서버에게 응답

      시퀀스 넘버와 ACK 넘버를 통하여
      누락된 패킷의 존재를 알고 재전송을 해줄 수 있음

      PDU의 단위로, Segment를 사용
      상위 계층에서 받은 데이터를 일정한 크기의 segment로 분할하여
      각각의 세그먼트에 ‘출발/목적지 포트, 순서 번호, 확인응답’ 등의 정보 포함
      수신측에서는 이러한 세그먼트들을 ‘재구성’하고 오류를 검출
      필요 시, 재전송 요청

      TCP는 패킷 손실 시, 자동으로 재전송을 시도
      (수신측이 받은 패킷에 대해 확인 응답(ACK)을 보내고,
      송신자는 ACK를 받지 못한 패킷을 재전송한다)

    • UDP 프로토콜
      신뢰성이 낮음(완전성 보장 x), 유연하고 효율적인 데이터 전송
      1. 비연결성, 낮은 신뢰도, 순서화되지 않은 datagram 서비스
        이에 따라 UDP를 사용하는 프로그램 쪽에서 오류제어 필요
        Datagram 지향이기에 논리적 가상회선 연결이 필요치 않음
      2. 실시간 API 및 멀티캐스팅 가능
        빠른 요청과 응답이 필요한 실시간 API에 적합
        1대 다수 전송 가능
      3. 단순한 헤더
        TCP와 다르게, 헤더 처리에 많은 시간이 필요치 않음

      PDU 단위로, Datagram을 사용
      UDP는 Datagram을 ‘쪼개지 않고’ 전송
      훨씬 간단한 형태의 데이터
      (그래도 출발지/목적지 포트, 데이터 길이, 체크섬은 존재)
      (체크섬을 통하여 ‘오류 검출’은 한다)

      UDP는 패킷 손실 시, 자체적으로 대체하지 않음
      (확인 응답, 재전송 기능이 없음
      따라서 패킷 손실 확인 시 , 어플리케이션 레벨에서 처리해야 한다)

  • NetWork Layer(L3)
    호스트 간의 통신 담당(IP)
    • 패킷을 목적지로 보내기 위한 최적의 경로 설정(Routing)
    • 라우팅에 따라 패킷을 다음 노드로 전달
      (라우터나 스위치 등이 이를 수신하고, 올바른 출력포트로 전송)
    • 각 장치에 IP주소를 할당하여 통신할 때 사용
      (IP 주소를 통해 패킷이 목적지로 전달)

    IP 프로토콜 과 하위 프로토콜로 ARP, ICMP 등이 존재한다

    • IP 프로토콜(Internel Protocol)
      네트워크 상의 장치들이 서로 식별하고 통신 가능하게 하게 함
      각 네트워크 장치에 고유한 IP 주소를 부여
      (IPv4는 32비트 주소 체계, IPv6는 128비트 주소 체계)

      데이터 패킷의 출발지/목적지를 식별하고, 패킷을 안정적으로 전달
      IP프로토콜은 데이터 패킷의 손상 여부를 확인하고, 이러한 패킷을 처리
      (그러나 패킷의 신뢰성을 보장하지 않기에, TCP와 함께 사용하여
      신뢰성을 제공함)

    • ARP 프로토콜(Address Resolution Protocol)
      네트워크에서 IP 주소를 물리적인 MAC 주소로 매핑하기 위한 프로토콜
      실제 이 프로토콜은 L2에서 실행된다
      네트워크 상의 장치들에게 ‘특정 IP’를 갖고 있는지를 브로드캐스트(broadcast) 한 후,
      해당 IP를 가진 장치가 MAC 주소를 포함하여 응답하면,
      이후 그 장치와 유니캐스트(unicast)하는 방식이다
      (네트워크 상의 장치 라는 표현은 같은 서브넷을 이용하는 장치들을 뜻한다)
      (목표 IP의 서브넷 까지 이동하는 것은 라우팅 을 통해 가능하다)
    • 서브넷(Subnet)
      IP 네트워크를 더 작은 네트워크로 나눈 것
      IP주소 범위를 필요에 따라 나누어 분할한다
      이 때, IP 주소의 일부를 네트워크 ID로 사용하고
      나머지 부분을 호스트 ID로 사용하여 세분화한다
      (이것을 나누는 것이 서브넷 마스크(Subnet Mask)이다)
      (IP 주소에 서브넷 마스크를 비트연산하여, 네트워크 ID를 알아낼 수 있음)

      (라우터가 가지는 것은 public IP로 유니크 한 것)
      (스위치 내부의 LAN들은 private IP로 분류된다)
      (class A,B,C,D 등등으로 서브넷을 할당한다고 한다)

    장치로서 주로 ‘라우터’가 활용된다

  • Datalink Layer(L2)
    직접 연결된 노드 간의 통신을 담당
    이더넷과 Wi-Fi 같은 프로토콜이 이 계층에서 동작한다
    • 데이터를 프레임 단위로 나누어 전송하기 위해
      헤더와 트레일러로 구성된 프레임 생성
      헤더 : 송/수신자의 주소(MAC), 유형(IP or ARP), 제어정보 등
      트레일러 : 오류 검사 코드(주로 CRC or checksum)
    • 물리적 매체에 대한 충돌 방지를 위한 접근 제어 매커니즘 사용
      (이더넷에서 CSMA/CD가 사용)

    • 링크 상태를 확인하기 위한 프로토콜 제공
    • MAC 주소 기반 통신(ARP : ip -> MAC)

      • CSMA/CD ?
        (Carreier Sense Multiple Access with Collision Detection)의 약자
        여러 장치가 동일한 네트워크 매체를 공유할 때, 충돌을 방지

        캐리어 감지 : 전송 전, 네트워크에서 신호가 전송되는지 확인
        다중 접속 : 다수의 장치가 동일한 네트워크에 접속하게 하는 접속 방식
        충돌 감지 : 동시에 데이터를 전송하려 할때, 이를 감지하고 재전송 절차 수행

        다만, 현재는 switch를 사용하는 것이 더 일반적이라 한다

      • MAC 주소(Media Access Control)
        네트워크 장비가 가지는 고유한 식별자
        네트워크 어댑터에 할당(제조사가 할당)

    장치로서 주로 ‘스위치’가 활용된다

  • Physical Layer(L1)
    네트워크 장치 간의 신호(Data)를 물리적 매체를 통해 전송하는 계층
    • 데이터를 ‘비트(bit)’로 변환하고 전송
    • 데이터를 신호로 변환하고 매체에 맞게 인코딩을 수행
      (ex : 디지털 신호 -> 아날로그 or 광섬유, 전선을 통한 전기적 신호)

    장치로서 주로 ‘허브’가 활용된다

TCP/IP 계층

OSI의 일부 계층들을 압축한 듯 하긴 하지만
주로 인터넷과 프로토콜에 집중하여 사용되는 개념

TCP/IP 계층은 실제로 네트워크에서 데이터를 전송하는데 사용된다는 점은 유의
(OSI는 개념에 가깝다)

Application Layer
Transfort Layer
Internet Layer
Network Access Layer

가 존재하되, 기본적으로 OSI의 계층과 설명이 겹치는 부분이 많기에
생략하려 한다

TCP/IP의 하위 3계층은
하드웨어/펌웨어, OS 레벨에서 구현 및 관리
네트워크 기능의 지원이 목적

상위에 존재하는 Application Layer는
어플리케이션 레벨에서 구현 및 관리되며
네트워크 기능의 ‘사용’이 목적이다

  • PDU(Protocol Data Unit)
    하나의 계층에서 다른 계층으로 데이터가 전송될때 사용되는 단위
    각각의 계층별로 특정한 단위로 이동되기에 사용되는 단위가 다른 편

    OSI

    1. Physical : 비트
    2. DataLink : 프레임
    3. Network : 패킷
    4. Transport : 세그먼트 or 데이터그램
    5. Session : 데이터
    6. Presentation : 데이터
    7. Application : 데이터

    TCP/IP

    1. Network Access : 프레임 or 패킷
    2. Internet : 패킷
    3. Transport : 세그먼트
    4. Application : 메시지 or 데이터

네트워크 스택

예를 들어 Write() 함수를 호출한다 가정하였을 때,
write()는 지정된 소켓을 찾아(파일 디스크립터에 지정된)
해당 소켓에 데이터를 쓰게 된다
다만 소켓을 보내주는 것은 write() 함수의 역할이 아니다

그렇다면 소켓은 대체 누가 보내주는 걸까?

정답은 바로 네트워크 스택이다
마치 별도의 ‘주체’처럼 보이지만,
사실 OS 내부에 존재하는 ‘프로토콜 구현’의 집합이다

(위에서 언급한 TCP/IP 스택이 실제로 사용된다 라는 의미는
TCP/IP의 프로토콜 들이 OS 내부에 구현되어 있으며
OS가 소켓을 보낼 때, 이러한 구현부를 이용하기 때문이라 생각한다)

네트워크 스택은
크게 User, Kernel, Device 로 나뉘며
세분화 하면
User : Application
Kernel : File
Sockets
TCP
IP
Ethernet
Driver
Device : NIC

Application 에서 Write() 나 Read() 를 호출하면
커널에서는
File로 파일 디스크립터를 판단하고
Sockets 에선 소켓에 데이터를 복사하거나 추가한다

TCP,IP,Ethernet 에서는 각각 프로토콜에 맞는 헤더 데이터를 붙인다

이후 Driver 에서
NIC에게 패킷을 전송하라고 요청한다

NIC(Network Interface Card)는
패킷을 송수신한다
(이 때, CPU에 인터럽트를 발생시킨다)

참고로 application 에서
write나 read를 호출한다고 반드시 해당 패킷이 바로 전송되는 것이 아니며,
해당 레이어에선 언제 패킷이 송수신 되는지 파악하긴 어렵다

추가적으로 TCP를 수행하는 경우는,
‘연결 유지’를 파악하기 위하여 ‘Timer’를 사용하는 경우도 있다
(Timer Interrupt를 발생시켜 연결을 끊기 위함)

[네트워크 스택에 관련된 좋은 사이트]https://d2.naver.com/helloworld/47667

댓글남기기