네트워크 기술

seongmin·2022년 10월 3일
0

Java

목록 보기
22/30

TCP/IP 기본

LAN 과 WAN

좁은 범위에서 연결된 네트워크를 LAN(Local Area Network)이라 한다. 그래서 LAN을 연결하는 선을 LAN 케이블 이라고 부르는 것이다.

이러한 수많은 LAN 들이 모여 세계의 네트워크를 구성하는 WAN(Wide Area Network) 가 구성되게 된다.

인터네트워킹(internetworking)

인터넷은 네트워크끼리 연결하는 네트워크라는 의미인 인터네트워크에서 유래했다.

네트워크를 확장하는 방식은 크게 두가지 방법이 있다.

  1. 한 네트워크를 확장하는 방법.
  2. 네트워크와 네트워크를 연결하는 방법.

여러 네트워크를 연결하는 것을 인터네트워킹이라고 한다. 인터네트워킹은 그 네트워크의 일부에서 고장이 나도 영향이 광범위하게 퍼지지 않는다는 점과, 불필요한 통신이 네트워크 전체로 확산하지 않는다는점, 개별 네트워크를 각각의 방침에 따라 관리가 가능하다는 등의 장점이 있다.

그리고 전 세계적으로 인터네트워킹 하는 것이 인터넷(The Internet)이다.

프로토콜(protocol)

인터넷에 연결되어 있는 멀리 떨어진 컴퓨터들끼리 서로 소통을 하기 위한 공통된 약속을 프로토콜이라고 한다. 지금은 TCP/IP 프로토콜이 주로 사용하는 약속이다.

TCP / IP

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

주소(address)

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

IP 주소는 TCP/IP 구조에서 컴퓨터를 식별하기 위해 사용되는 주소다.
IP 주소에는 Private 주소와 Public 주소가 있다. LAN 네트워크 내부에서 사용되는 것이 Private IP 주소이고, Public IP 주소는 인터넷에서 사용이 된다.
IP는 Internet Protocol의 줄임 말로, 인터넷상에서 사용하는 주소체계를 의미한다.
인터넷에 연결된 모든 PC는 IP 주소체계를 따라 네 덩이의 숫자로 구분된다. 이렇게 네 덩이의 숫자로 구분된 IP 주소체계를 IPv4라고 한다. IPv4 는 Internet Protocol version 4의 줄임 말로, IP 주소체계의 네 번째 버전을 뜻한다.

localhost, 127.0.0.1 : 현재 사용 중인 로컬 PC를 지칭함.
0.0.0.0, 255.255.255.255 : broadcast address, 로컬 네트워크에 접속된 모든 장치와 소통하는 주소다. 서버에서 접근 가능 IP 주소를 broadcast address 로 지정하면, 모든 기기에서 서버에 접근할 수 있다.

개인 PC의 보급으로 전 세계의 누구나 PC를 이용해 인터넷에 접속하고, 각종 서비스를 위해 서버를 생산하면서 IPv4로 할당할 수 있는 PC가 한계를 넘어서게 되었다. 이를 위해 세상에 나오게 된 것이 IPv6(IP version 6)다. 하지만 현재까지도 IPv4를 메인으로 사용하고 있다.

MAC 주소

IP address 만으로는 네트워크 상에서 송수신이 가능하지 않다. 각 네트워크 기기는 처음부터 제조사에서 할당하는 고유 시리얼인 MAC 주소를 IP 주소와 조합해야만 네트워크를 통한 통신이 가능하다.

이더넷에서는 네트워크상의 송수신 상대를 특정하고자 MAC 주소를 사용하고, TCP/IP 에서는 IP address를 사용하기 때문이다.

같은 LAN 에 속한 기기끼리 통신을 할때는 우선 상대방의 MAC 주소를 파악하는 과정이 있게 된다.

이 때 사용하는 것이 ARP (address resolution protocol) 다. MAC 주소를 파악하기 위해 네트워크 전체에 브로드캐스트를 통해 패킷을 보내고, 해당 IP를 가지고 있는 컴퓨터가 자신의 MAC 주소를 Response하게 됨으로써 통신할 수 있게 해주는 프로토콜이다.

패킷

기기끼리의 통신에는 회선 교환(Circuit Switching) 방식과 패킷 교환(Packet Switching) 두가지 방식이 있다.

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

하지만 컴퓨터 네트워크는 여러 상대와 통신이 가능해야 한다. 따라서 회선 교환방식은 컴퓨터 네트워크에서는 효율적이지 못했고, 이를 극복하기 위해 패킷교환 방식이 생겨났다.

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

주고받을 데이터를 작게 분할하여 전송하더라도, 도착한 곳에서 원래대로 복원이 가능하다.

IP

IPv4 주소는 OOO.OOO.OOO.OOO 의 형식으로 되어 있다.

IP 주소는 네트워크부와 호스트부로 나뉜다. 네트워크부는 어떤 네트워크인지를 알 수 있는 정보이고, 호스트부는 그 네트워크 안의 특정 컴퓨터를 지칭하는 정보다.

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

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

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

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

IP주소의 할당과 관리

MAC 주소와 달리, IP주소는 처음부터 주어지는 것이 아니라 할당이 되는 것이다. 호스트부를 변경해 가면서 IP 할당이 이루어 지게 된다.

호스트부는 8자리로 이루어진 2진수이므로, 할당할 수 없는 시작(0)과 끝 숫자(255)를 제외한 번호로 할당이 가능하다.

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

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

IP프로토콜의 한계

IP프로토콜에도 한계가 존재한다.

  • 비연결성
  • 비신뢰성

패킷을 받을 대상이 없거나 특정한 이유로 서비스 불능 상태에 빠져도 데이터를 받을 상대의 상태 파악이 불가능하기 때문에 패켓을 그대로 전송하는 비연결성 문제가 있다.

중간에 패킷이 사라지더라도 보내는 기기 측에서는 알 수 있는 방법이 없다. 또한, 서로 다른노드를 거쳐서 전송되는 특성상, 보내는 기기 측에서 의도한 순서대로 데이터가 도착하지 않을 수도 있다.

또한, 한 IP에서 여러 애플리케이션이 작동하는 경우 특정할 수 없는 한계가 있다.

이러한 한계들을 극복하기 위해 TCPUDP 가 사용되고 있다.


  • 심화학습

네트워크 접속 기기가 많아지게 되면 IP 주소를 별도로 관리해야 한다.
이를 위한 소프트웨어 : IPAM

TCP,UDP

TCPUDP는 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

  • Step 1 (SYN): 처음으로, sender는 receiver와 연결 설정을 위해, segment를 랜덤으로 설정된 SYN(Synchronize Sequence Number)와 함께 보낸다. 이 요청은 receiver에게 sender가 통신을 시작하고 싶다고 알리는 것이다.

  • Step 2(SYN / ASK): receiver 는 받은 요청을 바탕으로 SYN/ACK 신호 세트를 응답한다. Acknowledgement(ACK) 응답으로 보내는 segment가 유효한 SYN요청을 받았는지를 의미한다.

  • Step 3(ACK): 마지막 단계에서, sender는 받은 ACK를 receiver에게 전송을 하면서, 신뢰성 있는 연결이 성립되었다는 사실을 sender와 receiver 양쪽에서 알 수 있고, 실제 데이터 전송이 시작되게 된다.

UDP

  • UDP를 사용하는 이유

    • 애플리케이션의 정교한 제어가 가능 : TCP의 경우 receiver가 전송 받을 준비가 될 때까지 세그먼트를 반복적으로 재전송한다. 실시간 전송에 대한 요구가 큰 애플리케이션 들은 높은 latency(지연)를 지양하므로 약간의 데이터 손실을 감수한다. 대신 개발자 스스로가 이를 보완하기 위해 애플리케이션에 추가 기능을 구현할 수 있다.

    • 연결설정에 무관 : TCP 3-way handshake 가 없는 UDP는 예비과정 없이 바로 전송을 시작한다. 설정단계에서 발생하는 지연이 없는 만큼, 반응속도가 빠르다. 또한, TCP 가 신뢰성을 위해 많은 파라미터와 정보 전달이 필요함과 비교해 UDP는 연결설정 관리를 하지 않기 때문에 어떠한 파라미터도 기록하지 않는다. 이 때문에 서버에서도 TCP와 비교해 더 많은 클라이언트를 수용이 가능하다.

PORT

TCP와 UDP 둘 다 포트번호를 사용한다.

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

한 서버 인스턴스에서 웹서버와 메일서버 두개를 동시에 실행 중인 경우,

IP주소만으로는 어느 서버로 요청을 보내는지 알 수 없다. 이러한 경우를 위해, 포트 번호를 사용해 receiver를 특정해 어느 서버로 보내는 요청인지 특정할 수 있다.

로컬 환경에서 Spring을 실행하면 나타나는 화면에는, Tomcat started on port(s): 8080 과 같은 숫자가 표현된다. 이 숫자는 IP 주소가 가리키는 PC에 접속할 수 있는 통로(채널)을 의미한다. 로컬에서 실행했을 때에는 로컬 PC의 IP 주소 127.0.0.1 로 접근하여, 8080번이 통로를 통해 실행중인 서버를 확인할 수 있다. 이미 사용중인 포트는 중복해서 사용할 수 없다.

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

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

자주 사용되는 Well-known port

Port No.Protocol NameTransport ProtocolDescription
80HTTPTCP웹서버 접속
443HTTPSTCP웹서버 접속 (SSL)
110POP3TCP메일 읽기
25SMTPTCP메일서버간 메일 전송
22SSHTCP컴퓨터 원격 로그인
53DNSUDPDNS 질의
123NTPTCP시간 동기화

URL

URL(Uniform Resource Locator) 은 웹에 게시된 어떤 자원을 찾기 위한 브라우저에서 사용되는 메커니즘이다. 인터넷상에서 HTML이나 이미지 등 리소스의 위치를 특정하기 위한 서식으로써 탄생하게 되었다.

브라우저의 주소창에 입력한 URL은 서버가 제공되는 환경에 존재하는 파일의 위치를 나타낸다.

  • username에는 사용자 이름을 입력
Ubuntu:

file://127.0.0.1/home/username/Desktop

macOS:

file://127.0.0.1/Users/username/Desktop/

Windows:

file://localhost/C:\Users/username\Desktop\

위 URL을 크롬 브라우저에 입력하면, 크롬 브라우저를 파일 탐색기로 쓸 수 있다.

URL은 네트워크 상에서 웹 페이지, 이미지, 동영상 등의 파일이 위치한 정보를 나타낸다.
URL은 scheme , hosts , url-path 로 구분할 수 있다.

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

브라우저의 검색창을 클릭하면 나타나는 주소가 URI다. URIURL 을 포함하는 상위개념이다.

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

Domain name

웹사이트의 주소를 https://142.250.207.78/weather/index.html 처럼 IP 주소로만 작성해서 이용해야 한다면 기억하기에 매우 어려울 것이다.

호스트이름과 도메인 이름으로 바꾸어 아래처럼 기억하기 쉬운 이름을 사용할 수 있다.

현재 4억개에 달하는 도메인을 관리하는 곳은 ICANN 이라는 비영리 단체다.

그 밖의 조직으로 registryregistrar 가 있다.

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, .info 등이 추가되어 왔다.

gTLD 의 경우 VERISIGN 등의 회사가 registrar이고, 국내 ICANN 인증 registrar가비아, 후이즈 등이 있다.

ccTLD 의 경우 .kr, .us, .jp 등 200개 이상이 있다. 각국 네트워크 정보센터에서 위임받아 관리하며 .kr 의 경우 한국인터넷진흥원registry로 그리고 registrar는 가비아, 후이즈 등이 있다.

DNS

도메인 이름은 일정 기간 동안 대여하여 사용한다.
브라우저의 검색창에 도메인 이름을 입력하여 해당 사이트로 이동하기 위해서는, 해당 도메인 이름과 매칭된 IP 주소를 확인하는 작업이 반드시 필요하다.

네트워크에는 이것을 위한 서버가 별도로 있다.

DNSDomain Name System의 줄임말로, 호스트의 도메인 이름을 IP 주소로 변환하거나 반대의 경우를 수행할 수 있도록 개발된 데이터베이스 시스템이다.

만약 브라우저의 검색창에 naver.com 을 입력한다면, 이 요청은 DNS에서 IP 주소(125.209.222.142) 를 찾는다. 그리고 이 IP 주소에 해당하는 웹 서버로 요청을 전달하여 클라이언트와 서버가 통신할 수 있도록 한다.

시스템 작업이나 서버 교체 등 IP주소가 변경되는 경우는 많이 있다.

DNS - https://ko.wikipedia.org/wiki/%EB%8F%84%EB%A9%94%EC%9D%B8_%EB%84%A4%EC%9E%84_%EC%8B%9C%EC%8A%A4%ED%85%9C

DNS works

도메인 주소는 오른쪽부터 왼쪽으로
최상위 도메인과 여러 개의 도메인으로 구성되어 있습니다.

탑 레벨 도메인.com, .kr, .net 등 도메인의 가장 오른쪽에 위치하는 도메인이다.
kr, us 와 같은 국가 코드를 사용하는 도메인은 co, ac 와 같은 2단계 도메인과 함께 사용되기도 한다.

서브도메인은 일반적으로 www, m와 같은 제일 왼쪽에 위치한 도메인들이 해당된다.

호스트 이름으로 불리기도 하는 서브도메인은 웹 사이트의 특정 부분을 나눠서 보여줘야 하는 경우 사용한다.

m(모바일), www(기본), store(스토어) 등의 도메인에 따라 사이트의 구성이 달라지는 것을 기억하면 쉽게 이해할 수 있다.


도메인을 관리하는 도메인 서버(존)

대표적으로 모든 도메인을 관리하는 루트 네임 서버, TLD를 관리하는 네임 서버, 권한 있는 네임 서버 로 구성된다.

이때 도메인 이름 서버는 하나의 서버로 구성되지 않는다.

안정성을 위해 최소한 두 개 이상의 서버가 하나의 도메인 네임을 담당한다.

여러 개의 서버를 구성한다면 하나의 서버로 운영될 경우 생길 수 있는 과부하 및 서비스 거부 공격에 대해 효율적으로 대응할 수 있다.

루트 도메인 네임 서버는 각 최상위 도메인 네임 서버들의 주소를 알고 있으며 최상위 도메인 네임 서버는 권한 있는 네임 서버의 주소를 알고 있다.

권한 있는 네임 서버는 example.com 등의 도메인 IP 주소 및 도메인 정보를 관리하는 권한을 가진 서버다.


URL에 deploy.states.com 주소를 입력하면 ‘DNS Lookup’이라고 불리는 다음 과정이 발생한다.

  1. 브라우저는 리졸버에게 IP 주소를 요청

리졸버는 요청받은 도메인의 IP 주소를 찾기 위해 여러 네임 서버에 반복적인 질의를 하는 이름 서버다.

리졸버는 우선 기존에 찾아본 도메인 정보가 내용이 담긴 캐시 파일을 살핀다.
해당되는 도메인 정보가 있다면 즉시 IP 주소를 리턴한다.
해당되는 도메인 정보를 찾을수 없는 경우 2번을 진행한다.

  1. DNS 리졸버는 IP 주소를 얻기 위해 네임 서버들에게 재귀적인 쿼리를 진행

루트, 탑 레벨, 권한 있는 도메인 서버에 차례대로 쿼리를 진행하며 IP 주소를 알아낸다.
이 때 리졸버는 쿼리수를 줄일 목적으로 기록되지 않은 도메인 네임 서버들의 주소를 저장하기도 한다.

  1. 마지막으로 리졸버는 전달받은 deploy.states.com의 IP 주소를 기록하고 브라우저에게 전달한다.

도메인 네임 서버는 응답을 보내기 위해 한 개 이상의 존 파일 이라는 파일을 가지고 있다.

존 파일은 네임과 클래스, TTL, 레코드 타입, 레코드 데이터로 구성된 레코드들 로 구성되어 있다.

네임 서버들은 이러한 존 파일들을 바탕으로 요청에 해당되는 레코드를 리턴한다.

리졸버는 이 레코드를 살펴보고 리턴해야 할 IP 혹은 다음에 쿼리를 진행할 서버의 주소를 확인한다.


레코드의 상세 정보는 다음과 같다.

이름은 example.com 과 같은 도메인 네임 혹은 서브 도메인의 이름 등을 저장합니다.
레코드 클래스는 네트워크 타입을 지정합니다. 일반적으로 IN(인터넷)으로 지정됩니다.
TTL은 Time To Live의 약자로서 리졸버가 레코드를 몇 초동안 저장할지를 명시합니다.
해당 시간이 지나면 리졸버는 해당 레코드를 삭제합니다.
레코드 타입은 레코드 데이터의 내용의 형식입니다.


대표적인 레코드 타입은 다음과 같다.

A - 데이터가 IPv4 주소임을 명시한다.

IPv4 주소는 보통 알고 있는 127.0.0.1 과 같은 주소를 말한다.

AAAA - 데이터가 IPv6 주소임을 명시한다.

IPv6주소는 IPv4주소가 부족해지자 새롭게 도입된 주소 형식이다.
2001:0db8:85a3:08d3:1319:8a2e:0370:7334 과 같은 형식을 사용한다.

CNAME - 데이터가 도메인 주소임을 명시한다.

NS - 데이터가 도메인 네임 서버들의 주소임을 명시한다.

SOA - 데이터가 도메인 네임 서버들 중 주 서버의 정보들에 대한 데이터다.
주 네임 서버와 통신할 수 있는 포트 번호, TTL, 도메인 주소 등이 적혀 있다.

0개의 댓글