좌측은 클라이언트의 컴퓨터, 우측을 서버의 컴퓨터라고 보았을 때 '웹페이지'하나가 실행된다고 가정 해보자.
Network를 통해 Data link에 다다르며, 15~20번정도 이 과정을 거치며, 클라이언트에서 보낸 신호가 서버에 도착한다.
서버는 똑같은 과정을 거치며, 클라이언트에게 정보를 제공하게 된다.
그러나 우리가 프로그래밍을 통해 정보를 보내는 과정은 P2P 단계에 속해있다.
서로의 데이터를 주고 받기 위해 필요한 것이 '소켓'이며, 소켓에 port번호를 입력 함으로 어떤 곳에 데이터를 전송할지 결정하게 된다.
*소켓 라이브러리는 인터넷이 정보를 주고 받은 복잡한 과정을 문자의 흐름인 스트림 방식으로 만들어 준다.
import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect( ('data.pr4e.org', 80) )
기본 구성
http://www.naver.com/search.html (예시로 든 URL)
프로토콜
웹이 작동 하는 과정
URL(링크)을 클릭 -> 소켓을 활용하여 해당 링크의 포트번호로 연결 -> 연결 요청이 온 포트번호와 일치하는 웹서버 포트번호로 연결 -> 해당 포트번호의 데이터를 전송(ex>HTML CSS JS)
HTTP는 위의 과정을 시작하기 위한 통신 프로토콜이다.
import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('data.pr4e.org', 80))
cmd = 'GET http://data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n'.encode()
mysock.send(cmd)
while True:
data = mysock.recv(512)
if (len(data) < 1):
break
print(data.decode(),end='')
mysock.close()