소켓 프로그래밍
소켓?
- 어플리케이션과 네트워크 사이의 인터페이스
- 소켓 타입이 소통 방식을 결정 (udp/tcp)
- 생성후 소켓을 통해 데이터를 보낼 수도, 받을 수도
두 타입의 소켓 : TCP / UDP
소켓 API
- Create socket
- Bind Port
- listen
- Accept
- Listen은 non-blocking
- Accept는 blocking
- Connect는 blocking
- Write = blocking
- Read - blocking
Tips : port releasing
실제로 프로세스를 죽여도, 바인딩된 포트는 죽지 않고 남아 있는 경우가 있다.
코드에 프로세스를 죽일 때 포트 바인딩을 풀어주자.
3. Transport Layer
Multiplexing/Demultiplexing
- 멀티플렉싱 : 보내는 측의 transport 계층은 위에서 여러 소켓에서 오는 걸 받아서 처리해야 되므로
- 디멀티플렉싱 : 받는 측은 올바른 소켓에 넣어줘야 하니까
How demultiplexing works
header를 보고 어떤 소켓에 넣을지 판단한다.
connection-oriented demux : Threaded web server
TCP는 보내는 쪽의 , 소스 아이피,포트가 다르면 다른 소켓으로 Demux된다.
그래서 연결 지향적이라는 것이다. 한 소켓이 반드시 하나의 프로세스랑만 연결되므로
UDP
보내는 이 상관없이 받는 쪽의 ip, port만 가지고 판단한다. 그래서 커넥션의 개념이 아니다.
- 체크섬 : 데이터 제대로 왔나 판단, udp는 에러있으면 안 올리고 드랍해버림.
헤더를 이해하는 것은 프로토콜을 이해하는 것이다!!!