Overview/Roadmap

  1. internet이란 무엇인가?
  2. protocol이란 무엇인가?
  3. Network edge: host, access network, physical media
  4. Network core: packet/circuit switiching, internet structure
  5. Performance: loss,delay, throughput
  6. Security
  7. Protocol layers, service model
  8. History

The internet: a "nuts and bolts" view

"인터넷이 무엇인가?" 를 설명하는데는 여러 방법이 있다. 첫 번째로 "nuts and bolts"가 있다. 이는 hardware와 software component로 생각하는 것이다. 두 번째는 application에 서비스를 제공하는 networking infrastructure 면에서 internet을 설명하는 것이다. 먼저 "nuts and bolts"를 먼저 살펴보자.

 

과거의 desktop PC와 달리 현재는 laptop, smartphone, tablet, TV, gaming console, thermostat, home security system, home application, watch, eye glass, car, traffic controll system 등등 많은 장치들이 internet으로 연결되어 있다. 이러한 장치들을 전문용어로 host, end system이라고 불린다. 2015년의 조사결과로 5만 개의 장치가 internet으로 연결되어 있고, 2020년에는 25만 개의 장치가 연결되어 있다.

 

End System은 communication linkpacket switch들로 인해 연결되어 있다.

나중에 살펴 보겠으나 commuication link는 다양한 physical media로 연결되어 있다(e.g. 동축케이블(coaxial cable), 구리선(copper wire), 광섬유(optical fiber), 주파수대역(radio spectrum)). link들은 bit/second로 측정된 (전송 속도)transmission rate가 각각 다르다. 만일 한 end system에서 data를 다른 end system으로 보낼 때, 보내는 end system에서는 data를 세그먼트로 나누고 각 세그먼트들은 header byte에 추가된다. 보내고자 하는 정보의 pacakge(전문 용어로 packet)들은 network를 통해 목적지 end point로 전송된다. 그리고 목적지에서 original data로 결합된다.

 

packet swtich는 communication link 중 하나를 통해 도착한 packet을 받는다. 그리고 이 packet을 나가는 communication link 중 하나로 packet을 전달한다. packet switch는 다양한 형태를 지니나 현대에 들어서 가장 중요한 타입은 router, link-layer swtich이다. 두 개의 switch는 packet을 궁극적인 목적지로 보낸다.

 

link-layer switch들은 주로 access network에 쓰이고, 반면에 router는 network core에 사용된다. packet은 보내는 end system에서 받은 end system 받은 길을 거친다. 이 때 packet이 이동할 때 거치는 communication link와 packet swtich의 순서를 network를 통한 경로를 route or path라고 한다.

 

Cisco(미국의 인터넷 서비스 업체)는 2016년에 IP traffic이 zettabyte의 한계점을 지닌다고 했고, 2019년에는 2zettabyte의 한계점을 지닌다고 발표했다.

 

packet을 전송하는 Packet-swtiched network(패킷 교환 네트워크) 는 차량이 이동하는 고속도로, 도로 및 교차로로 구성된 교통 네트워크와 여러 면에서 유사하다. 예를 들어 많은 화물을 몇 키로미터와 떨어진 목적 창고로 보내는 공장을 생각해보자. 공장에서, 화물들은 분리되어 여러 대의 차량에 싣어진다. 그리고 각 트럭들은 독립적으로 고속도로, 도로, 교차로를 거쳐 목적지로 도착한다. 그리고 목적지에서 분리된 화물들이 다시 합쳐진다. 많은 부분에서 packet들은 truck과, communication link들은 highway와 road, packet switch들은 intersection, 그리고 end system은 building과 유사하다.

 

End system은 local cable 또는 telephone company들과 같은 지역 ISP를 포함한 Internet Service Provider(ISP) 을 통해 Internet에 접근한다. 회사 ISP, 공용 ISP들은 공항, 호탤, 카페, 다른 공용 공간에 WiFi 접근을 제공한다. 또한 cellular data ISP는 스마트폰에 mobile access를 제공한다. 각 ISP는 그 자체로 packet switch와 communication link로 구성된 network이다. ISP는 다양한 타입의 network access를 end system에 제공한다. 예를 들어. cable modem이나 DSL와 같은 residential broadband access, high-speed local area network access, 그리고 mobile wireless access를 제공한다. ISP는 또한 콘텐츠 제공자에게 internet access를 제공하여 Web site와 video server를 직접 인터넷에 연갈한다. internet은 전부 end system의 연결에 대한 것이다. 그래서 end system간의 연결을 제공하는 ISP는 반드시 서로 연결되어야 한다. 저수준의 ISP는 국가 내에서, 그리고 고수준의 ISP는 높은 속도의 광섬유를 통해 국가 간을 연결한다. 각 ISP network(저, 고수준)는 독립적으로 관리되고, IP protocol을 실행한다.

 

============================================================================================

 

 

End System, Packet Switch 그리고 다른 internet의 요소들은 Protocol를 지킨다. 이는 internet 내에서 보내는, 그리고 받은 정보들을 제어한다. Transmission Control Protoco(TCP), Internet Protocol(IP) 는 둘 다 중요한 protocol이다. IP protocol은 오가는 packet의 format를 지정한다. internet의 protocol은 TCP/IP로 불린다.

 

세상의 많은 computing device들이 연결되어 있다. 여기서 용어 정리를 하면 hostend system이다. 그리고 network app들은 internet의 edge에서 실행된다. Packet switch(패킷 교환) 에서 router과 swtich들이 사용된다. Communication links(연결선) 에는 fiber, copper, radio, statellite가 있고 전송 속도를 bandwidth(대역폭) 이라고 한다. Networks는 조직에 의해 관리되는 devices, routers, links들의 집합이다.

internetnetwork들의 network이다. 이는 ISP들의 연결이다.

 

protocol은 오가는 message들을 제어하는 역할을 한다. protocol의 예로는 HTTP, streaming video, Skype, TCP, IP, WIFI, 4G, Ethernet이 있다.

 

IETF(Internet Engineering Task Force) 에 의해 Internet Standard이 정해진다. IETF의 standard document를 RFC(Request For Comment) 라고 한다.

The Internet: a "service" view

우리는 또한 완전히 다른 시각에서 Internet을 설명할 수 있다. an infrastructure that provides services to application. 현재에는 다양한 service를 제공한다. 예를 들어, Web, Streaming video, smartphone, tablet application, music streaming, movie, television streaming, 등등. 이러한 application들을 distributed application이라고 한다. 이러한 것들은 multiple end system을 포함하고, 또 각각 data를 교환하기 때문이다. internet application은 network core에 있는 packet switch에서 실행되지 않고, end system에서 실행된다. packet switch는 end system 간의 data 교환에 용이하지만, data의 출처나 목적지가 되는 application에는 관여하지 않는다.

 

============================================================================================

  • Infrastructure는 service를 application에 제공한다.
    • Web, Streaming video, multimedia, teleconferencing, email, games, e-commerce, social media, interconnected appliances,....
  • distributed application에 programming interface를 제공한다.
    • 송신, 수신 app이 internet transport service를 사용할 수 있도록 hook를 제공한다.
    • 우편 서비스와 유사한 서비스 옵션을 제공한다.
    • hook은 소프트웨어 개발에서 주료 사용되는 용어로, 프로그램이 특정 지점에서 사용자 정의 동작을 삽입하거나 호출할 수 있도록하는 인터페이스나 메커니즘을 말한다.

What's a Protocol?

Protocol은 network entity간에 송수신되는 message의 order, format, 그리고 message 전송 및 수신 시 취해지는 행동을 정의한다.

Nestwork Protocol에서 internet에서의 모든 communication activity들은 protocol에 좌지우지된다.

The Nestwork Edge

A closer look at Internet structure

  • Network edge
    • host는 end system이다.
    • hosts는 두 개의 categories로 나뉘는데, clientserver로 나뉜다.
    • 오늘날, 우리가 검색 결과, 이메일, 웹 페잊, 비디오를 받는 대부분의 서버는 대형 data center에 위치해 있다.
  • Access networks, physical media
    • wired, wireless communication links(유선 및 무선 통신 링크)
  • Network core
    • 상호 연결된 라우터들로 구성
    • 네트워크의 네트워크

Access networks and physical media

Q. 어떻게 end system들이 edge router로 연결되는가?

  • residential access nets
  • institutional access networks(shcool, company)
  • mobile access networks(WiFi, 4G/5G)

무엇을 살펴보아야 하는가?

  • access network의 transmission rate(bits per second)(접근 네트워크의 전송 속도(초당 비트수)는?)
  • t사용자들 간에 공유된 접근인지 전용 접근인지?

Network Edge

네트워크 엣지는 인터넷의 끝부분에 위치하며, 사용자가 실제로 네트워크에 접속하고 어플리케이션을 실행하는 부분이다. 주요 구성 요소와 기능은 다음과 같다.

호스트(Host == End System)

  • 클라이언트와 서버를 포함한다.
  • 클라이언트는 웹 브라우저, 이메일 클라이언트, 게임 등 다양한 어플리케이션을 실행한다.
  • 서버는 웹 서버, 이메일 서버 등 서비스를 제공한다.
  • 서버는 종종 대형 데이터 센터에 위치한다.

Access Network(접근 네트워크)

사용자가 네트워크에 접속하는 방식을 의미한다.

  • 주요 유형:
    • 유선 네트워크: DSL, 케이블 모뎀, 광섬유
    • 무선 네트워크: Wi-Fi, 4G/5G 셀룰러 네트워크
  • 주요 요소:
    • 전송 속도: 접근 네트워크의 속도는 사용자 경험에 큰 영향을 미친다.
    • 공유 접근 또는 전용 접근: 네트워크 자원이 여러 사용자 간에 공유되는지 또는 특정 사용자에게 전용으로 제공되는지 여부

Physical Media(물리적 미디어)

- 데이터 전송에 사용되는 매체를 의미한다.
- 유선 매체: copper wire, optical fiber
- 무선 매체: radio, satellite

Network Core(네트워크 코어)

네트워크 코어는 인터넷의 중심부터, data packet을 전달하는 주요 역할을 한다. 주요 구성 요소와 기능은 다음과 같다.

  1. Router
  • 네트워크 중심에서 packet을 전달하는 장치
  • packet이 소스에서 목적지로 가는 경로를 결정하고, 각 라우터를 통해 전달된다.
  1. Packet Switching
  • data는 작은 packet으로 나누어 전송된다.
  • 각 pacekt은 독립적으로 네트워크를 통해 전달되며, 최종 목적지에서 다시 조립된다.
  • Store-and-Forword(저장 및 전달): 각 Packet은 router에 도착하여 전체가 수신된 후 다음 라우터로 전달된다.
  1. Routing(경로 설정)
  • 패킷이 목적지까지 도달할 수 있도록 최적의 경로를 결정한다.
  • routing algoritm을 사용하여 경로를 설정하고, 네트워크의 상태를 기반으로 경로를 조정한다
  1. Transmission Delay and Queuing Delay(전송 지연 및 대기열 지연)
  • 패킷이 네트워크를 통해 전달될 때 발생하는 지연
  • 전송 지연(Transmission Delay): 패킷이 링크를 통해 전송되는 데 걸리는 시간
  • 대기열 지연(Queuing Delay): 라우터의 대기열에서 패킷이 전송을 기다리는 시간
  • 패킷 손실(Packet Loss): 네트워크 혼잡으로 인해 패킷이 손실될 수 있다.

네트워크 엣지와 네트워크 코어는 함께 작동하여 사용자가 인터넷을 통해 데이터를 송수신할 수 있도록 한다. 네트워크 엣지는 사용자가 직접 접속하는 부분이며. 네트워크 코어는 이러한 데이터가 효율적이고 신뢰성 있게 전달되도록 한다.

Access Networks: Cable-Based Access

위의 그림은 케이블 기반 접근(Cable-Based Access) 네트워크의 구조와 작동 방식을 보여준다. 이 그림은 주로 주거용 인터넷 서비스에서 케이블 모뎀을 통해 인터넷에 접속하는 방법을 설명하고 있다.

 

요약하면 케이블 기반 접근 네트워크의 주요 구성 요소와 주파수 분할 다중화를 통해 데이터와 TV 신호를 동시에 전송하는 방식을 시각적으로 보여준다. 각 구성 요소는 사용자가 인터넷과 TV 서비스를 동시에 사용할 수 있도록 역할을 한다.

  1. Cable Modem(케이블 모뎀)
    • 사용자의 가정에서 인터넷 신호를 수신하고, 이를 컴퓨터나 router에 전달한다.
  2. Splitter(스플리터)
    • 케이블 TV 신호와 인터넷 신호를 분리하여 각각의 장치로 전달한다.
    • 한쪽은 케이블 모뎀으로, 다른 쪽은 TV로 연결된다.
  3. Cable Headend(케이블 헤드엔드)
    • ISP 측의 주요 시설로, 모든 케이블 신호가 여기서 송출되고 관리된다.
    • 다양한 채널과 데이터를 포함하며, 주로 다수의 사용자에게 방송 신호와 인터넷 서비스를 제공한다.
  4. FDM(Frequency Division Multiplexing, 주파수 분할 다중화)
    • 주파수 분할 다중화는 하나의 케이블에서 여러 채널을 동시에 전송하는 기술이다.
    • 채널:
      1. 각 채널은 다른 주파수 대역을 사용하여 신호를 전송한다.
      2. 비디오 채널데이터 채널로 구분되어 있다.
      3. 비디오 채널은 TV 방송을, 데이터 채널은 인터넷 데이터를 전송한다.
      4. 제어 채널도 존재하는데, 네트워크 제어 및 관리 신호를 전송한다.

위의 그림의 작동 방식은 다음과 같다.

  1. 데이터 전송
    • 사용자의 인터넷 데이터는 Cable Modem을 통해 전송된다.
    • Splitter는 인터넷 데이터와 TV 신호를 분리하여 각각의 장치(Cable Modem, TV 수신기)로 전달한다.
    • 데이터는 Cable Headend로 보내지고, 여기서 ISP가 관리한다.
  2. 대칭성(Asymmetry)
    • 케이블 네트워크는 일반적으로 비대칭이다. 즉, 다운로드 속도와 업로드 속도가 다르다.
    • 다운로드 속도는 최대 1.2 Gbps까지 가능하며, 업로드 속도는 30-100 Mbps 범위이다.

  1. CMTS(Cable Modem Termination System, 케이블 모뎀 종료 시스템)
    • ISP 측에 위치한 장치로, 여러 사용자의 케이블 모뎀과 연결된다.
    • CMTS는 여러 사용자에게 인터넷 서비스를 제공하기 위해 케이블 네트워크의 데이터 트래픽을 관리하고 조정하는 역할을 한다.
  1. HFC(Hybrid Fiber-Coax, 하이브리드 광동축)
    • 광섬유와 동축 케이블의 결합으로 구성된다.
    • 데이터는 먼저 광섬유를 통해 전송된 후, 동축 케이블을 통해 가정으로 전달된다.
    • 이는 데이터 전송 속도를 높이고 신호의 품질을 향상시킨다.
  1. 비대칭 속도(Asymmetric Speed)
    • downstream transmission rate: 인터넷에서 사용자의 장치로 데이터가 다운로드 되는 속도를 의미
    • upstream transmission rate: 사용자의 장치에서 인터넷으로 데이터가 업로드되는 속도를 의미
    • downstream의 속도는 40Mbps에서 1.2Gbps이다.
    • upstream의 속도는 30Mbps에서 100Mbps이다.
    • 이는 사용자가 인터넷을 사용할 때 다운로드하는 데이터가 업로드하는 데이터보다 많기 때문이다.
  1. Share Access Network
    • 여러 가정이 동일한 케이블 네트워크를 공유하여 인터넷에 접속한다.

Access Networks: Digital Subscriber Line(DSL)

위의 그림은 디지털 가입자 회선(DSL) 기반 접근 네트워크의 작동 방식과 기술적 세부 사항을 설명하고 있다. DSL은 기존 전화선을 사용하여 고속 인터넷 서비스를 제공하는 기술이다.

  1. Central Office(중앙 사무소)
    • 전화 네트워크의 중심 허브로, 각 가정이나 사무실의 DSL 라인과 연결된다.
    • DSLAM(DSL Access Multiplexer) 이 위치해 있다.
  2. DSLAM(DSL Access Multiplexer)
    • 중앙 사무소에 위치한 장치로, 여러 사용자의 DSL 연결을 집합하고 인터넷으로 연결한다.
    • 음성 신호와 데이터 신호를 분리하여 각각 telephone network와 ISP로 전달한다.
  3. DSL 모뎀
    • 사용자의 가정이나 사무실에 위치한 장치로, 전화선을 통해 데이터를 송수신한다.
    • 데이터 신호와 음성 신호를 분리하여 각각 컴퓨터와 전화기로 전달한다.
  4. 스플리터(Splitter)
    • 전화 신호와 데이터 신호를 분리하여 각각의 장치로 전달한다.
    • 전화 신호는 전화기로, 데이터 신호는 DSL 모뎀으로 전달된다.

주요 특징으로는 다음과 같다.

  1. 기존 전화선 사용
    • DSL은 기존의 전화선을 사용하여 Central Office DSLAM을 연결하여, 인터넷 서비스를 제공한다.
    • 추가적인 케이블 설치 없이 고속 인터넷을 제공할 수 있다.
  2. 주파수 분할
    • 음성 신호와 데이터 신호는 서로 다른 주파수 대역을 사용하여 전송된다.
    • 음성 통화와 인터넷 사용이 동시에 가능하다.
    • DSL Phone LIne의 Data는 Internet으로 전송된다.
    • DSL Phone Line의 Voide는 Telephone net으로 전송된다.
  3. 전용 라인
    • DSL은 각 사용자가 중앙 사무소와 Dedicated Line(전용 라인)으로 연결된다.
    • 이는 다른 사용자와 대역폭을 공유하지 않기에 안정적인 속도를 제공한다.
  4. 속도
    • downstream transmission rate는 24-52 Mbps
    • upstream transmission rate는 2.5-16 Mbps

Access Networks: Home Networks

위의 그림은 가정용 네트워크의 구성과 작동 방식을 설명한다. 가정용 네트워크는 사용자 가정 내에서 인터넷과 로컬 네트워크를 구축하는 방식이다.

  1. headend 또는 central office로의 연결
    • 가정용 네트워크는 ISP와 연결된다.
    • 이 연결은 cable modem이나 DSL modem을 통해 이루어진다.
  2. Modem(Cable or DSL Modem)
    • 외부 네트워크(인터넷)와 가정 내 네트워크를 연결하는 장치이다.
    • Cable Modem이나 DSL Modem을 사용하여 ISP의 네트워크와 연결된다.
  3. router, firewall, NAT
    • router: 모뎀과 연결되어 가정 내 모든 장치에 인터넷 연결을 제공한다.
    • firewall: 외부로부터의 불법 접근을 차단하여 네트워크를 보호한다.
    • NAT(Network Address Translation): 내부 네트워크의 여러 장치가 공용 IP 주소 하나로 인터넷에 접속할 수 있도록 한다.
  4. Wired Ethernet
    • 이더넷 케이블을 통해 고정된 장치(e.g. desktop computer, smart TV)를 라우터에 연결한다.
    • 일반적으로 1 Gbps 속도로 데이터 전송이 가능하다.
  5. Wi-Fi Wireless Access Point(Wi-Fi 무선 엑세스 포인트)
    • 라우터에 통합된 경우가 많다.
    • 무선 신호를 통해 가정 내의 모든 무선 장치(e.g. 스마트폰, 태블릿, 노트북)에 인터넷 연결을 제공한다.
    • 전송 속도는 54Mbps에서 450 Mbps까지 다양한다.

Wireless Access Networks(무선 접근 네트워크)

Wireless Access Networks는 사용자가 유선 연결 없이도 네트워크에 접속할 수 있게 하는 기술이다.

  1. Wireless Access Networks(무선 접근 네트워크)
    • 무선 접근 네트워크는 공유된 wireless 매체를 통해 end system을 router에 연결한다.
    • Access Point을 통해 연결된다.
  2. Wireless Local Area Networks(WLANs, 무선 지역 네트워크)
    • 일반적으로 건물 내 주변(약 100ft)에서 사용된다.
    • Wi-Fi(802.11b/g/n) 표준을 사용하며, 전송 속도는 11, 54, 450 Mbps로 다양하다.
  1. Wide-area Cellular Access Networks(광역 셀룰러 네트워크)
    • 모바일 네트워크 사업자가 제공하는 서비스로, 10kilometer 이상의 넓은 지역을 커버한다.
    • 전송 속도는 10 Mbps 이상이며, 4G 셀룰러 네트워크가 주로 사용되고 있다.
    • 5G 네트워크는 향후 도입 예정

Access networks: enterprise networks

기업 네트워크(Enterprise Networks)는 회사, 학교, 대규모 조직 등의 내부 네트워크를 구성하며, 유선 및 무선 연결을 혼합하여 다양한 장치들을 연결한다.

  1. Enterprise Networks
    • 대규모 조직, 학교, 회사 등의 내부 네트워크이다.
    • 유선 및 무선 연결 기술을 혼합하여 사용한다.
    • 다양한 스위치와 라우터를 연결하여 네트워크를 구성한다.
  2. Ethernet(이더넷)
    • 주로 유선 연결을 위한 기술이다.
    • 전송 속도: 100 Mbps, 1 Gbps, 10 Gbps
    • 고속 데이터 전송을 지원하며, 주로 고정된 장치들을 연결하는 데 사용된다.
  3. Wi-Fi
    • 무선 연결을 위한 기술이다.
    • wireless access point를 통해 연결된다.
    • 전송 속도: 11 Mbps(802.11b), 54 Mbps(802.11g), 450 Mbps(802.11n)
    • 유연하고 이동이 가능한 장치들을 연결하는 데 사용된다.

Host: sends packets of data

  1. Host
    • 데이터를 송신하는 장치이다.
    • host는 application message를 작은 조각인 packet으로 나눈다.
  2. Packet
    • application message를 작은 조각으로 나눈 것이다.
    • 각 packet은 네트워크를 통해 전송된다.
    • packet의 길이는 L bit이다.
  3. Transmission Rate
    • Link의 전송 속도는 R bps(초당 비트 수) 이다.
    • 이는 Link가 데이터를 전송할 수 있는 속도를 나타낸다.
    • link transmission rate는 링크의 전송 속도를, link capacity는 링크의 용량을 의미하며 링크가 데이터를 얼마나 빠르게 전송할 수 있는지를 나타낸다. link bandwidth는 링크의 대역폭으로 단위 시간 당 전송할 수 있는 데이터의 양을 의미한다. 셋은 같은 의미다.

전송과정

  1. 패킷 분할
    • host는 어플리케이션 메시지를 작은 패킷으로 나눈다.
    • 각 패킷은 L bit의 길이를 가진다.
  2. 패킷 전송
    • 패킷은 Link를 통해 전송된다.
    • 패킷이 Link를 진입하는 데 걸리는 시간은 "Packet Transmission Delay(패킷 전송 지연)" 이라고 한다.
    • Transmission Delay(전송 지연) 은 패킷의 길이(L)와 링크의 전송 속도(R)에 의해 결정된다.
  3. 패킷 전송 지연(Transmission Delay)
    • 패킷 전송 지연은 패킷의 길이(L)을 링크의 전송 속도(R)로 나눈 값이다.
    • 패킷 전송 지연은 "time needed to transmit L-bit packet into link"이다.
    • 패킷 전송 지연은 L(bit) / R(bit / sec)이다.

Links: physical media

  • bit
    • 데이터의 가장 작은 단위이다.
    • 비트는 송신기(transmitter), 수신기(receiver) 사이에서 전송된다.
  • Physical Link(물리적 링크)
    • 송신기와 수신기 사이의 실제 물리적 경로이다.
    • bit는 이 물리적 링크를 통해 전송된다.

물리적 매체의 종류

  1. Guided Media(유도 매체)
    • 신호가 고체 매체를 통해 전파(propagate)된다.
    • Copper(구리), Fiber(광), Coax(동축)
  2. Unguided Media(비유도 매체)
    • 신호가 자유롭게 전파된다.
    • radio
  1. Twisted Pair(TP)
    • 두 개의 절연된 copper wire가 꼬인 형태
    • Category 5: 100 Mbps 또는 1 Gbps의 이더넷을 지원한다.
    • Category 6: 10 Gbps의 이더넷을 지원

  1. Coaxial Cable
    • 두 개의 동심(Concentric) 구리 도체(Conductors)
      • 내부 도체와 외부 도체로 구성된다.
      • 내부 도체는 중심에 위치하며, 외부 도체는 내부 도체를 감싸고 있다.
    • 양방향 전송(Bidirectional Transmission)
    • 브로드밴드(BroadBand)
      • 케이블에서 여러 주파수 채널을 통해 데이터를 전송할 수 있다.
      • 각 채널은 서로 다른 주파수 대역을 사용한다.
      • 채널 당 100 대의 Mbps를 가진다.

  1. Fiber Optic Cable
    • 유리 섬유(Glass Fiber)로 구성되어 있으며, 빛의 pulse를 통해 data를 전송한다.
    • High-Speed Transmission(고속 데이터 전송)
      • 빛의 펄스를 사용하여 데이터를 전송하므로, 매우 높은 전송 속도를 제공한다.
      • 전송 속도는 수십 Gbps에서 수백 Gbps에 이를 수 있다.
    • 낮은 오류율(Low Error Rate)
      • 중계기(repeater)를 멀리 떨어뜨려 설치가 가능
      • 전자기 잡음(electromagnetic noise)에 면역이다.

  1. Wireless Radio
    • wireless radio signal(무선 라디오 신호)
      • wireless radio signal은 electromagnetic spectrum(전자기 스펙트럼)을 통해 전파된다.
      • 물리적인 "선"이 필요 없이 자유롭게 전파된다.
    • Half-Duplex Communication(반이중 통신)
      • 무선 라디오 링크는 일반적으로 반이중(Half-Duplex) 방식으로 작동한다.
      • 이는 송신과 수신이 동시에 이루어지지 않음을 의미한다.
      • 한 번에 한 방향으로만 통신이 가능하다.
    • Propagation EnvironMent Effect(전파 환경의 영향)
      • 반사(Reflection): 신호가 물체에 부딪혀 반사될 수 있다.
      • 장애물에 의한 방해(Obstruction by Objects): 건물이나 나무 등의 장애물이 신호를 약화시킬 수 있다.
      • 간섭(Interference): 다른 전자기 신호에 의해 간섭을 받을 수 있다.
    • Radio Link의 타입
      • Terrestrial Microwave(지상파 마이크로파)
        • 최대 45 Mbps의 채널을 지원
        • 주로 장거리 전송에 사용
      • Wireless LAN(WiFi)
        • 최대 100's Mbps 지원
        • Wi-Fi라고 불리며, 주로 건물 내에서 사용된다.
      • Wide-Area(e.g. cellular)
        • 모바일 네트워크 운영자가 제공하는 서비스
        • 넓은 지역을 커버하며. 이동 중에도 인터넷 접속이 가능하다.
        • 4G cellular: ~10's Mbps
      • Satellite
        • 위성을 통해 데이터를 전송한다.
        • 지구 동기 궤도(Geosynchronous Orbit) 또는 저궤도(Low Earth Orbit) 위성을 사용한다.
        • 최대 45 Mbps의 채널을 지원한다.
        • end-to-end 전송 지연은 약 270 밀리초이다.

Network Core: Packet/Circuit Switching, Internet Structure

The Network Core

네트워크 코어는 Mesh of Interconnected Routers 구조이다.
- 네트워크 코어는 상호 연결된 router들의 mesh 구조로 구성된다.
- 이는 여러 라우터가 서로 연결되어 있어, 데이터 패킷이 다양한 경로를 통해 전달될 수 있음을 의미한다.

패킷 스위칭(Packet Switching)

  1. Packet Switching의 원리
    • 패킷 스위칭은 네트워크 코어에서 사용되는 데이터 전송 방식으로, 데이터가 작은 패킷으로 나누어져 전송된다.
    • 각 패킷은 독립적으로 네트워크를 통해 전달되며, 최종 목적지에서 다시 조립된다.
  2. 패킷 전송
    • 호스트는 application Layor Message를 패킷으로 나누어 전송한다.
    • Packet은 네트워크를 통해 여러 router를 거쳐 목적지까지 전달된다.
  3. 전체 링크 용량(Full Link Capacity) 사용
    • 각 패킷은 전체 링크 용량을 사용하여 전송된다.
    • 이는 각 링크가 최대 전송 속도로 데이터를 전송할 수 있음을 의미한다.

Packet-Switching: Store-And-Forward

Transmission Delay(전송 지연)

  • 정의: 전송 지연은 패킷이 하나의 링크를 통해 전송되는 데 걸리는 시간을 의미한다.
    • 그림에서는 송신 host에서 첫 번째 router에 도달할 때까지의 시간을 의미한다.
  • 공식: L은 패킷의 크기(비트 단위)이고 R은 링크의 전송 속도(bps, bits per second)로 계산된다.
    • Transmission Delay = L / R
    • e.g. 패킷의 크기가 8000bit이고 링크의 전송 속도가 2 Mbps(2,000,000 bps)라면, 전송 지연은 8000/2000000= 0.004 초, 즉 4밀리초이다.
    • e.g. L = 10 Kbits, R = 100 Mbps, transmission delay = 10,000 bits / 100,000,000 bits/second = 0.0001 seconds = 0.1 milliseconds(msec)

Store and Forward(저장 및 전달)

  • 정의: 저장 및 전달은 각 패킷 하나가 완전히이 라우터에 도착하면, 라우터가 패킷을 완전히 수신한 후에 다음 링크로 전송하는 방식이다.
  • 작동 방식:
    1. 패킷이 라우터에 도착하면, 라우터는 패킷을 완전히 수신할 때까지 기다린다.
    2. 전체 패킷이 도착한 후에야 라우터는 패킷을 분석하고, 다음 목적지로 전송한다.
    3. 이 과정은 패킷이 손상되지 않고 올바르게 전송되도록 보장한다.
  • 장점: 이러한 방식은 데이터의 신뢰성을 높이고, 패킷이 손상되거나 손실되지 않도록 한다.

End-To-End Delay

  • 정의: end-to-end delay은 한 패킷이 소스에서 목적지까지 도달하는 데 걸리는 총 시간을 의미한다.
    • 데이터 패킷이 소스(송신 호스트)에서 목적지(수신 호스트)까지 도달하는 데 걸리는 전체 시간을 의미
  • 공식: 간단한 경우, 전파 지연이 없다고 가정하면 end-to-end delay는 소스와 목적지 사이의 각 링크에서 발생하는 전송 지연의 합으로 계산된다.
    • 공식: end-to-end delay = 2L/R
    • L은 패킷의 길이, R은 링크의 전송 속도
    • 이 공식은 중간에 있는 각 링크에서 동일한 크기의 패킷이 동일한 속도로 전송된다고 가정

Packet-Switching: Queueing Delay, Loss

Packet Queuing(패킷 큐잉)

  • 정의: 패킷 큐잉은 패킷이 전송되기 전에 라우터의 출력 링크의 대기열(queue)에 쌓이는 현상을 의미한다.
  • 발생 조건: 링크에 도착하는 데이터의 비트 속도(도착률)가 링크의 전송 속도보다 클 때 발생한다.
    • 도착률(Arrival Rate): 패킷이 router에 도착하는 속도(bps, bits per second)
    • 전송 속도(Transmission Rate): 패킷이 링크를 통해 전송되는 속도(bps)
  • 설명: 일정 시간 동안 패킷 도착률이 전송 속도를 초과하면, 패킷은 즉시 전송될 수 없고 대기열에 저장된다. 대기열에 쌓인 패킷은 전송 링크가 사용 가능해지면 순서대로 전송된다.

Packet Loss(패킷 손실)

  • 정의: 패킷 손실은 router의 memory(buffer)가 가득 차서 더 이상 새로운 패킷을 저장할 수 없을 때 발생하는 현상이다.
  • 발생 조건: router의 memory(buffer)가 꽉 찬 경우, 새로운 패킷을 저장할 공간이 없어 패킷이 drop(버려짐)된다.
    • 버퍼(Buffer): router 내에 packet을 일시적으로 저장하는 메모리 공간
  • 설명: 패킷 도착률이 전송 속도를 지속적으로 초과하면 대기열이 점점 길어지고, 결국 버퍼가 가득 차게 된다. 이 경우, 새로운 패킷은 저장되지 못하고 drop된다. 이는 네트워크에서 패킷 손실을 초래한다.

Two key network-core functions

네트워크 코어의 두 가지 주요 기능은 포워딩(Forwarding)라우팅(routing) 이다. 이 기능들은 packet이 network를 통해 올바르게 전송되고 전달될 수 있도록 하는 핵심 역할을 한다.

Forwarding

  • 정의: forwarding은 router가 packet을 수신하고, 그 packet을 적절한 출력 링크로 이동시키는 local action이다.
  • 작동 방식:
    • packet이 router에 도착하면, router는 packet header에 있는 목적지 주소를 읽는다.
    • router는 목적지 주소와 Local Forwarding Table(내부 라우팅 테이블)을 사용하여 패킷을 다음 hop으로 전송할 output link를 결정한다.
    • packet은 input link에서 적절한 output link로 이동된다.
  • 예시: packet header의 목적지 주소가 '0101'인 경우 라우터는 라우팅 테이블을 참조하여 이 패킷을 output link '2'로 전송한다.

Routing

  • 정의: 라우팅은 소스에서 목적지까지 패킷이 경로따라 이동하는 데 사용되는 global action이다.
  • 작동 방식:
    • routing algorithm을 사용하여 네트워크의 모든 라우터 간의 최적 경로를 결정한다.
    • routing algorithm은 다양한 기준(e.g. 최단 경로, 최소 비용, 최대 대역폭 등)을 사용하여 경로를 선택한다.
    • routing table이 주기적으로 업데이트되어 네트워크 상태 변화에 따라 최적 경로를 반영한다.

forwarding과 routing의 관계

  • forwarding은 개별 패킷을 router 내부에서 처리하는 local action이다.
  • routing은 전체 네트워크 경로를 설정하는 global action이다.
  • routing algorithm을 통해 생성된 routing table을 사용하여 forwarding이 수행된다.

Alternative to packet switching: circuit switching

circuit switching(회선 교환) 은 source와 destination 사이의 "통화(Call)"을 위해 끝에서 끝까지 자원을 할당하고 예약하는 방식이다. 이는 네트워크 내에서 데이터 전송을 위한 또 다른 방식으로, 주로 전통적인 전화 네트워크에서 사용된다.

주요 특징

  1. 자원 할당(Resource Allocation)
    • 회션 교환에서는 소스와 목적지 간의 통화가 설정될 때, 각 링크의 자원이 통화 동안 예약된다.
    • 다이어그램에서는 각 링크의 4개의 회선을 가지고 있으며, 통화가 설정되면 특정 회선이 할당된다.
  2. 전용 자원(Dedicated Resources)
    • 각 통화는 전송 자원을 독점적으로 사용하며, 다른 통화와 자원을 공유하지 않는다.
    • 이는 회선 교환 방식이 보장된 성능을 제공하는 이유이다.
  3. 자원 비공유(No Sharing)
    • 통화에 사용되지 않는 회선 자원은 다른 통화에서 사용할 수 없다. 이는 비효율성을 초래할 수 있다.
    • 예를 들어. 통화가 활성화되지 않으면 해당 회선 자원은 유휴 상태로 남는다.

Circuit switching: FDM and TDM

회선 교환 네트워크의 두 가지 주요 다중화 방식에는 Frequency Division Multiplexing(FDM, 주파수 분할 다중화)Time Division Multiplexing(TDM, 시분할 다중화) 가 있다. 이 두 가지 방식은 자원을 나누어 사용하는 방법이다.

Frequency Division Multiplexing(FDM)

  • 정의: FDM은 광학(optical) 또는 전자기 주파수(electromagnetic frequency)를 좁은 주파수 대역(frequency band)으로 나누어 각각의 통화 또는 데이터 스트림에 할당하는 방식이다.
  • 작동 방식:
    • 각 통화는 고유한 주파수 대역을 할당받아 동시에 여러 통화가 서로 간섭 없이 진행될 수 있다.
    • 예를 들어, 4명의 사용자가 있을 때, 각 사용자는 다른 주파수 대역을 사용하여 데이터를 전송한다.
  • 특징:
    • 각 통화는 자신만의 주파수 대역을 사용하므로, 다른 통화와 대역폭을 공유하지 않는다.
    • 대역폭이 고정되어 있어 예측 가능한 성능을 제공한다.

Time Division Multiplexing(TDM)

  • 정의: TDM은 시간을 slot으로 나누어 각 통화에 주기적으로 할당하는 방식이다.
  • 작동 방식:
    • 각 통화는 주기적인 시간 슬롯을 할당받아 해당 시간 동안 데이터를 전송한다.
    • 예를 들어, 4명의 사용자가 있을 때, 각 사용자는 주기적으로 돌아오는 시간 슬롯을 사용하여 데이터를 전송한다.
  • 특징:
    • 시간 슬롯은 정해진 간격으로 반복되며, 각 슬롯은 사용자가 최대 전송 속도로 데이터를 전송할 수 있도록 한다.

Packet Switching vs Circuit Switching

Packet Switching이 좀더 많은 user를 허용한다.

 

Packet Switching
1 Gbps link에서 각 사용자는 100 Mbps의 대역폭을 필요로 하며, 사용자는 10% 의 시간 동안만 활성 상태이다. 패킷 교환을 통해 N 명의 사용자가 네트워크를 공유할 수 있다.

  • 패킷 교환 : 사용자가 동시에 활성 상태일 확률이 적어 많은 사용자가 네트워크를 공유할 수 있다.
    • 예를 들어, 35명의 사용자가 있을 때 동시에 10명 이상이 활성 상태일 확률은 매우 낮다(less than 0.0004).

Circuit Switching

1 Gbps link에서 각 사용자가 100 Mbps를 사용할 때, 최대 10명의 사용자가 동시에 통신할 수 있다.

  • 회선 교환: 고정된 회선을 할당받아 통신하는 동안 안정적인 대역폭을 보장받지만, 사용하지 않을 때도 자원이 낭비된다.

패킷 교환은 자원의 효율적 사용과 유연성을 제공하지만 혼잡 시 성능 저하가 발생할 수 있다. 반면 회선 교환은 고정된 대역폭과 일관된 지연을 제공하지만 자원의 비효율적 사용과 설정 시간이 필요하다.

패킷 교환(Packet Switching)

  • 특징: 패킷 교환 방식에서는 데이터가 작은 패킷으로 나뉘어 독립적으로 전송된다. 각 패킷은 네트워크를 통해 독립적인 경로를 선택할 수 있다.
  • 장점:
    • 효율성: 네트워크 자원이 필요할 때만 사용되므로 자원 활용이 효율적
    • 유연성: 패킷은 다양한 경로를 통해 목적지에 도달할 수 있어 네트워크 장애에도 견딜 수 있다.
  • 단점:
    • 혼잡: 네트워크 혼잡 시 패킷 지연과 손실이 발생할 수 있다.
    • 지연 변동성: 패킷이 서로 다른 경로를 택할 수 있어 지연 시간이 일정하지 않을 수 있다.

회선 교환(Circuit Switching)

  • 특징: 회선 교환 방식에서는 통신을 위해 소스와 목적지 간에 전용 회선이 설정되고, 해당 회선이 통화 동안 전용으로 사용된다.
  • 장점:
    • 고정된 대역폭: 통신 동안 고정된 대역폭이 할당되어 안정적인 성능을 제공한다.
    • 일관된 지연: 전용 회선을 사용하므로 지연 변동이 적다.
  • 단점:
    • 비효율성: 회선이 사용되지 않을 때도 자원이 낭비된다.
    • 설정 시간: 통화를 시작하지 언에 회선을 설정하는 시간이 필요하다.

패킷 교환의 장점

  • Great For Bursty Data
    • 데이터가 일정하지 않게 전송되는 경우에 적합하다. 때로는 많은 데이터를 보내고, 때로는 전혀 데이터를 보내지 않을 수 있다.
    • 자원 공유(Resource Sharing): 네트워크 자원을 여러 사용자가 공유하므로, 전체 자원 활용도가 높아진다.
    • 간단한 설정(Simpler, No Call Setup): 통신을 시작하기 전에 전용 회선을 설정할 필요가 없어 간단하다.

패킷 교환의 단점

  • Excessive Congestion Possible(혼잡 가능성)
    • 네트워크 혼잡 시 패킷 지연과 손실이 발생할 수 있다.
    • Protocols Needed: 신뢰할 수 있는 데이터 전송과 혼잡 제어를 위해 추가적인 프로토콜이 필요하다.

Q. How to provide circuit-like behavior?

  • Bandwidth Guarantees(대역폭 보장): 전통적으로 오디오 및 비디오 어플리케이션에서 사용된다. 패킷 교환 네트워크에서도 대역폭 보장을 통해 회선 교환과 유사한 성능을 제공할 수 있다.

Q. human analogies of reserved resources(circuit switching) versus on-demand allocation(packet switching)?

  • 회션 교환은 전용 예약된 리소스를 사용하는 것과 비슷하다. 예를 들어, 전용 회의식을 예약하는 것과 같다.
  • 패킷 교환은 필요할 때 리소스를 사용하는 것과 비슷하다. 예를 들어, 고용ㅇ 회의실을 필요할 때 사용하는 것과 같다.

Internet structure: a "network of networks"

  1. 인터넷 구조: network of networks
    • 인터넷은 여러 개의 독립적인 네트워크가 상호 연결된 형태로 구성된다.
    • host는 ISP를 통해 인터넷에 연결된다.
      • e.g. residential, enterprise(company, university, commercial) ISP
  2. Access ISP 간의 상호 연결
    • 각 Access ISP는 상호 연결되어 있어야 한다.
    • 이를 통해 두 호스트가 서로 패킷을 주고받을 수 있다.
  3. complex network
    • 상호 연결된 네트워크의 결과로 매우 복잡한 구조가 형성된다.
    • 인터넷의 발전은 경제적 요인과 국가 정책에 의해 주도되었다.
  4. 단계적 접근 방식
    • 현재 인터넷 구조를 설명하기 위해 단계적 접근 방식을 취한다.

Question: 만일 수 만개의 access ISP가 있다면, 이를 어떻게 연결하는가?

  1. ISP 간에 직접적으로 상호 연결하지 않는다. 이는 O(N^2)의 연결을 가진다.
    • ISP(Internet Service Provider): 사용자 호스트를 인터넷에 연결하는 역할을 한다.
    • 주거용 ISP, 기업용 ISP(회사, 대학, 상업용 ISP 등)

  1. 각각의 ISP를 하나의 global transit ISP에 연결하는 건 어떠한가? Customer, Provider ISP는 economic agreement를 가진다.

  1. 하지만 만일 on global ISP가 business면에서 유용하다면, 다른 경쟁자가 존재할 수 있다.

  1. 그리고 이 global ISP는 연결될 것 이다.
    • IXP(Internet eXchange Point, 인터넷 교환 지점): IXP는 다양한 ISP가 서로 연결되어 트래픽을 교환하는 물리적 위치
      • IXP를 통해 ISP 간의 데이터 전송이 원활하게 이루어진다.
    • peering link: 두 개의 인터넷 네트워크 간의 직접적인 연결을 의미한다.

  1. 그리고 regional network가 access network를 ISP에 연결하기 위해 등장할 수 있다.

  1. 그리고 content provider networks(e.g. Google, Microsoft, Akamai)가 자기만의 network를 운영할 수 있다. 이는 자신들의 content를 end user에 좀 더 가져올 수 있도록 한다.

============================================================================================

  1. 인터넷의 계층 구조
    • Tier-1 ISP: 전 세계적으로 커버리지를 제공하는 대형 상업용 ISP이다. e.g. Level 3, Sprint, AT&T, NTT
    • Reginal ISP: 특정 지역 내에서 서비스를 제공하는 ISP로, 여러 접근 ISP와 연결된다.
    • Access ISP: 일반 사용자와 기업에게 인터넷 연결을 제공하는 ISP이다. e.g. 주거용 ISP, 기업용 ISP
  2. 인터넷 교환 지점(IXP)
    • IXP는 여러 ISP가 서로 연결되어 트래픽을 교환하는 물리적 위치이다.
    • IXP를 통해 ISP 간의 데이터 전송이 원활하게 이루어진다.
  3. 인터넷의 복잡성
    • 인터넷 구조는 다양한 ISP와 IXP의 상호 연결로 인해 매우 복잡하다.
    • 인터넷의 발전은 경제적 요인과 국가 정책에 의해 주도되었다.
  4. 중심부의 대형 네트워크
    • 인터넷의 중심에는 잘 연결된 대형 네트워크가 소수 존재한다.
    • Tier-1 Commercial ISP: national & international coverage를 제공한다.
    • Content Provider Network: 이들은 데이터 센터를 인터넷에 연결하는 사설 네트워크를 운영하여, 종종 Tier-1 및 지역 ISP를 우회한다.(e.g. Google, Facebook)

Tier-1 ISP Network map: Sprint(2019)

한국의 IX 연동 현황

Performance: Loss, Delay, Throughput

How do packet loss and delay occur?

Packet Loss and Delay Occur

  1. Packet Queuing
    • Packet은 route의 Buffer의 대기열에 쌓이게 된다.
    • 이는 Packet이 Output link에 접근할 수 있는 시간이 될 때까지 대기하는 것을 의미한다.
  2. Packet Loss
    • Arrival Rate(패킷 도착률)이 Output Link Capacity(링크의 출력 용량)를 일시적으로 초과하면 Packet Loss가 발생할 수 있다.
    • 패킷이 라우터에 도착하는 속도(도착률)가 링크의 전송 속도보다 높을 때, 버퍼에 패킷이 쌓이게 된다.
    • Router의 Buffer가 가득 차게 되면, 추가로 도착하는 Packet은 버려지거나 손실된다.



위의 그림에서

  • Transmission Delay(패킷 전송 지연): 패킷이 전송 링크를 통해 전송되는 데 걸리는 시간
  • Queueing Delay(패킷 큐잉 지연): 패킷이 버퍼에서 대기하는 시간
  • Packet Loss(패킷 손실): 버퍼가 가득 차서 더 이상 패킷을 저장할 수 없을 때 발생



Packet Delay: Four Sources

패킷 지연의 네 가지 주요 요인

  • Nodal Processing Delay(d_proc)
    • 라우터에서 패킷을 처리하는 데 걸리는 시간. 이는 오류를 검사하고, 패킷의 목적지 주소를 확인하는 과정을 포함한다.
    • 패킷 헤더를 조사하고 패킷을 어디로 보낼지 결정하는 시간
    • 노드 처리 이후에 라우터는 목적지 라우터로 향하는 링크의 큐에 보낸다.
    • 일반적으로 매우 짧으며 밀리초 단위이다.
    • e.g. 놀이공원에서 롤러코스터를 타기위해 어디로, 어떻게 갈지를 결정하는 시간

  • Queueing Delay(d_queue)
    • 패킷이 라우터의 출력 링크로 전송되기 위해 대기하는 시간. 이는 네트워크의 혼잡 수준에 따라 달라진다.
    • 큐에 저장되어 링크로 전송되기를 기다리는 패킷의 수에 따라 결정된다. 큐가 비어 있다면 큐잉 지연은 0이다.
    • 혼잡이 심할수록 대기 시간이 길어진다.
    • e.g. 롤러코스터를 타러 갔는데 앞서 도착한 사람들이 있어 대기하는 시간
  • Transmission Delay(d_trans)
    • 패킷의 모든 비트를 송신 링크에 푸시하는 데 걸리는 시간
    • 패킷의 모든 비트를 링크로 전송하는데 필요한 시간
    • e.g. 롤러코스터에 탑승할 차례가 되어 자리에 앉기까지 걸리는 시간
    • Transmission Delay = L / R
      • L: 패킷의 크기(bits)
      • R: 링크 전송 속도(bps)
      • e.g. packet의 크기가 10,000bit이고 전송 속도가 1,000,000 bits/sec일 경우 전송 지연은 0.01sec
  • Propagation Delay(d_prop)
    • 패킷이 링크를 통해 전파되는 데 걸리는 시간
    • 링크의 처음부터 목적지 라우터까지의 전파에 필요한 시간. (목적지 라우터는 최종 목적지만을 의미하지 않는다.)
    • 비트는 링크의 전파속도로 전파되며, 빛의 속도나 같거나 약간 작다.
    • 전파 지연은 두 라우터 사이의 거리(length of physical link)를 전파속도로 나눈 것이다.
    • Propagation Delay = d / s
    • e.g. 롤러코스터가 출발해서 한 코스를 도는 시간
      • d: length of physical link
      • s: propagation speed(~2*10^8 m/sec)
      • e.g. length of physical link is 2,000,000m 그리고 propagation speed가 2*10^8m/sec일 경우 전파 지연은 0.01sec이다.
  • Transmission Delay vs Propagation Delay
    • 전송 지연은 router가 packet을 내보내는 데 필요한 시간으로, 두 라우터 사이의 거리와 상관없다.
    • 전파 지연은 packet이 한 router에서 다른 router까지 이동하는데 필요한 시간이다. packet 길이나 전송률과 상관이 없다.

Caravan Analogy

  1. 설정
    • Car: 각 자동차는 네트워크에서 전송되는 개별 비트를 나타냄
    • Caravan: 자동차의 집합으로, 네트워크에서 전송되는 Packet을 나타냄
    • Toll Booth: 네트워크의 라우터 또는 스위치를 나타내며, 이 지점을 통과할 때 지연이 발생
  2. 조건 설정
    • 자동차는 100 km/h
    • Toll Booth에서 각 자동차를 처리하는 데 12초가 소요된다.
    • Caravan은 Car가 10대
  3. Q. How long until caravan is lined up before 2nd toll booth?
    • 마지막 Car가 toll booth를 통과할 때 12 * 10 = 120 sec
    • 마지막 Car가 2nd toll booth를 도착하면 100km / (100km/h) = 1h
    • => 62m
  4. 조건 재설정
    • 자동차는 1000km/h
    • Toll Booth에서 각 자동차를 처리하는데 1min이 소요
  5. Q. will cars arrive to 2nd booth before all cars service at first booth?
    • Yes! <- NO아님? ㅋ
    • 속도가 1000km/h이기에 100km / (1000km/h) = 6m, 즉 첫 차가 toll booth를 통과하고 두 번째 toll booth에 도달까지 7분이 소요된다. 이 때 첫 번째 toll booth도 지나지 않은 자동차는 3대이다.

Packet Queueing Delay(revisted)

  1. Packet Queuing Delay
    • R: 링크 대역폭 (bits per second, bps)
    • L: 패킷 길이 (bits)
    • a: 평균 패킷 도착률 (packets per second)
  2. Traffic Intensity(트래픽 강도)
    • 트래픽 강도는 La / R로 계산됩니다.
    • La/R ≈ 0: 평균 큐잉 지연이 작습니다.
      • 트래픽 강도가 낮을 때, 평균 큐잉 지연은 거의 없습니다.
      • 패킷이 거의 대기하지 않고 즉시 전송될 수 있습니다.
    • La/R → 1: 평균 큐잉 지연이 커집니다.
      • 트래픽 강도가 높아질수록, 평균 큐잉 지연이 증가합니다.
      • 패킷이 전송되기 전에 더 오래 대기해야 합니다.
    • La/R > 1: 네트워크에 도착하는 작업이 서비스될 수 있는 양을 초과하므로 평균 지연이 무한대가 됩니다.
      • 트래픽 강도가 1을 초과하면, 네트워크가 과부하 상태가 되어 패킷이 손실되거나 무한정 대기하게 됩니다.

"Real" Internet Delays and Routes

"실제" Internet Delay와 Loss는 어떻게 보이는가?

 

TTL(Time To Live): 네트워크에서 패킷이 라우터를 통과할 수 있는 최대 횟수를 나타내는 필드이다. TTL은 주로 IP 패킷 헤더에 포함되어 있으며, 라우터를 통과할 때마다 이 값이 감소한다. TTL 값이 0에 도달하면 패킷은 폐기되며, 이를 통해 네트워크에서 무한 루프를 방지할 수 있다.



ICMP (Internet Control Message Protocol): 네트워크 장치들 간에 제어 메시지를 교환하기 위한 프로토콜이다. 이는 IP 프로토콜의 일부로, 네트워크 상태를 진단하고 문제를 해결하는 데 사용된다. ICMP는 주로 오류 메시지와 네트워크 상태 정보를 전달하는 역할을 한다.



TraceRoute Program

  • 소스에서 목적지로 가는 경로에 따라 라우터마다 지연 시간을 측정하는 도구이다.
  • 소스에서 라우터로 가는 경로를 추적하면서 각 라우터를 통과하는 데 걸리는 시간을 측정한다.
  • delay time = Nodal Processing Delay + Queueing Delay + Transmission Delay + Propagation Delay
  • 작동과정
    1. 각 라우터마다 패킷 전송
      • i 번째 라우터까지의 지연 시간 측정:
        • Traceroute는 TTL 값을 i로 설정하여 i 번째 라우터까지 가는 패킷을 보낸다.
        • i 번째 라우터는 TTL 값이 0이 되면 패킷을 폐기하고, ICMP "시간 초과" 메시지를 소스에 반환한다.
    2. 세 개의 패킷 전송
      • Traceroute는 각 라우터에 대해 세 개의 패킷을 보낸다.
      • 이는 더 정확한 지연 시간을 측정하기 위함이며, 각 패킷에 대해 개별적으로 지연 시간을 측정한다.
    3. 지연 시간 측정
      • 송신자는 패킷이 전송된 시간과 ICMP 메시지가 반환된 시간 사이의 간격을 측정한다.
      • 이렇게 해서 각 라우터까지의 왕복 시간을 계산한다.

Real Internet Delays and Routes

위의 그림은 gaia.cs.umass.edu 에서 www.eurecom.fr 까지의 route 과정을 traceroute를 활용해서 나타낸 것이다.

"1 cs-gw (128.119.240.254) 1ms 1ms 2ms"에서 3개의 packet을 보내기에 3개의 결과가 나온다.

두 사이트 사이에는 19개의 router가 있는 것이다.

Packet Loss

  1. 패킷 손실의 원인
    • 큐(버퍼) 용량의 한계: 네트워크 장치, 특히 라우터의 버퍼에는 제한된 용량이 있다.
    • 큐가 가득 찰 때: 패킷이 도착했을 때 버퍼가 가득 차 있으면, 새로운 패킷은 버퍼에 저장되지 못하고 손실된다.
  2. 패킷 손실 처리
    • 손실된 패킷은 다음의 방법으로 처리될 수 있다:
      • 이전 노드에 의해 재전송: 패킷을 보낸 이전 라우터가 손실된 패킷을 다시 보낼 수 있다.
      • 출발지 시스템에 의해 재전송: 패킷의 출발지 시스템이 손실된 패킷을 다시 보낼 수 있다.
      • 전송되지 않음: 일부 프로토콜에서는 손실된 패킷을 재전송하지 않고 무시할 수도 있다.



ThroughtPut(처리량)

송신자에서 수신자로 비트가 전송되는 속도(bit/time unit)를 나타내는 네트워크 성능의 중요한 측정 지표이다.



1. **처리량(Throughput)**: 송신자에서 수신자로 비트가 전송되는 속도. 2. **순간 처리량(Instantaneous Throughput)**: 특정 시점에서의 전송 속도. 3. **평균 처리량(Average Throughput)**: 일정 기간 동안의 평균 전송 속도.

처리량의 시각적 설명

  • 파이프 모델: 비트를 물처럼 취급하여 파이프를 통해 흐르는 방식으로 설명.
    • 서버가 비트를 파이프에 보내고, 파이프는 비트를 수용할 수 있는 최대 속도로 비트를 전달.
  • 링크 용량: Rs와 Rc는 각각의 링크가 비트를 전송할 수 있는 최대 속도를 나타냄.
    • 이 두 링크를 통해 비트가 전달될 때의 최대 처리량은 이 링크들 중 가장 작은 값에 의해 제한.




============================================================================================




  1. 병목 링크(Bottleneck Link)
    • 병목 링크란 네트워크 경로에서 가장 낮은 처리 용량을 가진 링크를 의미.
    • 병목 링크의 용량이 전체 경로의 처리량을 제한.
  1. 예제 시나리오
    • Rs < Rc : 이 경우, 전체 경로의 평균 처리량은 Rs 로 제한
    • Rs > Rc : 이 경우, 전체 경로의 평균 처리량은 Rc 로 제한
    • 결론: 전체 경로의 평균 처리량은 항상 경로에서 가장 낮은 용량을 가진 링크에 의해 제한.



Throughput: network scenario

백본(Backbone) 은 컴퓨터 네트워크의 주요 데이터 경로를 의미하며, 고속 데이터 전송을 위해 네트워크의 다양한 부분을 연결하는 중심적인 경로이다. Backbone은 다양한 네트워크를 연결하고 데이터 트래픽을 처리하는 데 중요한 역할을 한다.

  1. 네트워크 시나리오
    • 네트워크에는 10개의 연결이 존재하며, 이들 연결은 모두 하나의 Backbone Bottleneck 링크(용량 R bps)를 공유한다.
    • 각 연결은 서버에서 클라이언트로 데이터를 전송한다.
    • Backbone 링크는 네트워크 경로에서 가장 낮은 용량을 가진 링크로서, 전체 네트워크의 처리량을 제한한다.
  2. 각 연결의 처리량 계산
    • 각 연결의 처리량은 다음과 같이 계산된다:
      • Rc: 클라이언트로 가는 링크의 용량
      • Rs: 서버로 가는 링크의 용량
      • R: Backbone 링크의 용량
    • 각 연결의 end to end처리량은 min(Rc,Rs, R/10) 으로 계산된다.
      • Backbone 링크가 10개의 연결에 의해 공유되므로, 각 연결이 얻을 수 있는 최대 처리량은 Backbone 링크 용량의 1/10 이다.



Security

Bad guys: malware

  1. 악성 소프트웨어(Malware)의 유형
    • 바이러스(Virus): 자신을 복제하여 확산되는 악성 소프트웨어이다. 주로 이메일 첨부 파일이나 다운로드한 파일을 통해 실행
    • 웜(Worm): 네트워크를 통해 스스로를 복제하고 확산하는 악성 소프트웨어이다. 사용자의 개입 없이도 전파될 수 있다.
  2. 스파이웨어(Spyware)
    • 사용자의 동의 없이 컴퓨터에서 정보를 수집하는 악성 소프트웨어이다. 키로깅(키보드 입력 기록)이나 웹 사이트 방문 기록을 수집하여 외부로 전송할 수 있다.
  3. 봇넷(Botnet)
    • 악성 소프트웨어에 감염된 다수의 컴퓨터들이 네트워크를 통해 연결되어, 공격자의 명령을 받아 다양한 악성 행위를 수행하는 네트워크이다.
    • 감염된 호스트는 스팸 메일 발송이나 분산 서비스 거부 공격(DDoS)에 사용될 수 있다.



Bad guys: denial of Service

  1. 서비스 거부 공격(DoS)의 정의
    • 목표: 서버나 네트워크 자원을 사용 불가능하게 만드는 것.
    • 방법: 과도한 트래픽을 발생시켜 자원을 고갈시킨다.
  2. 공격 과정
    • 대상 선택: 공격자는 특정 서버나 네트워크를 대상으로 선택한다.
    • 네트워크 침입: 공격자는 네트워크 주변의 여러 호스트를 침입한다. 이는 주로 봇넷(botnet)을 통해 이루어진다.
    • 공격 실행: 침입된 호스트에서 대량의 패킷을 목표 서버로 전송하여 서버를 마비시킨다.



Bad guys: packet interception

  1. 패킷 스니핑(Packet Sniffing)
    • 정의: 네트워크 상에서 전송되는 패킷을 가로채어 분석하는 행위이다.
    • 브로드캐스트 미디어(Broadcast Media): 공유 이더넷이나 무선 네트워크와 같은 브로드캐스트 미디어에서는 패킷이 네트워크 상의 모든 장치에 전송되므로, 스니핑이 더 쉽다.
  2. 스니핑 방법
    • Promiscuous Mode: 네트워크 인터페이스가 모든 패킷을 읽고 기록하도록 설정된다. 이는 원래 목적지 주소와 상관없이 모든 패킷을 수신할 수 있게 한다.



Bad guys: fake identity

  1. IP 스푸핑(IP Spoofing)의 정의
    • 목표: 공격자가 자신의 신원을 숨기거나 다른 사용자로 가장하여 패킷을 전송하는 것.
    • 방법: IP 패킷의 소스 주소를 위조하여 전송.
  2. 스푸핑의 예시
    • 예를 들어, 공격자가 B에서 A로 가는 패킷을 보낼 때, 패킷의 소스 주소를 실제 소스 B 대신 C로 설정하여 보냅니다. 이렇게 하면 A는 패킷이 C에서 온 것으로 인식하게 됩니다.



Protocol layers, Service models

complex of networks

  • 네트워크는 여러 "조각"으로 구성됩니다: host, router, links of various media, application, protocol, hardware, software 등.
  • 네트워크의 구조를 체계적으로 조직하는 것이 필요합니다.



Example: organization of air travel



 

Why layering

  1. 복잡한 시스템 다루기
    • explicit structrue: 복잡한 시스템의 조각들을 식별하고 그 관계를 이해하는 데 도움이 된다.
    • layered reference model: 시스템의 구조를 설명하고 논의할 때 유용한 참조 모델이다.
  2. modularization의 이점: 유지보수(maintenance)와 system의 update에 용이하다.
    • 투명한 변경(transparent change): 특정 계층의 서비스 구현을 변경하더라도 나머지 시스템에는 영향을 미치지 않는다.



Internet Protocol Stack

  1. Application Layer
    • 기능: 네트워크 어플리케이션을 지원하며, 사용자와 직접 상호작용하는 데이터를 처리한다.
    • e.g.: HTTP(웹 브라우징), SMTP(이메일), FTP(파일 전송) 등
  2. Trasnport Layer
    • 기능: 프로세스 간 데이터 전송을 담당한다. 신뢰성 있는 데이터 전송을 보장하고, 데이터 흐름을 제어한다.
    • e.g.: TCP(Transmission Control Protocol), UDP(User Datagram Protocol)
  3. Network Layer
    • 기능: packet을 소스에서 목적지까지 전송한다. routing과 packet forwarding을 담당한다.
    • e.g.: IP(Internet Protocol), routing protocol
  4. Link Layer
    • 기능: 인접 네트워크 노드 간의 데이터 전송을 담당한다. 데이터 프레임을 관리하고, 오류 검출과 수정 기능을 제공한다.
    • e.g. Ethernet, Wi-Fi
  5. Physical Layer
    • 기능: 실제 하드웨어 전송 매체를 통해 비트를 전송한다. 전기적, 기계적, 절차적 특성을 정의한다.
    • e.g. 케이블, 무선 주파수, 전압 레벨



Encapsulation

  1. 캡슐화 과정
    • 출발지(source)에서 목적지(destination)로 데이터가 이동하는 동안, 각 계층은 자신만의 header를 추가한다.
    • header는 각 계층에서 필요한 제어 정보를 포함한다.
  2. source 컴퓨터에서:
    • application 계층: message 생성
    • transport 계층: message에 TCP/UDP 헤더 추가 -> segment 생성
    • network 계층: segment에 IP 헤더 추가 -> packet 생성
    • link 계층: packet에 링크 헤더 추가 -> frame 생성
    • physical 계층: frame을 비트로 변환하여 전송
  3. destination 컴퓨터에서
    • physical 계층: 비트를 frame으로 변환
    • link 계층: frame의 링크 헤더 제거 -> packet 추출
    • network 계층: packet의 IP 헤더 제거 -> segment 추출
    • transport 계층: segment의 TCP/UDP 헤더 제거 -> message 추출
    • application 계층: message 처리




History

Internet history




ISO/OSI reference model

ISO/OSI 모델은 네트워크 통신을 7개의 계층을 나누어 각 계층별로 통신 과정을 설명하는 참조 모델이다.



ISO/OSI 모델은 네트워크 통신의 복잡성을 줄이고, 상호 운용성을 보장하며, 다양한 네트워크 기슬과 장비들이 원활하게 통신할 수 있도록 설계되었다.



아래의 서비스들은 필요하다면 application에서 반드시 실행되어야 한다.

  • Presentation Layer(표현 계층): 데이터의 형식을 변환하고 암호화 및 압축 등의 작업을 수행한다.
    • e.g. JPEG, MPEG, SSL/TLS 등
  • Sesson Layer(세션 계층): 통신 세션을 설정, 유지, 종료하며, 데이터 교환의 동기화와 체크포인트 설정을 담당.
    • e.g. NetBIOS, RPC 등

'학교수업 > 컴퓨터망' 카테고리의 다른 글

Chapter4: Network Layer-Data Plane  (0) 2024.07.04
Chapter3: Transport Layer-2  (0) 2024.07.04
Chapter3: Transport Layer  (0) 2024.07.03
Chapter2: Application Layer-2  (0) 2024.07.03
Chapter2: Application Layer  (0) 2024.07.01

Guard

Guard는 요청(request)을 처리하기 전에 실행되며, 주로 권한 부여(Authorization) 로직을 수행한다. Guard는 request이 특정 조건을 만족하는지 여부를 확인하고, 그렇지 않으면 request를 차단한다.

  • 역할: 요청이 보호된 리소스에 접근할 자격이 있는지 확인한다.
  • 동작 방식: 'canActivate' method를 구현하여, true를 반환하면 요청이 진행되고, false를 반환하면 요청이 차단된다.

Strategy

Strategy는 인증(Authentication) 로직을 처리한다. 다양한 인증 전략(e.g. JWT, OAuth, Local 등)을 구현할 수 있으며, Passport.js를 통해 이를 쉽게 통합할 수 있다.

  • 역할: 사용자의 자격 증명(e.g. JWT 토큰)을 확인하고 인증한다.
  • 동작 방식: 인증이 성공하면 사용자 정보를 반환하고, 실패하면 예외를 던진다.

Passport

Node.js용 인증 미들웨어이다. 다양한 인증 전략을 지원하며. NestJS에서 쉽게 사용할 수 있도록 Passport 모듈을 제공한다.

  • 역할: 다양한 인증 전략을 통합하여 사용할 수 있게 한다.
  • 동작 방식: 특정 전략을 사용하여 사용자를 인증하고, 인증 결과를 바탕으로 Guard가 요청을 처리할 수 있도록 한다.

JWT

JWT는 JSON 기반의 인증 토큰이다. 주로 client와 server 간에 인증 정보를 안전하게 전송하기 위해 사용된다.

  • 역할: 사용자 인정 정보를 포함하는 토큰을 생성하고 검증한다.
  • 동작 방식: 서버는 사용자가 로그인할 때 JWT를 생성하여 클라이언트에 전달하고, 클라이언트는 이후 요청 시 이 토큰을 포함하여 서버에 전달한다. 서버는 토큰을 검증하여 사용자를 인증한다.

동작 원리

  1. 사용자 로그인

    • 사용자가 로그인 정보를 서버에 제출
    • 서버는 사용자를 인증하고, JWT 토큰을 생성하여 클라이언트에 반환
  2. JWT 토큰을 포함한 요청

    • 클라이언트는 보호된 리소스에 접근하기 위해 JWT 토큰을 포함한 요청을 서버에 보낸다.
  3. Guard가 요청을 가로채고 검사

    • 요청이 서버에 도달하면, Guard가 이를 가로채고 'canActivate' method를 호출
    • 'canActivate' 메서드는 Passport를 사용하여 JWT 전략을 통해 토큰을 검증
  4. Strategy가 토큰 검증

    • JWT 전략이 토큰을 검증한다. 토큰이 유효하면 사용자 정보를 반환하고, 그렇지 않으면 예외를 던진다.
  5. Guard가 요청 허용 여부 결정

    • JWT 전략이 반환한 사용자 정보를 바탕으로 Guard가 요청을 허용할지 결정
    • 인증이 성공하면 요청이 처리되고, 실패하면 요청이 차단

// JWT Strategy
import { Strategy, ExtractJwt } from 'passport-jwt';
import { PassportStrategy } from '@nestjs/passport';
import { Injectable } from '@nestjs/common';

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor() {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      secretOrKey: process.env.JWT_SECRET, // 환경 변수에서 비밀 키를 가져옴
      ignoreExpiration: false, // 토큰 만료 시간을 무시하지 않음
    });
  }

  async validate(payload: any) {
    return { userId: payload.sub, username: payload.username };
  }
}


// Auth Guard
import { Injectable, ExecutionContext } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';

@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {
  canActivate(context: ExecutionContext) {
    return super.canActivate(context);
  }
}

// Auth Module
import { Module } from '@nestjs/common';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { JwtStrategy } from './jwt/jwt.strategy';
import { PassportModule } from '@nestjs/passport';
import { JwtModule } from '@nestjs/jwt';

@Module({
  imports: [
    PassportModule.register({ defaultStrategy: 'jwt', session: false }),
    JwtModule.register({
      secret: process.env.JWT_SECRET,
      signOptions: { expiresIn: '1y' },
    }),
  ],
  controllers: [AuthController],
  providers: [AuthService, JwtStrategy],
})
export class AuthModule {}

// Controller
import { Controller, Get, UseGuards } from '@nestjs/common';
import { JwtAuthGuard } from './auth/jwt-auth.guard';

@Controller('cats')
export class CatsController {
  @UseGuards(JwtAuthGuard)
  @Get()
  findAll() {
    return [];
  }
}

요약

  • Guard: 요청이: 보호된 리소스에 접근할 자격이 있는지 확인
  • Strategy: 사용자의 자격 증명을 확인하고 인증한다.
  • Passport: 다양한 인증 전략을 통합하여 사용할 수 있게 한다.
  • JWT: 사용자 인증 정보를 포함하는 토큰을 생성하고 검증

'NestJS > 모르는 것들' 카테고리의 다른 글

RxJS  (0) 2024.06.10

SOP(Same Origin Policy)

다른 출처의 리소스를 사용하는 것을 제한을 거는 보안 방식



SOP를 사용해야하는 예시

  1. 어떤 유저가 FaceBook에 로그인을 하고 토큰을 받아 로그인 과정을 완료했다.
  2. 유저는 로그인한 상태로 메일(http://hacker.com)을 받았다.
  3. 메일은 페이스북에 악의적으로 실행되는 script 코드를 작성하였다.
  4. 이때 페이스북에 유저의 토큰을 가지고 해커의 출처(origin) 을 통해 글을 작성하려고 한다.
  5. 이때 SOP 정책에 의해 요청을 확인하고 다른 출처(origin)을 가지게 되므로 페이스북에서 자신의 출처와 다른 출처를 가지므로 SOP 정책에 의해 해당 요청을 거부하게 된다.



CORS란?

Cross-Origin Resource Sharing으로서 다른 출처(origin)의 자원을 공유할 수 있게 허용하는 정책을 뜻한다. 여기서 Origin은 protocol + host + port를 합한 것으로 이 세가지가 동일하면 같은 origin이라고 판단한다. 예를 들어 http://123.456.789.123:3000http://123.456.789.123:8001은 다른 Origin이다.

 

과거 front와 back이 분리되어 있지 않던 시절에는 front와 back이 같은 Origin에 있었다. 하지만 둘이 분리되면서 각기 다른 서버에 존재하기 시작하면서 문제가 발생하기 시작했다. 별도로 존재하는 frontend server와 backend server로 요청(request)이 이뤄져야 하는 상황이 되었다. 동시에 어떤 곳에서 bacnend server는 request가 들어왔을 때 신뢰할 수 있는 것인지 알 수 없게 됬다. 따라서, backend server 쪽에서 어떤 Origin에서 request가 들어왔을 때, 받아줄 것인지 허용 Origin에 대해서 정의해줄 필요가 생겼다.

 

backend: "나는 이 Origin에서 이뤄지는 요청만 처리해줄거야. 다른 Origin은 믿을 수 없어. 해커가 날 공격할 수도 있잖아?"

 

그런데 일단 frontend에서 backend 쪽으로 요청을 보내기 전 미리 preflight request를 보낸다. 그러면 backend는 이를 통해 허용된 origin인지를 판단하고 응답한다.



preflight request란?

preflight request는 실제 request 전에 browser에서 보내는 작은 request이다. 지금 request을 보내는 frontend가 backend server에서 허용한 Origin이 맞는지, 그리고 해당 endpoint에서 어떤 HTTP method들을 허용하는지 등을 확인한다. 만약 허용되는 Origin이고 요청하는 메소드도 허용되는 것이라면 실제 request을 할 수 있게 해준다. 그렇지 않다면, 실제 request를 보내기도 전에 보내지 못하게 막는 것이다.

만일 preflight request가 이루어질려면 server에서 OPTIONS method를 허용해줘야 한다. preflight request는 OPTIONS method에 의해 만들어지기 때문이다.



CORS 작동 방식

위에서 언급한 preflight reqeust는 CORS의 작동 방식 중 하나이다. CORS 작동 방식은 아래 3가지와 같은 것들이 있다.



1. preflight request

preflight는 CORS 상황에서 보안을 확인하기 위해 브라우저가 제공하는 기능이다.
preflight는 미리 통신을 함으로써 문제가 있는 요청에 대해 일부러 ERROR를 발생시킨다.
요새는 크롬 개발자도구에서 preflight를 표기해서 어디서 preflight가 발생했는지 확인하기 쉬워졌다.

request를 바로 보내지 않고 preflight request를 보내서 허용되는 method가 무엇인지, 허용되는 Origin인지 등을 먼저 확인한다. 브 라우저와 서버는 다음과 같은 방식으로 통신한다.

 

  1. 브라우저는 서버로 HTTP OPTIONS method로 preflight request를 보낸다.
    • Origin header에는 자신의 출처를 넣는다.
    • Access-Control-Request-Method header에 실제 request에 사용할 method를 설정한다.
    • Access-Control-Request-Headers header에 실제 request에 사용할 header들을 설정한다.

 

  1. server는 이 preflight request에 대한 response으로 허용되는 것들에 대한 정보를 header에 담아서 browser로 보낸다.
    • Access-Control-Allow-Origin header에 허용되는 Origin들을 알려준다.
    • Access-Control-Allow-Methods header에 허용되는 Method들을 알려준다.
    • Access-Control-Allow-Headers header에 허용되는 header들을 알려준다.
    • Access-Control-Max-Age header에 해당 preflight request가 브라우저에 캐시 될 수 있는 시간을 초 단위로 알려준다.

 

- Access-Control-Max-Age header: 이 preflight 요청에 대한 결과를 브라우저가 얼마나 오랫동안 cache 할 수 있는지를 지정한다.
    만일 지정된 시간 동안에는 동일한 조건의 요청이 있을 때, preflight request를 다시 보내지 않고, cache된 정보를 사용하여 본     request를 바로 수행할 수 있다. 이는 네트워크 트래픽을 줄이고, 성능을 향상시키는 데 도움이 된다.

 

// 요청
OPTIONS /api/data HTTP/1.1
Host: api.example.com
Origin: https://example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-Custom-Header
  1. 브라우저는 preflight request/response를 통해 본 요청이 이뤄질 수 있는지 미리 확인한 후 본 요청을 보낸다.

 

// 응답 
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-Custom-Header
Access-Control-Max-Age: 600

 

  1. 서버는 본 요청에 대해 응답해준다.
POST /api/data HTTP/1.1
Host: api.example.com // 요청을 받는 서버의 호스트
Origin: https://example.com // 요청을 보내는 클라이언트의 출처(도메인)
X-Custom-Header: value 
Content-Type: application/json // 요청 본문의 내용 유형을 JSON을 명시

{
  "data": "example" // 실제 데이터
}

 

preflight는 다음과 같은 상황에서 발생한다.

  1. OPIONS: 브라우저에서 OPTIONS를 던져 해당 사이트에서 사용가능한 method정보를 가져오게 될 때 preflight가 일어난다. 따라서 개발자는 실제 원하는 요청에 대해 작성해주면 되고 OPTIONS request를 보내는 코드를 작성하지 않아도 된다.
methods : GET, POST, OPTIONS, HEAD, PUT, DELETE 
  1. Simple Request(단순 요청): 사용자 정의 Header 정보를 추가, 수정하게 되면 단순요청에 preflight가 발생하게 된다. 예외적으로 사용자 정의 Header가 content-type일 때 type이 text/plain, multipart/form-data, x-www-form-urlencoded 일 경우엔 preflight가 일어나지 않는다.
사용자 정의 Header : Accept, Accept-language, content-language, content-type

Simple Request : GET, POST, HEAD
  1. Simple Request를 제외한 나머지 요청
  2. 쿠키 세팅: 내 쿠키를 다른 third party에 보내고 싶을 때 with Credential을 이용하게 되는데 이 때 preflight가 발생하게 된다.



2. simple request

preflight request를 생략하고 서버에 바로 실제 request를 보낸 후 server가 이에 대한 응답을 헤더에 Access-Control-Allow-Origin header를 보내주면 브라우저가 CORS 정책 위반 여부를 검사하는 방식이다. preflight request를 생략하려면 아래와 같은 조건들이 모두 만족되어야 한다.

 

  1. request의 method가 GET, POST, HEAD 중 하나여야 한다.
  2. request의 header가 Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width, Width인 경우에만 적용된다.
  3. Conttent-Type 헤더가 application/x-www-form-urlencoded, multipart/form-data, text/plain 중 하나여야 한다.

 

기본적으로 요즘 HTTP 요청은 application/json 또는 text/xml로 이루어지기에 대부분 3번째 Content-Type 헤더 조건을 만족시키지 못한다. 따라서, preflight request가 이루어지는 경우가 대다수라고 볼 수 있다.



3. credentialed request

client가 server로 요청할 때 자격 인증 정보(Credential) 를 담아서 요청할 때 사용되는 방식이다. 여기서 말하는 자격 인증 정보는 session ID가 저장되어 있는 cookie나 Authorization header에 설정하는 token value 등을 의미한다.

 

기본적으로 브라우저가 제공하는 요청 API 들은 별도의 option없이 브라우저의 쿠키와 같은 data를 함부로 request data에 담지 않도록 설정되어 있다. 요청에 인증과 관련된 정보를 담을 수 있게 해주는 옵션이 바로 credentials 옵션이다. 이 옵션에는 3가지 값이 있는데 각각 다음과 같은 의미를 갖는다.

 

  1. same-origin: 같은 출처 간 요청에만 인증 정보를 담을 수 있음
  2. include: 모든 요청에 인증 정보를 담을 수 있음
  3. omit: 모든 요청에 인정 정보를 담을 수 없음

 

credentials가 include로 설정되어야 Cross Origin 요청이 가능하다.

 

또한 서버에서도 응답 헤더를 다음과 같이 설정해줘야 한다.

  1. 응답 헤더의 Access-Control-Allow-Credentials 항목을 true로 설정해야한다.
  2. 응답 헤더의 Access-Control-Allow-Origin을 *(와일드카드)로 설정하면 안된다
  3. 응답 헤더의 Access-Control-Allow-Method를 *로 설정하면 안된다.
  4. 응답 헤더의 Access-Control-Allow-Headers를 *로 설정하면 안된다.

 

참고로 credentialed request 역시 preflight request가 선행된다.



주의할 점

CORS는 웹 어플리케이션이 출처 간 요청을 안정하게 수행할 수 있도록 하는 메커니즘이다. 브라우저는 보안 상의 이유로 동일 출처 정책을 강제한다. 따라서, 웹 페이지에서 다른 출처의 자원에 접근하려 할 때 CORS 규칙을 따르지 않으면 브라우저는 이를 차단한다.

 

브라우저는 특정 조건이 충족될 때 preflight request을 서버로 보낸다. 이는 OPTIONS method로 이루어지며, server가 실제 요청을 허용하는지 미리 확인한다. 서버는 이 요청에 대해 허용되는 출처, 메서드, 헤더 등을 응답한다.

 

그러나 모든 요청이 preflight 요청을 필요로 하지는 않는다. 특히 간단한, GET, POST, HEAD 요청의 경우 특정 조건을 만족하면 preflight 없이 바로 실제 요청이 이루어질 수 있다. 이러한 경우 브라우저는 요청을 보내고, 서버는 응답을 반환한다.

 

브라우저가 preflight 요청을 생략하고 실제 요청을 보내는 경우, 서버는 이를 처리하고 응답을 반환할 수 있다. 그러나 응답이 CORS 규칙을 위반하면 브라우저는 그 응답을 차단하고 CORS 에러를 발생시킨다.

 

여기서 중요한 점은, server는 요청을 정상적으로 처리하고 응답을 반환했을 수 있지만, 브라우저는 이를 수신하고 처리하지 않는다는 것이다. 이로 인해 클라이언트 측에서는 요청이 실패한 것처럼 보이지만, 실제로는 서버에서 작업이 이루어졌을 수 있다.

 

예시 상황
클라이언트가 서버에 POST 요청을 보내 데이터를 업데이트한다고 가정해보자

 

  1. 클라이언트가 브라우저에서 server로 POST 요청을 보낸다.
  2. 서버는 요청을 받아 DB를 업데이트하고, 성공 응답을 반환한다.
  3. 그러나 서버 응답에 필요한 CORS 헤더가 누락되어 있다.
  4. 브라우저는 서버의 응답을 CORS 위반으로 간주하고, 응답을 차단하며 CORS 에러를 표시한다.

 

이 경우, 서버 측에서는 데이터 업데이트가 정상적으로 이루어졌지만, 클라이언트 측에서는 요청이 실패한 것 처럼 보인다. 이는 다음과 같은 문제를 야기할 수 있다.

  • 클라이언트는 서버에 대한 작업이 실패했다고 잘못 인식할 수 있다.
  • 잘못된 응답 처리를 통해 중복된 요청이 발생할 수 있다.
  • 사용자는 잘못된 오류 메시지를 볼 수 있다.

 

이러한 문제를 방지하려면

  • 서버는 CORS 설정을 정확히 구성하여 모든 필요한 헤더를 포함해야 한다.
  • 클라이언트는 서버와의 상호작용이 제대로 이루어졌는지 확인하기 위해 네트워크 트래픽을 모니터링할 수 있어야 한다.
  • 개발자는 브라우저 콘솔의 CORS 에러 메시지를 주의 깊게 분석하여 문제를 정확히 파악해야 한다.

 

이와 같은 이해를 통해 CORS 에러가 발생했을 때, 단순히 요청이 실패했다고 가정하지 않고, 서버와 클라이언트 사이의 실제 상호작용을 면밀히 조사해야 한다.

출처

https://velog.io/@cloudlee711/CORS-%EC%99%80-preflight
https://bskyvision.com/entry/CORS%EC%99%80-%EA%B4%80%EB%A0%A8-%EC%9E%88%EB%8A%94-preflight-request%EB%9E%80
https://yoonlangcow.tistory.com/44

'인터넷 기본 지식' 카테고리의 다른 글

#10. JWT  (0) 2024.06.24
#9. RESTful 웹 API 디자인  (1) 2024.06.19
#8. LSP  (2) 2024.06.10
#7. 프로그래밍 패러다임  (1) 2024.06.09
#6. DNS(Domain Name System)  (0) 2024.05.31

+ Recent posts