네트워크 단순화
네트워킹은 인터넷상의 두 종점 사이에서 통신하는 것을 의미한다. 인터넷은 상호 연결된 기계(대부분 컴퓨터)의 무리 일뿐이며 각각은 자신의 개인 주소(IP 주소라 불리는)를 사용한다. 각 기계의 주소는 다른 형태일 수 있고, 기계는 임시 주소를 가질 수도 있다. 이러한 컴퓨터는 종종 호스트라고 불린다.
당신의 앞에 있는 컴퓨터, 태블릿, 전화는 "클라이언트"라고 하고, 데이터 교환을 원하는 곳의 기계를 "서버"라고 한다. 클라이언트와 서버 사이에 가장 큰 차이점은 여기서 수행하는 역할에 있다. 후속 작업에서 역할이 바뀌는 것을 막을 수 있는 방법은 없다.
어떤 기계
밖에 있는 기계(서버) 중 하나로 전송을 시작하려고 할 때, 일반적으로 IP 주소를 알지 못하지만 대개 이것의 이름을 안다. 대화 할 머신의 이름은 당신이 curl을 사용할 때 당신과 함께 작업할 URL에 임베드된다.
당신은 아마도 "http://example.com/index.html"과 같은 URL을 사용하게 될 것이다. 이것은 당신이 example.com이라는 이름을 갖는 호스트에 연결하고 통신하는 것을 의미한다.
호스트 이름 해석
우리가 호스트 이름을 알게되면, 우리는 우리가 연락할 수 있는 호스트에 있는 IP 주소를 알아 낼 필요가 있다.
이름을 IP 주소로 변환하는 것을 종종 '이름 해석'이라고 한다. 이름은 주소의 집합으로 "해석"된다. 이것은 보통 "DNS 서버"에 의해 수행된다. DNS는 이름을 주소로 변환할 수 있는 커다란 조회 테이블(인터넷상의 모든 이름)과 같다. 당신의 컴퓨터는 일반적으로 네트워크 설정의 일부인 DNS 서버를 구동하는 컴퓨터의 주소를 이미 알고 있다.
curl은 그러므로 DNS서버에게 묻는다: "안녕, example.com의 주소를 알려달라", 그리고 서버는 그것들의 목록으로 응답한다. 또는 이름 철자가 잘못되었을 경우, 이름은 존재하지 않는다고 대답할 수 있다.
연결 설정
curl이 연결을 원하는 호스트를 위한 IP 주소의 리스트를 이용해서 curl은 "연결 요청"을 보낸다. curl이 세우길 원하는 연결은 TCP라 불리우고 이것은 두 컴퓨터 사이에 보이지 않는 문자열을 연결하는 것처럼 동작한다. 일단 설정되면, 양방향으로 데이터의 스트림을 보내기 위해 사용할 수 있다.
curl은 호스트를 위한 주소의 리스트를 얻는 것처럼, 연결될 때 주소의 리스트를 실제로 가로지를 것이고, 하나가 실패하면 다른 하나가 작동하거나 모두 실패 할 때까지 다음 주소를 연결을 시도할 것이다.
"포트 번호"에 연결
원격 서버에 TCP로 연결할 경우, 클라이언트는 이 것을 수행할 포트 번호를 선택 한다. 포트 번호는 단지 특정 서비스에 대한 전용 장소이다. 이것은 같은 서버에서 동시간에 다른 포트 번호에 다른 서비스에 listen할 수 있도록 하는 것을 허용한다.
가장 일반적인 프로토콜은 클라이언트와 서버가 사용하는 기본 포트 번호를 갖는다. 예를 들어, "http://example.com/index.html" URL을 사용할 때, URL은 기본적으로 서버에서 TCP 포트 번호 80으로 시도해야한다는 것을 클라이언트에게 알려주는 "http"라 불리는 scheme을 명시한다. URL은 선택적으로 다른, 사용자, 포트 번호를 제공 할 수 있지만 만약 특별이 지정된것이 없다면, 이것은 URL에 사용된 scheme을 위한 기본 포트를 사용할 것이다.
TLS
TCP 연결이 설정된 이후에, 양쪽에서 계속하기 전에 더 나은 보안 수준을 협상하기 위해 많은 전송이 필요할 것이다. 그리고 이는 종종 TLS(Transport Layer Security)이다. 만약 이것을 사용하면, 클라이언트와 서버는 먼저 핸드 셰이크를 수행하고 성공할 경우에만 계속 진행한다.
데이터 전송
우리가 TCP라고 부르는 연결 "문자열"이 원격 컴퓨터에 연결될 때(그리고 우리가 가능한 추가적인 TLS 핸드 셰이크를 수행했을 때), 두 머신사이에 설정된 연결이 있고, 그 연결은 데이터를 교환하기 위해 사용될 수 있다. 이 통신은 다음 장에서 설명하는 "프로토콜"을 사용하여 수행된다.