목표
HTTP의 예를 통한 응용계층 최적화 및 DNS 등 추가 응용계층 프로토콜을 배운다.
응용계층
DNS
Domain
Name
System
Internet 에서의 ID (기계)
IP
: internet protocol
1) IPv4
- 32bit (8bit * 4)
- 10진수로 표현 (0~255 사이의 10진수)
ex) 192.168.0.1
- 총 2^32개의 고유한 ip 주소 제공, 약 43억개의 주소
2) IPv6
- 128bit (16bit * 8)
- 16진수로 표현 (4비트가 필요함)
ex) 2001:0db8:85a3:0000:0000:8a2e:0370:7334
+)
2진수(0과 1의 두 가지 값을 사용하여 숫자를 표현) 표현하기 위해 1비트 필요함
4진수( 0, 1, 2, 3 네 가지 값을 사용하여 숫자를 표현) 표현하기 위해 2비트 필요함
8진수(0에서 7까지의 값을 사용하여 숫자를 표현) 표현하기 위해 3비트 필요함
16진수(0에서 9 및 A에서 F까지의 값을 사용하여 숫자를 표현) 표현하기 위해 4비트 필요함.
=> ip 주소를 암기하기 힘들어
=> Domain Name을 만들자
Domain Name
- 순수하게 인간을 위한 시스템
- 응용계층 밑으로 내려가기 시작하면 의미가 사라짐.
![](https://velog.velcdn.com/images/fo_rdang/post/013b69ad-8b68-4648-80a3-8a7f6406ca3f/image.png)
- 운영체제는 두가지 계층으로 나뉨
- user level
- kernel level : 사용자가 함부로 접근할 수 없는 시스템 관련 부분이 많음
=> 네트워크 응용 계층 이외의 계층들은 모두 다 kernel level
에 들어가 있음.
![](https://velog.velcdn.com/images/fo_rdang/post/4f559948-11d3-48e1-9350-3716dcc71166/image.png)
- transport layer, network layer, data link layer, physical layer는
kernel level
에 있음.
- 이 layer들은 Domain Name에 관여를 안한다.
- 다 ip로 움직인다.
왜?
- Domain Name은 사람이 보기 좋고, 기계가 보기에 안좋음.
- www.naver.com 과 formal.kau.ac.kr 을 비교해보자
- 길이도 유동적이고 .과 같은 형식도 다름.
=> 동작이 오래걸림.
결론)
- domain name은 응용계층 (인터넷 5계층 기준)에서만 관여한다.
- domain name system은 굉장히 아래쪽에서부터 다룰 것 같지만 아님.
: 어떤 domain name이 어떤 ip를 갖게 될 것인가를 mapping 해주는 시스템
왜? 사용자가 domain name을 썼지만, 컴퓨터에게 ip로 이해시켜야함.
Domain Name System
응용계층이라고 하기엔, 좀 특별한 서비스를 갖고 있다.
1) 서비스
- Domain Name => ip주소 로 변환 하는 서비스임.
- 경우에 따라서는
Aliasing
관리
: 같은 곳에 대해서 여러개의 주소를 쓰게함.
- 보통, 네트워크 하나당 ip 하나씩 할당
ex) 컴퓨터 유선 연결 ip 하나, 무선 연결 ip 하나 할당
![](https://velog.velcdn.com/images/fo_rdang/post/04c1dca9-c1b3-4d8e-8560-8b4f2f0fffc8/image.png)
- 전우주적으로 중앙관리 : 전세계적으로 일관성있고 신뢰성있게 동작하도록 중앙에서 관리한다. (어떤 사용자가 특정 도메인에 접속할 때 어느나라에서든 동일한 IP 주소로 연결된다.)
- 분산관리 : 여러 계층으로 분산된 서버들에 의해 관리된다. (아래에서 더 자세히 알아보자)
2)계층
- 최상위 계층 : Root Name Server
- Top-Level domain name server를 관리한다.
- Top-Level domain: ex) ".kr",".com", ".edy", ".org", ".net"
- Top-Level domain 들 마다 domain name server가 있다.
- Top-Level Domain server의 IP를 반환한다 (유효기간과 함께)
ex) .kr로 끝나는 주소에 대해서는 어떤 ip를 반환한다. 그러니, 해당 user는 .kr로 끝나는 주소에 대해서 또 물어볼 필요 없음.
- 유효기간동안은 동일한 top-level domain server ip 요청을 하지 않는다.
![](https://velog.velcdn.com/images/fo_rdang/post/f9bf8c35-bdf4-4d42-821a-bc9f445c36c0/image.png)
Recursive Domain Name Resolution
![](https://velog.velcdn.com/images/fo_rdang/post/53557423-f856-469b-90c5-3d950f37b637/image.png)
- 최근에는 지원이 안됨.
- Root Name Server가 그렇게 친절하진 않음.
Iterative
![](https://velog.velcdn.com/images/fo_rdang/post/a34d8d90-ddc4-4972-be84-3b75d4dd955a/image.png)
P2P
- 서버 없이 단말(peer)들끼리 직접 연결되어 서비스를 공유하는 시스템 (물물교환)
- 서비스 보장 X
- peer들은 ip를 바꾸며 옮겨 다닐 수 있다.
=> Hybrid System 등장
Hybrid System
- 서비스 메타정보는 서버가 관리.
- 실질적인 서비스는 peer들끼리.
- ex1) Skype:skype를 통해서 전화하는 것이 아니라, skype는 내가 전화를 하고 싶어하는 상대방이 어디에 위치해있는지만 알려준다. 실제 커뮤니케이션은 peer끼리 한다.
- ex2) 스타크래프트: 방을 만드는 건 서버가 해주지만, 그 방에 있는 사람들끼리 게임할 때는 peer들끼리 커뮤니케이션 한다.
Pure P2P
EX) 토렌트, 비트코인
BitTorrent: 파일을 여러 조각으로 나누어 분산하여 공유하는 파일 공유 시스템이다. 사용자는 동시에 여러 노드로부터 파일 조각을 다운로드 하고, 자신이 가진 파일 조각을 다른 사용자에게 업로드한다.
문제)
1. 신뢰성 부족 : Pure P2P 네트워크에서는 중앙 서버가 없기 때문에 각 노드의 신뢰ㅣ성을 보장하지 어렵다. 일부 노드는 고의적으로 잘못된 데이터를 제공하거나, 데이터 전송을 방해할 수 있따. 또한 노드의 가용성이 일관되지 않을 수 있으며, 특정 노드가 갑자기 ㅅ라지면 데이터 손실이나 네트워크 성능 저하가 발생할 수 있다.
- 해결: 신뢰도를 평가해서 신뢰도가 낮으면 네트워크에서 배제하거나 제한된 권한 부여한다. / 데이터를 여러 소스로부터 다운로드하고 비교해서 일치하는 데이터만을 신뢰한다. / 데이터를 암호화하고 디지털 서명을 사용해서 데이터의 무결성과 출처를 검증한다. (데이터가 전송되는 동안 변조되지 않았음을 보장.)
2. 이기적 노드 문제 : 일부 노드들은 자신의 자원을 공유하지 않고, 다른 노드의 자원만 사용하려고 한다. 이러한 이기적 행동은 네트워크 자원 균형을 깨트리고, 전체 네트워크 성능을 저하시킬 수 있다.
- 해결: 자원을 많이 공유하는 노드에게 보상을 제공하고, 자원을 거의 공유하지 않는 노드에게 패털티를 부과한다.(인센티브 구조 도입)/ 자원을 공유한 노드끼리 연결해서 이기적인 노드들이 자원을 얻기 어렵게 한다. (페어링 시스템)/ 각 노드의 자원 공유 내역을 기록하고, 평판이 낮은 노드는 자원을 얻는데 불이익을 받게 한다(노드 평판 시스템)
3. 조각들의 쏠림 현상:Pure P2P 네트워크에서 데이터 조각들이 특정 노드에 집중되어 쏠림 현상이 발생할 수 있다. 이는 네트워크의 부하를 특정노드에 집중시키고, 자원의 비효율적인 사용을 초래할 수 있다.
- 해결: 데이터 조각을 네트워크 전체에 고르게 분산시키는 알고리즘을 사요앟ㄴ다 예를 들어 분산 해시 테이블을 이용해서 조각을 특정 노드에 균등하게 분배한다.(균형 잡힌 조각 배포)/ 네트워크 상태를 모니터링하고 특정 노드에 조각이 집중될 경우, 다른 노드로 일부 조각을 재배치해서 네트워크 부하를 균등하게 분산시킨다. (동적 조각 재배치)/ 각 조각을 여러 노드에 복제해서 특정 노드에 조각이 집중되지 않도록 한다. 이로 인해 특정 노드가 사라지더라도 데이터의 가용성을 유지할 수 있다. (복제전략)