CS50 - 인터넷과 네트워크


[인터넷과 네트워크]

1.인터넷 기초

  • 인터넷 : 프로그래밍을 통해 인터넷에서 실행되는 코드도 작성할 수 있습니다. 인터넷이 동작할 수 있도록 많은 다양한 시스템들과 프로토콜(Protocol, 통신 규칙)들이 갖추어져 있고, 모든 인터넷 요소들이 더불어 동작해야 사람들이 인터넷을 효과적으로 사용할 수 있습니다.

  • IP 주소 : 인터넷상에 있는 장치들은 IP 주소(Internet Protocol Address)를 할당 받습니다. IP 주소는 인터넷에 연결된 장치들을 식별할 수 있도록 해주고, 인터넷상의 다른 장치들이 특정 장치를 찾을 수 있도록 해줍니다. IP 주소는 203.253.15.17 와 같이 #.#.#.# 의 형태입니다. 각 #은 10진수로는 0부터 255까지의 숫자이고 2진수로는 8자리의 숫자입니다. 따라서 IP 주소는 32비트로 표현 가능한 약 40억 개의 공인된 주소를 쓸 수 있습니다. 하지만 인터넷에 연결된 장치들이 많아지면서 40억 개의 주소가 점점 부족하게 되었습니다. 이 문제를 해결하기 위한 대책 중의 하나로, 어떤 장치들에게는 사설 IP 주소를 할당하여 하나의 공인된 IP 주소를 공유할 수 있도록 합니다. 그러나 IoT 장치 등 인터넷 장치들의 숫자가 폭발적으로 증가할 것을 대비하는 장기적인 대책으로, IPv4라고 불리는 32bit IP 주소 방식을 IPv6라고 불리는 128bit IP 주소 방식으로 대체하도록 했습니다. IPv4 주소는 숫자 4개의 형태로 각각 8bit 값을 나타내지만, IPv6 주소는 숫자 8개를 가지며 각각 16bit 값을 나타냅니다. af21:10a8:1253:abd3:3019:0c2e:0b80:12a0 와 같이 #:#:#:#:#:#:#:# 형태로 말이죠. 또한, 정보가 인터넷을 가로질러 전송될 때, 어디에서 정보를 보냈으며 어디로 보내는지를 인터넷이 알 수 있도록 IP 주소를 사용합니다. 정보에 대한 반송 주소와 도착 주소가 있다는 점에서, 실제 우편을 보내는 것과 매우 비슷합니다.

  • 인터넷에 연결하기 : 인터넷에 장치 하나를 연결하기 위해서는 몇몇 단계들이 필요합니다. 무선 장치(노트북이나 휴대폰)를 인터넷에 연결하기 위해서는, 먼저 액세스 포인트(AP)에 무선으로 연결해야 합니다. 많은 인터넷 사용자들이 볼 때 액세스 포인트는 무선 공유기의 형태로 보이게 되는데 무선 공유기 역시 액세스 포인트의 한 종류입니다. 이 액세스 포인트는 스위치에 연결되고, 스위치는 라우터에 연결되고, 라우터는 인터넷의 나머지 부분과 연결됩니다. 우리가 인터넷을 사용하는 과정에서 DHCP와 DNS는 특별히 중요한 역할을 담당합니다. DHCP는 동적 호스트 구성 프로토콜(Dynamic Host Configuration Protocol)을 의미하며, 컴퓨터에 IP 주소를 할당하는 일을 합니다. 한 때, 네트워크 관리자가 각 컴퓨터에게 수작업으로 IP 주소를 할당해줘야 했습니다. 하지만 지금은 DHCP가 이 과정을 자동으로 해줍니다. 또한,

  • DNS 도메인 이름 시스템(Domain Name System) : 방문하고자 하는 모든 웹사이트의 IP 주소를 인터넷을 사용하는 모든 사람들이 기억하기는 어렵습니다. 대부분의 사람들은 IP주소를 기억하는 대신 웹 페이지에 접속하기 위해 텍스트로 된 주소(예를 들어 google.com)를 웹 브라우저에 입력합니다. 이 주소를 URL(Uniform Resource Locator) 혹은 도메인 주소라고 부릅니다.DNS는 URL을 받아서 IP 주소로 변환해주는 일을 합니다. 사용자가 웹 브라우저에 URL을 치면, DNS 서버는 먼저 URL을 보고 어느 IP 주소를 나타내는 것인지 알아냅니다.

  • TCP : 전송 제어 프로토콜을 의미하며, 인터넷으로 보내진 모든 데이터 패킷이 전송되도록 보장하고, 인터넷을 통해 전송되는 정보 패킷이 어떤 서비스를 위한 것인지(웹 검색, 이메일 등) 알 수 있도록 보장합니다.

  • HTTP : 하이퍼텍스트 전송 프로토콜이며, 웹 브라우저들과 서버들이 통신할 수 있도록 도와주는 프로토콜입니다.

2. IP 주소

  • IP 주소 : 인터넷 프로토콜은 인터넷의 정보들이 어떻게 전송되는지를 정의하기 위한 규칙들입니다. 프로토콜이란, 규칙들의 집합을 말합니다. 인터넷 프로토콜 중 일부는 인터넷 상에 있는 각 장치에 대해 IP 주소를 할당해주는 것과 관련 있습니다. IP 주소는 인터넷 상의 장치들을 식별할 수 있게끔 해줍니다. IP(인터넷 프로토콜)은 여러 버전을 거쳐왔습니다. 가장 최근 버전은 IPv6로, 기존의 IPv4 프로토콜을 대체하기 위한 것입니다.

  • IPv4 주소 : IPv4 시스템에서, IP 주소는 마침표로 구분된 4개의 10진수로 표현되곤 합니다. 각 숫자는 0부터 255까지의 10진수입니다(8bit공간). 결과적으로, 각 IPv4 주소는 32bit이며, 최대 2^32개의 주소가 존재할 수 있습니다. 이는 약 43억 개의 주소입니다.

  • IPv6 주소 :그러나 인터넷이 발달하면서, 43억 개의 주소로는 인터넷에 연결하려는 모든 장치들을 더 이상 수용할 수가 없게 되었습니다. 그 결과, 사용 가능한 IP 주소를 늘리기 위해 IPv6 표준이 개발되었습니다.IPv6에서, IP 주소는 콜론으로 구분된 8개의 숫자로 구성됩니다. 각 숫자를 10진수로 표현하지 않고, 16bit 숫자를 0000부터 fffff까지의 16진수로 표현했습니다.

  • 사설 IP 주소 : 인터넷 상의 모든 IP 주소들이 다 접근 가능한 것은 아닙니다. 사설 IP 주소라고 알려진 어떤 주소들은 특정 로컬 네트워크 내에서 사용되도록 따로 떼어놓습니다. 로컬 네트워크에 있는 컴퓨터들은 사설 IP 주소를 이용하여 다른 컴퓨터와 통신할 수 있지만, 이 네트워크 밖에 있는 컴퓨터들이 접근할 수는 없습니다. 보통, 사설 IP 주소를 갖는 장치들은 공인 IP 주소를 공유합니다. 이렇게 하면 IPv4 표준에서 필요한 공용 IP 주소의 개수를 줄일 수 있습니다. 10.#.#.#, 172.16.#.# - 172.31.#.#, 192.168.#.# 의 형태를 같은 주소들은 사설 IP 주소로 쓰기 위해 따로 떼어놓은 것입니다. IP 주소 127.0.0.1은 다른 장치에 연결하는 것이 아니라, 사용자가 현재 사용하고 있는 장치에 연결하는 주소입니다. 이러한 이유로, 이 주소를 로컬호스트(localhost)라고 부릅니다.

3. DNS와 DHCP

인터넷상에 있는 장치들이 IP 주소를 효과적으로 사용할 수 있도록 하는 두 가지 중요한 시스템이 마련되어 있습니다. 도메인 이름 시스템(Domain Name System) 혹은 DNS는 구글 크롬이나 인터넷 익스플로러 같은 웹 브라우저 주소창에 치는 텍스트를 IP 주소로 변환해줍니다. 동적 호스트 구성 프로토콜(Dynamic Host Configuration Protocol) 혹은 DHCP는 각 장치에 IP 주소를 할당하는 것을 도와줍니다.

  • DNS : URL, 즉 도메인 주소는 IP 주소보다도 사람이 읽기 쉽고 기억하기 쉬운 웹 주소입니다.사용자가 기억하기 쉬운 URL을 사용하더라도 궁극적으로는 접근하려는 장치의 IP주소를 알아야 합니다. 그래서 DNS가 필요한 것입니다. DNS는 google.com이나 facebook.com 같이 식별자 역할을 하는 도메인을 그와 대응하는 IP 주소로 바꿔줍니다.웹 브라우저에 URL을 치면, 컴퓨터는 DNS 서버에 접속합니다. DNS 서버는 어느 도메인 이름이 어떤 IP 주소와 대응하는지에 대한 정보를 저장하고 있습니다. DNS 서버는 여러 개가 있습니다. 어느 도메인 이름이 어떤 IP 주소와 대응하는지에 대한 정보가 바뀔 때 모든 DNS 서버들에 들어있는 정보가 같은 시간에 업데이트되는 것은 아닙니다. 그렇기 때문에 DNS 시스템의 변경 사항이 인터넷상의 모든 DNS 서버로 전달되는데 시간이 걸리더라도, DNS 서버끼리는 서로 변경된 사항에 대해 공유해야 합니다.

  • DHCP : 네트워크 상에 있는 컴퓨터에 고유한 IP 주소 자동 할당

4. 라우터

  • 라우터 : 인터넷에서 데이터를 쉽게 전송하도록 돕기 위해서 라우터가 사용됩니다. 라우터는 인터넷의 구성 요소로, 데이터를 다양한 네트워크로 보내줍니다. 라우터는 보낸 데이터가 올바른 목적지에 잘 도착할 수 있도록 보장하기 위해서 특정 명령어 집합을 따릅니다.

  • 라우팅 모델 : 인터넷에서, 인터넷에 연결된 모든 장치들은 다른 인터넷에 연결된 장치들과 통신할 수 있어야 합니다. 네트워크상에 있는 모든 컴퓨터는 인터넷에 연결된 다른 모든 컴퓨터와 물리적으로 연결되어 있습니다.한 컴퓨터에서 다른 컴퓨터로 정보를 보낼 때, 정보를 곧장 목적지로 보내기 때문에, 이 모델을 이용하면 전송 속도가 빠릅니다. 그러나 이러한 모델은 비현실적으로 많은 물리적 연결이 필요할 것입니다. 인터넷에 연결된 장치가 수백만, 수십억 개라면 서로 다른 모든 컴퓨터들을 연결한다는 것은 불가능에 가깝습니다. 대신에, 인터넷은 라우터를 씁니다. 라우터는 인터넷상의 장치들 사이에서 중재자 역할을 합니다. 모든 컴퓨터는 어떤 라우터 하나와 연결되어 있고, 각 라우터는 다른 라우터들과 연결되어 있습니다. 그렇기 때문에, 컴퓨터는 하나 이상의 라우터를 거쳐 데이터를 인터넷상의 다른 컴퓨터로 보낼 수 있습니다. 이러한 방법으로 인터넷상의 모든 컴퓨터들은 다른 모든 컴퓨터들과 통신할 수 있습니다. 이때, 전송되는 데이터들은 ‘패킷’ 이라는 단위로 라우터를 통해 인터넷을 거쳐 보내집니다.각 라우터는 목적지 컴퓨터와 연결되어 있는 라우터 중에 목적지에 가까운 라우터로 패킷을 보냅니다.

  • 라우팅 테이블 : 라우터는 각 데이터 패킷이 목적지 IP 주소에 따라 어디로 보내져야 하는지를 알 수 있도록 만들어져 있습니다. 이 정보들은 대체로 라우팅 테이블에 저장되어 있습니다. 라우터는 IP 주소의 앞 숫자들을 보고, 패킷을 어느 방향으로 보내야 할지를 판단합니다. 하지만, 라우터는 데이터 패킷이 목적지까지 도달하는 데 필요한 정확한 경로 정보를 갖고 있지 않아도 됩니다. 라우터는 그저 패킷을 목적지까지 한 단계 더 가까이 보내주고 나머지 일은 다음 라우터에게 맡깁니다. 또한 일반적으로 데이터가 인터넷의 한 지점에서 다른 지점으로 가기 위한 경로는 하나가 아닙니다. 라우터는 같은 목적지의 데이터 패킷들을 서로 다른 경로로 보냅니다.

5.TCP와 IP

컴퓨터들이 인터넷을 통해 통신하기 위해서는 통신을 어떻게 해야 하는지, 인터넷상의 한 지점에서 다른 지점으로 어떻게 데이터가 도달하는지 알려주는 표준 집합 혹은 프로토콜이 필요합니다. 프로토콜 없이는 수신 장치가 정보를 받게끔 보장하거나 받은 정보로 무엇을 해야 할 지 보장해줄 수 없습니다. 프로토콜에는 TCP로 알려진 전송 제어 프로토콜(Transmission Control Protocol)과 IP로 알려진 인터넷 프로토콜(Internet Protocol)입니다. 둘을 함께 써서 TCP/IP로 알려져 있습니다.

  • TCP(전송 제어 프로토콜) : 한 컴퓨터가 다른 컴퓨터로 데이터를 보낼 때 커다란 하나의 패킷을 작은 패킷들로 나누어 보내게 됩니다. 전송 제어 프로토콜(TCP)는 데이터를 순서 있는 패킷들로 분해하는 일을 합니다. 패킷들이 같은 시간에, 같은 순서로 목적지에 도착한다는 보장이 없기 때문에 TCP는 각 패킷에 대해 순서에 맞게 번호를 매깁니다. 이러한 방법으로 수신 컴퓨터는 받은 패킷들을 올바른 순서로 재조립할 수 있게 됩니다. 패킷 번호를 할당하는 것 외에도, TCP는 데이터에 포트 번호를 할당합니다. 이 데이터가 어떤 유형의 인터넷 서비스에 사용되는지를 나타내기 위해서 입니다. 예를 들어, SMTP(이메일)는 25번 포트를 사용하지만 HTTP(일반 웹 검색)는 80번 포트를 사용합니다.

  • 인터넷 프로토콜(IP) : 정보가 한 컴퓨터에서 다른 컴퓨터로 어떻게 전송되는지에 대한 규칙들을 모아놓은 것이라는 점을 상기해보세요. 인터넷 프로토콜은 연결된 라우터들의 망으로 만들어집니다. 라우터는 한 컴퓨터에서 다른 컴퓨터로 정보를 보내는 것을 도와주는 장치입니다. 송신 장치에서 목적지까지 가기 위해 데이터는 보통 여러 라우터들을 거쳐가야 합니다. 각 라우터는 최종 목적지까지 가기 위해 어느 방향으로 데이터를 보내야 하는지 알아낼 때 필요한 지시 정보들의 집합으로 만들어져 있습니다.

  • TCP/IP : 인터넷이 통신하기 위한 과정을 요약하면, 인터넷을 통해 데이터를 받기 위해서 우선 데이터가 더 작은 패킷들로 분해되어야 하고, TCP는 각 패킷에 포트 번호와 패킷 번호를 매깁니다. IP가 패킷의 목적지를 알려주면 라우터들을 통해 데이터가 전송됩니다. 라우터들은 마침내 패킷을 목적지로 보내줄 것입니다

6.HTTP

HTTP(Hypertext Transfer Protocol) : 웹 브라우저가 웹 서버와 대화하기 위한 프로토콜입니다. 사용자가 웹 페이지를 방문하려 할 때, 그들의 웹 브라우저(클라이언트)는 웹 서버에 웹 페이지의 내용을 요청해야 합니다. 웹 서버는 그 요청에 응답하기 위해 요청을 해석하고, 요청된 페이지를 클라이언트에게 돌려보냅니다. HTTP는 이 과정을 용이하게 해주며, 요청을 보내고 받는 표준적인 방법을 정해줍니다.

  • GET 요청 : 사용자가 웹 브라우저에 URL을 입력해 웹 페이지를 요청하면, 웹 브라우저는 GET 요청이라는 특정한 유형의 HTTP 요청을 보냅니다. GET 요청은 단어 GET으로 시작되고 GET 뒤에는 요청 URI를 써주는데, 이것은 사용자가 요청한 웹 페이지의 경로를 나타냅니다. URI는 Uniform Resource Identifier의 약자입니다. /는 웹 페이지의 최상위 경로를 나타냅니다. 여러분이 URL을 입력할 때 google.com/ 이나 facebook.com/ 처럼 / 뒤에 아무것도 명시하지 않는 것은 그 웹 페이지의 최 상위 경로임을 뜻합니다.

  • POST 요청 : 웹 브라우저는 POST 요청이라는 다른 유형의 HTTP 요청을 보낼 수 있습니다. POST요청은 사용자가 온라인 폼에 데이터를 입력하고 웹 서버로 데이터를 전송할 때 사용됩니다.

  • 상태코드 : 웹 서버가 클라이언트로부터 HTTP 요청을 받을 때, 서버는 클라이언트로 응답을 돌려보내야 합니다. 예를 들어, 클라이언트가 웹 페이지를 요청하면 서버는 웹 페이지의 내용을 돌려보내야 합니다.서버는 클라이언트에게 요청의 결과를 나타내는 상태 코드를 함께 보내주면서 응답합니다. 서버에 사용자가 찾는 페이지가 있고 성공적으로 응답할 수 있으면, 서버는 상태 코드 200을 보냅니다. 요청이 성공적으로 처리되었다는 의미입니다. 반면, 사용자가 웹 서버에 존재하지 않는 페이지를 요청할 경우, 서버는 상태 코드 404와 함께 응답합니다. 찾을 수 없다는 의미입니다. 여러분이 웹을 검색하다가 404 오류를 보았던 이유입니다. 다른 유형의 오류 역시 상태 코드로 표현됩니다. 사용자가 접근 권한을 갖고 있지 않은 웹 페이지에 접근하려고 시도한다면, 웹 서버는 상태 코드 403과 함께 응답할 것입니다. 금지됨이라는 의미입니다. 사용자의 요청을 처리하는 중에 웹 서버에 오류가 발생했다면, 서버는 종종 상태 코드 500과 함께 응답할 것입니다. 내부 서버 오류라는 뜻입니다.

7.신뢰모델(Trust Model)

사용자가 인터넷에서 소프트웨어를 다운로드할 때, 그 소프트웨어에 악성 코드가 없다는 커다란 신뢰가 필요합니다. 컴퓨터에 다운로드하는 소프트웨어가 여러분 컴퓨터에 있는 모든 것을 삭제할 수도 있기 때문입니다. 하지만, 우린 여전히 우리가 다운로드하는 소프트웨어가 안전하다고 믿습니다. 이것이 신뢰 모델의 기본입니다.

  • 백도어(Back Door) : 사용자들이 원래 시스템에 접속하는 방법과는 다른 비정상적인 수단으로 시스템에 접속하는 방법.

  • 컴파일러 내부의 익스플로잇(Exploit): 프로그램을 다운로드하기 전에 프로그램의 코드를 볼 수 있고, 그 코드에 악성 코드나 백도어가 없어 보인다고 해도 프로그램 자체가 안전한 것은 아닙니다. 소스 코드를 오브젝트 코드로 변환시키는 프로그램인 컴파일러가 익스플로잇(exploit)의 원천일 가능성이 있습니다. 예를 들어 컴파일러는 백도어가 없는 로그인 프로그램에 백도어를 만드는 코드를 주입하도록 프로그램될 수 있습니다. 로그인 프로그램의 코드를 보더라도 백도어의 흔적을 찾을 수 없을 것입니다. 만약 소스 코드가 악성 컴파일러에 의해 컴파일 되었다면, 결과적으로 프로그램에는 백도어가 있을 것입니다.물론 컴파일러의 코드를 보게 된다면 로그인 프로그램에 악성 코드를 주입하는 코드가 컴파일러에 있다는 것을 알 수 있습니다. 하지만 컴파일러에 악성 코드를 주입하는 컴파일러를 만들 수 있다면, 이론상으로 해커는 악의가 없는 소스로 된 컴파일러를 악성 컴파일러로 만들 수 있습니다. 결론적으로, 컴파일러의 소스 파일과 로그인 프로그램의 소스 파일이 악성코드나 백도어를 포함하지 않을 지라도, 소스 파일을 컴파일 하는 과정에서 악성 코드가 주입될 수 있습니다.

8. 사이버 보안

  • 보안 소켓 계층TTPS(HTTP Secure) : HTTP와 보안 소켓 계층(SSL)이라고 불리는 기술을 결합한 인터넷 통신 프로토콜입니다. SSL을 사용하는 웹사이트는 각각 인증서를 갖고 있는데 이것은 웹사이트에 접근하려는 사용자에게 제공됩니다. 인증서는 웹 브라우저에게 웹 서버로 보내진 요청을 어떻게 암호화했는지 말해주는 공개키를 포함합니다. 웹 서버는 암호화된 요청을 해독하는 다른 키인 비밀키를 갖고 있습니다.해커는 사이버 공격을 수행하기 위하여 다양한 기술을 활용합니다. 웹 서버와 사용자 사이에는 DNS 서버와 라우터 등으로 악성 코드를 보내 https:// 를 http:// 로 바꿀 수 있습니다. 그 결과 사용자가 봤을 때는 정상적인 사이트이지만 실제로는 그렇지 않은 사이트로 변경됩니다. 이러한 방법을 중간자 공격이라고 합니다.세션 하이재킹은 웹사이트에 접속할 때 자동적으로 만들어지는 임시파일로 사용자의 정보가 담겨있는 쿠키를 얻기 위해 상대방의 네트워크 트래픽을 관찰하고, 상대방의 HTTP 헤더에 쿠키를 사용하여 상대방을 다른 사람으로 생각하도록 웹 서버를 속이는 기술입니다.





© 2020.11. by creamer

Powered by CREAMer