클라이언트 서버 모델:
클라이언트는 필요할때 요청을 하는것이고 서버는 응답을 하는것
서버하나에 여러 클라이언트가 연결 시도
서버는 클라이언트에 대하여 아무런 정보 없어도됨 단 항상 켜져있어야함 클라이언트는 서버에 대하여 알고있어야됨
ip주소는 위치 기반배정이라 클라이언트는 서버의 ip를 알고있어야함
1. 클라이언트가 먼저 요청을 서버로 보냄 요청을 보내기 위하여 위치알아야함 ip주소와 포트넘버 알아야함
(ip주소와 포트넘버를 합쳐서 소켓 address라고 함)
2. 서버는 리소스를 바탕으로 요청을 핸들함
3.서버가 클라이언트에게 응답을줌
4.서버는 응답을 핸들함
프로세스는 러닝 프로그램
서버는 최초에 컴퓨터가 켜질때 생성이됨 부팅을 하면서 자동으로 서버 프로그램이 생성이됨 컴꺼질때 까지 계속 돌아감
이런프로세스가 많음(daemons라고함)
socket은 무엇인가
api라고보면됨 우리가 만든 어플리케이션 프로그램이 돌아가면서 네트워크 기능이 필요할때 os에 데이터를 보내라 요구를 하게 되는데 요구를 하는 어떤 창구
os에 요청을할때 인터페이스의 역할을 하는것
소켓에는
stream socket tcp같은 커넥션 오리엔티드 프랜스포트레이어 프로토콜을 위한 소켓임
SOCK_STREAM이라고 씀
datagram socket UDP를 위한 소켓
SOCK_DGRAM이라씀
raw가 있음
이 소캣은 여러개일수가 있는데 그에 반하여 os의 transport layer은 하나임 어플리케이션의 pocess별로 소캣이 하나씩 할당이됨.
transport layer은 p1과 p2가 만들어낸 데이터가 transport layer로 전달이 되면 걔네들을 묶어서 아래로 내려보내는 역할을함.
다만 구분하기위해 주소는 다르게 배정함 포트넘버 같은거 그걸 멀티플렉싱이라고함
또한 받아서 올라온 데이터들을 transport layer에서 p1과 p2에 알맞은 소켓에 전달해줘야함(이때 포트넘버를 사용하여 구분)
connectionless demultiplexing
connectionless socket은 하나의 소켓당 하나의 process가 할당됨
udp 경우 똑같은 destination포트번호로 보내진 udp패킷중에 다른 소켓 어드레스를 가진 애들은 하나의 소켓으로 보내져서 어플리케이션이 이걸 구분해줘야함
os가 어플리케이션으로 소스 소켓 어드레스정보를 같이 올려줘서 이걸로 구분을함
반면에 connection oriented socket은 하나의 소켓당 여러개의 process가 할당됨
tcp소켓은 4개의 정보를 가지고 소켓을 식별함
이걸 4-tuple이라고함
source ip address, source port number, dest ip address, dest port number
문지기는 리스닝 소켓이고 실제는 커넥션 소켓이함
tcp는 처음에 서버가 먼저 소켓을 생성함 그다음 바인딩(소켓에 어드레스를 할당)함 그다음 리슨을함 클라이언트로부터 요청이 오는지 듣고있음 다음 클라이언트는 소켓을 만들고 이때 클라이언트 주소는 커넥트할때 할당받음 포트넘버는 랜덤하게 결정됨 다음 커넥트로 서버와의 커넥트 시도 리슨하고있던 서버가 커넥션 요청이오면 3핸드쉐이크를하고 성공적이면 커넥팅소켓 만들어서 센드 리시브하면서 데이터 주고받고 끝날땐 클로즈로 닫음
udp는 똑같이 클라이언트 서버 모두 소켓 생성하고 주소할당후에 커넥션과정없이 센드투 리시브 프롬으로 데이터 주고받음근데 이 샌드투와 리시브 프롬은 항상 소켓 어드레스를 명시해줘야함
윈도우에서 handle의 의미
운영체제 리소스를 안전하게 관리하기 위해 주소 대신 이와 연결된 핸들값을 알려주어 접근하게 한다 정수값을 가짐
소켓은 윈도우에서는 핸들로 취급함