On a couch

6. 인터넷과 네트워크 본문

프론트엔드 공부/CS50

6. 인터넷과 네트워크

couch 2022. 4. 21. 12:07

 

1. 인터넷 기초 (프로토콜)

인터넷

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

IP 주소

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

사설 IP 주소

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

 

홈 라우터 = 무선 공유기 = AP(Access Point)

 

인터넷에 연결하기

  • 인터넷에 장치 하나를 연결하기 위해서는 몇몇 단계들이 필요합니다. 무선 장치를 인터넷에 연결하기 위해서는, 먼저 액세스 포인트(AP)에 무선으로 연결해야 합니다. 무선 공유기 역시 액세스 포인트의 한 종류입니다. 이는 스위치에 연결되고, 스위치는 라우터에 연결되고, 라우터는 인터넷의 나머지 부분과 연결됩니다.
  • DHCP와 DNS는 특별히 중요한 역할을 담당합니다.
    • DHCP는 동적 호스트 구성 프로토콜(Dynamic Host Configuration Protocol)을 의미하며, 컴퓨터에 IP 주소를 할당하는 일을 합니다.
    • 대부분은 IP주소를 기억하는 대신 텍스트로 된 주소를 입력합니다. 이 주소를 URL(Uniform Resource Locator) 혹은 도메인 주소라고 부릅니다. DNS는 도메인 이름 시스템(Domain Name System)을 의미하며, URL을 받아서 IP 주소로 변환해주는 일을 합니다.

 

그 외의 프로토콜

몇몇 프로토콜은 인터넷상에서 효과적인 통신을 보장합니다. TCP는 전송 제어 프로토콜을 의미하며, 인터넷으로 보내진 모든 데이터 패킷이 전송되도록 보장하고, 인터넷을 통해 전송되는 정보 패킷이 어떤 서비스를 위한 것인지(웹 검색, 이메일 등) 알 수 있도록 보장합니다. HTTP는 하이퍼텍스트 전송 프로토콜이며, 웹 브라우저들과 서버들이 통신할 수 있도록 도와주는 또 다른 프로토콜입니다.

 

2. DNS와 DHCP : IP주소를 몰라도 인터넷을 사용할 수 있다

DHCP

  • 예전에는 네트워크 관리자가 일일이 컴퓨터에 IP 주소를 할당하는 일을 했었습니다. 지금은 DHCP가 이 일을 자동으로 해줍니다. 컴퓨터가 네트워크에 연결할 때, 컴퓨터는 한 DHCP 서버에 연결할 것입니다. DHCP 서버는 사용 가능한 IP 주소 풀에 접근할 수 있고, 네트워크상에 있는 컴퓨터 각각에 고유한 IP 주소를 할당하는 일을 합니다.

DNS

  • 웹 브라우저에 URL을 치면, 컴퓨터는 DNS 서버에 접속합니다. DNS 서버는 어느 도메인 이름이 어떤 IP 주소와 대응하는지에 대한 정보를 저장하고 있습니다. DNS 서버는 여러 개가 있습니다. 도메인 이름과 IP 주소의 대응이 바뀔 때 모든 DNS 서버가 실시간으로 업데이트되는 것은 아니지만, 시간이 걸리더라도 DNS 서버끼리는 변경된 사항에 대해 공유합니다.

  • DNS에서 관리하는 도메인은 트리 형태의 계층 구조로 이루어져 있습니다. 기본 최상위 도메인(TLD) 집합이 있는데, TLD는 여러분들이 익숙한 웹 사이트 주소 마지막 부분입니다(com, net, org, edu 등). 웹 사이트 URL들은 이러한 최상위 도메인들 중 하나로부터 가지를 뻗어나갑니다. 예를 들어 “google.com”은 최상위 도메인 “com”에서부터 가지를 뻗어나갑니다. 더 멀리 뻗어나가는 가지들을 서브 도메인이라 합니다. “image.google.com”과 “maps.google.com”이 예입니다.

 

DNS와 DHCP를 사용하면 인터넷상의 장치들은 자기 자신의 IP 주소를 받을 수 있고, 장치들은 사용자가 방문하려는 웹 사이트가 어느 IP 주소와 대응하는지 알 수 있습니다.

 

3. 라우터 : 데이터가 네트워크에서 길을 잃지 않는 이유

라우터 (게이트웨이) = 네비게이션 + 운전기사 / traceroute를 사용하면 실제로 정보가 도시를 지나고 대양을 건너는 경로를 확인할 수 있다.

라우터

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

라우팅 모델

  • 인터넷에 연결된 모든 장치들은 다른 인터넷에 연결된 장치들과 통신할 수 있어야 합니다.

  • 인터넷은 네트워크상의 모든 컴퓨터를 물리적으로 연결하는 대신 라우터를 씁니다. 라우터는 인터넷상의 장치들 사이에서 중재자 역할을 합니다. 모든 컴퓨터는 <그림 2>처럼 어떤 라우터 하나와 연결되어 있고, 각 라우터는 다른 라우터들과 연결되어 있습니다. 그렇기 때문에, 컴퓨터는 하나 이상의 라우터를 거쳐 데이터를 인터넷상의 다른 컴퓨터로 보낼 수 있습니다.
  • 이때, 전송되는 데이터들은 '패킷'이라는 단위로 쪼개진 뒤 라우터를 통해 인터넷을 거쳐 보내집니다. 각 라우터는 목적지 컴퓨터와 연결되어 있는 라우터 중에 목적지에 가까운 라우터로 패킷을 보냅니다. (패킷들 중 일부가 도착에 실패했다면 해당 패킷만 재전송)

 

라우팅 테이블

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

 

4. TCP와 IP

TCP와 IP

프로토콜 없이는 수신 장치가 정보를 받게끔 보장하거나 받은 정보로 무엇을 해야 할 지 보장해줄 수 없습니다. 프로토콜에는 TCP로 알려진 전송 제어 프로토콜(Transmission Control Protocol)IP로 알려진 인터넷 프로토콜(Internet Protocol)입니다. 둘을 함께 써서 TCP/IP로 알려져 있습니다.

가 일어나지 않으려면 통신규칙(=프로토콜)이 필요하다

전송 제어 프로토콜

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

TCP는 정보를 나누어 보내고 다시 합침으로써 정보가 안전히 도착할 확률을 높인다

 

5. HTTP : 하이퍼텍스트 전송 프로토콜

HTTP

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

 

GET은 '정보(요청문)'를 '패킷(봉투)'에 담아 TCP/IP에 얹어 라우터를 통과해 서버로 보내고, 서버는 봉투 내용을 읽고 적당한 응답을 할 것이다

 

GET과 POST 요청

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

GET / HTTP / 1.1
Host: www.google.com

1행의 GET 요청은 요청이 사용하고 있는 HTTP 프로토콜의 버전(보통 1.1)과 함께 끝납니다. 2행은 호스트(사용자가 웹 페이지를 요청할 때의 도메인 이름)를 명시합니다.

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

 

상태코드

웹 서버가 클라이언트로부터 HTTP 요청을 받으면 응답을 돌려보내야 합니다. 예를 들어, 웹 페이지를 요청하면 서버는 웹 페이지의 내용을 돌려보내야 합니다.

HTTP / 1.1 200 OK
Content-Type: text/html

서버는 클라이언트에게 요청의 결과를 나타내는 상태 코드를 함께 보내주면서 응답합니다.

6. 신뢰 모델과 오픈소스

신뢰 모델(Trust Model)

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

 

백도어(Back Door)

	if((strcmp(username, "rob") == 0 && 
	  strcmp(password, "thisiscs50") == 0) || 
	(strcmp(username, "tommy") == 0 && 
	  strcmp(password, "i<3javascript") == 0))
	{
		printf("Success!! You now have access.\n");		
	}
	else if(strcmp(username, "hacker") == 0 &&
	  strcmp(password, "LOLihackedyou") == 0)
	{
		printf("Hacked!! You now have access.\n");
	}
	else
	{
		printf("Inavalid login.\n");
	}

로그인 프로그램들은 1행부터 7행과 비슷한 방법으로 사용자 이름과 비밀번호를 데이터베이스에 들어있는 것과 비교합니다. strcmp는 두 인자(문자열)가 동일한지 비교하는 함수입니다.

액세스 권한을 부여하는 또다른 코드가 8행부터 12행에 있습니다. 사용자들이 원래 시스템에 접속하는 방법과는 다른 비정상적인 수단으로 시스템에 접속하는 방법 백도어(Backdoor)라고 부릅니다.

이 프로그램의 코드로 백도어가 있다는 것을 알아차릴 수 있지만 대부분의 사용자는 컴파일 되지 않은 코드를 볼 수 없습니다.

 

컴파일러 내부의 익스플로잇(Exploit)

컴파일러가 익스플로잇(exploit, 취약점 공격)의 원천일 가능성이 있습니다. 예를 들어 백도어가 없는 로그인 프로그램에 백도어를 만드는 코드를 주입할 수 있습니다. 이 때는 로그인 프로그램의 코드를 보더라도 백도어의 흔적을 찾을 수 없을 것입니다.

 

7. 사이버보안

사이버 보안

인터넷은 여러 보안 위협으로 가득 차있습니다. 그 중 한가지 큰 위협은 사이버 공격으로, 해커가 악의적인 목적으로 컴퓨터 시스템과 네트워크를 대상으로 공격을 시도하는 것입니다. 사이버 보안은 웹사이트와 사용자가 사이버 위협에 스스로 잘 대처하는 것을 말합니다. 사용자는 안전한 비밀번호를 사용하고 스팸 메일을 보지 않는 등 다양한 방법으로 스스로 사이버 위협을 방어해야 합니다.

 

비밀번호

  • 많은 사람들이 여러 웹사이트에서 같은 비밀번호를 사용합니다. 이때 해커가 하나의 웹사이트에서 여러분의 비밀번호에 대한 접근 권한을 획득하면, 가입한 모든 웹사이트의 비밀번호를 알 수 있습니다. 이런 상황을 방지하기 위하여 비밀번호 관리자는 비밀번호를 암호화시켜 저장하기도 합니다.
  • 해커는 아이디와 비밀번호 조합을 수 백만 번 시도합니다. 따라서 보안을 강하하기 위해서 더 길고 복잡한 비밀번호를 사용해야 합니다. 또한 해커는 사용자에게 일반적인 회사를 사칭하는 메일을 보내고 링크로 접속하는 것을 유도하여 사용자의 비밀번호와 민감한 정보를 요청하는 피싱 공격(phishing)도 할 수 있습니다.
  • 몇몇 서비스는 비밀번호 도용 방지 수단으로 휴대폰 인증 등의 이중 인증을 제공합니다. 이중 인증의 보안 이점은 휴대폰에 전송되는 인증코드를 모르면 여러분 계정에 접근할 수는 없다는 것입니다. 하지만 만약 휴대폰을 잃어버린다면 로그인이 불편해질 수도 있습니다.

 

수상해 보이는 접근 이력을 추적하는 audit(회계) 설정

보안 소켓 계층

HTTPS(HTTP Secure)는 HTTP와 보안 소켓 계층(SSL)이라고 불리는 기술을 결합한 인터넷 통신 프로토콜입니다. (HTTP 헤더 내용 등을 암호화 함) SSL을 사용하는 웹사이트는 각각 인증서를 갖고 웹사이트에 접근하려는 사용자에게 제공합니다. 인증서는 웹 브라우저에게 웹 서버로 보내진 요청을 어떻게 암호화했는지 말해주는 공개키를 포함합니다. 웹 서버는 암호화된 요청을 해독하는 다른 키인 비밀키를 갖고 있습니다.

 

SSL로 페북이 진짜 페북이라고 인증해 주는 회사가 있음
SSL에도 취약점이 있다. DNS 내부의 악성코드가 'facebook.com'를 실제 페북 ip주소가 아닌 악성사이트 주소로 변환한다면?

그 외의 사이버 공격

해커는 웹 서버와 사용자 사이 DNS 서버와 라우터 등으로 악성 코드를 보내 https://를 http://로 바꿀 수 있습니다. 그 결과 사용자가 봤을 때는 정상적인 사이트이지만 실제로는 그렇지 않은 사이트로 변경됩니다. 이러한 방법을 중간자 공격이라고 합니다.

세션 하이재킹쿠키(웹사이트 접속 시 자동 생성되는 임시파일, 사용자의 정보가 담겨있음)를 얻기 위해 상대방의 네트워크 트래픽을 관찰하고, 상대방의 HTTP 헤더에 쿠키를 사용하여 다른 사람인 척 웹 서버를 속이는 기술입니다. 


*강의가 잘려서 php와 쿠키에 대한 내용이 빠졌다! 다른 곳에서 보충해야겠다.

 -> 가 아니라 다음 챕터에서 나오는군 ^^

 

'프론트엔드 공부 > CS50' 카테고리의 다른 글

7. 웹 프로그래밍  (0) 2022.04.22
5. 프로그래밍 응용 (2)  (0) 2022.04.20
4. 프로그래밍 응용 (1)  (0) 2022.04.19
3. 프로그래밍 기초 (C)  (0) 2022.04.19
2. 알고리즘  (0) 2022.04.18