네트워크를 만드는 기술

김수민·2023년 4월 2일
0

백엔드 부트캠프

목록 보기
41/52

TCP/IP 기본

LAN과 WAN

인터넷 제공업체에서 제공한 인터넷 라우터를 통해 연결되어 있는 사람들의 컴퓨터. 유선이든 무선이든 라우터에 연결이 되어있지 않다면 인터넷을 사용할 수 있음. 이러한 좁은 범위에서 연결된 네트워크를 LAN(Local Area Network)라고 부름. 그래서 LAN을 연결하는 선을 LAN 케이블이라고 함. 이러한 수많은 LAN들이 모여 세계의 네트워크를 구성하는 WAN(Wide Area Network)가 구성됨.

인터네트워킹(internetworking)

네트워크를 확장하는 방식

  • 한 네트워크를 확장하는 방법
  • 네트워크와 네트워크를 연결하는 방법

여러 네트워크를 연결하는 것: 인터네트워킹

인터네트워킹의 장점

  • 그 네트워크의 일부에서 고장이 나도 영향이 광범위하게 퍼지지 않음
  • 불필요한 통신이 네트워크 전체로 확산하지 않음
  • 개별 네트워크를 각각의 방침에 따라 관리가 가능함

프로토콜(protocol)

프로토콜: 인터넷에 연결되어 있는 멀리 떨어진 컴퓨터들끼리 서로 소통하려고 만든 약속 (TCP/IP가 주로 사용되는 프로토콜)

약속이 필요한 이유: 전자제품들끼리 각각 다른 규격을 사용한다면 소비자들은 불편함을 느낌

TCP / IP

인터넷 통신 스위트 (Internet Protocol Suite)은 인터넷에서 컴퓨터들이 서로 정보를 주고받는데 쓰이는 통신규약의 모음. 다른 컴퓨터나, 다른 운영체제, 다른 회선간의 통신이 가능하게 해줌. 인터넷이 처음 시작하던 시기에 정의되어 현재까지 표준으로 사용하고 있는 TCP (Transmission Control Protocol)와 IP(Internet Protocol)에서 가져와 TCP/IP라고 부름.

TCP/IP 4계층 모델

TCP/IP 4계층 모델주요 프로토콜역할
4층응용 계층HTTP, DNS, FTP, ...애플리케이션에 맞추어 통신함
3층전송 계층TCP, UDP, ...IP와 어플리케이션을 중개해 데이터를 확실하게 전달함
2층인터넷 계층IP, ICMP, ARP, RARP네트워크 주소를 기반으로 데이터를 전송함
1층네트워크 접근 계층Ethernet, wifi, ...컴퓨터를 물리적으로 네트워크에 연결해서 기기 간에 전송이 가능하게 함

주소(Adress)

IP adress(Internet Protocol address, IP 주소): 네트워크에 연결된 특정 PC의 주소를 나타내는 체계

컴퓨터나 휴대전화, 서버, 인터넷 라우터 등 네트워크 장비에 각각의 IP주소가 할당됨. IP주소에는 private 주소와 public 주소가 있는데, LAN 네트워크 내부에서 사용되는 것이 private IP 주소이고, 인터넷에서 사용되는 것은 Public IP 주소임.

IP는 Internet Protocol의 줄임말로, 인터넷상에서 사용하는 주소체계를 의미함. 인터넷에 연결된 PC는 IP 주소체계를 따라 네덩이의 숫자로 구분됨. 이렇게 네 덩이의 숫자로 구분된 IP 주소체계를 IPv4라고 함. IPv4는 Internet Protocol version 4의 줄임말로, IP 주소체계의 네번째 버전을 뜻함.

인터넷 보급률이 낮았던 초기에는 이 버전(IPv4)으로 네트워크에 연결된 PC에 주소를 할당하는 일이 가능했지만, 개인 PC의 보급으로 전 세계의 누구나 PC를 이용해 인터넷에 접속하고 각정 서비스를 위해 서버를 생산하면서 IPv4로 할당할 수 있는 PC가 한계를 넘어서게 되면서 IPv6(IP version 6)가 나옴. IPv6는 표기법을 달리 책정하여 2^128 개의 IP주소를 표현할 수 있음. 하지만 아직도 IPv4가 사용할만 하기 때문에 IPv6를 메인으로 사용하지 않음.

MAC 주소

IP adress만 가지고는 네트워크 상에서 송수신이 가능하지는 않음. 각 네트워크 기기는 처음부터 제조사에서 할당하는 고유 시리얼인 MAC 주소를 IP주소와 조합해야만 네트워크를 통한 통신이 가능함. 이더넷에서는 네트워크상의 송수신 상대를 특정하고자 MAC 주소를 사용하고 TCP/IP에서는 IP adress를 사용하기 때문.

같은 LAN에 속한 기기끼리 통신을 할때는 우선 상대방의 MAC 주소를 파악하는 과정이 있음. 이때 사용하는 것이 ARP(adress resolution protocol)임. MAC 주소를 파악하기 위해 네트워크 전체에 브로드캐스트를 통해 패킷을 보내고 해당 IP를 가지고 있는 컴퓨터가 자신의 MAC 주소를 response하게 됨으로써 통신할 수 있게 해주는 프로토콜임.

패킷

기기끼리의 통신에는 회선 교환(circuit swtiching) 방식과 패킷 교환(packet switching) 방식이 있음.

통신 회선을 설명하여 데이터 교환을 하는 회선교환 방식은 주로 음성전화 시스템에 사용됨. 전화는 일대일 데이터를 교환하고, 전화간 통화 중에는 다른 상대와 전화통과가 불가능함.

컴퓨터 네트워크는 여러 상대와 통신이 가능해야 함. 따라서 회선 교환방식은 컴퓨터 네트워크에서는 효율적이지 않음. 이를 극복하기 위해 패킷교환 방식이 생겨남.

패킷 교환은 원본 데이터를 패킷(packet)이라고 하는 작은 단위로 나누고, 여러 회선을 공용해 통신을 주고받음. 하나의 패킷은 헤더와 페이로드로 구성되어 있고, 헤더에는 어떤 데이터의 몇번 째 데이터인지의 정보와 보내는곳이나 최종 목적지에 대한 정보 등이 들어있음. 이렇게 주고받을 데이터를 작게 분할하여 전송하더라도 도착한 곳에서 원래대로 복원이 가능함.

IP

IP 주소 구조

서브넷 마스크(subnet mask)

IPv4 주소는 OOO.OOO.OOO.OOO의 형식으로 구성되어 있음. 10진수로 표기되어 있지만 그 실체는 마침표로 구분된 4개의 8비트 필드(8자리 2진수 4개)로 되어있음. 각 8비트 필드는 IPv4 주소에서 1바이트를 나타냄. IPv4 주소의 바이트를 나타내는 이러한 형식을 점으로 구분된 십진수 형식이라고도 함. IP 주소는 네트워크부와 호스트부로 나뉨. 네트워크부는 어떤 네트워크인지를 알 수 있는 정보이고, 호스트부는 그 네트워크 안의 특정 컴퓨터를 지칭하는 정보임.

IPv4 주소에서 네트워크부가 어디까지인지 나타내는 것이 서브넷 마스크.

  • IP주소: 192.168.1.1
  • 서브넷 마스크: 255.255.255.0
  • 네트워크 주소: 192.168.1.0
  • 브로드캐스트 주소: 192.168.1.255

8자리의 2진수 묶음을 옥텟이라고 부름. IPv4 주소는 3개의 옥텟으로 이루어져있고, 각각을 1옥텟, 2옥텟, 3옥텟, 4옥텟이라고 부름.

위 서브넷 마스크의 경우, 1에서 3까지의 옥텟을 네트워크부로 사용하는 서브넷 마스크임. 따라서 4옥텟은 호스트부로 사용하고 있음.

IP주소의 할당과 관리

MAC 주소와 달리 IP주소는 처음부터 주어지는 것이 아니라 할당되는것임. 위 그림처럼 호스트부를 변경해 가면서 IP 할당이 이루어짐. 위와 같은 예라면, 호스트부는 8자리로 이루어진 2진수이므로, 할당할 수 없는 시작(0)과 끝 숫자(255)를 제외한 번호로 할당이 가능함.

호스트부가 0으로만 이루어진 것은 네트워크 주소로 그 네트워크를 의미함. 호스트부가 1로만 이루어진 것은 브로드캐스트 주소로 ARP와 같은 기능을 사용하기 위해 사용됨.

따라서 시작(0)과 끝(255)를 제외한 254개의 주소만이 할당가능한 IP주소임.

IP 프로토콜의 한계

  • 비연결성
  • 비신뢰성

패킷을 받을 대상이 없거나 특정한 이유로 서비스 불능 상태에 빠져도 데이터를 받을 상대의 상태 파악이 불가능하기 때문에 패킷을 그대로 전송하는 비연결성 문제가 있음. 중간에 패킷이 사라지더라도 보내는 기기 측에서는 알 수 있는 방법이 없음. 또한 서로 다른노드를 거쳐서 전송되는 특성상 보내는 기기측에서 의도한 순서대로 데이터가 도착하지 않을 수 있음. 또한, 한 IP에서 여러 애플리케이션이 작동하는 경우 특정할 수 없는 한계가 있음. 이러한 한계들을 극복하기 위해 TCP와 UDP가 사용되고 있음.

TCP, UDP

TCP/IP 4계층 모델

TCP/IP 4계층 모델주요 프로토콜역할
4층응용 계층HTTP, DNS, FTP, ...애플리케이션에 맞추어 통신함
3층전송 계층TCP, UDP, ...IP와 어플리케이션을 중개해 데이터를 확실하게 전달함
2층인터넷 계층IP, ICMP, ARP, RARP네트워크 주소를 기반으로 데이터를 전송함
1층네트워크 접근 계층Ethernet, wifi, ...컴퓨터를 물리적으로 네트워크에 연결해서 기기 간에 전송이 가능하게 함

TCP와 UDP는 TCP/IP 4계층 모델을 기준으로 IP 프로토콜의 계층인 인터넷 계층의 상위에서 동작함. 전송계층에 속하는 TCP와 UDP는 2계층에서 동작하는 IP와 4계층에서 동작하는 애플리케이션(http 등)을 중개하는 역할을 함.

Transmission control protocol(TCP)User datagram protocol(UDP)
서비스 타입연결 지향적 프로토콜데이타그램 지향적 프로토콜
신뢰성데이터 전송 표적 기기까지의 전송을 보장함표적 기기까지의 전송이 보장되지 않음
순서 보장전송하는 패킷들의 순서가 보장됨패킷 순서 보장이 안됨. 패킷 순서를 보장하고 싶다면 애플리케이션 레이어에서 관리되어야 함
속도UDP와 비교해 느림TCP와 비교해 빠르고 단순하며 더 효율적인 속도를 가짐

TCP는 통신 신뢰성을 높이는 기능이 구현되어있음. UDP에는 신뢰성을 높이는 기능이 없는 대신 보다 높은 속도와 효율성을 제공함. 이러한 이유로 데이터의 신뢰성을 필요로 하는 애플리케이션은 TCP로, 빠른 속도나 실시간 통신이 중요한 애플리케이션의 경우 UDP로 구분하여 사용함. 특히 웹애플리케이션에서 많이 사용하는 HTTP의 경우 모든 데이터를 제대로 송수신이 가능해야하는 특성상 TCP를 사용함

TCP 3-way handshake

TCP 3-way handshake는 양 끝난의 (end to end) 기기의 신뢰성있는 데이터 통신을 위해 TCP방식이 연결을 설정하는 방식임. 마치 전화를 거는 것 같이 연결을 설정하는 이 방식은 세 단계를 통해 연결 설정을 함.

  • Step 1 (SYN): sender는 reeceiver와 연결 설정을 위해 segment를 랜덤으로 설정된 SYN(Synchronize Sequence Number)와 함께 보냄. 이 요청은 receiver에게 sender가 통신을 시작하고 싶다고 알림.
  • Step 2 (SYN/ACK): receiver는 받은 요청을 바탕으로 SYN/ACK 신호 세트를 응답함. Acknowledgement(ACK) 응답으로 보내는 segment가 유효한 SYN요청을 받았는지를 의미함.
  • Step 3 (ACK): 마지막 단계에서 sender는 받은 ACK를 receiver에게 전ㄴ송하면서 신뢰성이 있는 연결이 성립되었다는 사실을 sender와 receiver 양쪽에서 알 수 있고, 실제 데이터 전송이 시작됨.

UDP

TCP를 사용한 예시

  • 온라인 게임 LOL을 플레이하는 중, 결정적 순간에 기술을 사용해야 하는데 항상 조금씩 지연시간이 발생함. 하지만 지연시간이 매번 조금씩 달라서 타이밍을 잡기 힘듦
  • 카카오톡으로 보이스 톡을 하는데 내가 말하고 상대방이 말할 때마다 지연시간이 조금씩 발생하면서 싱크가 맞지 않음

아래와 같은 이유로 많은 애플리케이션 개발자들은 UDP를 사용함

  • 애플리케이션의 정교한 제어가 가능함: TCP의 경우 receiver가 전송받을 준비가 될 때까지 세그먼트를 반복적으로 재선송함. 실시간 전송에 대한 요구가 큰 애플리케이션들은 높은 latency를 지양하므로 약간의 데이터 손실을 감수함. 대신 개발자 스스로가 이를 보완하기 위한 애플리케이션에 추가 기능을 구현할 수 있음.
  • 연결설정에 무관함: TCP 3-way handshake가 없는 UDP는 예비과정 없이 바로 전송을 시작함. 설정단계에서 발생하는 지연이 없는만큼 반응속도가 빠름. 또한 TCP가 신뢰성을 위해 많은 파라미터와 정보 전달이 필요함과 비교해 UDP는 연결설정 관리를 하지 않기 때문에 어떤 파라미터도 기록하지 않음. 이때문에 서버에서도 TCP와 비교해 더 많은 클라이언트 수용 가능함.

Port

TCP와 UDP 둘 다 포트번호를 사용함. IP 프로토콜만 가지고 한 IP에서 여러 애플리케이션이 동작할 때 특정 애플리케이션을 특정해 통신할 수 없음. 포트번호는 대상 IP 기기의 특정 애플리케이션(connection endpoint)을 특정하는 번호.

위 그림과 같이 한 서버 인스턴스에서 웹 서버와 메일서버 두 개를 동시에 실행중이라고 가정하면, IP 주소만으로는 어느 서버로 요청을 보내는지 알 수 없음. 이러한 경우를 위해 포트 번호를 사용해 receiver를 특정해 어느 서버로 보내는 요청인지 특정할 수 있음. 로컬 환경에서 Spring을 실행하면 나타나는 화면에는 Tocat started on port(s): 8080과 같은 숫자가 표현됨. 이 숫자는 IP 주소가 가리키는 PC에 접속할 수 있는 통로(채널)을 의미함. 로컬에서 실행했을때에는 로컬 PC의 IP 주소 127.0.0.1로 접근하여 8080번이 통로를 통해 실행중인 서버를 확인할 수 있음. 이미 사용중인 포트는 중복해서 사용할 수 없음.

포트 번호는 0~65,535까지 사용할 수 있음. 그 중에서 0~1023번까지의 포트 번호는 주요 통신을 위한 규악에 따라 이미 정해져있음.

Port number rangedescription
Well-known port0~1023시스템 사용 번호(슈퍼 유저 권한 필요), 사용 권장X
Registered port1024~49151특정 프로토콜이나 어플리케이션에서 사용하는 번호(슈퍼유저 권한필요X)
Dynamic port49152~65535어플리케이션에서 혹은 임시 사용 번호

자주 사용되는 well-known port

# port noprotocol nametransport protocoldescription
80HTTPTCP웹서버 접속
443HTTPSTCP웹서버 접속(SSL)
110POP3TCP메일 읽기
25SMTPTCP메일서버간 메일 전송
22SSHTCP컴퓨터 원격 로그인
53DNSUDPDNS 질의
123NTPTCP시간 동기화

이미 정해진 포트라도 필요에 따라 자유롭게 사용할 수 있음. 잘 알려진 포트의 경우 URI 등에 명시하지 않지만 그 외에 잘 알려지지 않은 포트(:8080과 같음 임시 포트)는 반드시 포함해야 함.

URL, DNS

URL

URL(Uniform Resource Locator)은 웹에 게시된 어떤 자원을 찾기 위한 브라우저에서 사영되는 메카니즘임. 인터넷상에서 HTML이나 이미지 등 리소스의 위치를 특정하기 위한 서식으로써 탄생함. 브라우저의 주소창에 입력한 URL은 서버가 제공되는 환경에 존재하는 파일의 위치를 나타냄. 예를 들어 https://naver.com:443 사이트에 접속하게 되면 naver.com 주소가 가르키는 서버의 기본 폴더를 보여줌. CLI 환경에서 폴더와 파일의 위치를 찾아 이동하듯이, 슬래시(/)를 이용해 서버의 폴더에 진입하거나 파일을 요청할 수 있음. 그러나 기보적인 보안의 일환으로 외부에서 직접 접근이 가능한 경우는 거의 없음.

URL은 scheme, hosts, url-path로 구분할 수 있음. 가장 먼저 작성하는 scheme은 통신 방식(프로토콜)을 결정함. 일반적인 웹 브라우저에서는 http(s)를 사용함. hosts는 웹 서버의 이름이나 도메인, IP를 사용하며 주소를 나타냄. url-path는 웹 서버에서 지정한 루트 디렉토리부터 시작하여 웹 페이지, 이미지, 동영상 등이 위치한 경로와 파일명을 나타냄.

URI는 Uniform Resoruce Identifier의 줄임말고 일반적으로 URL의 기본 요소인 scheme, hosts, url-path에 더해 query, bookmark를 포함함. query는 웹 서버에 보내는 추가적인 질문임. http://www.google.com:80/search?q=Java를 브라우저의 검색창에 입력하면 구글에서 Java를 검색한 결과가 나타남.

브라우저의 검색창을 클릭하면 나타나는 주소가 URI임. URI는 URL을 포함하는 상위개념. 따라서 'URL은 URI다'는 참이고 'URI는 URL이다'는 거짓임.

부분명칭설명
file://, 'http://, https://scheme통신 프로토콜
127.0.0.1, www.google.comhosts웹페이지, 이미지, 동영상 등의 파일이 위치한 웹서버, 도메인 또는 IP
:80, :443, :3000port웹 서버에 접속하기 위한 통로
/search, /User/username/Desktopurl-path웹 서버의 루트 디렉토리로부터 웹 페이지, 이미지, 동영상 등의 파일의 위치까지의 경로
q=Javaquery웹 서버에 전달하는 추가 질문

Domain name

웹사이트의 주소를 https://142.250.207.78/weather/index.html처럼 IP 주소로만 작성해서 이용해야 한다면 기억하기에 어려움. 호스트이름과 도메인을 이름으로 바꾸어 기억하기 쉬운 이름으로 사용할 수 있음.

웹 브라우저를 통해 특정 사이트에 진입할 때 IP 주소를 대신하여 사용하는 주소가 있음. 만약 IP주소가 지번 또는 도로명 주소라면, 도메인 이름은 해당 주소에 위치한 상호로 볼 수 있음.

현재 4억개에 달하는 도메인을 관리하는 곳은 ICANN이라는 비영리 단체임. 그 밖의 조직으로 registry와 registrar가 있음. Registry는 도메인 관리 기간임. 각 도메인 정보의 데이터베이스를 관리하고 registry에 따라 도메인 종류가 달라짐. Registrar는 중개 등록업체임. Registry의 데이터베이스에 직접 도메인 정보를 등록 가능함.

도메인 종류

  • gTLD(generic Top Level Domain)
  • ccTLD(country code Top Level Domain)

gTLD는 전세계에서 등록이 가능한 .com, .net, .org, .edu, .gov, .int, /mil 일곱 가지로 시작하여 현재까지 .biz, .name, .ingo 등이 추가되어 있음. gTLD의 경우 VERISIGN등의 회사가 registrar이고 국내 ICANN 인증 registrar는 가비아, 후이즈 등이 있음. ccTLD의 경우.kr, .us, .jp 등 200개 이상이 있음. 각국 네트워크 정보센터에서 위임받아 관리하며 .kr의 경우에는 한국인터넷진흥원이 registry로, 가비아, 후이즈 등이 registrar로 있음.

DNS

네트워크 상에 존재하는 모든 PC는 IP주소가 있음. 그러나 모든 IP 주소가 도메인 이름을 가지는 것은 아님. 로컬 PC를 나타내는 127.0.0.1은 localhost로 사용할 수 있지만 그 외에 모든 도메인 이름은 일정 기간동안 대여하여 사용함. 브라우저의 검색창에 도메인 이름을 입력하여 해당 사이트로 이동하기 위해서는 해당 도메인 이름과 매칭된 IP 주소를 확인하는 작업이 반드시 필요함. 네트워크에는 이것을 위한 서버가 별도로 있음. DNS는 Domain Name System의 줄임말로, 호스트의 도메일 이름을 IP 주소로 변환하거나 반대의 경우를 수행할 수 있도록 개발된 데이터베이스 시스템임. 만약 브라우저의 검색창에 naver.com을 입력한다면, 이 요청은 DNS에서 IP 주소(125.209.222.142) 를 찾음. 그리고 이 IP 주소에 해당하는 웹 서버로 요청을 전달하여 클라이언트와 서버가 통신할 수 있도록 함. 시스템 작업이나 서버 교체 등 IP주소가 변경되는 경우는 많이 있음.

0개의 댓글