본문 바로가기
꾸준히

[TIL-176] 전이중 통신과 반이중 통신 그리고 허브, 스위치, 리트코드, 구간 탐색

by 무자비한 낭만주먹 2024. 1. 7.

[그림1]. 오늘도 감사한 공부 시작 ~

 

목차
0. 오늘의 학습 시간
1. 오늘 배운 것
2. 오늘의 알고리즘
3. 오늘의 CS
4. 오늘의 무자막 시청
5. 내일 할 일 (청사진)
6. 감사한 일

 

0. 오늘의 학습 시간
00:00 ~ 02:00(2시간): 오늘은 일찍 일어나서 새벽 공부 못할 거 같아 늦게 까지 공부하다 잤다.
11:30 ~  13:00(1시간30분): 점심으로 크래미랑 핫바 하나 먹고 공부했다.

 

1. 오늘 배운 것
1. TCP/IP 계층부터 스위치 까지의 대략적인 통신 흐름
2. 전이중 통신과 반이중 통신이 실제 쓰이는 곳에 대한 이해 (스위치, 허브)
3. 구간 탐색 공부
4. 리트코드

 

2. 오늘의 알고리즘
1. 구간 탐색 문제 풀이
2. 리트코드 문제 풀이

https://github.com/choichanhyeok/codetree-TILs/tree/main/231207

https://leetcode.com/problems/3sum/solutions/4375637/two-pointer/

 

two pointer? - undefined - LeetCode

View choichanhyeok's solution of undefined on LeetCode, the world's largest programming community.

leetcode.com

3. 이주의 CS
이번주는 모두의 네트워크 3장(: 물리 계층의 역할과 랜 카드의 구조) 진입

(2023-12-04)
- 데이터란 0과 1로 이루어진 신호를 이용한 "완전한 정보"의 조합으로 구성되어 있다.
- OSI 모델에서 이를 담당하는 곧은 맨 아래 "물리 계층"이다.
- 우리는 컴퓨터 통신을 위해 아날로그 신호를 디지털 신호로 변환한다.
- 아니 그럼 전기 신호는 아날로그 신호인데 어떻게 이진 신호를 전기 신호로 변환하는건가
- 이 역할을 해주는게 랜 카드이다. 랜 카드는 0과 1을 전기 신호로 변환해준다.
- 따라서 랜 카드가 속한 물리 계층은 "컴퓨터와 네트워크 장비 간에 전송되는 데이터를 전기 신호로 변환하는 계층"으로도 볼 수 있다. 

- 위에서 설명한 아날로그 신호(전기)가 실제 통신을 위해 지나가야 하는 길을 '전송 매체'라고 표현한다.
- 전송 매체는 크게 '유선'과 '무선'으로 나뉜다.
- 가장 많이 사용되는 건 '트위스트 페어 케이블이고 UTP와 STP가 있다.
- UTP는 실드가 없는 반면에 STP는 실드가 있어 외부 간섭(노이즈)에 강하다. 하지만 가격 또한 비싸서 사실 대부분 UTP를 사용한다
- *** 여기서 중요한게, 우리가 일반적으로 '랜 케이블'이라고 부르는 것들이 바로 UTP와STP다. ***
- 랜 케이블의 경우 '다이렉트 케이블'과 '크로스 케이블'로 분류할 수 있다. 차이점은 크로스 케이블의 경우 송수신측의 충돌을 막기 위해 선 번호를 교차해서 연결한다.

- 예전에는 리피터라는 장비를 사용해 "전기 신호를 정형하고 증폭"했다.
- 요즘은 다른 네트워크 장비가 리피터 기능을 지원해서 굳이 쓸 필요가 없다.
- 그 외에 '허브'라는 장비가 있다. 리피터와 다르게 포트가 여러개 있어서 여러대와 통신이 가능하다. 허브도 리피터와 마찬가지로 전기 신호를 정형하고 증폭하는 기능을 한다.
- 컴퓨터 여러대가 데이터를 주고받을 때 유용하지만 "1:1로 데이터를 전송하는게 아니라 연결된 모든 컴퓨터에  데이터를 전송하기에 주의"해야 한다. 이렇게 스스로 판단하지 않고 모든 포트로 전기 신호를 보내는 특징 떄문에 '더미 허브'라고도 불린다.
- 그 대책으로 나온게 스위치다.

(2023-12-05)
[데이터 링크 계층: 랜에서 데이터 전송하기 파트 진입]
- 물리 계층의 랜끼리 데이터를 주고 받으려면 아래서 두번째 계층인 "데이터 링크 계층"의 기술이 필요하다.
- 데이터 링크 계층은 네트워크 장비 간에 "신호를 주고 받는 규칙"을 정하는 계층
- 일반적으로 가장 많이 사용되는 규칙은 "이더넷"이다.   ** 미친 .. 이더넷이 이거였다고? **
- Q. 이더넷은 랜에서 적용되는 규칙인거네요 ?  A. 맞아요 ~ 이더넷은 허브와 같은 장비에 연결된 컴퓨터와 데이터를 주고 받을 때 사용해요
- 여기서 허브는 "전달받은 전기 신호를 복원시키고 해당 전기 신호를 전달받은 포트를 제외한 나머지 포트에 전달하는 기계"
- 그래서 연결된 모든 컴퓨터에 데이터를 보내버려서 특정 컴퓨터에만 데이터 보낼 수 없음. 그래서 못보게 하는 규칙을 정했는데 ..
- 그래서 보내려는 데이터에 "목적지 정보"를 추가해서 보내고, 그 이외의 컴퓨터는 데이터를 받더라도 무시하게 되어있음.
- 사실 안보내는게 아니라 받았는데 "무시"하도록 되어있는 것
- 또 여러대의 컴퓨터가 동시에 데이터를 보낼 수 있는데 이 경우에 "충돌"이 발생할 수 있어서 이더넷은 "여러 컴퓨터가 동시에 데이터를 전송해도 충돌이 일어나지 않는 구조"로 만들어졌다.
- 바로 이게 !!! ** 그 유명한 CSMA/CD ** 이다 !!
- CSMA/CD는 허브등의 장비의 특성상 동시에 여러 요청을 보낼 수 있는데 그로인해 발생하는 충돌 현상을 방지하기 위한 방법이다.
- 다만 아쉽게도 현재는 효율이 안좋다는 이유로 CSMA/CD를 쓰지 않고, "스위치"라는 네트워크 장비를 이용해 문제를 해결한다.
+ CSMA/CD에서 CS는 "데이터를 보내려고 하는 컴퓨터가 케이블에 신호가 흐르고 있는지 아닌지를 확인한다"라는 규칙이고 MA는 "케이블에 데이터가 흐르고 있지 않다면 데이터를 보내도 좋다"라는 규칙이다. CD는 "충돌이 발생하고 있는지를 확인한다"라는 규칙이다.

(2023-12-06)
[MAC 주소의 구조]
- 랜카드가 뭐였지? => 데이터를 0과 1의 신호로 변환하는 것
- 그 랜카드가 만들어질 때 정해지는 "물리적인 주소"가 바로 MAC주소인데, 결국 데이터와 물리적 신호 사이의  매핑을 하는 놈이니까 얘의 식별 값으로 통신 주체의 식별을 하기로 했구나!
- "00-23-AE-D0-7A-9A" 같은 48 비트 숫자로 구성되있고 저기 앞 3개16진수 번호는 랜카드를 만든 제조사 번호, 뒤에 3개가 제조사가 붙인 일련번호야.
- MAC주소는 TCP/IP 모델 기준 "네티워크 계층"에서 사용되는데 이 계층에서 이더넷 헤더와 트레일러를 붙인다.
- 저번에 말했듯이 이더넷은 "네트워크 장비들 사이에 신호를 주고받는 대표적인 규칙중에 하나"이고 이 규칙을 이용해 네트워크 장비끼리 통신하기 위해 네트워크 계층에서 MAC 주소와 함께 패키징한다. 
- 이더넷 헤더는 [목적지 MAC 주소(6byte)], [출발지 MAC 주소(6byte)], [유형(2byte)]의 총 14byte로 구성되어 있다.
- 그니까 정리하면 "네트워크 장비 끼리 통신하려면 규칙이 필요한데, 그 규칙 중에 이더넷이라는 규칙을 사용하기 위해 네트워크 장비 식별을 위한 랜카드의 식별번호기도 한 MAC 주소를 보내야한다" 라는게 본 절의 골조인 거 같다.
- 유형에는 "프로토콜의 종류를 식별하는 번호"가 들어가는데, 여기서 프로토콜이라 하면 상위 계층 프로토콜 종류를 나타낸다. 에컨대 ARP나 RARP, IPv4를 판별하기 위한 16진수 번호가 들어간다. ( => ** 왜 필요한거지? **, 검색해보가)
- 이제 여기에 데이터 전송 도충에 발생하는 오류 발생 확인을 위한 FCS를 추가해주는데(트레일러로서) 이렇게 트레일러까지 붙으면 드디어 네트워크 계층의 PDU인 "프레임"이라는 단위로 패키징 되는 것이다.
-이제 이 프레임을 전기 신호로 변환해 허브로 전달하면 허브는 모든 포트로 이 데이터를 전송한다. 만약에 이를 수신받은 컴퓨터들이 자신의 MAC주소가 아닌데 왔을 경우 그냥 데이터를 파기해버린다.
- 또 만약에 이 상황에서 데이터를 동시에 송수신해 문제가 발생했으면 CSMA/CD 규칙에 근거해 뒤에 보낸 컴퓨터가 잠시 기다렸다가 데이터를 다시 전송한다.

(2023-12-07)
[스위치의 구조]
- 어제까지는 데이터와 전기신호를 매핑해주는 LAN의 식별번호인 MAC을 이용해 허브를 사용하는 과정을 배웠다.
- 허브는 CSMA/CD라는 규칙을 이용해 충돌을 방지하는데, 이는 효율적이지 않은 방식이다.
- 그래서 최근에는 스위치라는 걸 사용한다. 스위치는 "데이터 링크 계층"에서 동작하고 "레이어 2 스위치", "스위치 허브"라고 불린다.
- 근데 허브랑 스위치는 기능이 완전 다르다.
- 스위치 내부에는 MAC 주소 테이블 이라는 게 존재하는데, 이 테이블은 [포트 번호] - [MAC 주소] 형태로 등록되어 있다. 결론은 "MAC 주소 테이블은 스위치의 포트 번호와 해당 포트에 연결되어 있는 컴퓨터의 MAC주소가 등록되어 있는 테이버테이스이다."
- 사실 스위치를 막 켰을 땐 아무것도 없는데 "데이터 링크" 계층의 PDU인 "프레임"이라는게 만들어져서 전송되면 그 과정에서 MAC주소 테이블을 보고 이미 등록 안되어 있으면 새로 추가 하는 방식으로 MAC주소와 포트를 함께 등록한다. 
- 이게 바로 허브(더미 허브)에는 없는 기능이다. => 스위치만 가지고 있는 "맥 주소 학습"이라는 기능
- ** 근데 사실 스위치도 연결된 모든 포트에 신호를 보내는 경우가 있다. 예컨대 A, B 컴퓨터에 대한 MAC 주소가 스위치의 MAC 주소 테이블에 없을 때 A가 B를 호출할 때 A의 MAC 주소는 현재 넘어온 "프레임"을 보고 저장하면 되지만 B는 알 수 없다. 그래서 연결된 모든 포트에 MAC주소를 요청하는 데이터(프레임)를 전송하는데 이런걸 ["플러딩(홍수)"] 라고 한다.**

[전이중 통신과 반이중 통신]
- 전이중, 반이중 통신 같은 개념은 "데이터가 충돌하지 않는 구조"를 고민하는 과정에서 나왔다.
- 전이중 통신 방식은 데이터의 송수신을 "동시에" 통신하는 방식이고
- 반이중 통신 방식은 데이터의 송수신을 "번갈아가며" 통신하는 방식이다.
- 그냥 딱 봤을 땐 전이중 통신 방식(휴대폰 같은)게 좋아 보이지만 사실 이를 구현하기 위해 케이블에 필요한 선이 4쌍이 필요하다.
- 앞서 설명한 허브에서 충돌이 났던건 "송수신"이 나눠져 있지 않기 때문에 회선 하나를 송신, 수신 번갈아가면서 사용하는 "반이중 통신 방식"을 사용해서 그런거였다.
- 반면 스위치는 전이중 통신 방식이었어서, 충돌 없이 데이터를 주고받을 수 있었던 거였다.
- ** 이런 이유로 최근에는 "허브 대신 스위치"를 사용하는게 표준이다. 대부분 네트워크 업체들도 허브 안팔고 주로 스위치만 판다 **
- 충돌 도메인이란 걸 들어 봤는가? 앞서 반이중 통신 방식으로 통신할 때 "충돌"이 발생하는데 이 때 그 영향이 미치는 범위를 "충돌 도메인" 이라고 한다.
- 허브의 경우에는 어이없게도 충돌 도메인이 포트에 연결된 모든 컴퓨터에 미친다.
- 반면 스위치는 충돌 도메인의 범위는 각 포트에 컴퓨터들과 1:1 정도이다.
- 충돌 도메인의 범위가 넓을수록 네트워크가 지연되므로, 충돌 도메인의 범위는 네트워크 효율에 반비례한다.

*** ARP 공부해보기 ***

 

4. 오늘의 무자막 시청
오늘의 영상: 라따뚜이 (초반)
레미가 요리 공부하겠다고 할머니네 주방에 숨어들어서 소스 찾아보고 있다가 할머니한테 들켰다. 근데 할머니가 샷건을 꺼내서 레미랑 친구한테 미친듯이 쏘다가 천장을 부쉈는데, 알고보니까 거기가 레미네 쥐들이 모두 살던 곳이이어서 쥐들이 전부 도망가게 됐다. 레미는 도망치다 하수구에 빨려 들어가 처음 보는 집에 들어가게된다.

 

5. 내일 할 일 (청사진)
1. 구간 칠하기에서 방향 값이 주어질 떄 직접 특정 배열에 칠하는 경우와 칠해지는 구간 정보 추출해서 풀이하는 방법간의 차이 분석
2. BufferedReader, BufferedWriter, Stringbuilder, Scanner의 차이 분석
3. 네트워크 기초

 

6. 감사한 일
오늘 회식이어서 소고기를 배 터지게 먹었다.  사실 소고기를 배 터지게 먹은 것 보다 사람 생각하는게 다 똑같구나 라는 배움을 얻은 것 만으로도 감사하다.

 

 

 

오늘 하루도 공부할 수 있어 크게 감사합니다

2023-12-07 개발자 최찬혁