# 모두의 네트워크 기초

### 1장 네트워크 첫걸음

네트워크 : 컴퓨터랑 컴퓨터 연결하여 데이터 교환이나 협력하는 통신망

네트워크 사용 이유

* 주변 장치 공유 : 프린터 같은 거 연결
* 데이터 공유
* 공동 작업

랜(Local Area Network, LAN) : 건물 안이나 특정 지역을 범위로 하는 네트워크

* star형 : 하나의 허브에 여러 대의 컴퓨터 연결. 확장 쉽지만 허브 터지면 통신 안됨.
* ring형 : 개별 컴퓨터가 서로 원처럼 연결. 초기 구성 쉽지만 한 대 추가할 경우 링 절단하고 다시 연결해야함.
* bus형 : 하나의 긴 선에 컴퓨터를 포함한 모든 주변장치 연결. 케이블 터지면 통신 안됨.

왠(Wide Area Network, WAN) : 2개 이상의 랜을 연결한 것

* 별도의 네트워크 접속 형태는 없고 랜 사이 통신만 잘 이루어지게 하면 됨

네트워크 구성 장치

* 허브 : 여러 대의 컴퓨터 연결
* 스위치 : 대역폭 확대
* 라우터 : 컴퓨터 B를 찾아가기 위한 길 제시
* 브리지 : 2개 이상의 네트워크를 연결. 데이터를 한 곳에서 다른 곳으로 전달.

대역폭(bandwidth) : 1초당 처리할 수 있는 데이터 양, `(용량 x 8) / 처리 시간`으로 구한다.

데이터 처리 단위

* 1바이트 = 8비트
* 1킬로바이트 = 1024바이트
* 1메가바이트 = 10204메가바이트
* 1기가바이트 = 1024메가바이트
* 1테라바이트 = 1024기가바이트

### 2장 네트워크 통신을 위한 약속

프로토콜 : 통신할 때 메시지 주고받는 규칙

* OSI 7계층(Open systems Interconnection 7 Layers)
* TCP/IP 4 계층(Transmission Control Protocol/Internet Protocol 4 Layers)

OSI 7계층

* 응용 계층(Application Layer) : 사용자와 애플리케이션 간의 소통
* 표현 계층(Presentation Layer) : 데이터를 어떻게 표현할지 정의
* 세션 계층(Session Layer) : 통신을 설정,관리,종료
* 전송 계층(Transport Layer) : 신뢰성 있는 정확한 데이터 전달
* 네트워크 계층(Network Layer) : 네트워크 장치 간의 경로 선택과 데이터 전송. 라우터 필요
* 데이터 링크 계층(Data Link Layer) : 물리적인 연결을 통해 오류 없는 데이터 전달. 브리지, 스위치 필요
* 물리 계층(Physical Layer) : 전기 신호를 이용해서 통신 케이블로 데이터 전송. 리피터, 허브 필요

OSI 7계층 데이터 표현

* 응용,표현,세션 : 데이터, 메시지
* 전송 : 세그먼트
* 네트워크 : 패킷
* 데이터 링크 : 프레임
* 물리 : 비트

데이터에 든 거

* 데이터 : 이메일로 예를 들면 이메일의 본문
* 세그먼트 : 포트 번호. 전송 계층에서 추가.
* 패킷 : 송수신자 IP 주소. 네트워크 계층에서 추가.
* 프레임 : 송수신자 MAC 주소. 데이터 링크 계층에서 추가.

포트 번호 : 애플리케이션 구분하기 위한 번호 IP 주소 : 인터넷에 연결된 모든 장치를 구분하기 위한 고유 주소. 인터넷 서비스에 가입하면 할당받음. 네트워크 계층에서 사용. MAC 주소 : 하드웨어 장치에 할당된 주소. 컴퓨터 구매할 때부터 할당됨. 데이터 링크 계층에서 사용.

TCP/IP 4 계층

* OSI 7 너무 많아서 효율적인 사실상의 표준은 TCP/IP 4 계층
* 응용 계층 : 사용자와 애플리케이션 간의 소통
* 전송 계층 : 데이터의 전송 및 흐름에 있어 신뢰성 보장
* 인터넷 계층 : 물리적으로 데이터가 네트워크를 통해 어떻게 전송되는지를 정의
* 네트워크 인터페이스 계층 : 데이터를 전기 신호로 변환한 뒤 데이터 전송

헤더 : 각 계층을 지나면서 덧붙여지는 정보 캡슐화 : 헤더가 추가되는 과정 역캡슐화 : 헤더가 분리되는 과정

VPN(Virtual Private Network, 가상사설망)

1. VPN 클라 소프트웨어 설치
2. VPN 서버 연결 및 인증
3. 데이터 암호화
4. 터널링으로 암호화 데이터 전송

### 3장 물리 계층 : 데이터를 전기 신호로 변환하는 단계

랜 카드 : 데이터를 전기 신호로 변환 리피터 : 전기 신호를 증폭 (요즘엔 잘 안 씀) 허브 : 전송된 데이터 신호를 복원하고 증폭, 하나의 입력 신호를 여러 디바이스로 복제

### 4장 데이터 링크 계층 : MAC 주소로 통신하는 단계

데이터 계층 오류 감시 및 수정 방식

* 회선 제어 : 오류 회피하여 신호 간 충돌 현상 발생하지 않게 한다.
  * 신호 시작인 ENQ(Enquiry)와 신호 끝인 EOT(End of Transmission)를 명시적 지정
* 오류 제어 : 외부 간섭, 시간 지연 등 오류 검출하고 정정
  * 패리티 검사(parity check) : 수신자에게 보내는 최종 데이터의 1의 개수를 짝수로 보낼지 홀수로 보낼지 미리 약속하고 여분의 비트를 채워 보냄
  * CRC(Cyclic Redundancy Check) : 데이터에 CRC 코드를 추가하여 오류를 감지. 송신자가 코드 생성하고 수신자도 동일 계산 수행하여 일치 확인
  * 검사합 : 송수신자가 데이터와 관련된 검사합 계산하여 일치 확인
  * 해밍 코드(Hamming code) : 데이터에 추가적인 패리티 비트 포함 -흐름 제어 : 수신자 상황에 따라 송신자 데이터 전송 조절하여 송수신자 데이터 처리 속도 차이 해결
  * 정지-대기(Stop & Wait) : 송신자가 데이터 하나 전송 후 다음 데이터 전달 전 확인 응답 기다림

이더넷(Ethernet) : 다수의 컴퓨터, 허브, 스위치를 하나의 인터넷 케이블에 연결한 네트워크 구조

* CSMA/CD(Carrier Sense Multiple Access/Collision Detection) 프로토콜 사용
* 2대 이상의 컴퓨터가 동시에 데이터 보내는 충돌(collision) 방지하기 위해 전류 강도 확인해 케이블 사용중인지 확인하는 CSMA/CD 방식 사용
* 현재 CSMA/CD는 잘 사용 안 함. OSI 7 계층 중 2계층인 스위치 장비가 그 역할을 대신.

MAC(Media Access Control) 주소 : 랜 카드에 할당된 값. 전 세계에서 하나만 존재.

* 상위 24비트 : OUI, 랜 카드 제조사 코드
* 이후 24비트 : UAA, 제조사가 랜카드에 부여한 번호

프레임

* 이더넷 헤더
  * 목적지 MAC 주소
  * 출발지 MAC 주소
  * 유형 : IPv4, IPv6, ARP(Address Resolution Protocol, IP 주소에 해당하는 MAC 주소 알고자할 때 사용하는 프로토콜)
* 데이터
* 트레일러

ARP로 MAC 주소 알아내는 과정 (기본적으론 LAN에서만 가능, WAN 환경에선 라우터 장비 거쳐야 확인 가능)

1. 컴퓨터 A가 같은 허브에 묶인 모든 컴퓨터에게 특정 IP 주소의 MAC 주소 물음.

* Broadcast : 모든 컴퓨터에게 질의
* ARP Request : MAC 주소 묻기

2. 모든 컴퓨터가 자신의 IP를 그 주소와 비교하고, 해당되는 컴퓨터 B가 MAC 주소를 전달함.

* ARP Table : 컴퓨터 A가 컴퓨터 B의 IP와 MAC 주소를 메모리에 저장

3. 컴퓨터 A가 컴퓨터 B의 MAC 주소 알게 됐으므로 통신 가능

스위치

* 연결된 모든 장치에 데이터 전송하는 허브와 다르게 필요한 장치에만 데이터 전달하는 장치
* 소규모 네트워크 안에서 컴퓨터, 프린터 등 모든 장치를 서로 연결해서 데이터를 쉽게 공유
* MAC 테이블에 스위치에 연결된 컴퓨터의 MAC 주소 관리
* Flooding : MAC 주소 업뎃을 위해 스위치에 물려있는 모든 컴퓨터에 데이터 보내는 것. MAC 테이블에 이미 있으면 안 하고 바로 연결해줌.

단방향 통신 : 일방적으로 데이터 전송 양방향 통신 : 하나의 통신 채널에서 송수신이 모두 가능

* 반이중(Half Duplex) 방식 : 양쪽 방향에서 통신 가능하지만 동시에 통신은 불가
  * 송수신을 번갈아가며 통신하여 데이터 전송 속도 빠름
  * 주로 허브에서 사용
  * 채널을 하나만 사용하여 충돌 문제가 남아있음
* 전이중(Full Duplex) 방식 : 채널을 2개 두어서 양쪽 방향에서 동시에 데이터 주고 받음
  * 스위치에서 사용됨
  * 충돌 문제 해결됨

충돌 도메인 : 충돌이 발생할 때 그 영향이 미치는 범위. 하나의 허브에 컴퓨터들이 연결돼있으면 여기 연결된 모든 컴퓨터가 충돌 도메인.

### 5장 네트워크 계층 : 목적지를 찾는 단계

라우터(Router) : 데이터가 어떤 경로로 전달돼야할지 알려주는 내비게이션

* 라우팅(Rounting) : 어떤 길이 가장 빠른 길인지 찾는 과정
* 라우터는 스위치와는 다르게 IP 주소를 이용해서 통신
* 라우팅 테이블 : 데이터를 목적지까지 보내기 위한 거리와 방법 등을 명시한 테이블

IP(Internet Protocol) 주소 : 인터넷 상에 있는 컴퓨터의 고유한 주소

* IP 주소는 인터넷 서비스 제공자(ISP, Internet Service Provider)라고 하는 SKT, KT 등 회사가 공인 IP 부여해줌
* 공인 IP : ISP에 의해 전 세계적으로 고유하게 할당되는 IP 주소. 대부분의 ISP는 유동 공인 IP 주소를 할당해준다.
* 사설 IP : 주로 기업 내부에서만 사용되는 IP 주소. 기업 밖의 컴퓨터와는 통신 안됨.
* IP 주소는 4바이트. 즉 32비트로 돼있다.
  * 마지막 1바이트의 최소인 0과 최대인 255는 용도가 정해져 있어 컴퓨터 IP로 안 쓴다.
  * `192.168.2.0`처럼 마지막 1바이트가 0인 주소를 네트워크 주소라고 하며, 하나의 네트워크를 통칭하는 데 쓰인다.
  * `192.168.2.x`는 같은 IP 대역을 사용한다고 표현한다.
  * `192.168.2.255`처럼 마지막 1바이트가 255인 경우를 브로드캐스트 주소라고 하며, 네트워크에 연결된 모든 컴퓨터에 데이터를 일괄 전송할 때 쓰인다.
* (C 클래스 기준) 앞의 3바이트는 네트워크 ID, 마지막 1바이트는 호스트 ID
  * 호스트 ID : 개별 컴퓨터들이 사용
  * 네트워크 ID : 컴퓨터가 많을 경우 관리의 어려움이 있기 때문에 네트워크의 범위를 지정

IP 주소의 클래스

* 공인 IP 주소에는 A부터 E까지 5개의 클래스가 있다. D와 E는 일반인이 쓰는게 아니므로 A, B, C 클래스만 유효하다.
* A 클래스 : 하나의 네트워크가 가질 수 있는 호스트 ID가 가장 많은 클래스. 첫 8비트는 네트워크 ID를 의미하고, 나머지 24비트는 호스트 ID를 의미.
* B 클래스 : 네트워크 ID는 16비트, 호스트 ID는 16비트
* C 클래스 : 네트워크 ID는 24비트, 호스트 ID는 8비트 (이진법 표현시 앞 세 자리가 110으로 고정돼있음)

브로드캐스트 : 같은 네트워크에 속한 모든 컴퓨터에게 데이터 전달 유니캐스트 : 1대1 통신. MAC 주소를 알고 있어야 한다. 멀티캐스트 : 특정 그룹을 지정해서 그 그룹에 해당하는 컴퓨터에만 데이터를 보낸다

서브넷 : 하나의 네트워크 주소를 작은 단위로 쪼개어 사용

* 서브넷팅(subneting) : 작은 네트워크로 나누는 작업
  * 호스트 ID를 서브넷 ID와 호스트 ID로 나누는 작업
  * 네트워크 ID는 그대로 두고 호스트 ID를 쪼갠다.
  * 쪼개는 개수가 적을수록 사용 가능한 호스트 수가 많아진다.
* `네트워크 ID` + `호스트 ID` -> `네트워크 ID` + `서브넷 ID` + `호스트 ID`

서브넷 마스크 : 네트워크 ID와 호스트 ID를 구분하기 위한 구분자

* 네트워크 ID 부분은 1로, 호스트 ID 부분은 0으로 채운다.
* `255.255.255.0` 또는 `192.168.1.1/24`인데, 24는 24비트가 모두 1의 값을 갖는다는 뜻.

### 6장 전송 계층 : 오류 없이 데이터를 전달하는 단계

전송 계층

* 오류를 점검하는 기능
* 컴퓨터가 제대로 데이터를 받았을 경우 어떤 애플리케이션으로 전달해야 하는지 식별

혼잡 제어(Congestion Control) : 네트워크로 들어가는 정보량을 조절하여 네트워크가 혼잡해지지 않게 조절

* 송신자는 먼저 하나의 데이터만 보내고, 수신자 측에서 ACK가 오면 전송량을 2배씩 증가시켜 나감
* 그러다 Time Out이 발생하거나 ACK를 여러 번 받았다면 데이터를 줄여서 보낸다.

흐름 제어 (정지-대기) : 데이터 전송 후 다음 데이터 전달 전 확인 응답 기다리기

오류 제어

* 확인 응답 : 수신자 측으로부터 ACK라는 응답을 못 받으면 오류 판단
* 시간 초과 : 특정 시간 내에 ACK가 없으면 세그먼트에 오류가 있다 판단

재전송이 필요한 상황

* 데이터가 중간에 손실될 때 : 송신자가 데이터 보냈는데 수신자는 아무것도 못 받음
* 데이터 순서가 바뀔 때
* 데이터가 훼손됐을 때

연결형 통신 : 데이터를 정확하게 전달하는 것을 목표, TCP 프로토콜 사용 비연결형 통신 : 효율적으로 데이터를 보냄, UDP 프로토콜 사용

TCP(Transmossion Control Protocol) 프로토콜 통신

* 3방향 핸드셰이크로 통신 시작
  * 송신자가 수신자에게 SYN(Synchronize Sequence Number)라는 임의의 숫자 보냄
  * 수신자는 확인의 의미로 ACK와 함께 SYN를 보냄. 이때 ACK는 받았던 SYN에 1이 더해진 숫자, SYN은 임의의 숫자.
  * 송신자가 ACK를 다시 보내면 끝.

포트 번호 : 프로그램의 주소 (65,536개 존재)

* 0\~1023번 : well-known port. 특정한 쓰임을 위해 사용
* 1024\~49151번 : registered port. 기관이나 기업들이 사용
* 49152\~65535번 : dynamic port. 일반 사용자들이 자유롭게 사용

일련번호 : 송신자가 수신자에게 보내려는 데이터가 몇 번째인지 알려줌 확인 응답 번호 : 수신자가 몇 번째 데이터를 받았는지 송신자에게 알려줌 패킷의 크기 : 한 번에 보낼 수 있는 데이터의 최대 크기 윈도우 사이즈 : 수신자가 받을 수 있는 데이터 양을 고려하여 송신자가 보내는 데이터 최대 크기 (핸드셰이크 과정에서 Window\_Size라는 정보를 주고받는다) 코드 비트 : TURG, ACK, SYN 등 정의

UDP(User Datagram Protocol)

* 신뢰성을 보장하지 않는다. 실시간 방송 등에 적합.
* UDP 프로토콜 헤더는 송수싲나 포트 번호, 헤더 길이, 검사합 정보만 포함

로드 밸런서(Load Balancer)

* 여러 대의 서버를 두고 사용자가 한쪽으로 몰리는 것을 분산시켜주는 장치
* Scale Out : 1대의 서버에서 여러 대로 늘리는 것
* Load Balancing : 부하를 분산시켜주는 작업
* 부하 분산 방법
  * Round Robin : 각 서버별로 돌아가면서 처리
  * Weighted Round Robin : 돌아가며 처리하지만 일부 서버는 큰 트래픽을 몰아 받음
  * Random : 무작위 분배
  * Hash : 특정 클라는 특정 서버에서만 처리
  * 포트 번호를 이용하여 부하를 분산시킬 수도 있다

### 7장 응용 계층 : 애플리케이션에 접속하는 단계

클라에서 서버로 데이터 보낼 때 응용 계층 프로토콜 사용. HTTP, DNS 등 응용 계층의 로드 밸런서는 URI, HTTP 헤더, 쿠키 등의 내용 기준으로 서비스 별 부하 분산 가능.

HTTP(HyperText Transfer Protocol)

* 클라와 서버가 어떻게 데이터 교환할지 정해놓은 규칙. 80번 포트 사용.
* `GET /Index.htrml HTTP/1.1`과 같이 문자 형태로 데이터가 전송됨. 각각 메서드 경로 버전

DNS 서버

* 도메인 주소를 IP 주소로 변경해주는게 DNS(Domain Name System) 서버
* DNS 서버는 계층적으로 구성돼있음. 루트에서 시작해서 .com, 최종적으로 [www.google.com](http://www.google.com)

DHCP 서버

* IP 주소를 일일이 관리해줄 수 없으니까 DHCP 서버로 자동 관리
* DHCP(Dynamic Host Configuration Protocol) 서버는 사용자들에게 IP 주소를 할당하거나 회수하는 것을 자동으로 해줌

### 8장 예시를 통한 네트워크 흐름 이해하기

송신자 관점

* 응용 계층 : `Get /index.html HTTP/1.1`
* 전송 계층 : 이전 + 송신자 포트, 수신자 포트, 기타 정보
* 네트워크 계층 : 이전 + 송신자 IP, 수신자 IP, 기타 정보
* 데이터 링크 계층 : 송신자 MAC 주소, 수신자 MAC 주소(송신자의 라우터 MAC 주소), 기타 정보
* 물리 계층 : 랜 카드에서 전기 신호로 변환

장비 관점

* 송신자가 웹 서버에 데이터를 요청
* 스위치에 MAC 주소 찾으러 가지만 스위치도 안 갖고 있음
* 수신자의 MAC 주소를 라우터 A의 MAC 주소로 변경하고 라우터 A로 전달
* 라우터 A가 받은 수신자 MAC 주소가 자기 자신이면 이더넷 헤더 떼어내고 네트워크 계층에 데이터를 전달
* 라우팅 테이블에 수신자 IP 주소 등록돼있는지 확인하고 있다면 송신자 IP 주소를 자신의 IP 주소로 교체
* 라우터 간의 통신에서 가장 중요한 점 : 송신자 MAC 주소는 라우터 A 자신의 MAC 주소로, 수신자 MAC 주소는 라우터 B MAC 주소로.
* 아까 바꿨던 이더넷 헤더 다시 결합시키고 물리 계층으로 라우터 B로

### 9장 무선으로 통신하기

무선 랜

* 무선 공유기(Wireless Access Point) : 유선 랜과 무선 랜을 연결해주는 장치
* 전자기파로 데이터 전송
* Infrastructure : 무선 랜 네트워크에 연결된 모든 장치가 무선 공유기에 연결
* Ad-hoc : 무선 액세스 포인트 없이 장치 간에 직접 통신

SSID(Service Set IDentifier, 서비스 세트 식별자) : 다른 무선랜과 구분하는 식별자

* 무선 공유기와 클라의 통신에는 SSID 이용. 클라가 SSID 검색하여 해당 네트워크에 연결.
* 무선 공유기가 브로드캐스트로 비콘 메시지 보냄
  * Beacon : 가까운 범위 안에 있는 주변 기기에 정보를 전달
* 이 신호를 받은 클라가 SSID가 일치하는지 무선 공유기에 문의
* 같은 SSID 무선 공유기가 응답 후 인증 방식 확인
* 클라가 무선 공유기에 연결 요청하고 승인 받음

무선 공유기 여러 대 두면 채널 간섭 일어날 수 있다. 서로 다른 구격이면 주파수가 달라서 간섭 발생 안 한다


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lazyartisan.gitbook.io/note/main-page/books/undefined-3.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
