Post

Computer Networking: a Top Down Approach - (3)

Computer Networking: a Top Down Approach - (3)

Application Layer

## Socket Programming

  • 어플리케이션과 네트워크 사이의 통신을 위한 인터페이스
  • 2가지 타입의 소켓 : 소켓 타입이 소통 방식을 결정 (TCP 소켓 / UDP 소켓)
  • 생성후 소켓을 통해 데이터를 전달하고 전달받을 수 있음

    Two Essential Types of Sockets


    Socket API

1. socket() : 웹서버가 소켓을 생성한다.

2. bind() : 생성한 소켓을 특정 포트에 연결하겠다.

3. listen() : 이 소켓으로 listen 하겠다. non-blocking(함수 호출 시 조건이 만족되지 않더라도 함수가 리턴하므로 해당 스레드는 계속 진행)

4. accept() : 클라이언트로부터 받을 준비가 되었다. blocking(함수 호출 시 조건이 만족되지 않으면 함수는 리턴하지 않고 해당 스레드는 대기 상태가 되는 것)

5. block until connection from client : 서버는 클라이언트로부터 연결이 들어올 때까지 block된다

6. socket() and connect() : 클라이언트가 소켓을 열고 원하는 서버의 프로세스에 connect한다. connect는 blocking

7. read() and write() : 연결이 되었으므로 읽기, 쓰기 등여러 작업 가능. 통신이 된다는 의미

$…$

8. close() : 필요한 통신이 충분히 완료되면 소켓을 닫아 연결을 끊는다.


Sockets API

  • 1. Creation and Setup

  • 2. Establishing a Connection (TCP)

  • 3. Sending and Receiving Data

  • 4. Tearing Down a Connection (TCP)


1. Socket Creation and Setup

  • create 함수와 bind 함수 있다.
  • 3개의 파라미터
    • 소켓 특정하는 인덱스가 있음

socket() function

  • type 파라미터 : TCP/UDP를 결정, 중요함!! - TCP : SOCK_STREAM - UDP : SOCK_DGRAM

  • 리턴값으로 소켓의 ID값을 반환 - 이 소켓의 주소라고 보면 됨


Bind() function

  • 방금 생성한 소켓 아이디를 통해서 이 소켓을 특정 address(포트)에 바인드 하겠다.

accept() function

  • non-blocking (함수 호출 시 조건이 만족되지 않더라도 함수가 리턴하므로 해당 스레드는 계속 진행)
  • 클라이언트로부터 연결을 기다리겠다.

Listen() function

  • non-blocking (함수 호출 시 조건이 만족되지 않더라도 함수가 리턴하므로 해당 스레드는 계속 진행)
  • 소켓을 listen용도로 사용할것이고, 동시에 여러 요청이 들어오면 최대 backlog 개만큼 queue에 담아서 처리하겠다.

2. Establishing a Connection (TCP)

Connect() function

  • bloking (함수 호출 시 조건이 만족되지 않으면 함수는 리턴하지 않고 해당 스레드는 대기 상태가 되는 것)
  • bind쓰는게 아닌 이유는 클라이언트는 아무 포트나 쓰면 되기 때문. 서버처럼 특정 포트일 필요가 없다. 서버는 특정(ex. 80번 포트) 를 써야할 이유가 있지만 클라이언트는 필요없다.

TCP Socket Connection Setup


Code : Server

Code : Client


3. Sending and Receiving Data

Write() function

  • bloking (함수 호출 시 조건이 만족되지 않으면 함수는 리턴하지 않고 해당 스레드는 대기 상태가 되는 것)

Read() function

  • bloking (함수 호출 시 조건이 만족되지 않으면 함수는 리턴하지 않고 해당 스레드는 대기 상태가 되는 것)

UDP Socket Functions

  • UDP는 훨씬 단순하다. 소켓 생성하고 바로 보낸다.

4. Tearing Down a Connection (TCP)

close() function

  • 데이터 교환후에 마지막으로 사용했던 소켓을 release해준다. 그래야 다른 프로세스가 사용할 수 있다.

Release of Ports

  • 실제로 프로세스를 죽여도, 바인딩된 포트는 죽지 않고 남아 있는 경우가 있다.
  • 코드에 프로세스를 실행을 멈출때 포트 바인딩을 풀어주자.

This post is licensed under CC BY 4.0 by the author.