250721

lililllilillll·2025년 7월 21일

개발 일지

목록 보기
239/350

✅ 한 것들


  • 모두의 네트워크 기초
  • 백준


📖 모두의 네트워크 기초


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이 소수인 건 어케 안다는 거지? : 웰논임 ㅅㄱ


profile
너 정말 **핵심**을 찔렀어

0개의 댓글