URL : Uniform Resource Locator -> 네트워크 상에 원하는 resource가 어디 있는지 알려주기 위한 프로토콜이다.
HTTP Protocol
http://user:password@www.webserver.co.kr:8080/home/file.html
FTP protocol
ftp://user:password@ftp.webserver.co.kr:8080/home/file.html
PC 자체의 데이터 가져오기
file://localhost/c:/path/file.html
메일 송신
mailto:jmjm@naver.com
해독하는 방법은 아래와 같다.
http: // www.webserver.co.kr / dirname /..../ fileName
해독할 때, fileName이 없으면 어떻게 하나?
http: // www.webserver.co.kr / dirname /..../
디렉토리 위치는 알지만, 어느 파일에 액세스 해야할지 모른다.
대부분의 디렉토리에 기본 html파일을 설정해둔다.
즉, 파일명을 생략하면, /dirname/index.html과 같은 방식으로 접근한다.
마지막에 / 생략된다면?
Client -(HTTP Request)-> Server
Client <-(HTTP Response)- Server
HTTP Protocol : Client와 Server가 주고받는 메시지의 내용의 순서를 정의한 규약
자주 쓰이는 Method에 대해서 알아보자 .
Request 메세지의 작성 법을 알아보자.
METHOD URL HTTP_Version # Request Line
FieldName : FieldValue # Request Header
... # Request Header
... # Request Header
# Blank Line
Request Message Body # Request Message Body
Responde 메세지의 작성법을 알아보자.
HTTP_Version Status_Code Status_Phrase # Status Line
FieldName : FieldValue # Response Header
... # Response Header
... # Response Header
# Blank Line
Request Message Body # Response Message Body
유의점
요청한 페이지의 정보가 문장으로만 이루어져 있다 -> 1개의 URI로 충분
만약, 페이지에 영상, 사진 정보가 있다 -> 태그
<img src = "image.png">
따라서, 응답 받은 HTML에서 태그를 먼저 탐색한다 . 만약 태그가 있으면,
1. **태그 자리를 제외하고** 문장을 먼저 표시한다.
1. 사진, 영상을 다시 한 번 **Request한다.** 이는 사진, 영상의 갯수만큼 다시 Request를 보낸다.
HTTP Message를 만든다.
의 종류가 있고, 우선 HTTP Request를 작성했다고 가정하자.
HTTP Request Message를 작성하였으면, OS에게 의뢰해서 Web Server로 송신하게 한다.
IP 주소는 왜 필요할까?
Subnet이란?
Subnet : 작은 네트워크로, 제일 End Point에서 구성되는 요소라고 생각하자. Hub - PCs의 집합이라고 생각하자.
Subnet - Router로 연결되어 전에 네트워크가 구성된다고 생각하자.
IP 주소의 비유적 표현
실제 IP 주소의 표현
32비트의 디지털 데이터, 8bit를 . 으로 구분하여 10진수로 표기한다. 표현 방식은 아래와 같다.
# IP 주소의 표기 방법 -> Network ID, Host ID 구분 불가능
100.101.102.103
# IP 주소 + Netmask 표기 방법 -> Network ID, Host ID 구분 가능
100.101.102.103/255.255.255.0
# Netmask 표기 방법 다르게 해보기.-> 24개의 비트가 Network ID라는 영역을 차지한다는 뜻이다.
100.101.102.103/24
Host ID가 모두 0 or 1인 경우는 다른 의미를 가진다.
# Host ID가 모두 0 -> Subnet 자체이다.
100.101.102.0/24
# Host ID가 모두 1 -> Broadcast를 나타낸다. Broadcast는 Subnet 기기 전체에 packet을 보내는 것이다.
100.101.102.255/24
왜 사용할까? -> 그다지 효율적이지 않다. 라우터에 부하가 걸릴 수 있다.
DNS : Domain Name System, 서버명과 IP주소를 대응 시켜준다.
DNS Resolver 호출하는 예시
Program(){
...
ipaddress = gethostbyname("www.naver.com");
...
}
DNS Server가 하는 일
DNS Query의 구성
DNS server는 DNS Query의 세 가지 정보가 일치하는 것을 찾고, 세 가지 정보가 일치하는 response를 Client에 회신한다.
계층적으로 분산되어 있다는 것을 어떻게 알 수 있을까?
www.gist.ac.kr
Domain을 어떻게 이해할까?
Domain Server에 어떻게 저장이 될까 : 도메인 한 대를 등록한다.
www.gist.ac.kr
www.gist.ac.kr
www.gist.ac.kr
DNS 서버에 등록되어 있는 IP주소릐 방식
DNS 서버에서 조회하는 방법
Client PC에서 www.gist.ac.kr. 의 IP 주소를 조회하고자 한다.
루트 도메인
1-1. 있다. -> IP 주소를 준다.
1-2. 없다. -> kr 도메인에서 물어봐라
kr 도메인
2-1. 있다 -> IP 주소를 준다.
2-2. 없다. -> ac 도메인에서 물어봐라.
.. 이와 같이 상위 도메인에 IP주소가 없으면, 하위의 DNS 서버의 IP주소를 알려주고 찾아가게 한다.
Socket도 DNS Resolver와 같이 부품을 호출한다는 개념으로 생각하자.
# DNS resolver 호출 -> IP address 알아내기
IPaddress = gethostbyname("www.gist.ac.kr")
# Socket 호출 -> Discriptor 가져온다.
Discriptor = socket(IPaddress, ... )
# connect에 의뢰하기 -> 파이프를 연결한다. -> 연결이 되었으므로 데이터를 송수신하자.
connect(Discriptor, IPaddress&Port)
# case 1 : 송신
write(Discriptor, HTTP Request, ...)
# case 2 : 수신
read(Discriptor, Receive_Buffer)
# 송수신이 끝났으므로 파이프 끊기
close(Discriptor)
Discriptor : Socket을 식별하기 위한 것, 이것으로 어느 소켓을 사용하여 접속할지 판단한다.
Connect에서 필요한 3가지