서버와 클라이언트
서버: 어떤 특정 서비스를 제공하는 호스트(하드웨어) 또는 프로그램(소프트웨어)를 가리키는 것
클라이언트: 이런 서비스를 제공받는 호스트 또는 프로그램을 의미
ex) 온라인 게임
1. 게임을 하기 위해서 그 게임의 클라이언트 프로그램을 호스트에 설치해야한다.
2. 클라이언트 프로그램을 실행해서 온라인 게임서버에 접속하면 게임을 진행할 수 있다.
3. 게임 서버에는 클라이언트의 요청을 처리하기 위한 서버 프로그램이 실행되고 있어야 한다.
4. 서버 프로그램은 클라이언트 요청을 받기 위해 항싱 대기상태로 있어야 한다.
=>사용자는 자신이 원하는 시간에만 게임을 할 수 있다.
=>서버는 클라이언트의 요청에 응답할 뿐이다.(강제x)
소켓
일반적으로 어떤 장치를 연결하는 곳
네트워크 상에서 소켓 1: 프로그램을 네트워크에 연결하기 위한 장치, 호스트의 프로그램을 소켓에 연결해서 네트워크 상에서 다른 호스트들과 정보를 주고 받는다.
ex) 정해진 규격이 없다면 미국에 있는 'Sam'에게 소포를 보낼 때 받는 사람 주소에 'Sam'이라고 쓰거나 길거리에 소포를 놔두는 것과 다름없다. 재대로 배송하려면 배송될 곳의 공식적인 주소와 배송을 취급하는 업체를 통해서 배송해야 한다.
네트워크 상에서도 이 ex)가 비슷하게 적용된다.
호스트의 특정 프로그램이 다른 호스트의 프로그램과 데이터 교환하기 위해서
1. 호스트 간 구별되는 공식적인 규격(프로토콜)의 주소를 할당 받고
2. 어떤 방식으로 데이터를 교환할 것인가에 대한 것도 정해져 있어야 한다.
두 가지 프로토콜(정해진 규격의 주소와 데이터): 소캣의 종류 결정
주소체계
IP: "IP주소"="xxx.xxx.xxx.xxx'형태의 (.)로 구분된 4개의 숫자조합
네트워크 상에서 호스트를 식별해주는 값->같은 네트워크 망에서 다른 호스트의 IP주소와 중복되면 안 될 것->전 세계의 공통적인 규격사용
IPv4: 8bit 4개의 숫자 조합
IPv4의 IP주소를 모두 할당하기에 부족한 문제에 대한 대안: IPv6
>>>import socket #socket 모듈
>>>socket.gethostbyname('google.com') #gethostbyname 함수는 전달된 url의 IP 주소를 반환
'20.252.15.152' #IPv4 사용
주소체계 | 설명 | 비고 |
AF_UNIX | 유닉스 프로토콜 | 호스트 내부(파일 기반 통신) |
AF_INET | IPv4인터넷 프로토콜 | 호스트 간의 통산(네트워크 기반 통신) |
AF_INET6 | IPv6인터넷 프로토콜 | 호스트 간의 통산(네트워크 기반 통신) |
호스트 간의 통신이 이루어지려면 동일한 주소 체계와 동일한 전송 프로토콜을 사용해야 된다.
데이터 전송프로토콜
TCP 2: 호스트 간에 1:1의 연결을 만들어 데이터 교환을 하는 방식. 즉, 두 호스트 간에 1:1로 연결되어 양방향의 데이터 교환이 이루어지기 때문에 안정적인 데이터 전송 보장.
1. TCP가 1:1 연결을 만들 때 상대 호스트의 IP주소를 알아야 한다.
2. TCP/IP-네트워크 프로그래밍 핵심 프로토콜로 이해
=>TCP 소켓을 만들기 위해서는 소켓을 생성할 때 socket 모듈에 정의된 SOCK_STREAM을 전달해 주면 된다.
UDP: 1:1 연결이 아니므로 안정적이지는 않지만 데이터의 전송이 빠르다.
1. 보내는 데이터들이 보내는 순서대로 도착하지 않는 특성이 있다
2. 큰 단위의 데이터는 여러 조각으로 나누어 보내지고 네트워크 망 상황에 따라 데이터의 도착순서가 보낸 순서와 일치하지 않을 수 있다.
=>UDP 소켓을 만들기 위해서는 소켓을 생성할 때 socket 모듈에 정의된 SOCK_DGRAM
TCP/IP 소켓생성
#파이썬 쉘1
>>>from socket import*
>>>mysock = socket(AF_INET, SOCK_STREAM)>>>mysock
<socket.socket fd=124, family=AddressFamily.AF_INET, type=SocketKind, proto=0>
1. 파이썬 쉘에서 소켓생성
2. 소켓의 정보
-family:주소체계, type:전송타입, fd(파일디스크립터):소켓에게 부여된 고유 id, proto:신경쓸필요없는 정보