프로필사진
[Network] 책 정리 : 모두의 네트워크 (2)

2022. 8. 21. 01:17🔴 ETC/Network

300x250


Lesson 03. 물리계층 : 데이터를 전기 신호로 변환하기

물리 계층의 역할과 랜 카드의 구조

- 0과 1로 이루어진 비트열을 전기신호로 변환하려면 물리 계층의 기술이 필요함 
- 2가지 전기 신호 :
1) 아날로그 신호 : 물결모양 전기신호 (전화 회선, 라디오 방송)
2) 디지털 신호 : 막대 모양 전기신호 (데이터 전송)
데이터 송신 -> 0,1로 이루어진 데이터 ---> 전기신호로 전송 ---> 데이터 수신 -> 0,1 집합으로 복원
컴퓨터의 랜 카드가 0,1의 데이터를 전기신호로 변환함
- 물리계층 : 컴퓨터와 네트워크 장비를 연결하고 장비 간에 전송되는 데이터를 전기신호로 변환함

케이블의 종류과 구조

- 전송 매체 : 데이터가 흐르는 물리적인 선로 (유선 & 무선)
- 트위스트 페어 케이블 = 랜 케이블 
1) UTP 케이블 : 구리선을 꼬아 만든 선을 실드로 보호되어 있지 않은 케이블, 저렴, 일반적으로 많이 사용함 
실드는 외부에서 발생하는 노이즈를 막는 역할을 함
2) STP 케이블 : 구리선을 꼬아 만든 선을 실드로 보호한 케이블, 노이즈 영향 적게 받음, 비쌈
- 노이즈는 케이블에 전기 신호가 흐를 때 발생함

케이블 양쪽 끝에는 커넥터가 붙어있어서 기기에 연결한다

- 랜 케이블 종류 (모두 1,2,3,6번 구리선을 사용함)
1) 다이렉트 케이블 : 구리선 8개를 같은 순서로 커넥터에 연결함
컴퓨터와 스위치를 연결할 때 사용
2) 크로스 케이블 : 한쪽 커넥터의 1,2번 구리선을 다른 쪽 커넥터의 3,6번과 연결함 
컴퓨터 간에 직접 랜 케이블로 연결할 때 사용 

다이렉트 케이블 구조에서 양 쪽 컴퓨터에서 모두 1,2번 선으로 데이터를 전송하면 -> 데이터 충돌
=> 크로스 케이블 (일부러 중간에 전선을 교차시켜서 송신 & 수신 올바르게 연결)

리피터와 허브의 구조

- 리피터(repeater) : 전기 신호를 복원하고 증폭하는 기능을 가진 네트워크 중계 장비, 하지만 요즘은 사용 안 함
- 허브(hub) : 포트를 여러 개 가지고 있고, 리피터 허브라고도 불림, 컴퓨터 여러 대와 통신 가능, 리피터 기능이 있음

랜 케이블로 컴퓨터와 허브를 연결한다

컴퓨터 여러 대가 연결되어 데이터를 주고받을 때 :
특정 포트로부터 데이터를 받는다면 해당 포트 말고 나머지 모든 포트로도 데이터를 전송함
전기 신호를 모든 포트로 보내버려서 '더미 허브'라고도 불림 


Lesson 04. 데이터 링크 계층 : 랜에서 데이터 전송하기

데이터 링크 계층의 역할과 이더넷

- 데이터 링크 계층 : 네트워크 장비 간에 신호를 주고받는 규칙을 정함
- 이더넷(Ethernet) : 랜에서 적용되는 규칙 (허브와 같은 장비에 연결된 컴퓨터와 데이터를 주고받을 때 사용)
허브에서 관계없는 다른 컴퓨터들이 데이터를 받을 수 없도록 함
목적지 정보를 데이터에 추가하여 목적지 이외의 컴퓨터는 데이터를 받더라도 무시하도록 함
- 컴퓨터 여러 대가 동시에 데이터를 보내면 충돌이 일어기도함
-> 이더넷이 충돌을 방지하도록 구조화됨 : 데이터의 시점을 늦춤 (CSMA/CD 방식)
=> 현재 : CSMA/CD 대신 스위치를 사용함 

MAC 주소의 구조

- 랜 카드에는 MAC주소라는 번호가 정해져 있음 (= 물리주소, 전 세계에서 유일한 번호로 할당됨)
48비트 숫자로 구성 : 앞 24비트 = 제조사 번호, 뒤 24비트 = 랜카드에 붙인 일련번호

- 데이터 링크 계층에서 이더넷 헤더 & 트레일러를 붙임
이더넷 헤더 : 목적지 MAC주소 + 출발지 MAC주소 + 이더넷 유형 (프로토콜 종류를 식별)
트레일러 = FCS(Frame Check Sequence) : 데이터 전송 도중에 오류가 발생하는지 확인
- 프레임 : 이더넷 헤더 + 데이터 + 트레일러, 네트워크를 통해 전송됨

데이터 -> 데이터 링크 계층에서 캡슐화 -> 허브를 통해 모든 포트로 전송됨
-> 컴퓨터가 데이터 역캡슐화 -> MAC주소가 일치하지 않으면 데이터 파기 

스위치의 구조

- 스위치(switch) : 데이터링크 계층에서 동작하고, 레이어2스위치 또는 스위칭 허브라고도 불림
스위치 내부에는 MAC 주소 테이블이 있다
- MAC 주소 테이블 : 스위치의 포트번호와 해당 포트에 연결되어 있는 컴퓨터의 MAC주소가 등록되는 데이터베이스
MAC 주소 학습 기능 (허브에는 없는 기능이다) : 
1) 스위치 전원을 켬 -> 아직 MAC 주소 테이블에 아무것도 등록되어 있지 않음
2) 컴퓨터에서 목적지 MAC 주소가 추가된 프레임(데이터)이 전송
3) MAC 주소 테이블 확인, 출발지 MAC 주소가 등록되어 있지 않으면 MAC 주소 & 포트 등록
- MAC 주소 필터링 : MAC 주소를 기준으로 목적지를 선택하는 것, 불필요한 데이터를 네트워크에 전송하지 않게 함

목적지 MAC주소가 등록되어 있지 않을 때는 송신 포트 외 포트들에게도 데이터가 전송된다 (=플러딩, 홍수)

데이터가 케이블에서 충돌하지 않는 구조

2가지 통신 방식 :
1) 전이중 통신 방식 : 데이터의 송수신을 동시에 통신
ex. 컴퓨터 2대를 랜 케이블에 연결, 크로스 케이블을 사용
2) 반이중 통신 방식 : 회선 하나로 송신 & 수신을 번갈아가면서 통신 (데이터 동시에 전송 시 충돌 발생)
ex. 허브 내부에는 송수신이 나뉘어있지 않기 때문에 컴퓨터 2대를 연결할 경우 데이터 충돌 발생함
- 스위치는 전이중 통신방식으로 데이터를 주고받는다 -> 네트워크로 허브대신 스위치를 사용한다

충돌 도메인 : 데이터 충돌이 발생할 때 그 영향이 미치는 범위 (네트워크 지연 발생)
ex. 허브에서는 연결되어 있는 컴퓨터 전체가 하나의 충돌 도메인, 반면 스위치는 충돌 도메인 범위가 좁음

이더넷의 종류와 특징

- 이더넷은 케이블 종류나 통신 속도에 따라 다양한 규격으로 분류함
- 10BASE5-T = 10(통신 속도, 10Mbps) + BASE(전송 방식, BASEBAND) + T(케이블 종류)
- BASE-알파벳 = UTP 케이블, BASE숫자 = 동축 케이블

이더넷 규격


Lesson 05. 네트워크 계층 : 목적지에 데이터 전달하기

네트워크 계층의 역할

데이터 링크 계층 : 이더넷 규칙을 기반으로 데이터 전송, 같은 네트워크에 있는 컴퓨터로 데이터 전송함
네트워크 계층 : 서로 다른 네트워크에 있는 목적지로 데이터 전송함 -> 라우터 필요
- 라우터 : 해당 목적지까지 어떤 경로로 가는 것이 좋은지 알려주는 기능 
- IP주소 : 네트워크를 식별, 어떤 네트워크의 어떤 컴퓨터인지 구분하는 주소 (=/= 랜의 MAC주소)
- 라우팅 : 목적지 IP주소까지 어떤 경로로 데이터를 보낼지 결정 
- 라우팅 테이블 : 라우터 안에서 경로 정보를 등록하고 관리 

- 네트워크 계층에서 캡슐화 할 때 IP헤더를 붙인다 (IP헤더 + 데이터)
IP헤더 안에는 출발지 IP주소 & 목적지 IP주소가 들어 있음 
IP프로토콜을 사용하여 캡슐화한 IP헤더 + 데이터 = IP패킷 (데이터 링크계층에서는 '프레임'이 있었음!)

IP주소의 구조

- IP주소는 인터넷 서비스 제공자(ISP)에게 받을 수 있다
- IP버전 : IPv4(32비트), IPv6(128비트)
- 공인 IP주소 : ISP가 제공, 인터넷에 직접 연결되는 컴퓨터나 라우터에 할당
- 사설 IP주소 : 회사나 가정의 랜에 있는 컴퓨터에 할당 

랜 안에 여러 대의 컴퓨터가 존재 -> 모두 공인IP주소 하나씩 할당하기 어려움
=> 공인IP주소는 라우터에만 할당, 랜 안의 컴퓨터에겐 사설IP주소 할당 (공인IP주소 절약)
(랜의 네트워크 관리자가 할당하거나 라우터의 DHCP기능 사용하여 자동으로 할당)
- DHCP(Dynamic Host Configuration Protocol)

IP주소는 32비트로 구분하기 쉽게 10진수로 표시한다

32비트 -> 8비트씩 끊어서 4개의 옥텟으로 구분하고 있고,
숫자의 범위는 : 00000000 ~ 11111111 (8비트의 범위) => 0 ~ 255 (10진수의 범위)

2진수 -> 10진수 변환

- IP주소 = 네티워크ID(어떤 네트워크인지) + 호스트ID(해당 네트워크의 어느 컴퓨터인지)

IP주소의 클래스 구조

IP주소의 클래스

- IP주소 -> 네트워크ID를 크게 만들거나 호스트ID를 작게 만들어 네트워크 크기를 조정할 수 있다
- 네트워크 크기 -> 클래스라는 개념으로 구분

- 클래스A : 처음 8비트 = 네트워크ID, 다음 24비트 = 호스트ID
- 클래스B : 처음 16비트 = 네트워크ID, 다음 16비트 = 호스트ID
- 클래스C : 처음 24비트 = 네트워크ID, 다음 8비트 = 호스트ID

10진수로 변환한 범위 (IP주소의 전체 범위)

- 클래스A : 1.0.0.0 ~ 127.255.255.255
- 클래스B : 128.0.0.0 ~ 191.255.255.255
- 클래스C : 192.0.0.0 ~ 223.255.255.255

공인IP주소, 사설IP주소의 범위가 별도로 정해져 있다

네트워크 주소와 브로드캐스트 주소의 구조

- 이 두 주소는 특별한 주소로, 컴퓨터나 라우터가 자신의 IP로 사용하면 안된다

- 네트워크 주소 : 호스트ID가 10진수로 0, 2진수로 00000000
전체 네트워크에서 작은 네트워크를 식별하는 데 사용됨 (=네트워크 전체를 대표하는 주소)
ex. 192.168.1.0 (네트워크 주소) - 192.168.1.1, 192.168.1.2, 192.168.1.3 ... 컴퓨터가 네트워크 안에 있음
- 브로드캐스트 주소 : 호스트ID가 10진수로 255, 2진수로 11111111
네트워크에 있는 컴퓨터나 장비 모두에게 한 번에 데이터를 전송하는 데 사용되는 전용 IP주소
ex. 192.168.1.255로 데이터 전송 -> 192.168.1.1, 192.168.1.2, 192.168.1.3 ... 컴퓨터에게 모두 송신됨 

서브넷의 구조 

- 서브넷팅(subneting) : 대규모의 네트워크를 작은 네트워크들로 분할, 브로드캐스트로 전송되는 패킷의 범위를 좁힐 수 있음
- 서브넷(subnet) : 분할된 네트워크
- 서브네팅을 하면 클래스가 네트워크ID + 호스트ID -> 네트워크ID + 서브넷ID + 호스트ID로 나눠진다 

원래 호스트ID의 비트를 빌려 서브넷ID로 만든다

- 서브넷 마스크 : 네트워크ID, 호스트ID를 식별하기 위한 값 

- 프리픽스 표기법 : 서브넷 마스크를 '슬래시 비트수'로 나타낸 것
ex. 255.255.255.0 -> /24

255.255.255.240 -> 프리픽스 표기법으로는 /28이다 (네트워크ID+서브넷ID=28비트)

네트워크ID 24비트 -> 28비트 (4비트를 호스트ID에서 빌림)
=> 네트워크ID 24비트, 서브넷ID 4비트, 호스트ID 4비트

라우터의 구조

- 스위치, 허브는 네트워크를 분리할 수 없다 (모든 컴퓨터가 동일 네트워크에 속하게 됨)
- 기본 게이트웨이(default gateway) : 다른 네트워크에 데이터를 전송하기 위해 필요한 라우터 IP주소 (네트워크의 출입구)

- 라우팅 테이블에 다른 네트워크로 가는 최적의 경로가 저장되어 있다
소규모 네트워크에서는 수동으로 등록하고, 대규모 네트워크에서는 자동으로 등록하는게 적합하다
- 라우팅 프로토콜 : 라우터 간에 라우팅 정보를 교환하기 위한 프로토콜


Lesson 06. 전송 계층 : 신뢰할 수 있는 데이터 전송하기

전송 계층의 역할

- 전송 계층 : 목적지에 신뢰할 수 있는 데이터를 전송하기 위해 필요
오류를 점검하는 기능 -> 오류 발생 시 데이터 재전송 요청함
데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능 
ex. 데이터 -> 웹 브라우저? 메일 프로그램? 어떤 애플리케이션인지
- 특징 : 신뢰성/정확성, 효율성으로 구분
신뢰 : 연결형 통신 (여러 번 확인 후 데이터 보냄, TCP프로토콜 사용)
효율 : 비연결형 통신 (일방적으로 데이터 보냄, UDP프로토콜 사용) ex. 동영상

TCP의 구조

- TCP헤더 : TCP로 전송할 때 붙이는 헤더, 목적지까지 전송하기 위해 필요한 정보를 가지고 있음
- TCP : 연결형 통신에 사용되는 프로토콜 
- 세그먼트 : TCP헤더가 붙은 데이터 

- 데이터를 전송하기 전 '연결'이라는 가상의 독점 통신로를 확보해야 한다
TCP헤더의 코드비트(6비트) : 연결의 제어 정보가 기록됨
초깃값 = 0, 비트 활성화 = 1
연결을 확립하려면 SYN(연결 요청), ACK(확인 응답)가 필요함

- 3-way 핸드셰이크 : 데이터를 보내기 전에 연결을 확립하기 위해 패킷요청을 3번 교환

1) 연결 확립 요청 SYN(0->1)
2) 연결 확립 응답 + 연결 확립 요청 SYN(0->1) + ACK(0->1)
3) 연결 확립 응답 ACK(0->1)

데이터 전송 후 : FIN(연결 종료), ACK 사용
4) 연결 종료 요청 FIN(0->1)
5) 연결 종료 응답 ACK(0->1)
6) 연결 종료 요청 FIN(0->1)
7) 연결 종료 응답 ACK(0->1)

일련번호와 확인 응답 번호의 구조

sequence number = 일련번호, acknowledgement number = 확인 응답번호

3-way 핸드셰이크가 끝나고 데이터를 보내거나 상대방이 받을 때는 TCP헤더의 일련번호 & 확인 응답번호를 사용
- TCP는 데이터를 분할해서 보낸다
- 데이터가 손상되거나 유실되었을 때 데이터를 재전송함 (=재전송 제어)
- 일련번호 : 송신 측에서 수신 측에 데이터가 '몇 번째' 데이터인지 알려줌
- 확인 응답 번호 : 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려줌
다음 번호의 데이터를 요청하는 데에도 사용함 (=확인 응답)

- 세그먼트 하나를 보낼 때마다 확인하는 것은 비효율적 -> 세그먼트를 연속해서 보낸 후 확인 응답 반환
세그먼트는 버퍼에 저장 (일시적으로 보관)
- 오버플로우 : 대량으로 데이터 전송 -> 보관하지 못하고 넘치는 현상
TCP헤더 > 윈도우 크기 : 오버플로우가 발생하지 않기 위한 버퍼의 한계 크기 값
(=얼마나 많은 용량의 데이터를 저장해 둘 수 있는지 나타냄)
3-way 핸드셰이크를 할 때 양 쪽 컴퓨터의 윈도우 크기를 확인함

포트 번호의 구조

- TCP헤더 > 출발지 포트번호(16비트), 목적지 포트번호(16비트) -> 목적지가 어떤 애플리케이션인지 구분
- 포트번호 : 0~65535번 사용
0~1023번 : 주요 프로토콜이 사용, 잘 알려진 포트 (일반적으로 사용하는 서버 측 애플리케이션에서 사용)
1025번 이상 : 랜덤 포트, 클라이언트 측의 송신포트로 사용

포트로 애플리케이션을 구분한다

데이터 전송 -> 상대방의 IP주소 필요
어떤 애플리케이션이 사용 -> TCP에서 포트번호 필요 
- 웹 브라우저로 접속할 때 웹 브라우저에는 임의의 포트가 자동으로 할당됨
(서버 측에서는 포트번호를 정해둬야 하지만, 클라이언트 측은 정하지 않아도 괜찮음)

UDP의 구조

- 비연결형 통신, 전송계층에서 효율적으로 & 빠르게 통신함

UDP 헤더

- UDP데이터그램 = UDP헤더 + 데이터 
- TCP와 달리 여러 번 확인 응답을 보내지 않고, 연속해서 데이터를 보낸다
- 브로드캐스트(broadcast) : 컴퓨터나 네트워크 장비에 데이터를 일괄로 보냄 
UDP에서의 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 보내지만,
TCP는 목적지를 지정하지 않으면 안 되기 때문에 일괄 통신을 할 수 없음


Lesson 07. 응용 계층 : 애플리케이션에 데이터 전송하기

- 클라이언트 : 서비스를 요청하는 측 (애플리케이션 - 웹브라우저, 메일 프로그램)
- 서버 : 서비스를 제공하는 측 (애플리케이션 - 웹 서버 프로그램, 메일 서버 프로그램), 응용 계층에서 동작함 
- 응용계층 -> 5계층의 세션 계층, 6계층의 표현계층을 포함
클라이언트의 요청으로 전달하기 위해 서버가 이해할 수 있는 메세지(데이터)로 변환하고 전송계층으로 전달하는 역할
- 프로토콜 -> 클라이언트 측 애플리케이션 & 서버 측 애플리케이션 통신하기 위해 필요

주용 응용계층 프로토콜

- DNS : 네트워크에서 컴퓨터나 네트워크 장비에 붙여진 이름을 기반으로 IP주소를 알아내는 것 (이름해석)

OSI모델의 계층에서 사용되는 프로토콜 & 기술

웹 서버의 구조 (웹 사이트 접속)

- WWW = W3,Web(웹) : HTML, URL, HTTP 세 가지 기술이 사용된다
- HTML : 태그를 사용하여 작성하는 마크업 언어, 하이퍼텍스트를 작성하는 마크업 언어
하이퍼텍스트는 하이퍼링크를 사용할 수 있음 (링크를 다는 것)
링크 클릭 -> 사이트로 이동 -> html파일이란 이미지가 웹서버에서 전송됨
(문서와 이미지는 각각 별도로 요청, 화면에 보이는 시점이 다름)

- 웹브라우저(클라이언트)는 웹사이트를 보기 위해 -> 웹서버프로그램(서버)의 80번 포트를 사용하여 HTTP통신을 함
HTTP요청(request) <-> HTTP응답(response)
데이터 요청 시 : GET -> 요청정보, 파일 이름, 버전 등을 서버에 전송
서버 응답 : OK라는 정보 반환, index.thml을 보내줌

- 예전(HTTP/1.0버전)에는 요청을 보낼 때마다 연결했다가 끊는 작업을 반복했음 -> 웹페이지 느림
-> 1.1버전에 keepalive기능 추가됨 (연결을 한번 하면 데이터 교환을 마칠 때까지 유지 후 끊는 구조)
-> 요청을 보낸 순서대로 처리하기 때문에 시간이 길어지면 처리가 늦어지는 문제 발생
-> 2버전에는 요청을 보낸 순서대로 응답하지 않아 콘텐츠를 빠르게 표시함

DNS 서버의 구조 (이름 해석)

- DNS : URL을 IP주소로 변환하는 서비스(시스템)
DNS서버는 전 세계에 흩어져 있고 모두 계층적으로 연결되어있음
서버에는 IP주소가 있어서 인터넷을 통해 웹 서버에 접속하여 웹 사이트를 볼 수 있다 
IP주소 -> 숫자로 구성 -> 기억하기 어려움
=> DNS의 이름 해석을 통해 주소의 IP주소를 식별함 
- 도메인 이름 : 컴퓨터나 네트워크를 식별하기 위해 붙여진 이름
- 호스트(서버)이름 : 도메인 이름 앞에 있는 www

메일 서버의 구조 (SMTP와 POP3)

- SMTP : 메일 보내는 데 사용되는 프로토콜 (포트번호=25)
- POP3 : 메일 받는 데 사용되는 프로토콜 (포트번호=110)

- 메일 서버에는 메일박스라는 메일을 보관해주는 기능이 있음
- POP3 -> 메일서버의 메일박스에서 메일을 가져와서 컴퓨터로 전송함 (사용자 인증 필요)

300x250