✅ 한 것들
📖 모두의 네트워크 기초
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
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 무선 공유기가 응답 후 인증 방식 확인
- 클라가 무선 공유기에 연결 요청하고 승인 받음
무선 공유기 여러 대 두면 채널 간섭 일어날 수 있다.
서로 다른 구격이면 주파수가 달라서 간섭 발생 안 한다
⚔️ 백준
11041 이항 계수 3
https://velog.io/@junttang/BOJ-11401-이항-계수-3-해결-전략-C
https://velog.io/@ledcost/백준-11401-파이썬-이항-계수-3-골드1-분할-정복
- (이상적) 풀이 흐름 : 파스칼 삼각형 dp or 팩토리얼 직접 계산 -> dp는 너무 많고, 팩토리얼 계산은 나눗셈이라 나머지 연산이 어려움 -> 페르마의 소정리 사용해야 함
- 1,000,000,007이 소수인 건 어케 안다는 거지? : 웰논임 ㅅㄱ