Skip to content

Commit

Permalink
Merge pull request #31 from monthly-cs/playhuck
Browse files Browse the repository at this point in the history
2월 4주차 회고
  • Loading branch information
playhuck authored Feb 24, 2024
2 parents f41de82 + 4210f2b commit 23b135d
Show file tree
Hide file tree
Showing 16 changed files with 1,508 additions and 0 deletions.
94 changes: 94 additions & 0 deletions docs/playhuck/2024-01-24_[1장] 이더넷 네트워크.md.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
회사 동료분과 스터디를 시작하기로 했는데

거창한 느낌으로 시작하는 것은 아니었고,

뭐든 꾸준한게 좋을 것 같아서 시작했습니다.

대부분의 책을 읽고 난 후, 필기에 가까운 무언가를 작성하곤 했는데 이번 스터디에선

간단한 감상평을 통해 회고를 진행하기로 결정됐습니다.

첫 날 TCP/IP와 OSI 7계층에 대해서 봤는데 흔하다면 흔한 얘기라고 생각했습니다.

인상 깊었던 것은, 책을 보는 내내 이더넷 네트워크를 대부분 채용하기 때문에

현재는 크게 살펴볼 건 없다는 식으로 쓰여져 있던 것이 인상 깊어 이더넷 네트워크를 찾아보기로 결정 했습니다.

### **이더넷 네트워크(유선 네트워크)**

---

**What is Ethernet?**

---

일반적으로 가정에 보급되어 있는 네트워크는 이더넷 기반 인터페이스라고 합니다.

이더넷(Ethernet)은 LAN(Local Area Network)에서 가장 널리 사용되는 유선 네트워크 기술 중 하나입니다. 이더넷은 네트워크 기술 중 하나로서 OSI 7계층 중 피지컬 계층인 물리 계층에서 신호와 배선, 데이터 링크 계층에서 MAC 패킷과 프로토콜 형식을 정의합니다.

이더넷은 네트워크에 연결된 각 기기들이 48비트 길이의 고유의 MAC 주소를 가지고 이 주소를 이용해 상호간에 데이터를 주고 받을 수 있도록 만들어졌으며, 이더넷은 CSMA/CD 프로토콜을 사용합니다.

이더넷은 LAN을 위해 개발된 유선 네트워크 기술이며 IEEE 802.3에 표준으로 정의되어 있습니다.

**CSMA/CD(Carrier Sense Multiple Access/Collision Detection) 프로토콜?**

---

CSMA/CD(Carrier Sense Multiple Access/Collision Detection) 프로토콜은 LAN(Local Area Network)에서 통신하는 데 사용되는 이더넷 프로토콜

1. **캐리어 센스 (Carrier Sense):**
- 통신하려는 장치는 네트워크 상의 캐리어(신호)를 감지합니다.
- 캐리어를 감지하여 네트워크가 현재 사용 중인지를 확인합니다.
2. **다중 접근 (Multiple Access):**
- 여러 디바이스가 동시에 네트워크에 접근할 수 있습니다.
3. **충돌 감지 (Collision Detection):**
- 캐리어를 감지한 디바이스는 데이터를 보내기 전에 캐리어가 사용 중인지를 확인합니다.
- 다른 디바이스가 동시에 데이터를 전송하는 충돌이 발생하면, 충돌을 감지하고 데이터 전송을 중지합니다.
4. **충돌 해결:**
- 충돌이 발생한 경우, 각 디바이스는 일정한 시간 동안 기다린 후 재전송을 시도합니다.
- 재전송 시에는 랜덤한 시간에 다시 캐리어를 감지하고 전송을 시도합니다.
5. **충돌 허용 한계:**
- 충돌이 반복적으로 발생하면 네트워크 간 연결이 끊길 수 있습니다.
- 전송 충돌이 15회 이상 발생하면 네트워크에서 디바이스가 분리됩니다.

**Pros**

---

1. **저렴한 비용:**
- 이더넷은 비용 효율적이며 상대적으로 저렴한 네트워크 솔루션을 제공합니다.
- 네트워크를 구성하는 데 필요한 하드웨어와 케이블의 가격이 비교적 저렴하며, 다양한 벤더에서 호환 가능한 장비를 공급합니다.
2. **높은 대역폭:**
- 이더넷은 높은 대역폭을 지원하여 데이터를 빠르게 전송할 수 있습니다.
- 기술의 진화로 10Mbps부터 100Gbps 이상까지 다양한 속도의 이더넷이 개발되어 네트워크 성능을 향상시켰습니다.
3. **유연성:**
- 이더넷은 유연한 구조로 다양한 토폴로지(topology)와 장비 간 연결 방식을 지원합니다.
- 스타, 버스, 링, 트리 등 다양한 형태의 네트워크 구성이 가능하며, 새로운 디바이스를 추가하거나 기존 디바이스를 업그레이드하기 쉽습니다.
4. **네트워크 장비 호환성:**
- 이더넷은 표준화되어 있어 다양한 벤더의 네트워크 장비들이 호환 가능합니다.
- 이로 인해 기업은 다양한 공급업체의 제품을 혼합하여 사용할 수 있으며, 시장 경쟁으로 인해 가격이 경쟁력을 유지합니다.
5. **간편한 설치와 유지보수:**
- 이더넷은 간단한 구조로 인해 쉽게 설치하고 유지보수할 수 있습니다.
- 기본적인 연결 및 설정이 쉽게 이루어지며, 문제가 발생할 경우에도 해결이 비교적 용이합니다.
6. **네트워크 관리 및 표준:**
- 이더넷은 표준이 확립되어 있어 네트워크 관리 및 유지보수가 편리합니다.
- 표준은 규모가 큰 네트워크에서 일관된 구현과 운영을 지원하며, 호환성과 상호운용성을 강화합니다.

**Cons**

---

1. **충돌 및 혼잡:**
- 이더넷은 CSMA/CD 프로토콜을 사용하여 충돌을 감지하고 해결합니다. 그러나 높은 트래픽이나 혼잡 상태에서는 충돌이 증가하고 성능이 감소할 수 있습니다.
2. **유선 구조:**
- 이더넷은 주로 유선 기술이기 때문에 케이블 배선이 필요합니다. 이는 유연성이 떨어지고 설치 및 유지보수 비용이 상승할 수 있습니다.
3. **속도의 한계:**
- 비록 이더넷이 다양한 속도를 지원하고 있지만, 무선 기술 등 다른 기술에 비해 속도 면에서 한계가 있을 수 있습니다.
4. **보안 문제:**
- 이더넷은 물리적인 케이블을 통해 연결되어 있기 때문에 외부로부터의 물리적인 접근을 막기 어려울 수 있습니다. 또한 스니핑(Sniffing)과 같은 네트워크 상에서의 보안 문제에 취약할 수 있습니다.
5. **전력 소모:**
- 일부 무선 기술에 비해 전력 소모가 높을 수 있습니다. 특히 대규모 네트워크에서는 전력 소모가 중요한 고려 요소가 될 수 있습니다.
6. **유선 연결의 제약:**
- 유선 이더넷은 연결된 장치 간의 물리적인 케이블이 필요하므로 이동성이나 휴대성이 필요한 환경에는 적합하지 않을 수 있습니다.
7. **네트워크 크기 제한:**
- 대규모 네트워크에서는 성능 및 충돌 관리에 어려움이 있을 수 있으며, 더 복잡한 토폴로지나 확장성이 떨어지는 면이 있을 수 있습니다.
12 changes: 12 additions & 0 deletions docs/playhuck/2024-01-25_[2장] 허브와 스위치.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<img src="https://github.com/monthly-cs/2024-01-network/assets/105256335/06b03515-7566-4b4a-b226-60186b8b9931">

2장에선, 네트워크의 연결과 구성요소를 주로 나왔는데 크게 관심 있는 분야도 아니었고,

부족하다고 느꼈던 지식은 아니라 가볍게 읽었다.

허브와 스위치의 차이에 대해서 나왔는데, 중계 기능이 없는 허브는 점점 사용되지 않고

중계 기능이 있는 스위치(허브 스위치)는 점점 사용한다고 하니

결국 Redirect한 움직임을 보여줄 수 있는 무언가를 통해 신뢰있는 통신을 구축하는 것이 중요한 것 같다. 1장과 2장의 내용을 통해 네트워크 통신의 흐름은 결국 특정한 신호를 인지하여
올바른 곳으로 빠르게 데이터를 보내주는 것이라고 생각해 점점 더 네트워크의 데이터 통신 흐름에 대한 마인드 셋이 넓어지고 있다고 느꼈다.
39 changes: 39 additions & 0 deletions docs/playhuck/2024-01-25_[3장] Mac 주소와 IP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<img src="https://github.com/monthly-cs/2024-01-network/assets/105256335/228943be-54d7-44bf-b0f4-c5abf9f836d5">

3장에서는 네트워크 통신에 필요한 주소와 캐스트 등을 다룬다.

BUM 트래픽도 흥미 있었지만

- B (BroadCast)
- U (Unknown UniCast)
- 유니 캐스트와 같은 동작을 하지만, 스위치가 목적지의 주소를 학습하지 못해 BroadCast와 같은 동작을 하게된다.
- M (MultiCasst)

IT 네트워크를 다루다보면, 흔히 접하고 또 중요한 MAC주소와 IP주소가 더 흥미로웠다.

**MAC 주소**

---

MAC 주소는 일반적으로 OUI 주소와 UAA 주소로 나뉜다.

- `**OUI**` : 국제 적인 인터넷 규약을 지정하는 **전기전자공학자협회(IEEE)**에서 각 전자제품 제조사에 할당하는 주소
- **`UAA`** : 각 제조사에서 제품에 사용하는 일련번호

외부 네트워크로부터 들어온 패킷을 OSI 2계층인 데이터 링크 계층의 MAC 주소를 통해 상위 계층으로 패킷 정보를 넘겨주는 식으로 동작한다.

**IP 주소**

---

일반적으로 OSI 7계층에서 특정한 주소를 갖는 계층은 2계층인 데이터 링크 계층의 MAC 주소와

3 계층인 네트워크 계층의 **IP 주소**다.

클래스 기반의 IP 주소와, 클래스리스 기반의 IP 주소가 있는데 현재는 클래스 리스 기반으로 사용한다고 한다.

회사에서 VPC 관련 공부를 할 때 CIDR기반으로 AWS VPC 서브넷을 생성했는데,

어떤 원리로 돌아가고 어떻게 구분할 수 있는지 체계적으로 배울 수 있어서 책을 읽는 보람이 있는 기분이랄까 그런 생각을 했다.

한 번 본걸로는 잘 이해가 안가서 ,다시 한 번 볼 예정
13 changes: 13 additions & 0 deletions docs/playhuck/2024-01-29_[3장] 서브넷.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<img src="https://github.com/monthly-cs/2024-01-network/assets/105256335/99a530b1-bd50-473f-a0c0-b68b2d459af2">

마찬가지로 3장에 대해서 써보려고 한다.

3장에선 서브넷에 대해 나오는데, 회사에서 VPC를 깔며 VPC와 서브넷을 고르고

그에 맞는 IP를 할당하여 작업을 했던 것이 떠올랐다.

생각보다 체계적으로 서브넷에 대해서 다루고 있는데, 몹시 어렵다.

한 번 읽는 것으론 어려울 것 같으며 기회가 될 때마다 읽어줘야 이해할 수 있을 것 같다.

IP 주소의 각 의미와 계산 방법에 대해서 알려주고 있지만, 지능이 모자라서 이해하지 못하고 있다.
59 changes: 59 additions & 0 deletions docs/playhuck/2024-02-07_3장[TCPUDP].md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<img src="https://github.com/monthly-cs/2024-01-network/assets/105256335/092bfbb2-28ef-4512-a8cd-09962967b707">

### 3.4 TCP와 UDP

---

각 계층에서 사용한 정보? 수신측의 동일한 계층에서 사용하기 위한 정보다.

TCP/UDP는 4계층이다.

4계층의 디캡슐레이션 과정에서 상위 계층의 목적지를 찾아갈 수 있는 것은 PORT이다.

잘 알려진 포트(Well Known)

- HTTP TCP 80
- HTTPS TCP 443
- SMTP TCP 25 …

공식적으로 사용하는, 포트번호는 1024 ~ 49151 / 동적, 사설 임시 포트 49152 ~ 65535

그러니까 최대 포트는 65535까지다.

**TCP**

---

TCP 프로토콜은 신뢰할 수 없는 public에서도 정보유실 없는 통신을 보장

패킷에 번호를 부여하고 잘 전송됐는지 응답한다.

104Page 패킷 순서, 응답 번호는 다시한 번 보는 것이 좋을 것 같다.

네트워크 상태가 안좋으면 패킷 유실 가능성이 올라간다.

패킷 크기를 정해야 하는데, 한 번에 데이터를 받을 수 있는 데이터 크기를 **윈도 사이즈**라고 한다.

이 윈도 사이즈를 조절하는 것을 **슬라이딩 윈도**라고 한다.

TCP 헤더에서 윈도 사이즈로 표현가능한 최대 크기 = 2^16

요즘은 네트워크 안정성도 올라가고 하드웨어도 올라가서, 윈도 사이즈를 늘려야 하는데 TCP 헤더는 변경 불가능 하니 헤더 사이즈를 늘리지 않고 뒤의 숫자를 무시하는 방법으로 윈도 사이즈를 증가시켜 통신한다.

TCP 데이터 유실이 발생하면 윈도 사이즈를 절반으로 떨어트리고, 천천히 늘린다.

**UDP**

---

TCP와 달리 4계층 특징이 거의 없다.

3 핸드 셰이크, 패킷 번호 등등.. TCP에서 안전한 통신을 위해 했던 것은 UDP와 관련이 없다.

UDP는 음성 데이터나 실시간 스트리밍과 같이 시간에 민감한 프로토콜이나 Application을 사용하는 경우나 사내 방송이나 응답 받기 어려운 환경에서 사용된다. 미디어 데이터가 시,청각에 응답속도가 민감하기 때문이다.

대표적으로 화상 회의, 이런 경우 데이터가 일부 유실되더라도 그냥 유실된 상태로 처리한다.

3 핸드셰이크는 없지만, 첫 데이터는 리소스 확보를 위해 인터럽트를 거는 용도로 사용되고 유실된다.

한편, 같은 동영상이나 화상이라도 단일 시청자를 위해서라면 TCP를 사용한다.
49 changes: 49 additions & 0 deletions docs/playhuck/2024-02-08_[3장]_ARP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<img src="https://github.com/monthly-cs/2024-01-network/assets/105256335/da93685f-cb81-482a-a922-410f3b561684">

### 3.5 ARP(Address Resolution Protocol)

---

2계층의 MAC 주소와 3 계층의 IP 주소를 통해 목적지를 찾아가지만, 사실

MAC 주소와 IP 주소간의 상관관계는 존재하지 않는다.

MAC 주소를 알아내기 위해 사용하는 프로토콜이 바로 ARP다.

IP주소와 MAC 주소간 상관관계가 없기 때문에 두 주소를 연결시켜주는 매커니즘이 필요한데 이 때 사용되는 것이 ARP다.

ARP가 특정한 무언가를 위해서만 동작한다기 보다는 물리주소와 논리주소를 연결할 때 사용한다.

패킷은 한번에 보낼 수 있는 양이 정해져 있기 때문에, 패킷을 잘라보내게 되는데 잘라보낼 때마다 ARP 브로드캐스트를 수행하면 네트워크 효율이 떨어지게 된다. 그래서 보통 ARP 브로드캐스트 정보를 메모리에 저장해두고 다시 사용한다.

시간이 지나면 이러한 정보는 삭제된다.

ARP는 내가 통신해야 할 상대방의 MAC 주소를 모를 때 ARP 브로드캐스트로 상대방의 IP 주소로 MAC 주소를 물어볼 목적으로 만들어진 프로토콜이다.

### 3.6 서브넷과 게이트웨이

---

초기에는 LAN(로컬 네트워크)가 중요했지만, 이제는 원격지와의 통신이 중요해 졌다.

원격지 네트워크와의 통신에 사용하는 장비를 게이트웨이라고 부르고 3계층 장비가 이 역할을 할 수 있다.

로컬 네트워크에서는 ARP 브로드캐스트를 통해 도착지 MAC 주소를 학습할 수 있고,

이 MAC 주소를 이용해 직접 통신할 수 있지만 원격 네트워크 통신은 네트워크를 넘어 전달되지 못하는 브로드캐스트의 성질 때문에 네트워크 장비인 게이트웨이의 도움이 필요하다.

네트워크 간 서로 다른 네트워크의 통신을 구분하기 위해 사용되는 것이 서브넷 마스크다.

서브넷 마스크 연산 결과값을 통해 로컬 통신과 원격지 통신을 구분한다.

로컬 네트워크에서 직접 통신할 경우 라우터와 같은 3계층 장비의 도움 없이도 통신할 수 있다.

일반적으로 MAC 주소인 물리적 주소만으로 통신할 수 있다면 2계층 통신이고,

라우터가 필요하며 원격지 통신을 할 경우 3계층 정보(IP)까지 확인해야 한다면 3계층 통신으로 본다.



결론적으로, 2계층 통신은 상대방의 MAC 주소를 알아내기 위해 ARP 브로드캐스트를 이용하고 상대방의 MAC 주소를 알아내고 패킷이 캡슐화되면서 통신이 시작되고

외부 네트워크가 필요하여 자신이 직접 요청을 보낼 수 없다거 판단하고 ARP 요청을 기본 게이트웨이 IP주소로 요청하면 3계층 통신이다.
61 changes: 61 additions & 0 deletions docs/playhuck/2024-02-13_[4장] 스위치.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<img src="https://github.com/monthly-cs/2024-01-network/assets/105256335/deaebe84-1a77-4d9e-8959-de0f8df7c263">

3장에서 다뤘던 MAC 주소는 2계층의 핵심 네트워크 장비인 스위치와 함께 동작한다.

스위치는 네트워크 중간에서 패킷을 받아 필요한 곳에만 보내주는 네트워크의 중재자다.

### 4.1 스위치 장비 동작

---

과거 네트워크는 패킷을 전송할 때 서로 경합해 네트워크 성능 저하가 심했지만,

이런 성능 저하를 막고 통신하도록 도와주는 것이 바로 스위치다.

이런 동작이 가능한 이유는, MAC 주소와 단말이 위치하는 인터페이스 정보를 매핑한 MAC 주소 테이블을 갖고 있어서 가능하다.

**4.1.1 플러딩**

---

스위치가 허브와 같이 모든 포트로 패킷을 흘리는 것을 플러딩이라고 한다.

MAC 주소 테이블에 매칭되는게 있다면 매칭되는 곳으로, 아니라면 모든 포트로 패킷을 흘린다.

**4.1.2 어드레스 러닝**

---

MAC 주소테이블을 만드는 과정을 어드레스 러닝이라고 한다.

어드레스 러닝은 출발지 MAC 주소를 사용하기 때문에 브로드캐스트나 멀티캐스트에 대한 MAC 주소를 학습할 수 없다.

두 가지 모두 목적지 MAC 주소 필드에서만 사용하기 때문

**4.1.3 포워딩 / 필터링**

---

MAC 테이블과 매칭되는게 있다면 그쪽으로 보내는 것이 포워딩,

다른 포트로는 보내지 않기 때문에 필터링

스위치는 일반적인 유니캐스트에 대해서만 포워딩과 필터링 작업을 한다.

### 4.2 VLAN

---

VLAN은 물리적 배치와 상관없이 LAN을 논리적으로 분할, 구성하는 기술이다.

### 4.3 STP

---

SPOF(단일 장애점)이란 하나의 시스템이나 구성 요소의 문제가 전체 시스템의 마비로 이어지는 경우를 말한다.

네트워크에서도 이런 장애점을 해결하기 위해 스위치 두 대로 네트워크를 디자인한다.

두 대 이상의 스위치로 디자인하면 패킷이 네트워크를 따라 계속 전송되면서 네트워크를 마비시킬 수 있다.

이런 상황을 네트워크 루프라고 한다.
25 changes: 25 additions & 0 deletions docs/playhuck/2024-02-14_[4장] STP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<img src="https://github.com/monthly-cs/2024-01-network/assets/105256335/448ec969-da9c-4ff7-9f25-1a2af7f5f473">

**4.3.1 루프란?**

---

루프로 발생한 문제는? 대부분 브로드캐스트 스톰으로 인한 문제다.

3계층에는 TTL이라는 패킷 수명을 가지고 있지만, 스위치가 확인하는 2계층 헤더 패킷에는 TTL이 없다.

루프구조 상태에서는 문제가 유니캐스트에도 발생할 수 있다.

**4.3.2 STP**

---

이런 루프가 발생했을 때, 루프를 자동 감지해 포트를 차단하고 장애로 인한 우회로가 없을 때 차단된 포트를 스위치 스스로 풀어주는 것이 STP다.

STP는 스패닝 트리 프로토콜로, 루프를 막기 위해선 전체 스위치가 어떤식으로 연결됐는지 알아야 한다.

스위치는 BPDU라는 프로토콜을 통해 스위치 간에 정보를 전달하고 이렇게 수집된 정보를 토대로 네트워크 트리를 만들어 루프 구간을 확인한다.

스위치에 신규 장비를 붙이면 통신하는데 50초 가량 걸린다. 루프를 예방하기 위한 방어적 동작인데 새로 연결된 단말이 스위치일 가능성을 염려해 BPDU를 기다려 스위치인지 확인한다.

STP가 활성화된 경우 스위치 포트는 곧바로 포워딩 상태가 되지 않는다.
Loading

0 comments on commit 23b135d

Please sign in to comment.