본문 바로가기
CS이론/네트워크

[애플리케이션 계층2] 소켓 (TCP소켓, UDP소켓)

by limew 2024. 1. 19.

Socket은

os가 제공하는 api 중 하나이며 프로세스 간의 통신을 위한 api이다. 여러가지 function을 갖고 있다

 

=> os 내부의 것만 사용 가능하다

=> os의 transport에는 TCP, UDP가 있다

=> 소켓은 두 종류가 있다

  • TCP 소켓 ( SOCK_STREAM )
  • UDP 소켓 ( SOCK_DGRAM )

bind는 서버의 특정포트를 bind한다

=> 클라이언트에서 bind를 쓰지 않는 이유는, 클라이언트는 특정 포트에 관계없이 아무거나 써도 되기 때문이다.

 


TCP 소켓 

 

 

 

웹서버 진행 순서

1. 소켓 생성 socket()

  • int socket(int domain, int type, int protocol)
  • int type에 tcp/udp 입력

2. bind() 방금 생성한 소켓을 특정 포트에 바인드 한다

3. listen() 이 소켓은 listen 하는 형태로 사용하겠다

4. accept() 나는 클라이언트로부터 요청을 받을 준비가 되어있다 이제 들어와라

이때 서버는 클라이언트가 요청을 할때까지 blocks(가만히 있음) 형태가 됨 - blocks until connection from client

 

웹클라이언트(웹브라우저) 진행 순서

1) 소켓 생성

2) 바로 connect() -> 내가 원하는 서버의 프로세스에 접근하겠다

 

이 과정까지 끝나면 서버와 클라이언트 사이에  연결고리가 생성됨

이 이후로는 단순함 read()와 write()의 반복임

계속 이렇게 진행되다가 끝나면 close() 해서 연결 끊으면 됨

 

정리
서버에서 먼저 소켓 만듬(tcp 소켓)
bind로 특정 포트에 바인드 함
listen 용도로 지정
accept 상태가 됨
...
이 후에는 단순한 read&write

UDP 소켓

UDP 소켓은 훨씬 단순함, 소켓 생성하고 커넥션 개념 없이 바로 보내면 된다