<TIL-12>기본적인 인터넷 통신 이론

김건우·2020년 7월 11일
0
post-custom-banner

1. TCP(Transport Control Protocol)

  • 좌측은 클라이언트의 컴퓨터, 우측을 서버의 컴퓨터라고 보았을 때 '웹페이지'하나가 실행된다고 가정 해보자.

  • Network를 통해 Data link에 다다르며, 15~20번정도 이 과정을 거치며, 클라이언트에서 보낸 신호가 서버에 도착한다.

  • 서버는 똑같은 과정을 거치며, 클라이언트에게 정보를 제공하게 된다.

    그러나 우리가 프로그래밍을 통해 정보를 보내는 과정은 P2P 단계에 속해있다.

  • 서로의 데이터를 주고 받기 위해 필요한 것이 '소켓'이며, 소켓에 port번호를 입력 함으로 어떤 곳에 데이터를 전송할지 결정하게 된다.
    *소켓 라이브러리는 인터넷이 정보를 주고 받은 복잡한 과정을 문자의 흐름인 스트림 방식으로 만들어 준다.

import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect( ('data.pr4e.org', 80) )

2. HTTP(Hypertext Transfer Protocol)

기본 구성

http://www.naver.com/search.html (예시로 든 URL)

  • 프로토콜 : http
  • 호스트: www.naver.com
  • 문서: search.html

프로토콜

  • 컴퓨터간에 정보를 주고받을 때의 통신방법에 대한 규칙과 약속

웹이 작동 하는 과정

URL(링크)을 클릭 -> 소켓을 활용하여 해당 링크의 포트번호로 연결 -> 연결 요청이 온 포트번호와 일치하는 웹서버 포트번호로 연결 -> 해당 포트번호의 데이터를 전송(ex>HTML CSS JS)

HTTP는 위의 과정을 시작하기 위한 통신 프로토콜이다.

3. 파이썬을 활용한 웹데이터 가져오기

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()
  • 스트림 기반의 소켓을 생성한다.
  • data.pr4e.org의 80번 포트로 연결을 시도한다.
  • encode() 인터넷을 통해 데이터를 내보내는 명령어.
  • 전체 소켓이 종료되기 전 까지 문자를 한번에 512개씩 받아온다.
  • 외부에서 오는 데이터이므로, decode()를 통해 복호화를 해준다.
  • 복호화란 부호화된 데이터를 사람이 읽을 수 있는 형태로 되돌려 놓은 것을 말한다. 암호화의 반댓말
profile
꾸준하게 공부하기
post-custom-banner

0개의 댓글