Suhwanc

 

1. 글을 내리기 전에..

 

우리가 HTTP를 배워보기 전에, 정말 얕은 네트워크 지식들을 알아볼 것이다.

제목은 토막 상식이라 적었지만, 반 토막의 반 토막의 반 토막의 반 토막.. 일지 모른다. 

반토막

 

따라서 이전에 네트워크를 공부하신 분들이라면 이번 장은 스킵하셔도 좋다.

 

복습하실 분들 & 처음인 분들은 아래 목차를 참고 바란다.

 

 

2) 인터넷과 네트워크 프로토콜

3) 인터넷 프로토콜 5 계층

4) TCP와 UDP

5) IP : Internet Protocol

6) DNS

7) PORT

 

 

 

 

2. 인터넷과 네트워크 프로토콜

 

2.1 인터넷이란?

 

인터넷은 "수많은 네트워크들을 연결하는 네트워크"라는 의미에서부터 시작되었으며 클라이언트와 서버가 있고, TCP/IP라는 기본 프로토콜을 통해 제공되고 있다.

 

2.2 인터넷의 구성 요소

 

 

인터넷을 바라보는 관점은 구조적, 서비스적 관점으로 나뉜다.

 

구조적 관점에서 인터넷을 구성하는 요소들은 크게 3가지가 있다.

 

1. host :  end system 이라고도 하며, 연결된 수많은 컴퓨팅 단말들을 의미한다. ex) 컴퓨터, 서버, 스마트폰

 

2. link : 위 host들을 연결하는 매개체로 우리가 일반적으로 아는 구리선, 광 섬유, 더 나아가 인공위성 등을 의미하며 link의 성능을 결정하는 중요한 요소 중 하나로 "얼마나 빠르게 패킷을 전달하느냐?"를 의미하는 전송률(transmission rate)이 있다. (link의 대역폭에 따라 다르다)

 

3. packet switch : 패킷(데이터)을 포워딩하는 역할을 하며 대표적으로 라우터와 스위치가 있다.

(포워딩은 들어온 패킷의 헤더 정보를 이용하여 최종 목적지 네트워크를 향해 패킷을 내보내 주는 일련의 단계)

 

 

서비스적 관점에서는 2가지가 있는데

 

1. 여러 애플리케이션들이 서비스를 제공하게 해주는 인프라를 구축하고 있으며 (ex. 웹, 게임, 이메일 등..)

 

2. 애플리케이션들이 서로 상호 연결될 수 있도록 도와주는 역할을 한다. (ex. API)

 

 

3.3 네트워크 프로토콜이란?

 

우선 간단히 성질을 정의하자면, 인간적 관점보다는 기계적 관점으로 된 사람들의 소통이라고 볼 수 있다.

 

예를 들어서, 길을 가다가 친구를 만나 "밥 먹었어?"라고 하면 우리는 "응 먹었지 너는?", "아니 배고파!" 등 여러 가지 대답을 할 수 있는데 이를 네트워크 프로토콜로 생각한다면, "예", "아니오", "잘못 들었습니다. 다시 말해주세요"와 같이 기계적으로 대답하게 된다는 것이다.

 

따라서 프로토콜의 사전적 의미는 다음과 같다.

네트워크 프로토콜은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고받는 양식과 규칙의 체계이다. 

 

이 프로토콜의 양식 또는 규칙 안에는 메시지를 전달하는 순서, 취해야 할행동, 데이터 포맷(어떤 식으로 말을 해야 하는지) 등이 있다.

 

 

 

3. 인터넷 프로토콜 5 계층

 

이 부분은 전부 설명할 수는 없고.. 이런 계층(레이어)으로 구성된다고 알아만 두자.

 

3.1 인터넷 프로토콜 5 계층

 

  • application layer : 애플리케이션 계층은 프로그램이 실제로 구현할 수 있는 프로토콜을 제공하며, 그림처럼 인터넷 프로토콜 스택의 최상위 개념이다. FTP, SMTP, HTTP가 있다.
  • transport layer : 실제로 데이터를 전송시키는 기능을 한다. TCP, UDP가 이 부분에 해당한다. 
  • network layer : 데이터그램을 출발지 -> 목적지로 라우팅 하는 부분이다. IP, 라우팅 프로토콜이 있다.
  • link layer : 이웃 네트워크끼리 데이터를 전송하는 역할을 한다. 이더넷, 와이파이가 있다.
  • physical : 선으로 비트들을 연결해준다. copper, fiber coax 등이 있다.

 

 

4. TCP와 UDP

 

인터넷 트랜스포트 프로토콜 서비스에는 두 가지가 있다.

 

4.1 TCP

 

Transmission control protocol의 약자로 신뢰적인 전송을 추구한다.

TCP의 특징은 다음과 같다.

 

  • 송수신자 간의 신뢰적인 전송
  • 흐름 제어 : 송신 측과 수신 측의 데이터 처리 속도 차이 해결 방식
  • 혼잡 제어 : 송신 측의 데이터 전송과 네트워크의 데이터 처리 속도 차이 해결 방식
  • 데이터 보전 (타이밍, 처리량, 보안은 제공하지 않는다)
  • 서버 - 클라이언트 간 연결 설정 단계를 거친다.

 

흐름 제어와 혼잡 제어는 용어가 조금 헷갈릴 수 있는데, 이 둘의 처리 방식을 생각하면 외우기 쉽다.

 

흐름 제어는 송신자의 데이터 처리 속도를 수신자의 데이터 처리 속도보다 낮추면 해결할 수 있고,

혼잡 제어는 라우터의 버퍼(저장 공간)를 키우거나, 버퍼가 넘치지 않도록 네트워크의 데이터 처리 속도에 맞춰 송신자의 전송 속도를 낮추면 해결 가능하다.

 

 

4.2 UDP

 

User Datagram protocol의 약자로 단순한 전송 방식을 갖는다.

UDP의 특징은 다음과 같다.

 

  • 비신뢰적인 데이터 전송
  • 모두 안 해줌 (시간, 처리량, 보안, 신뢰적 전송 등..)
  • 사실 데이터 전송만 해도 빡빡하다.
  • 오직 데이터를 빠르게 보내는 것에 초점을 맞춘다. (real-time streaming)

 

보통 웬만한 연결은 TCP 위주이긴 하나, 최근 UDP도 점유율이 상당히 많이 높아졌다고 한다.

이유는 TCP의 신뢰적인 연결에 비해 UDP 속도가 빠르다는 점에서 기인하는데, 최근 유튜브 라이브나, 실시간 온라인 강의, 아프리카, 트위치 등 인터넷 방송을 생각해보면 이해가 된다. (아마 UDP를 사용할 것 같다.)

 

 

 

5. IP : Internet Protocol

 

5.1 IP란?

 

IP란 인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버 장비, 스마트폰 등)을 식별할 수 있도록 각각의 장비에게 부여되는 고유 주소이다.

 

IP주소에는 IPv4, IPv6가 있는데, 보통 IP주소라 하면 IPv4 주소를 말한다. 

 

 

5.2 IPv4 주소체계

 

IP 주소체계를 살펴보기 전에, 호스트와 라우터가 네트워크에서 연결되는 방식에 대해 한 가지 단어를 정리할 필요가 있다.

우선 호스트 IP가 데이터그램을 보낼 때는, 물리적 링크 사이에서 인터페이스를 통해 보낸다.

인터페이스는 각 링크마다 하나씩 가지므로, 라우터는 여러 개의 인터페이스를 가진다.

추가로 각 인터페이스는 독립적인 IP 주소를 가지는데, IPv4에서 IP 주소의 길이는 4바이트로 약 40억 개의 가능한 IP주소가 있다.

 

IP 주소 구성

IP 주소는 네트워크 주소(network ID) + 호스트 ID로 구성되는데 이 둘의 길이는 호스트 ID 개수의 필요에 따라 나뉜다.

예를 들어 우리 학교 같은 경우는 학교가 아주 작기 때문에 8비트 정도의 호스트 ID 개수면 충분하지만,

아주 큰 기업 같은 경우는 24비트 정도는 필요할 것이다. 이를 제외한 나머지는 네트워크 주소가 차지하게 된다.

 

서브넷

하지만 이런 IP 주소들을 마음대로 정하면 잔챙이(남는 IP주소)들이 너무 많이 생겨버려서

그룹 별로 묶어 저장하게 되는데 이 그룹을 서브넷이라고 한다.

따라서 서브넷은 IP 주소에서 네트워크 영역을 부분적으로 나눈 부분 네트워크를 뜻한다.

 

일반적인 라우터와 호스트를 연결한 시스템에서 서브넷을 정의하기 위해 다음과 같은 방법을 사용할 수 있다.

"서브넷을 결정하기 위하여, 먼저 호스트나 라우터에서 각 인터페이스를 분리하여 고립된 네트워크를 만든다.

이 고립된 네트워크의 종단점은 인터페이스의 끝이 된다. 이렇게 고립된 네트워크 각각을 서브넷이라고 부른다."

 

서브넷 마스크

서브넷을 만들 때 쓰이는 것으로 IP 주소와 같은 32bit의 형태를 가진다.

이 서브넷 마스크의 목적은 IP 주소와 AND 연산하여 호스트 ID 내에 있는 서브넷 주소를 걸러내려는 것인데,

예를 들어 IP가 123.12(서브넷).12.1 일 경우 서브넷 마스크가 255.255.0.0이다.

이 둘을 AND 연산할 시 123.12.0.0 이 되는데, 이것이 이 IP의 네트워크 ID가 되며 이를 역으로 취할 경우 서브넷의 크기(호스트의 개수)가 된다.

 

 

또한 IP주소 중 뒤에 /24 따위가 붙은 것을 볼 수 있는데 '/' 뒤에 있는 숫자는 서브넷 주소의 길이를 의미한다.

서브넷 마스크가 255.255.0.0이라면 이는 초기 16bit가 1로 되어있기 때문에 IP는 123.12.12.1/16이 되는 것이다.

 

 

6. DNS

 

6.1 DNS - 인터넷의 디렉터리 서비스

 

요즘 학교 건물에 출입할 때 정문 앞에 있는 사람들에게 학생증을 보여주고, 팔찌를 받아 들어가고 있는데 학생증을 보여주는 이유는 학생증이 내가 나인지, 여기 학생인지를 인증할 수 있는 수단이기 때문이다.

 

사람이 이런 방식으로 식별하는 것처럼, 인터넷 호스트도 마찬가지로 식별 수단이 필요하다.

인터넷 호스트에 대한 식별자는 호스트 네임(host name)이다. 

 

호스트 네임은 www.naver.com,  google.com 등과 같이 우리가 기억하기 쉽다.

하지만 호스트 네임은 가변 길이의 문자들로 구성되어 있기 때문에 라우터가 처리하기 어려움이 있어 IP 주소로도 식별된다. 

 

IP 주소는 4바이트로 구성되고 계층구조이기 때문에 주소를 왼쪽부터 오른쪽까지 조사하면 호스트의 위치에 대한 자세한 정보를 얻을 수 있다. 하지만 기억하기는 어렵다.

 

따라서 우리는 이러한 선호 차이를 절충하기 위해, 호스트 네임을 IP 주소로 변환해 주는 디렉터리 서비스가 필요했고, 이것이 인터넷 DNS의 주요 임무이다.

 

 

7. PORT

 

포트를 가장 마지막 부분에 적은 것은 나름의 이유가 있다.

 

다음과 같은 상황을 상상해보자.

 

서버와 클라이언트가 한 번에 둘 이상을 연결해야 한다면?

 

우리가 지금까지 배운 건 IP와 IP를 연결하는 것이지, 그 안에서 여러 가지 일을 하는 방법은 배우지 않았다.

네트워크는 이러한 부분을 PORT 번호를 통해 해결하는데,

웹 공부를 조금이라도 해본 분들은 다들 아실만한 주소가 있다! 바로 localhost:8000 이나 localhost:8080 !!

여기서 접미사로 붙는 숫자들은 포트 번호를 의미한다.

 

다시 본론으로 돌아가면, 이 PORT 번호가 다르면 동일한 IP임에도 불구하고 다른 곳에서 작업을 할 수 있다.

클라이언트는 포트 번호를 패킷에 함께 넣어 전송하고 서버에 열려있는 해당 포트 번호로 통신하게 된다.

 

일반적으로 쓰이는 포트 번호는 다음과 같다.

 

  • 0 ~ 65535 : 할당 기능
  • 0 ~ 1023 : 잘 알려진 포트로 사용하지 않는 것이 좋음.
  • 20, 21 : FTP
  • 23 : TELNET
  • 80 : HTTP
  • 443 : HTTPS