[Project] Socket

Yumya's record·2024년 9월 12일
0

[회고] Auction Project

목록 보기
3/7
post-thumbnail

✏️ Socket

TCP/IP 기반 네트워크 통신에서 데이터 송수신의 마지막 접점

  • 클라이언트 소켓과 서버 소켓으로 구분
  • 클라이언트 : 데이터를 요청, 제공 받음
  • 서버 : 클라이언트 요청에 맞는 데이터 제공
  • 클라이언트와 서버는 자신의 IP 주소와 소켓 연결에 할당할 포트 번호를 End Point로 삼고, IP 주소와 포트 번호를 통해 소켓 연결을 기다리고, 수립하고, 통신

⚡ 프로토콜

  • TCP : 신뢰성 있는 전송 프로토콜, 연결형 서비스
    • 오류 검사, 혼잡 제어, 흐름 제어 수행
    • 데이터 전송 순서 보장
    • 데이터 수신 여부 확인
  • UDP : 비신뢰성 전송 프로토콜, 비연결형 서비스
    • 최소한의 오류 검사만 수행
    • 데이터 전송 순서 보장 X
    • 데이터 수신 여부 확인 X (데이터 손실 가능성 존재)

⚡ 소켓 통신

소켓을 통해 서버-클라이언트 간 데이터를 주고받는 양방향 연결 지향성 통신

  • IP 주소와 포트 번호 사용
  • IP 주소 : 네트워크 상 클라이언트와 서버에 해당되는 컴퓨터 식별
  • 포트 번호 : 컴퓨터 내 현재 통신에 사용되는 응용 프로그램 식별
  • 서버와 클라이언트 양 쪽에 생성되는 통신 단자
  • 양방향 통신
    • 클라이언트가 서버로 요청을 보냄
    • 서버가 클라이언트로 요청을 보냄

⚡ 소켓 함수

socket(주소 영역 지정, 서비스 타입, 프로토콜 지정)

  • 소켓 생성
  • 성공적으로 실행되어 소켓이 생성되면 해당 소켓의 디스크립터 반환

bind(소켓, 바인드될 소켓의 주소, 주소 크기)

  • socket()으로 생성된 소켓에 주소 부여

listen()

  • 서버 프로세스에서 실행
  • 소켓을 활성화할 때 사용

accept(소켓, 주소, 주소 길이)

  • 클라이언트의 연결 요구가 들어올 때까지 대기
  • 연결 요청이 들어오면 둘 사이 연결이 생성
  • 연결을 통해 서버에 새로운 소켓을 생성
  • 생성된 소켓을 이용해 데이터 송수신

connenct()

  • 클라이언트 프로세스에서 사용
  • 매개변수로 설정된 주소값이 가리키는 서버와 연결 생성

send()

  • 연결형 서비스 환경에서 데이터 전송

recv()

  • 연결형 서비스 환경에서 데이터 수신

close()

  • 소켓 종료

⚡ TCP 동작 흐름

서버

Socket() > bind() > listen() > accept() > send() <-> recv() > close()

클라이언트

socket() > connect() > recv() <-> send() > close()


⚡ UDP 동작 흐름

서버/클라이언트

socket() > bind() > sendto() <-> recvfrom() > close()


참고-Socket

참고-Socket 통신

참고-Socket 통신 함수, 흐름

profile
🍀 ٩(ˊᗜˋ*)و 🍀

0개의 댓글