Computer Networking: a Top Down Approach - (3)
Computer Networking: a Top Down Approach - (3)
Application Layer
- 어플리케이션과 네트워크 사이의 통신을 위한 인터페이스
- 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
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
Read()
function
UDP Socket Functions
4. Tearing Down a Connection (TCP)
close() function
- 데이터 교환후에 마지막으로 사용했던 소켓을 release해준다. 그래야 다른 프로세스가 사용할 수 있다.
Release of Ports
- 실제로 프로세스를 죽여도, 바인딩된 포트는 죽지 않고 남아 있는 경우가 있다.
- 코드에 프로세스를 실행을 멈출때 포트 바인딩을 풀어주자.
This post is licensed under
CC BY 4.0
by the author.