네트워크

kangking·2024년 4월 30일
0

기반기술

목록 보기
2/14
post-thumbnail

네트워크

기본 용어 3가지

  • IP 주소란?

    멀리 있는 컴퓨터를 찾아가기 위한 주소

  • 포트번호

    남의 컴퓨터가 내 컴퓨터에서 실행 중인 특정 프로그램을 찾아 가기 위한 번호

  • Pid

    내 컴퓨터가 내 컴퓨터에서 실행중인 프로그램을 구별하기 위한 번호


네트워크란?

여러대의 컴퓨터가 연결된 것

  • 인터넷은 전 세계적으로 가장 크게 연결된 네트워크이다.

네트워크의 분류(크기)

  • LAN(Local Area Network)

    가까운 지역을 하나로 묶은 네트워크
    (가깝다? => 하나의 네트워크 장치에 연결)

  • WAN(Wide Area Network)

    멀리있는 지역을 한데 묶은 네트워크
    (LAN 여러개를 다시 하나로 묶은 것)


네트워크의 통신 방식

  • 유니캐스트(*가장 많음)

    1:1로 통신

  • 멀티캐스트

    특정 다수와 1:N으로 통신

  • 브로드캐스트

    네트워크에 있는 모든 대상과 통신

네트워크 프로토콜

프로토콜이란?

일종의 약속, 어떤 노드가 누구에게 무엇을 어떻게 보내는지 작성하기 위한 양식

네트워크 프로토콜의 종류

  • 맥주소
    Ethernet
  • IP주소
    ICMP
    IPv4
    ARP
  • 포트 번호
    TCP, UDP
  • HTTP
무엇을 기준으로 나눴는가?

패킷

패킷이란?

네트워크를 통해 전달되는 데이터(여러번 포장된 택배상자와 유사하다)

패킷은 | 헤더 | 페이로드 | 풋터 |의 형태로 구성되며,
여러 프로토콜로 캡슐화 되어 있다.


OSI 7Layer

2계층

  • 2계층의 기능

    하나의 네트워크 대역에서 장비간 데이터를 전달하는 역할을 수행하며 오류제어, 흐름제어도 수행한다.

  • 2계층에서 사용하는 주소(물리적인 주소)

    • MAC주소

      LAN통신에서 사용

3계층

  • 3계층의 기능

    다른 네트워크 대역까지 어떻게 데이터를 전달할지 제어하는 일을 담당 (발신에서 착신까지의 패킷의 경로를 제어)

  • 3계층에서 사용하는 주소

    • IP주소

      WAN통신에서 사용 (IP주소, 서브넷 마스크, 게이트웨이 3가지를 묶어서 같이 사용한다)

    • Classful IP주소

      A-E클래스까지 나누며 A부터 네트워크 구분이 한 필드씩 늘어나는 구조(낭비가 심하다!!)

    • Classless IP주소

      IP주소를 더 작은 단위로 나눠서 구분

우선은 IP주소와 서브넷 마스크를 왜 같이 쓰는지 정도만 알면 된다. (더 알면 더 좋음)

  • 사설IP와 공인IP(공유기)

    개별 컴퓨터는 각자 다른 사설 IP를 갖고 있지만 공유기를 통해 네트워킹을 할때는 공유기가 부여받은 IP주소로 통일되어 통신한다 (중요!)

    공유기는 보통 내부(사설IP), 외부(공인IP) 2개의 IP주소를 갖고 있다.

공유기는 클라이언트가 서버에 요청을 하는 것만 처리해주기 때문에 외부 서버에서 클라이언트에 먼저 요청할 수 없음

=> 클라이언트가 요청을 하면 공유기가 저장했다가 응답을 받으면 해당 요청을 소거함

=> 공유기를 사용하더라도 외부에서 먼저 요청이 가능하도록 설정할 줄 알아야 한다!

  • 네트워크 설정 변경방법

    1. 사용중인 네트워크에 속성에 진입
    1. 인터넷 프로토콜 버전 설정(더블 클릭)
    1. 서버는 IP가 바뀌면 안되기 떄문에 자동으로 받도록 되어있는 설정을 고정으로 변경시킨다.
    1. ip,서브넷 마스크, 게이트웨이를 설정한다 (연결하려는 네트워크 장비에 맞게 바꿔야함, 보통 앞자리는 같게하고 뒷자리를 다르게 한다)
      => 보통 앞자리를 대역이라고 이야기함
  • 서브넷 마스크

    IP주소를 네트워크 포지션 / 호스트 포션으로 나누기 위해 사용하는 숫자 조합

    서브넷 마스크는 IP와 같은 길이의 비트로 표시되며 1은 네트워크, 0은 호스트를 나타낸다.

    서브넷 마스크가 255.255.255.0 이면
    1111 1111.1111 1111.1111 1111.0000 0000으로
    IP주소의 앞 3번째 클래스까지 네트워크를 나타내고 마지막 클래스가 호스트를 나타낸다. (256^3개의 네트워크와 256개의 호스트를 가질 수 있음)

  • 기본 게이트웨이

    통신을 위해 나갈 때 반드시 거치도록 하는 주소(공유기 주소)

4계층

  • 4계층의 기능

    전송 계층으로 송신자와 수신자의 프로세스를 연결하는 통신 서비스를 제공한다. (신뢰성, 흐름제어, 다중화 등 편리한 서비스 제공)

  • 포트 번호

    하나의 포트는 하나의 프로세스만 사용해야 한다.

    포트번호가 일반적으로 정해져 있지만 반드시 지킬 필요는 없다
    (웹은 80번, 안쓴다면 연결시 포트번호를 명시해줘야함)

    미리 선점해서 사용하고 있는 포트번호도 있다

    클라이언트는 주로 약 5만 ~ 6만 번호대를 매번 바꿔가며 사용한다.

  • TCP

    통신하고자 하는 양쪽 단말(End Point)가 서로 준비 되었는지, 통신간 빠진 데이터는 없는지 등을 체크하는 안전한 통신 프로토콜

    웹으로 주고받는 데이터는 대부분 TCP이다.

    • TCP 상태 전이도


      실선은 서버, 점선은 클라이언트
      Listen: 응답 대기 상태
      ESTABLISHED: 상호 연결 상태
  • UDP

    보안과 신뢰성보다 전송 속도와 효율성을 중시하는 데이터 전송 프로토콜

7계층(HTTP)

  • 7계층의 기능

    프론트 엔드와 관련된 코드를 서버로부터 받아오기 위한 통신 규약 (HTML, CSS, JS등)

  • HTTP 프로토콜의 구조

    Request Line이 중요하다!

  • Request Line 구조

  • HTTP 요청 메소드

    GET: 클라이언트가 서버에 문서룰 읽어올 때 사용
    (주소에 데이터가 포함)
    POST: 클라이언트가 서버에 정보를 제공할 때 사용
    (주소에 데이터가 포함되지 않고 Body에 담는다)

GET은 주로 간단한 데이터, POST는 중요하거나 크기가 큰 데이터에 주로 사용한다.

  • URI

    scheme://host[:port][/path][?query]의 형태

  • 도메인 주소

    IP주소를 글자 형식의 주소로 매핑시킨 것

DNS서버는 도메인 이름을 네트워크 주소로 바꾸거나 그 반대 변환을 수행하도록 개발되었다.

전 세계에 DNS호스팅을 해주는 곳은 많다.

DNS 8.8.8.8은 구글 DNS (아래 이미지의 로컬 DNS에 해당)

DNS 서버

루트 DNS 서버는 전 세계 13곳으로 한정됨.
각 DNS 서버는 하위의 DNS 서버를 관리하며 도메인을 쪼개서 매핑함

HTTP 응답 프로토콜

  • 200번대

    200 OK: 클라이언트 요청 성공

  • 400번대(클라이언트 문제)

    403 Forbidden: 클라이언트가 권한이 없는 페이지를 요청했을 때

    404 Not Found: 클라이언트가 서버에 없는 페이지를 요청했을 때

  • 500번대(서버 문제)

    500 Interner Server Error: 서버의 일부가 멈췄거나 설정의 오류가 발생(코드 문제)

    503 Service Unavailable: 최대 세션 수를 초과했을 때

  • 서버를 실행하면 프로세스에 잘 올라 netstat -ano를 통해 웹서버 포트인 80번 포트가 LISTENING상태인지 확인해야 한다.


실습1

각자 nginx를 통해 서버를 켜고 옆 자리의 html 디렉토리에 있는 .txt파일 요청해서 받아보기

주소창에 옆 자리 IP:80/[파일명]의 형태로 호출하여 성공

  • 호출이 안되면 방화벽 확인(원래는 설정하는데 편의상 해제)
  • 서버가 켜지면 프로세스에 잘 올라갔는지, 설정한 포트에서 LISTENING상태인지 반드시 확인하기
  • cmd창에 ping [ip]로 연결 확인해보기

발생했던 문제들

  • 방화벽 미해제로 연결 불가
  • 공유기에서 자동으로 IP주소를 받도록 설정한 pc들이 있어서 부여받은 번호로 설정한 사람들과 꼬임이 있었음

실습2

VMware에 설치해둔 centOS 리눅스로 IP주소 수동설정 하고 구글 DNS에 ping 날려보기

리눅스에서 ipconfig = ifconfig, ip addr (net-tools 다운 필요)

다운로드 명령어: yum install net-tools

centOS ip 수동으로 설정하는 방법:

  1. vi로 /etc/sysconfig/network-scripts 설정 편집
  1. 편집해야 할 설정:
  • BOOTPROTO=static | (static:수동, dhcp: 자동)
  • ONBOOT=yes
  • IPADDR=[내가 쓸 주소]
  • NETMASK=[가상 공유기 서브넷 마스크 주소]
  • GATEWAY=[가상 공유기 주소]
  • DNS1=8.8.8.8 (테스트를 위한 구글DNS)

실습3(포트포워딩)

옆 사람의 ip주소:포트로 접근하여 VM에서 실행중인 서버에서 파일 다운받아 보기

Virtual Network Editor를 관리자 권한으로 실행

VMware의 가상 공유기의 공인 ip는 내 컴퓨터의 ip와 동일하기 때문에 내 컴퓨터의 ip를 입력하면 가상 공유기의 공인 ip에 접근할 수 있다.

하지만 요청없이 접근한 것이기 때문에 해당 게이트웨이를 통해 외부와 통신하는 내부 호스트들에 접근할 순 없는데, 이때 가상 공유기의 특정 포트에 미리 연결해둘 내부 호스트의 주소를 지정해두고 해당 포트로 접근시 자동으로 매핑되도록 설정할 수 있다.

가상 공유기의 1175번 포트로 접근시 미리 설정해둔 내부 호스트의 특정 포트로 매핑하는 속성 추가


의문?

보통 웹의경우 80으로 포트포워딩을 해두면 따로 포트를 명시하지 않아도 자동으로 연결되는데 만약 위의 실습의 경우 이미 노트북의 80번 포트를 사용중이라면 가상 공유기에 접근할 수 있을까?


VMware를 켜두고 있던 노트북에서 80번 포트에 nginx를 켜둔 채로 주소:80로 연결 시도해보았다.

결과

노트북과 VMware 모두 nginx를 켜뒀기 때문에 일단 연결은 되지만 어디와 연결되었는지는 모르니 파일을 다운받아 알아봤다.


VMware안에서 켜둔 파일이 다운로드 되지 않음


노트북에 있는 nginx/html 디렉토리에 만들어둔 파일이 불러와지는 것을 보니 이미 사용중이라면 포트포워딩을 했더라도 연결되지 않음을 확인할 수 있었다.


레퍼런스

NAT - 네트워크 주소 변환

TCP/IP 쉽게 이해하기

L4 스위치 쉽게 이해하기(NAT)

profile
하루하루 의미있게

0개의 댓글