Skip to content

Latest commit

 

History

History
431 lines (247 loc) · 22 KB

ch03_study.md

File metadata and controls

431 lines (247 loc) · 22 KB

ch_03 네트워크의 공통 언어 TCP/IP

PC도 스마트폰도 서버도 TCP/IP를 사용한다

TCP/IP는 TCP와 IP를 중심으로 하는 프로토콜의 집합으로, 네트워크의 공통 언어이다. PC나 스마트폰 등의 OS에도 TCP/IP가 내장되어 있으므로 간단히 이용할 수 있다. 또한 TCP/IP로 통신하는 PC와 스마트폰, 각종 네트워크 기기 전반을 __호스트__라고 부른다.

TCP/IP 계층구조

TCP/IP의 계층(아래부터 최하위 계층 ~ )
TCP/IP의 구조 설명 주요프로토콜
애플리케이션 계층 애플리케이션에서 다룰 데이터 형식과 절차를 결정한다. HTTP, SMTP, POP3, IMAP4, DHCP, DNS 등
트랜스포트 계층 애플리케이션에 데이터를 할당한다. TCP/UDP
인터넷 계층 엔드투엔드 통신을 한다. IP, ICMP, ARP 등
네트워크 인터페이스 계층 프로토콜은 자유롭게 설정할 수 있다. 즉 통신 상대와 같은 것을 사용할 필요는 없다. 이더넷, 무선 LAN, PPP 등
웹 액세스의 프로토콜의 조합

l3-switch

데이터를 전송하는 역할을 하는 계층

네트워크 인터페이스층

네트워크 인터페이스층의 역할은 __같은 네트워크 안에서 데이터를 전송__하는 것이다.

기술적인 관점에서, 하나의 네트워크는 라우터와 레이어3 스위치로 구획되는 범위, 또는 레이어2 스위치로 구성하는 범위이다.

l3-switch

인터넷층

많은 네트워크가 존재하고, 거기에 다양한 기기가 연결된다. 인터넷층은 그 __네트워크 사이에서 데이터를 전송__하는 역할을 한다.

네트워크끼리 연결하고 데이터를 전송하는 기기가 __라우터__이다. 라우터에 의한 네트워크 간 전송을 가리켜 라우팅이라고 한다. 또한, 원격지 네트워크에서 최종적으로 출발지와 목적지 사이의 데이터 전송을 가리켜 __엔드투엔드 통신__이라고 한다.

애플리케이션의 동작을 준비하는 계층

트랜스포트층

트랜스포트층의 역할은 여러 애플리케이션의 데이터가 다양한 타이밍에 들어온 데이터를 적절한 애플리케이션에 배분하는 것이다.

TCP/IP 트랜스포트층에 포함되는 프로토콜은 TCP와 UDP이다. TCP를 이요하면, 만약 어떤 이유로 데이터가 유실되더라도 그 사실을 검출해 데이터를 다시 보내준다.

TCP에는 엔드투엔드의 신뢰성을 확보해 주는 기능이 있다. 그 밖에도 데이터의 분할과 조립 등도 한다.

애플리케이션층

애플리케이션층의 역할은 애플리케이션의 기능을 실행하기 위한 데이터의 형식과 처리 절차 등을 결정 것이다. 문자와 이미지 등 인간이 인식할 수 있도록 데이터를 표현한다.

데이터 송수신 규칙

프로토콜의 제어정보 '헤더'를 만든다

통신 주체인 애플리케이션이 데이터를 주고받게 하려면, 복수의 프로토콜을 조합할 필요가 있다. TCP/IP에서는 네 개의 프로토콜을 조합한다.

각 프로토콜에는 각각의 기능을 실현하기 위한 제어 정보(헤더)가 필요하다. 예를들어 데이터를 전송하는 프로토콜이라면, 헤더에는 출발지와 목적지 주소가 지정된다. 각 프로토콜은 데이터를 전송할 때 헤더를 추가한다. 헤더를 추가하는 처리를 캡슐화라고 한다.

프로토콜이 데이터를 받으면, 각 프로토콜 헤더를 바탕으로 적절하게 처리하여 헤더를 벗겨내고 다시다른 프로토콜로 처리를 넘긴다. 이런 동작을 역 캡슐화 또는 __비 캡슐화__라고 부른다.

l3-switch

데이터 수신은 각 계층의 프로토콜이 각각의 헤더를 해석하고 헤더를 제거해서 상위 프로토콜로 데이터 처리를 넘겨준다.

물리적인 신호로 변환된다.

웹 브라우저의 데이터는 우선 HTTP 헤더로 캡슐화되어 TCP로 넘어간다. TCP 헤더가 추가되고 다시 IP 헤더가 추가된다. 마지막으로 이더넷 헤더와 FCS(Frame Check Sequence)가 추가되면 네트워크로 내보낼 데이터 전체가 완성된다. FCS는 에러 체크를 위한 정보이다.

데이터를 부르는 방법은 다양하다

계층별로 데이터를 부르는 방법
  • 애플리케이션층 : 메시지 (HTTP 메시지)
  • 트랜스포트층 : 세그먼트 또는 데이터그램 (TCP를 이요할 때 세그먼트, UDP를 이용할 때 데이터그램이라고 부른다.)
  • 인터넷층 : 패킷 또는 데이터그램(IP패킷 또는 IP데이터그램이라고 부른다.)
  • 네트워크 인터페이스층 : 프레임(이더넷 프레임)

데이터를 목적지까지 전송한다

IP(Internet Protocol)란?

IP의 역할은 '엔드투엔드 통신'을 하는 것이다. 네트워크 상의 어떤 PC에서 다른 PC 등으로 데이터를 전송하는 것이 IP의 역할이다.

IP주소의 개요

IP주소란 TCP/IP에서 통신 상대가 되는 호스트를 식별하기 위한 식별 정보이다.

목적지는 하나? 여러개?

  • 유니캐스트

    단 한 곳으로 데이터를 전송하는 것.

  • 브로드캐스트

    같은 네트워크 상의 모든 호스트에 완전히 똑같은 데이터를 전송하는 것

  • 멀티캐스트

    같은 애플리케이션이 동작하는 등 특정 그룹에 포함되는 호스트에 환전히 똑같은 데이터를 전송하는 것

IP주소의 구성

유니캐스트 IP주소의 구성

PC와 서버 등 TCP/IP 통신을 하는 호스트에 설정하는 IP주소는 유니캐스트 IP주소 이다. TCP/IP 통신의 대부분은 유니캐스트이다.

IP주소는 __네트워크부__와 __호스트부__라는 두 개의 부분으로 구성된다. ('네트워크부'는 '네트워크 주소', '호스트부'는 '호스트 주소'라고 표현하기도 한다.)

브로드캐스트 IP 주소

네트워크에 모든 호스트에 일괄적으로 데이터를 전송할 때 이용하는 브로드캐스트 IP주소는 32비트가 모두 '1'인 IP 주소이다. 도트형 10진 표기로 '255.255.255.255'가 브로드캐스트 주소이다. (유니캐스트 IP 주소 후반 호스트부에서 모든 비트가 1로 된 IP 주소도 브로드캐스트 IP주소이다.)

멀티캐스트 IP주소

멀티캐스트 IP주소로서 '224.0.0.0 ~ 239.255.255.255'로 범위가 정해져 있다.

IP주소의 범위 구분

서브넷 마스크란?

IP 주소는 전반적의 네트워크부와 후반의 호스트부로 구성된다. 네트워크부와 호스트부의 구분은 고정된 것이 아니라 가변적이다. 32비트 주소의 어디까지가 네트워크부인지 명시한 것이 __서브넷 마스크__이다. 서브넷 마스크는 IP 주소처럼 32비트이므로 '0'과 '1'이 32개 나열된다. '1'은 네트워크부를, '0'은 호스트부를 나타낸다.

서브넷 마스크는 반드시 연속한 '1'과 연속한 '0' 이다. 교대로 나타나는 서브넷 마스크는 없다.

또한 / 뒤에 연속한 '1'의 개수로 표기하는 경우도 있는데 __프리픽스 표기__라고 부른다.

192.168.1.1 255.255.255.0 -> 192.168.1.1/24

예)

네트워크부 호스트부
IP 주소 1100 0000 1010 1000 0000 0001 0000 0001
서브넷 마스크 1111 1111 1111 1111 1111 1111 0000 0000
네트워크 주소와 브로드캐스트 주소

IP주소 후반 호스트를 모두 비트 '0'으로 채우면 네트워크 주소가 되고,

호스트부를 모두 '1'로 채우면 브로드캐스트 주소가된다.

네트워크에 접속하는 두 단계

물리적인 접속과 논리적인 접속

네트워크에 접속할 때 '물리적인 접속'과 '논리적인 접속'이라는 두 개의 단계가 있다.

TCP/IP의 계층으로 말하면, 물리적인 접속은 네트워크 인터페이스층이고, 논리적인 접속은 이더넷층이다.

물리적인 접속이란 물리적인 신호를 주고받을 수 있게하는 것이다. 그리고 물리적으로 접속이 이루어진 후에, 논리적인 접속으로 IP 주소 설정도 필요해진다. 그래서 DHCP 등의 기술로 자동을 설정하게 하고, 사용자에게 IP주소 설정을 의식하지 않게 하는 경우가 많다.

즉 LAN 케이블을 꽂아 물리적인 접속이 완료되면, 자동으로 논리적인 접속도 완료할 수 있게된다.

인터넷에서 사용하는 주소와 사설 네트워크에서 사용하는 주소

IP 주소의 이용범위

IP 주소는 이용 범위에 따라, __공인 IP 주소__와 사설 IP 주소 2가지로 분류된다.

공인 주소는 인터넷에서 이용하는 IP 주소이다. 공인 주소는 인터넷 전체에서 중복되지 않도록 관리된다. 퍼블릭 주소, 글로벌 주소라고도 불린다.

사내 네트워크 등의 사설 네트워크에서 이용하는 IP 주소가 사설 주소이다.

사설 주소의 범위는 다음과 같다.

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 192.168.0.0 ~ 192.168.255.255

다른 네트워크의 사설 주소가 겹치더라도 사설 네트워크 안의 통신에는 전혀 문제가 없다.

사설 네트워크에서 인터넷으로의 통신

사설 주소 그대로는 응답이 돌아오지 않는다

사설 네트워크에서 인터넷으로 그대로 통신할 수 없다. 인터넷에서는 목적지가 사설 주소로 된 IP 패킷은 반드시 폐기되어 버리기 때문이다.

주소를 변환한다

사설 네트워크에서 인터넷으로 통신하기 위해서는 다음과 같이 __NAT(Network Address Translation)__로 주소를 변환한다.

  1. 사설 네트워트에서 인터넷으로 요청을 전송할 때, 출발지 IP주소를 변환한다.
  2. 라우터는 나중에 원래대로 되돌리기 위해 변환한 주소의 대응을 NAT 테이블에 보존해 둔다.
  3. 요청에 대한 응답이 라우터로 돌아오면, 목적지 IP 주소를 변환한다. 이때 NAT 테이블에 보존해 둔 주소의 대응을 이용한다.

사설 주소와 공인 주소를 1대 1로 대응시키려면, 공인 주소가 많이 필요해진다. 복수의 사설 주소를 하나의 글로벌 주소에 대응시키는 주소 변환을 __NAPT(Network Address Port Translation)__라고 부른다.

데이터가 목적지에 잘 도착했을까?

IP는 확인하지 않는다

IP로데이터를 다른 호스트에 전송하지만, IP에는 제대로 도착했는지 확인할 방법이 없다. 이런 IP를 이용하는 데이터 전송의 특징을 __최선형(best effort)__라고 한다. 즉 '데이터를 보내기 위해 최선을 다하겠지만, 안 되도 어쩔 수 없지'라는 것이 IP의 특징이다.

그래서 별도로 IP에 의한 엔드투엔드 통신이 정상적으로 이루어졌는지 확인하는 기능을 갖춘 프로토콜로서 ICMP(Internet Control Message Protocol)가 개발 되었다.

ICMP의 기능
  • 에러 리포트
  • 진단 기능

어떤 이유로 IP 패킷을 폐기했다면, 폐기한 기기가 ICMP를 이용해 폐기한 IP 패킷의 출발지로 에러 리포트를 전송한다. 이 에러 리포트를 __도달불능 메시지__라고 부른다.

진단 기능은 __ping 커맨드__로 ICMP에코 요청/응답 메시지를 보내서, 지정한 IP 주소와 통신할 수 있는지 확인한다.

IP 주소와 MAC 주소를 대응시킨다

ARP란?

TCP/IP에서는 IP 주소를 지정해서 데이터(IP 패킷)를 전송한다. IP 패킷은 PC나 서버 등의 인터페이스까지 전송되어 간다. PC나 서버 등의 인터페이스는 MAC주소로 식별한다. TCP/IP의 IP 주소와 인터페이스를 식별하기 위한 MAC 주소를 대응시키는 것이 __ARP__의 역할이다.

목적지 IP 주소에 대응하는 MAC 주소를 구하기 위해 ARP를 이용한다. 또한 IP 주소와 MAC주소를 대응시키는 것을 __주소 해석__이라고 한다.

ARP 동작의 흐름

ARP의 주소 해석 범위는 같은 네트워크 내의 IP 주소이다.

ARP 동작의 흐름은 다음과 같다.

  1. ARP 요청을 IP 주소에 대응하는 MAC 주소를 질의한다.
  2. 질의받은 IP 주소를 가진 호스트가 ARP 응답으로 MAC 주소를 알려준다.
  3. 주소 해석한 IP 주소와 MAC 주소의 대응을 ARP 캐시에 보존한다.

포트 번호로 애플리케이션에 할당한다

포트 번호의 역할

호스트에서 동작하는 애플리케이션에 데이터를 배분하기 위해서는 각각의 애플리케이션을 식별할 수 있어야 한다. 애플리케이션을 식별하는 데에는 __포트 번호__를 이용한다. 포트 번호란 TCP/IP의 애플리케이션을 식별하는 식별 번호로, TCP 또는 UDP 헤더에 지정한다.

웰노운 포트 번호로 웹브라우저의 요청을 기다린다

서버 애플리케이션을 실행하면, 웰노운 포트 번호로 클라이언트 애플리케이션 요청을 기다린다.

프로토콜 TCP UDP
HTTP 80 -
HTTPS 443 -
SMTP 25 -
POP3 110 -
IMAP4 143 -
FTP 20/21 -
DHCP - 67/68
등록된 포트로 식별한다

등록된 포트는 웰노운 포트 이외에 자주 이용되는 서버 애플리케이션을 식별하기 위한 포트 번호이다. 등록된 포트 번호도 미리 정해져 있다.

동적/사설 포트로 식별한다

동적/사설 포트는 클라이언트 애플리케이션을 식별화기 위한 포트 번호이다. 미리 정해져 있지 않다. 클라이언트 애플리케이션이 통신할 때 동적으로 할당된다.

포트번호
명칭 포트 번호 범위 의미
웰노운 포트 0 ~ 1023 서버 애플리케이션용으로 예약된 포트 번호
등록된 포트 1024 ~ 49151 자주 이용되는 애플리케이션의 서버 쪽 포트 번호
동적/사설 포트 49152 ~ 65535 클라이너트 애플리케이션용 포트 번호

확실하게 애플리케이션의 데이터를 전송한다

TCP란?

TCP란 신뢰성이 있는 애플리케이션 간의 데이터 전송을 하기 위한 프로토콜이다.

TCP에 의한 데이터 전송 절차
  1. TCP 커넥션 찾기
  2. 애플리케이션 간 데이터 송수신
  3. TCP 커넥션 끊기

이 확인 프로세스는 __3웨이 핸드쉐이크__라고 부른다.

애플리케이션이 다루는 데이터를 TCP로 송신하기 위해서는, 애플리케이션의 데이터에 애플리케이션 프로토콜 헤더와 TCP 헤더를 추가할 필요가 있다. 이를 TCP 세그먼트라 한다. 이때 애플리케이션의 데이터 크기가 크면 분할하여 복수의 TCP 세그먼트로서 전송한다. 어떻게 분할했는지는 TCP 헤더에 기술되고, 목적지에서 차례대로 원본 데이터로 조립한다. 또한, 데이터가 도착하면 받았다고 확인해주는데 데이터 수신 확인을 __ACK__라고 부른다.

만약 일부 데이터가 제대로 도착하지 않았다면 데이터를 재전송한다. 또 네트워크가 혼잡하면, 데이터 전송 속도를 제한한다. 이런 데이터 전송 구조를 __플로어 제어__라고 한다.

TCP로 데이터를 분할한다

TCP 헤더 형식

TCP 헤더에서 가장 중요한 것은 포트 이다. 포트 번호로 적절한 애플리케이션 프로토콜에 데이터를 배분할 수 있기 때문이다. 그리고 신뢰성 있는 데이터 전송을 위해서는 __시퀀스 번호__와 __ACK 번호__라는 것이 있다. 시퀀스 번호는 TCP로 전송하는 데이터 순서를 나타낸다. ACK 번호는 데이터를 바르게 수신했음을 확인하기 위해 이용한다.

l3-switch

데이터 분할 구조

TCP에는 데이터를 분할하는 기능도 있다. TCP에서 애플리케이션의 데이터를 분할하는 단위는 __MSS(Maximum Segment Size)__라고 부른다. MSS를 넘는 크기의 데이터는 MSS 단위로 나누어 송신한다. MSS의 표준 크기는 1460 바이트이다.

애플리케이션에 데이터를 배분하기만 한다

UDP

UDP는 PC나 서버 등에 도달한 데이터를 적절한 애플리케이션에 배분하는 기능만 있는 프로토콜이다.

UDP로 애플리케이션의 데이터를 송신하기 위해서는 UDP 헤더를 추가한다. UDP 헤더와 애플리케이션의 데이터를 합쳐 UDP 데이터그램이라고 부른다.

아래는 UDP 헤더 형식이다.

출발지 포트번호(16) 도착지 포트 번호(16)
데이터 그램 길이(16) 체크섬(16)

UDP는 상대방의 애플리케이션이 동작하는지 등을 확인하지 않은 채 무조건 UDP 데이터그램으로 애플리케이션의 데이터를 송신한다. TCP에 비해 데이터의 효율성이 좋다는 장점이 있다. 반면에 신뢰성이 높지 않다는 단점이 있다.

또한, UDP에는 크기가 큰 데이터를 분할하는 기능도 없다. 그러므로 전송해야할 애플리케이션의 데이터 크기가 클 때에는 애플리케이션 쪽에서 적절한 크기로 쪼개야만 한다.

네트워크의 전화번호부

이름해석

애플리케이션을 이용하는 사용자가 IP 주소를 이해하긴 어렵다. 그래서 애플리케이션이 동작하는 서버는 클라이언트 PC 등의 호스트에 사용자가 이해하기 쉬운 이름인 호스트명을 붙인다.

사용자가 URL 등으로 애플리케이션의 주소를 지정하면, 호스트 이름에 대응하는 IP 주소를 자동으로 구하는 것이 DNS의 역할이다. 이처럼 호스트명에서 IP 주소를 구하는 방법을 이름해석이라고 부른다.

네트워크 전화번호부

TCP/IP 통신에 필요한 IP주소는 TCP/IP 네트워크의 전화번호부인 DNS에 문의해서 조사한다.

DNS로 IP 주소를 자동으로 구한다

DNS 서버

DNS를 이용하려면 DNS 서버가 필요하다. DNS 서버에 미리 호스트명과 IP 주소의 대응 관계를 등록해둔다. DNS 서버에서 등록하는 정보를 리소스 레코드라고 부른다.

종류 의미
A 호스트명에 대응하는 IP 주소
AAAA 호스트명에 대응하는 IPv6 주소
CNAME 호스트에 대응하는 별명
MX 도메인명에 대응하는 메일 서버
NS 도메인명에 대응하는 메일 서버
PTR IP 주소에 대응하는 호스트명
DNS(Domain Name System)의 이름해석

DNS 서버는 루트를 정점으로 한 계층 구조로 되어 있다. 그리고 애플리케이션이 동작하는 호스트에는 DNS 서버의 IP 주소를 설정해 둔다. DNS 서버에 질의하는 기능은 OS에 내장되어 있고, DNS 리졸브라고 한다.

자신이 관리하는 도메인 이외의 호스트명을 찾으려면 루트에서부터 시작하여 여러 번의 질의를 반복해야 한다. DNS가 이처럼 이름해석을 반복해서 묻는 것을 재귀질의라고 부른다.

하지만 매번 루트에서부터 재귀질의를 하는 것은 효율적이지 않아 DNS 서버와 리졸버는 질의한 정보를 한동한 캐시에 보존한다.

필요한 설정을 자동화한다

설정을 자동화하는 DHCP

TCP/IP를 이용해 통신하기 위해서는 PC/스마트폰, 서버, 각종 네트워크 기기에 TCP/IP 설정이 바르게 되어 있어야만 한다. 이런 설정에 있어 실수 등을 업애려면 설정을 자동화하는 방법이 효과적이다. 설정을 자동화하는 프로토콜이 DHCP이다.

DHCP의 동작
  1. DHCP 서버를 준비한다.
  2. 할당할 IP 주소 등 TCP/IP 설정을 등록해둔다.
  3. PC 등에서 DHCP 클라이언트가 되도록 설정한다.

DHCP 클라이언트의 호스트가 네트워크에 접속하면, DHCP 서버와 다음 네가지 메시지를 주고 받으면서 자동으로 TCP/IP를 설정을 한다.

  • DHCP DISCOVER : DHCP서버가 있나요? 있으면 사용할 수 있는 TCP/IP 설정을 알려주세요.(클라이언트 -> 서버)
  • DHCP OFFER : 사용할 수 있는 TCP/IP 설정은 이것이다. 어떤가요? (서버 -> 클라이언트)
  • DHCP REQUEST : 그럼, 그 설정 정보(IP 주소)를 사용하게 해주세요. (클라이언트 -> 서버)
  • DHCP ACK : 알겠어요 (서버 -> 클라이언트)

DHCP의 통신은 브로드캐스트를 이용한다.