1. 개요
네트워크 계층의 기능들
1. Forwarding : 패킷을 라우터의 인풋에서 적절한 라우터 아웃풋으로 이동시키는 것 (데이터 평면)
2. Routing : 패킷을 source에서 destination으로 전달하는 루트를 결정하는 것 (제어 평면)
네트워크 제어 평면을 구성하는 두 접근들
1. per-router control (전통적)
2. 논리적으로 중앙집중화된 control (software defined networking)
2. 라우팅 알고리즘
그래프: G = (N,E)
Node = 라우터의 집합 = { u, v, w, x, y, z }
Edge = 링크의 집합 = { (u,v), (u,x), (v,x), (v,w), (x,w), (x,y), (w,y), (w,z), (y,z) }
비고: 그래프 추상화는 다른 네트워크 환경에서도 유용하며 예를 들어 P2P 네트워크에서는 N이 피어의 집합이고 E는 TCP 연결의 집합입니다.
c(x,x’) = 링크 (x,x’)의 비용
예를 들어, c(w,z) = 5
경로 (x1, x2, x3, ..., xp)의 비용 = c(x1,x2) + c(x2,x3) + ... + c(xp-1,xp)
라우팅 알고리즘: 최소 비용 경로를 찾는 알고리즘
라우팅 알고리즘 분류 (전역 / 분산) (정적 / 동적)
전역:
모든 라우터가 완전한 토폴로지와 링크 비용 정보를 가지고 있음
"링크 상태" 알고리즘
분산:
라우터는 물리적으로 연결된 이웃과의 링크 비용을 알고 있음
계산의 반복적인 과정 및 이웃과의 정보 교환
"거리 벡터" 알고리즘
정적:
경로가 시간이 지남에 따라 천천히 변경됨
동적:
경로가 더 빠르게 변경됨
주기적 업데이트
링크 비용 변경에 대한 응답으로 발생함
링크 State 라우팅 알고리즘 :
1. Dijkstra's algorithm :
네트워크 토폴로지, 링크 비용이 모든 노드에게 알려져 있음
"링크 상태 브로드캐스트"를 통해 수행됨
모든 노드가 동일한 정보를 가지고 있음
한 노드 ('출발지')에서 모든 다른 노드로의 최소 비용 경로를 계산함
해당 노드의 전달 테이블을 제공함
반복적인 과정: k번의 반복 후, k 목적지로의 최소 비용 경로를 알게 됨
표기법:
c(x,y): 노드 x에서 y로의 링크 비용; 직접 이웃이 아니면 ∞
D(v): 출발지에서 목적지 v로의 현재 경로 비용
p(v): 출발지에서 v까지의 경로에서의 이전 노드
N': 가장 적은 비용 경로가 명확히 알려진 노드의 집합
알고리즘 복잡도: n 개의 노드
- 각 반복: N에 속하지 않는 모든 노드 w를 확인해야 함
- n(n+1)/2 비교: O(n2)
- 보다 효율적인 구현이 가능함: O(nlogn)
진동이 가능함:
- 예를 들어, 지원하는 링크 비용이 전달된 트래픽의 양과 동일한 경우:
Distance Vector :
Bellman-Ford equation (동적 프로그래밍)
1. 거리 벡터 알고리즘
Dx(y): x에서 y로 가는 최소 비용의 추정치
- x는 거리 벡터 Dx = [Dx(y): y ∈ N]를 유지함
노드 x:
- 각 이웃 v에 대한 비용을 알고 있음: c(x,v)
- 이웃들의 거리 벡터를 유지함. 각 이웃 v에 대해 x는 Dv = [Dv(y): y ∈ N]를 유지함
주요 아이디어:
- 일정한 주기로 각 노드는 자신의 거리 벡터 추정치를 이웃에게 보냄
- x가 이웃으로부터 새로운 거리 벡터 추정치를 받으면, 벨만-포드 방정식을 사용하여 자신의 거리 벡터를 업데이트함:
Dx(y) ← minv{c(x,v) + Dv(y)} for each node y ∊ N
- 미세한 자연스러운 조건 하에서, 추정치 Dx(y)는 실제 최소 비용 dx(y)로 수렴합니다.
반복적, 비동기적:
각 로컬 반복은 다음에 의해 발생함:
- 인접 링크 비용 변경
- 이웃으로부터의 거리 벡터 업데이트 메시지
분산:
- 각 노드는 자신의 거리 벡터가 변경될 때만 이웃에게 알림 : 이웃은 필요한 경우 자신의 이웃들에게 알림
링크 비용이 바뀌면,
- 노드는 로컬 링크 코스트의 변화를 감지하고
- 라우팅 정보를 갱신하고, 거리 벡터를 재계산한다.
- 거리 벡터값이 바뀌면 이웃에게 알려준다.
이를 막기위해 포이즌리버스라는 방법을 사용한다. 변경이 발생하면 기존 루트를 무한대로 설정해 새로운 루트로 가게 만든다. 하지만 이 방법은 3개 이상의 노드가 있는 경우에는 가능하지 않다.
메시지 복잡도
- 링크 상태 (LS): n개의 노드와 E개의 링크가 있을 때, O(nE) 메시지가 전송됨
- 거리 벡터 (DV): 이웃 간의 교환만 있음
수렴 시간은 다양함
안정화 시간:
- LS : O(n^2) 알고리즘이 O(nE) 메시지를 요구함
진동이 발생할 수 있음
- DV : 수렴 시간은 다양함
라우팅 루프가 발생할 수 있음
무한대 카운트 문제가 발생할 수 있음
안정성: 만약 라우터가 고장나면 어떻게 될까요?
- LS : 노드는 올바르지 않은 링크 비용을 광고할 수 있음
각 노드는 자신의 테이블만 계산함
- DV : DV 노드는 올바르지 않은 경로 비용을 광고할 수 있음
각 노드의 테이블은 다른 노드에 의해 사용됨 (오류가 네트워크를 통해 전파될 수 있음)
3. 인터넷에서의 AS 내부 라우팅 : OSPF
라우팅을 확장가능하게 만드는것
- 수백만개의 목적지 : 모든 목적지들을 라우팅 테이블들에 저장하는 것은 불가능하다. / 라우팅 테이블을 교환하게되면 링크를 뒤엎어 버릴수 있다.
- 인터넷 : 네트워크의 네트워크
- 각 네트워크 관리자는 자신의 네트워크의 라우팅을 어떻게 할지 컨트롤 하기 원한다.
확장가능한 라우팅을 위한 인터넷의 접근
"자율 시스템"이라고도 알려진 "AS (Autonomous Systems)"로 라우터를 집합체로 묶습니다.
AS 내부 라우팅
- 동일한 AS 내의 호스트와 라우터 간의 라우팅을 의미합니다. ("네트워크" 내부)
- AS 내의 모든 라우터는 동일한 내부 도메인 프로토콜을 실행해야 합니다.
- 서로 다른 AS의 라우터는 다른 내부 도메인 라우팅 프로토콜을 실행할 수 있습니다.
- 게이트웨이 라우터: 자신의 AS의 "가장자리"에 있으며 다른 AS의 라우터와의 연결이 있습니다.
AS 간 라우팅
- AS 간의 라우팅을 의미합니다.
- 게이트웨이는 AS 간 라우팅을 수행합니다. (물론 AS 내부 라우팅도 수행합니다.)
전달 테이블 : 내부 및 외부 AS 라우팅 알고리즘에 의해 구성됩니다.
- 내부 AS 라우팅: AS 내 목적지에 대한 항목을 결정합니다.
- 외부 및 내부 AS 라우팅: 외부 목적지에 대한 항목을 결정합니다.
AS 간 라우팅의 역할:
AS1의 라우터가 AS1 외부로 향하는 데이터그램을 받았습니다. 라우터는 데이터그램을 게이트웨이 라우터에게 전달해야 합니다. 그런데 어떤 게이트웨이 라우터인가요?
AS1은 다음과 같은 작업을 수행해야 합니다:
1. AS2를 통해 어떤 목적지에 도달할 수 있는지, AS3를 통해 어떤 목적지에 도달할 수 있는지 알아야 합니다.
2. 이 도달 가능성 정보를 AS1의 모든 라우터에게 전파해야 합니다.
내부 AS 라우팅 : 내부 게이트웨이 프로토콜 (IGP)로도 알려져 있습니다.
가장 일반적인 AS 내 라우팅 프로토콜은 다음과 같습니다:
1. RIP: 라우팅 정보 프로토콜 (Routing Information Protocol)
2. OSPF: 오픈 최단 경로 먼저 (Open Shortest Path First, IS-IS 프로토콜은 본질적으로 OSPF와 동일합니다.)
3. IGRP: 내부 게이트웨이 라우팅 프로토콜 (Interior Gateway Routing Protocol, Cisco 전용 프로토콜로 수십 년간 사용되었으며 2016년까지 사용되었습니다.)
OSPF (Open Shortest Path First)
"오픈 (Open)": 공개적으로 이용 가능하다
링크 상태 알고리즘을 사용함
- 링크 상태 패킷 전파
- 각 노드에서의 토폴로지 맵
- Dijkstra의 알고리즘을 사용한 경로 계산
라우터는 OSPF 링크 상태 광고를 AS 전체의 다른 모든 라우터에게 모두 전송(flood)합니다.
IP 상에서 직접 OSPF 메시지에 실려서 전달됩니다. (TCP나 UDP를 통하지 않음)
링크 상태: 각 연결된 링크에 대한 정보 포함
IS-IS 라우팅 프로토콜: 거의 OSPF와 동일한 프로토콜입니다.
OSPF의 기능 :
- 보안: 모든 OSPF 메시지는 인증됩니다. (악의적 침입을 방지하기 위해)
- 동일 비용의 다중 경로가 허용됨 (RIP에서는 하나의 경로만 허용됨)
- 각 링크마다 다양한 TOS(Traffic Type of Service)에 대한 다중 비용 지표가 있습니다. (예: 베스트 에포트 TOS의 경우 위성 링크 비용이 낮게 설정되고, 실시간 TOS의 경우 높게 설정됨)
- 통합된 유니캐스트 및 멀티캐스트 지원: 멀티캐스트 OSPF (MOSPF)는 OSPF와 동일한 토폴로지 데이터베이스를 사용합니다.
- 대규모 도메인에서의 계층적 OSPF.
- 두 단계의 계층 구조: 로컬 영역, 백본.
- 링크 상태 광고는 해당 영역에서만 이루어짐.
- 각 노드는 자신의 영역 내 상세한 토폴로지를 가지고 있으며, 다른 영역의 네트워크로 가는 방향(최단 경로)만을 알고 있습니다.
- Area Border 라우터: 자신의 영역 내 네트워크로 가는 거리를 "요약"하고 다른 영역 테두리 라우터에게 광고합니다.
- 백본 라우터: 백본에서만 OSPF 라우팅을 실행합니다.
- Boundary 라우터: 다른 AS에 연결됩니다.
4. ISP간의 라우팅 : BGP
- BGP (Border Gateway Protocol): 사실상의 AS 간 라우팅 프로토콜 ("인터넷을 유지하는 접착제")
- BGP는 각 AS에 다음을 제공합니다:
- eBGP: 이웃하는 AS에서 서브넷에 도달하는데 필요한 정보(도달 가능성 정보)를 얻음
- iBGP: 도달 가능성 정보를 AS 내부 라우터에 전파함
- 도달 가능성 정보 및 정책을 기반으로 다른 네트워크로의 "좋은" 경로를 결정함
- 서브넷이 자신의 존재를 인터넷 전체에 알릴 수 있도록 함
BGP 세션: 두 개의 BGP 라우터 ("피어")가 반영구적인 TCP 연결을 통해 BGP 메시지를 교환합니다.
- 서로 다른 목적지 네트워크 prefix에 대한 경로를 광고합니다. (BGP는 "path vector" 프로토콜입니다.)
AS3 게이트웨이 라우터 3a가 AS2 게이트웨이 라우터 2c에게 경로 AS3,X를 광고할 때:
- AS3는 AS2에게 X로 향하는 데이터그램을 전달해줄 것을 약속합니다.
경로 속성과 BGP 경로
- 광고된 접두어에는 BGP 속성이 포함됩니다.
- prefix(네트워크 주소의 앞부분) + 속성 = "경로"
- 두 가지 중요한 속성:
- AS-PATH: 접두어 광고가 통과한 AS 목록
- NEXT-HOP: 다음 호스트 AS로 향하는 특정 내부 AS 라우터를 나타냄
- 정책 기반 라우팅:
- 경로 광고를 수신하는 게이트웨이는 import 정책을 사용하여 경로를 수락하거나 거부합니다. (예: AS Y를 통해서는 절대로 경로를 지나가지 않음)
- AS 정책은 또한 경로를 다른 이웃하는 AS에게 광고할지 여부를 결정합니다.
BGP 메시지
- BGP 메시지는 TCP 연결을 통해 피어 간에 교환됩니다.
- BGP 메시지 유형:
- OPEN: 원격 BGP 피어에 대한 TCP 연결을 열고 전송하는 BGP 피어를 인증합니다.
- UPDATE: 새 경로를 광고하거나 이전 경로를 철회합니다.
- KEEPALIVE: UPDATES가 없는 경우에도 연결을 유지하며 OPEN 요청을 확인합니다.
- NOTIFICATION: 이전 메시지에서의 오류를 보고하며 연결을 닫는 데에도 사용됩니다.
1a: OSPF intra-domain routing: to get to 1c,
forward over outgoing local interface 2
BGP 경로 선택
- 라우터는 대상 AS로 가는 여러 경로에 대한 정보를 얻을 수 있으며, 다음을 기반으로 경로를 선택합니다:
1. 로컬 우선도 값 속성: 정책 결정에 따라
2. AS-PATH의 최단 경로
3. 가장 가까운 NEXT-HOP 라우터: "핫 포테이토 라우팅" (가장 가까운 라우터로 패킷을 전송하는 방식)
4. 추가 기준들
- 2d는 (iBGP를 통해) 2a 또는 2c를 통해 X로 경로를 찾을 수 있다는 것을 알게 됩니다.
- 핫 포테이토 라우팅: 최소 내부 도메인 비용을 갖는 로컬 게이트웨이를 선택합니다 (예: 2d는 2a를 선택합니다, 심지어 X까지의 AS 호핑이 더 많이 필요하더라도): 외부 도메인 비용에 대해서는 걱정하지 않습니다!
BGP: 광고를 통한 정책 달성
A는 경로 Aw를 B와 C에게 광고합니다.
B는 BAw를 C에게 광고하지 않기로 결정합니다:
- B는 CBAw를 라우팅함으로써 수익을 얻지 못하기 때문. 왜냐하면 C, A, w 중 어느 것도 B의 고객이 아니기 때문입니다.
- C는 CBAw 경로에 대해 알게 되지 않습니다.
- C는 w에 도달하기 위해 B를 사용하지 않고 CAw를 라우팅합니다.
A, B, C는 공급자 네트워크입니다.
X, W, Y는 고객입니다 (공급자 네트워크의 고객입니다).
X는 두 개의 ISP에 연결되어 있습니다.
적용할 정책: X는 B에서 C로의 경로를 X를 통해 라우팅하지 않기를 원합니다.
따라서 X는 C로 가는 경로를 B에게 광고하지 않을 것입니다.
내부 AS 라우팅과 외부 AS 라우팅이 다른 이유:
**정책:**
- 외부 AS 라우팅: 관리자는 자신의 트래픽이 어떻게 경로를 지나가고 누가 자신의 네트워크를 통과하는지에 대한 제어를 원합니다.
- 내부 AS 라우팅: 단일 관리자이기 때문에 정책 결정이 필요하지 않습니다.
**규모:**
- 계층적 라우팅은 테이블 크기를 줄이고 업데이트 트래픽을 감소시켜 효율적입니다.
**성능:**
- 내부 AS 라우팅: 성능에만 중점을 둘 수 있습니다.
- 외부 AS 라우팅: 정책이 성능보다 우선할 수 있습니다.
5. 소프트웨어 정의 네트워크(SDN) 제어 평면
소프트웨어 정의 네트워킹 (SDN)
논리적으로 중앙 집중화된 제어 평면이 필요한 이유:
1. **네트워크 관리의 용이성:** 라우터 구성 오류를 피하고 트래픽 흐름을 더 유연하게 제어할 수 있습니다.
2. **테이블 기반 포워딩 (OpenFlow API):** 라우터를 "프로그래밍"하여 미리 정의된 규칙을 기반으로 전달 결정을 내릴 수 있습니다.
- 중앙 집중화된 프로그래밍은 테이블을 중앙에서 계산하고 분배하기 때문에 관리하기가 더 쉽습니다.
- 반면에 분산된 제어 평면은 각각의 라우터에 구현된 분산 알고리즘 (프로토콜)의 결과로 테이블을 계산해야 합니다. 분산된 접근 방식은 각각의 장점이 있지만 더 복잡할 수 있으며 동기화 및 일관성 문제에 취약할 수 있습니다.
3. **개방성과 소유권 없는 제어 평면의 구현:** SDN은 개방적이고 소유권이 없는 제어 평면의 구현을 촉진합니다. 이는 SDN 컨트롤러와 프로토콜이 특정 공급 업체에 종속되지 않고 하드웨어 및 소프트웨어 구성 요소를 선택하는 유연성과 상호 운용성을 제공합니다.
SDN을 사용하면 네트워크 관리가 용이해 진다.
1. 플로우 기반 포워딩
2. 데이터 평면과 제어 평면의 분리
3. 네트워크 제어 기능이 데이터 평면 스위치 외부에 존재
4. 프로그램이 가능한 네트워크 제어 어플리케이션
데이터 평면 스위치
- 하드웨어에서 일반화된 데이터 평면 전달을 구현하는 빠르고 간단한 상용 스위치
- 스위치의 플로우 테이블은 컨트롤러에 의해 계산되고 설치됨
- 테이블 기반 스위치 제어를 위한 API가 제공됨 (예: OpenFlow)
- 무엇을 제어할 수 있는지와 무엇을 제어할 수 없는지를 정의
- 컨트롤러와 통신하는 프로토콜이 정의됨 (예: OpenFlow)
SDN 컨트롤러 (네트워크 운영 체제):
- 네트워크 상태 정보를 유지합니다.
- 상위의 네트워크 제어 애플리케이션과의 상호 작용을 통해 northbound API를 사용합니다.
- 아래쪽의 네트워크 스위치와의 상호 작용을 통해 southbound API를 사용합니다.
- 성능, 확장성, 오류 허용성, 견고성을 위해 분산 시스템으로 구현됩니다.
네트워크 제어 응용 프로그램:
- 제어의 "두뇌": SDN 컨트롤러에서 제공하는 하위 수준의 서비스와 API를 사용하여 제어 기능을 구현합니다.
- 분리됨: 3자에 의해 제공될 수 있습니다. 라우팅 공급 업체나 SDN 컨트롤러와 별도입니다.
SDN 컨트롤러의 구성 요소
1. 네트워크 제어 앱에 대한 인터페이스 계층: 네트워크 제어 앱과의 상호 작용을 위한 추상화 및 API 제공
2. 네트워크 전체 상태 관리 계층: 네트워크의 상태를 관리하며, 링크, 스위치, 서비스의 상태를 포함하는 분산 데이터베이스
3. 통신 계층: SDN 컨트롤러와 제어 대상 스위치 간의 통신을 담당함.
OpenFlow 프로토콜
- 컨트롤러와 스위치 간에 작동합니다.
- 메시지 교환을 위해 TCP를 사용합니다.
- 선택적으로 암호화될 수 있습니다.
- 세 가지 유형의 OpenFlow 메시지가 있습니다:
- 컨트롤러에서 스위치로
- 피처 (features): 컨트롤러가 스위치의 특징을 조회하고, 스위치가 응답합니다.
- 구성 (configure): 컨트롤러가 스위치의 구성 매개변수를 조회하거나 설정합니다.
- 상태 수정 (modify-state): OpenFlow 테이블에서 흐름 항목을 추가, 삭제, 수정합니다.
- 패킷 전송 (packet-out): 컨트롤러가 특정 스위치 포트로 이 패킷을 전송할 수 있습니다.
- 비동기적 (스위치에서 컨트롤러로)
- 패킷 인 (packet-in): 패킷과 그 제어를 컨트롤러로 전송합니다. 컨트롤러에서의 패킷 전송 메시지를 참조하세요.
- 플로우 제거 (flow-removed): 스위치에서 플로우 테이블 항목이 삭제될 때 발생합니다.
- 포트 상태 (port status): 포트에서 변경이 있을 때 컨트롤러에게 알립니다.
다행히도, 네트워크 운영자는 OpenFlow 메시지를 직접 생성하거나 전송하여 스위치를 "프로그래밍"하지 않습니다. 대신 컨트롤러에서 더 높은 수준의 추상화를 사용합니다.
- 대칭형 (기타)
SDN : 컨트롤 데이터 평면 상호작용 예시
1. S1은 링크 장애를 경험하고 OpenFlow 포트 상태 메시지를 사용하여 컨트롤러에게 알립니다.
2. SDN 컨트롤러는 OpenFlow 메시지를 수신하고 링크 상태 정보를 업데이트합니다.
3. Dijkstra의 라우팅 알고리즘 응용 프로그램은 이전에 링크 상태가 변경될 때마다 호출되도록 등록되어 있습니다. 호출됩니다.
4. Dijkstra의 라우팅 알고리즘은 네트워크 그래프 정보와 컨트롤러의 링크 상태 정보에 액세스하여 새로운 경로를 계산합니다.
5. 링크 상태 라우팅 앱은 SDN 컨트롤러의 흐름 테이블 계산 구성 요소와 상호 작용하며 필요한 새로운 흐름 테이블을 계산합니다.
6. 컨트롤러는 OpenFlow를 사용하여 업데이트가 필요한 스위치에 새로운 테이블을 설치합니다.
6. 인터넷 제어 메시지 프로토콜 (ICMP)
ICMP: 인터넷 제어 메시지 프로토콜
- 호스트 및 라우터가 네트워크 수준의 정보를 통신하는 데 사용됩니다.
- 오류 보고:
- 도달할 수 없는 호스트, 네트워크, 포트, 프로토콜 등
- 에코 요청/응답 (ping에서 사용됨)
- IP 상의 네트워크 계층에 위치합니다.
- ICMP 메시지는 IP 데이터그램 내에서 전송됩니다.
- ICMP 메시지: 유형, 코드 및 오류를 발생시킨 IP 데이터그램의 첫 8바이트를 포함합니다.
Traceroute(메시지의 경로를 확인하는 명령어)와 ICMP
- 송신자는 목적지로 일련의 UDP 세그먼트를 전송합니다.
- 첫 번째 세트는 TTL = 1
- 두 번째 세트는 TTL = 2 등으로 설정됩니다.
- 가능한 번호의 포트를 사용합니다.
- n번째 세트의 데이터그램이 n번째 라우터에 도달하면:
- 라우터는 데이터그램을 폐기하고 송신자에게 ICMP 메시지를 보냅니다 (유형 11, 코드 0). - TTL Expired
- ICMP 메시지에는 라우터의 이름과 IP 주소가 포함됩니다.
- ICMP 메시지가 도착하면 송신자는 RTT를 기록합니다.
- 중지 기준:
- UDP 세그먼트가 최종 목적지 호스트에 도착합니다.
- 목적지가 ICMP "포트 도달 불가" 메시지를 반환합니다 (유형 3, 코드 3).
- 송신자가 중지합니다.
7. 네트워크 관리와 SNMP
네트워크 관리란 무엇인가요?
- 자율 시스템 (일명 "네트워크"): 수천 개의 상호 작용하는 하드웨어 및 소프트웨어 구성 요소
- 모니터링 및 제어가 필요한 다른 복잡한 시스템:
- 제트 비행기
- 원자력 발전소
- 기타?
"네트워크 관리는 하드웨어, 소프트웨어 및 인간 요소를 배치, 통합 및 조정하여 네트워크 및 구성 요소 자원을 실시간으로 모니터링, 테스트, 폴링, 구성, 분석, 평가 및 제어하여 합리적인 비용으로 운영 성능 및 서비스 품질 요구 사항을 충족시키는 프로세스를 포함합니다."
네트워크 관리를 위한 인프라
- Managed Device: 관리 대상 개체를 포함하고 있으며, 해당 데이터는 관리 정보베이스(MIB)로 수집됩니다.
- Managing Entity : 관리 개체
- 이 둘간에 네트워크 관리 프로토콜이 필요
SNMP 프로토콜
MIB 정보와 명령을 전달하는 두 가지 방법:
'Study > 컴퓨터 네트워크' 카테고리의 다른 글
컴퓨터 네트워크 6. 링크 계층과 LANs (0) | 2023.10.29 |
---|---|
컴퓨터 네트워크 4. 네트워크 계층 (데이터 평면) (0) | 2023.10.08 |
컴퓨터 네트워크 3. 전송계층(Transport Layer) (0) | 2023.09.13 |
컴퓨터 네트워크 2. 어플리케이션 계층 (0) | 2023.08.31 |
컴퓨터 네트워크 1. 컴퓨터 네트워크와 인터넷 (0) | 2023.08.31 |