컴퓨터 시스템/CSAPP

글로벌 IP 인터넷

bewisesh91 2021. 12. 16. 16:42
728x90

글로벌 IP 인터넷(Internet, 대문자)은 internet의 유명한 예이다. 인터넷은 TCP/IP 프로토콜을 구현한 소프트웨어를 실행하며,

인터넷 클라이언트와 서버는 소켓 인터페이스 함수 및 UNIX I/O 함수들을 혼합하여 통신한다. 소켓 함수들은 일반적으로

시스템 콜들로 구현되는데 이 시스템 콜들은 커널에서 트랩을 발생시키며, TCP/IP에서 다양한 커널 모드 함수들을 호출한다.

TCP/IP는 프로토콜의 집합으로 각각 서로 다른 기능을 제공한다. IP는 각각의 호스트에 유일하게 식별할 수 있는 주소를 할당하는 

기법(basic naming scheme)과 데이터그램이라고 하는 헤더와 데이터로 구성된 패킷을 한 인터넷 호스트에서 다른 호스트로

보낼 수 있는 전달 메커니즘을 제공한다. TCP는 IP 위에 구현한 복잡한 프로토콜로 전달 과정에서 데이터가 손실되거나 순서가

뒤바뀐 경우 이를 교정하고 순서를 재조합하여 프로세스간 안전한 완전 양방향 연결을 제공한다.

 

프로그래머의 관점에서 인터넷은 다음과 같은 특징을 지닌다. 우선, 호스트는 32비트 IP 주소 집합에 매핑된다(128.2.203.179).

그리고 IP 주소 집합은 인터넷 도메인 네임이라고 부르는 식별자의 집합에 매핑된다(128.2.203.179 is mapped to www.cs.cmu.edu). 하나의 인터넷 호스트의 프로세스는 연결을 통해서 다른 인터넷 호스트의 프로세스와 통신할 수 있다.   

 

IP 주소

IP 주소는 비부호형 32비트 정수로 네트워크 바이트 순서(big-endian byte order)로 메모리에 항상 저장된다.

IP 주소는 dotted-decimal 표기라고 하는 형식으로 제시되며, 이것은 각 바이트가 십진수 값을 사용하고 다른 바이트들과는 점을 

사용해서 구분된다. 예를 들어, Ox8002c2f2의 dotted-decimal 표현은 128.2.194.242이다.

 

인터넷 도메인 이름

인터넷 클라이언트와 서버는 서로 통신할 때 IP 주소를 사용한다. 그렇지만 기억하기 어려워 인터넷은 IP 주소와 도메인 이름을

매핑하고, DNS(Domain Name System)라고 하는 전 세계에 분산된 데이터 베이스에 의해 그 매핑을 관리한다. 개념적으로

DNS 데이터 베이스는 수백만 개의 호스트 엔트리로 구성되어 있으며, 이들 각각은 도메인 이름의 집합과 IP 주소 집합 사이의

매핑을 정의힌다. 도메인 이름들의 집합은 계층 구조를 형성하고 있다.

 

인터넷 연결

인터넷 클라이언트와 서버는 연결을 통해서 바이트 스트림을 주고받는 식으로 통신한다. 이 연결은 두 개의 프로세스를 

연결한다는 점에서 Point-to-Point 연결이며, 데이터가 동시에 양방향으로 흐를 수 있기에 완전 양방향(Full-Duplex)이다.

또한 소스 프로세스가 보낸 바이트 스트림이 결국엔 보낸 것과 동일한 순서로 목적지 프로세스에서 수신된다는 의미에서 안정적이다.

인터넷 연결의 종단점을 소켓이라고 부르는데, 각 소켓은 인터넷 주소와 16비트 정수 포트로 이루어진 소켓 주소를 가지며 아래처럼

address : port로 나타낸다. 클라이언트의 소켓 주소 내의 포트는 클라이언트가 연결 요청을 할 때 커널이 자동으로 할당을 하며,

이것은 단기 포트(Ephemeral Port)라고 한다. 그러나 서버의 소켓 주소에 있는 포트는 대개 영구적으로 이 서비스에 연결되는

잘 알려진 포트(Well-Known Port)이다. 그리고 이 포트들은 잘 알려진 서비스 이름(Well-Known Service Name)이 존재한다. 

예를 들어, 웹 서버의 잘 알려진 포트는 80이고, 서비스 이름은 http이다. 연결은 두 개의 종단점의 소켓 주소에 의해 유일하게

식별된다. 이 두 개의 소켓 주소는 소켓 쌍이라고 알려져 있으며, 튜플로 나타낸다.