본문 바로가기

컴퓨터공학

[Network] Application 계층 - Socket Programming

Socket?

  • An Interface between application and network
  • 운영체제가 제공해주는 API의 일종, Transport Layer의 기능을 사용하여 구현되었음
  • TCP 소켓과 UDP 소켓이 존재함

 

TCP소켓, UDP소켓

  • SOCK_STREAM ⇒ TCP
    • reliable : 데이터 전송에 신뢰성을 보장함
    • in-order : 데이터 전송 순서를 보장함
    • Connection-oriented
  • SOCK_DGRAM ⇒ UDP
    • unreliable : 신뢰성이 보장되지 않음
    • no order : 순서가 보장되지 않음
    • 즉, sender는 데이터를 보내기만 할 뿐, 그 데이터가 목적지에 정확히 도착했는지는 보장되지 않음

 

Sockets API

TCP 소켓은 데이터를 주고 받기전 클라이언트와 서버를 연결(connect)하기 위한 사전 작업이 필요함. 과정을 아래와 같다.

TCP 소켓 연결및 데이터 전송 과정

 

  • TCP Server
    1. socket() : 소켓 생성
    2. bind() : IP / Port 번호를 소켓에 바인딩
    3. listen() : 소켓의 타입(용도) 설정 (listen()은 듣기 타입)
    4. accept() : 클라이언트의 요청을 받을 준비 완료
    5. Block!…
    6. 클라이언와 연결됨.
    7. read() : Client가 전송한 데이터를 읽기
  • TCP Client
    1. socket() : 소켓 생성
    2. connect() : 서버와 연결 → TCP Server 6. 으로
    3. write() : 데이터를 입력하여 서버로 전송

 

서버는 소켓을 생성후 주소값(IP/Port)을 바인딩 하고 accept() 메서드를 통해 클라이언트의 연결을 기다린다. 이때 서버는 블락이 된다. 클라이언트 소켓이 connect() 메서드를 통해 서버와 연결을 요청하면 서버는 블락을 해제하고 클라이언트와 연결된다.

연결된 이후에는 write(), read() 메서드를 통해 데이터를 서로 전송하고 읽을 수 있다.

 

TCP 소켓을 다 사용하면 소켓 연결을 해제하고 닫아줘야 한다.

 

 

  • TCP Client
    1. close() : 서버와의 연결을 해제한다, 또한 연결이 해제됐음을 서버에 알린다.
  • TCP Server
    1. read() : Client와의 연결이 해제됐음을 인지한다.

 

UDP의 경우, 사전 연결이 필요없다. 즉, 소켓 생성 후 그냥 데이터를 다른 소켓으로 보내면 된다. UDP는 전송에 신뢰성이 보장 되지 않으므로 전송된 데이터가 잘 전달됐는지는 알 수 없다.

'컴퓨터공학' 카테고리의 다른 글

CORS 정책에 의한 예외 처리하기  (0) 2023.02.28
Cascade에 대하여...  (0) 2022.11.22
프록시 패턴 (Proxy Pattern)  (0) 2022.08.10
TCP에 대하여  (0) 2022.01.06