[2부] 프로토콜 표준과는 다르게 실제로는 소켓(Socket)이 어떻게 식별되는가?

Поделиться
HTML-код
  • Опубликовано: 21 сен 2024

Комментарии • 38

  • @ez.
    @ez.  Год назад +10

    몇 가지 코멘트 남깁니다~
    🔸 이 영상은 2부 영상입니다
    1부 : 프로토콜 표준 스펙에서 정의한 소켓, 포트, TCP connection 개념 (ruclips.net/video/X73Jl2nsqiE/видео.html)
    🔸 06:37 서버 쪽 소켓은 포트를 명시적으로 지정하는 이유
    만약 서버 쪽에 포트를 지정하지 않고 OS가 자동으로 할당하게 한다면, 서버 포트가 어떤 값으로 할당됐는지 클라이언트가 모르기 때문에,
    서버 쪽에서는 포트를 명시적으로 지정해주고, 클라이언트는 해당 포트로 요청을 보내게 됩니다
    🔸 09:50 connection 전용 소켓이 만들어지는 부분을 코드로 보려면 03:01 코드에서 중간에 accept를 호출하는 부분을 보시면 됩니다
    🔸 14:03 이 예제는 다른 TCP 소켓이 ‘또 다른 프로세스’에서 생성된 것으로 가정했지만, 상황에 따라서는 이미 존재하던 원래 프로세스에서도 추가로 TCP 소켓이 만들어 질 수 있습니다
    🔸 오늘 내용은 디폴트 동작을 설명한 것이라고 보시면 되겠습니다
    SO_REUSEADDR, SO_REUSEPORT 이런 옵션들을 설정해 주면 소켓의 동작 방식은 더 디테일하게 달라질 수 있습니다
    그리고 UDP 쪽에서는 connected socket 개념도 있습니다
    하지만 기본적으로는 이렇게 동작한다고 이해해 주시면 되겠습니다
    🔸 소켓이 꼭 네트워크 통신에만 사용되는 것은 아닙니다
    한 컴퓨터 시스템 내의 서로 다른 프로세스간에 통신(IPC)할 때도 소켓이 사용될 수 있습니다

  • @liuryangru2104
    @liuryangru2104 Год назад +5

    어떤 강사가 소켓은 파일이다..라고해서 무릎을 탁 치며 이해가 가는듯했으나 여기서 소켓 설명을보니 또 헷갈리네.

  • @lap3687
    @lap3687 3 месяца назад

    매우 깊은 시간동안 고민하고 강의를 만들어주심이 전반적으로 아주 잘 느껴지고 .. 훌륭한 강의 감사합니다. 한가지 질문이 있는데요 !
    " "TCP Socket은 IP, Port 가 유니크 해야한다." 라는게 TCP 프로토콜 표준에서 정의하고 있으나 실제 동작과는 조금 다르다." 라고 말씀해주셨는데요.
    여기서 궁금한 점은 쉬운코드님이 말씀해주신 내용처럼
    TCP socket 표준에서 말하고 있는 내용도 ip, port 번호로 클라이언트, 서버의 ip, port를 합친 값이 유니크 하다
    가 아닐까요 ?
    즉, TCP socket 표준 = 쉬운코드님 설명 이 아닌걸까요 ?
    뭔가 제가 놓치고 있는 것 같은데, 마지막에 헷갈리네요 ..

  • @tothemoon102
    @tothemoon102 5 месяцев назад

    여태 봤던 강의중에 소켓 설명은 최고인것 같아요

  • @박주현-x6j6z
    @박주현-x6j6z Месяц назад

    영상 너무 고퀄리티입니다!!! 1편 보고 2편으로 넘어왔는데 바로 구독했습니다 !!

  • @deniapark761
    @deniapark761 Год назад +2

    매번 잘 보고 있습니다!
    궁금하던 부분들을 꼭 찝어서 먼저 말씀해주셔서 이해하기 좋았습니다.

    • @ez.
      @ez.  Год назад +1

      감사합니다 :) 항상 영상 유익하게 봐주셔서 큰 힘이 됩니다 👍

  • @viivii6850
    @viivii6850 Год назад +2

    소켓을 막연히 어렵게 생각했었는데 이번에도 좋은 영상 감사드립니다!

    • @ez.
      @ez.  Год назад +1

      늘 영상들을 유익하게 봐주셔서 감사해요 :) 👍

  • @이시강-f9e
    @이시강-f9e Год назад +2

    감사합니다.. 기다린 만큼 너무 좋은 영상이군요! 열심히 공부하겠습니다!

    • @ez.
      @ez.  Год назад +1

      유익하게 봐주셔서 감사합니다 :) 화이팅입니다!

  • @이지섭-h4v
    @이지섭-h4v Год назад +3

    학부생 때 이해안가서 얼렁뚱땅 넘겼었는데 이 강의 보고 확 이해가 되네요ㅋㅋㅋㅋ
    강의자료, 멘트, 화면전환 타이밍 등만 봐도 정말 공들여서 강의 준비하신게 느껴집니다
    부끄럽지만.. 컴공 졸업해놓고도 다 까먹고 기초가 부족해서 다시 공부하며 개발자 취업준비중이었는데 너무 좋은 채널을 발견했네요 보석을 발견한 기분입니다.
    채널 바로 구독하고 영상 감사히, 꾸준히, 전부 정주행하겠습니다!!!

    • @ez.
      @ez.  Год назад +2

      열심히 준비했는데 알아봐주셔서 정말 감사합니다 ㅠㅠ
      저도 학부 때 열심히 공부한거 취직할 때 많이 까먹었다가 취직하고나서 이게 중요한 걸 알고 열심히 다시 복기하느라 고생 좀 했었죠 ㅎㅎ
      영상들 좋게 봐주셔서 감사합니다!! 자주 놀러와 주세요 :)
      취업 응원합니다!!

  • @qwe2775
    @qwe2775 Год назад +1

    거의 처음 영상 올리실때 부터 도움많이 받았는데 벌써 구독자가 많이 늘었네요!
    좋은 영상 많이 올려주세요 잘봤습니다 : )

    • @ez.
      @ez.  Год назад +2

      우와..! 꽤 오래전부터 구독해 주신 분으로 알고는 있었는데 거의 영상 처음 때 부터 보시고 계셨었군요!
      와~! 지금까지 이렇게 꾸준히 시청해 주시고, 멤버십으로 응원까지 해주시고, 진심 정말 정말 감사합니다 ㅠㅠ
      앞으로도 꾸준히 파이팅해서 양질의 영상들 올릴 수 있도록 할게요! 😊
      다시 한번 정말 감사합니다 👍👍👍

  • @nick6267
    @nick6267 Год назад +1

    ㅎㅎ다음엔 소켓고갈에 대해서 영상 만들어주셔도 좋을 것 같아요 감사합니다

    • @ez.
      @ez.  Год назад +1

      파일디스크립터 관련 얘기라면 백발백중 시리즈 중에 다루지 않을까 싶습니다 :)

  • @ttangttangyee
    @ttangttangyee 3 месяца назад

    아 그렇기 때문에 소켓 프로그래밍 과정에서 서버에 accept 함수를 통해 새로운 클라이언트 소켓을 생성하는 것이군요..! 좋은 영상 감사합니다.

  • @yongk1883
    @yongk1883 Год назад +1

    좋은강의영상 너무 감사합니다😊

    • @ez.
      @ez.  Год назад +1

      좋게 봐주셔서 감사합니다 :)

  • @viivii6850
    @viivii6850 Год назад +1

    선생님 이 다음 영상을 애타게 기다리고 있읍니다,,, 돌아오세요ㅠ_ㅠ

    • @ez.
      @ez.  Год назад +3

      흑 ㅠㅠ 사실 이런저런 일들로 못 올리고 있어요 ㅠㅠ 조만간 공지 영상으로 말씀드릴게요 ㅠ

  • @user-ix4gv7it4v
    @user-ix4gv7it4v Год назад +1

    역시 쉽게 잘알려주시네여 감사합니다!

    • @ez.
      @ez.  Год назад +1

      크~! 역시 찰스형이십니다! 👍

  • @newbie439
    @newbie439 3 месяца назад

    선생님 너무 감사합니다!!

  • @jerryk0269
    @jerryk0269 Год назад +2

    오늘도 좋은 영상 너무너무 감사합니다! 매일 퇴근하고 쉬운코드님 영상 보면서 공부 / 복습한다고 마음 먹었으나,
    막상 취업하고 나니 과제다 뭐다 쉬운 일이 아니네요 ㅋㅋㅋ ㅠ
    그래도 시간 날 때마다 꾸준하게 보면서 공부하겠다고 마음 먹습니다. 항상 최고의 영상 남겨주셔서 감사합니다.
    추가로 19:10 "실제 UDP 소켓이 식별되는(동작하는) 방식" 부분부터 질문이 있는데요,
    udp 소켓에서는 데이터를 보낼 때 여러 udp 소켓에 보낼 수 있다? yes
    - Q1. tcp 소켓에서도 가능한 것 아닌가요? 호스트명을 적을 때 포트번호까지 명시하니까요! 실제로도 한 애플리케이션에서 내부호출을 한다고 하면, localhost:8080에서 localhost:8081 / localhost:80802에도 요청을 보낼 수 있는 것과 무엇이 다른 것인지 감이 잘 오지 않습니다
    udp socket에서 데이터를 읽을 때 어느 udp socket으로부터 왔는지 확인할 수 있다
    - Q2. 이것도 tcp socket에서도 마찬가지 아닌가요? tcp 프로토콜을 통해 데이터를 전송할 때, tcp header에 해당 정보들을 실어서 보내게 되니까요!
    -----------
    TCP / IP 프로토콜 스택을 시스템 관점에서 바라본다면 다음 두 가지로 분류할 수 있음
    - 애플리케이션 레벨 : 시스템이 제공하는 네트워크 기능 사용
    - 시스템의 기능을 사용할 때는 "socket"이라는 프로그래밍 인터페이스를 통해 접근한다
    - 개발자는 소켓 프로그래밍을 통해 네트워크 상의 다른 프로세스와 데이터를 주고 받을 수 있도록 구현한다
    - 시스템 레벨 : 애플리케이션에서 사용할 수 있도록 네트워크 기능 지원
    application layer의 프로토콜은 모듈 형태로 소켓을 활용한 네트워크 기능이 제공되기 때문에, 보통 socket을 직접 조작해 통신 기능을 구현할 일은 적다
    socket은 로 정의된다
    - port는 socket을 식별하기 위해 부여되는 숫자
    - ip addreess, port number로 unique하게 식별되는가?
    - udp : unique. 데이터가 손실되어도 상관 없기 때문에 단일 socket을 활용해서 연결할 수 있다
    - tcp : not unique. TCP 스펙상 구현하려면 단일 socket을 활용해 연결해야 하지만, 실제로는 연결 후 각각과 연결을 담당하는 socket을 복사하는 구조로 구현된다
    - 3-way handshake 이후 server에서는 listening socket이 복사한 걸 바인딩 시켜주기 때문. 이때 복사된 소켓이 가지는 IP address와 port number도 동일하다
    - connection 연결 요청시 : 를 헤더에 담아 보내, 맺어져 있는 socket이 없기 때문에 listening socket에 보내 socket을 복사한다
    - connection 성립된 이후 요청시 : 를 헤더에 담아 보내 server에서는 어떤 socket과 바인딩 되어 있는지 식별할 수 있다
    클라이언트 측에서도 서로 다른 socket이 동일한 IP와 port를 가지는 것이 가능하긴 하다
    - 포트가 재사용되는 경우
    0 ~ 1023 : well known ports
    1024 ~ 49151 : registered ports (IANA에 등록된 번호)
    49152 ~ 65535 : dynamic ports (등록 안된 번호)

    • @ez.
      @ez.  Год назад +1

      맞습니다 실무에서 일하면서 공부하는게 정말 쉽진 않죠 ㅠㅠ
      항상 열심히 하시는 모습 정말 최고십니다!! 👍👍👍
      Q1. 소켓 프로그래밍 하나의 TCP 소켓이 여러 TCP 소켓과 연결을 맺을 순 없을 텐데요ㅠㅠ
      >> localhost:8080에서 localhost:8081 / localhost:80802에도 요청을 보낼 수 있는 것과 무엇이 다른 것인지 감이 잘 오지 않습니다
      이건 어떤 의미로 말씀하신 것인지 잘 모르겠어요 ㅠ
      Q2. udp는 connection-oriented가 아니기 때문에, 하나의 udp socket으로도 여러 개의 remote udp socket들이 보내는 데이터를 받을 수 있고, 그럼 이때 문제가 되는 부분은 방금 받은 데이터가 어떤 UDP socket이 보낸 것인지를 알아야 하는데, 이를 위해 'udp socket에서 데이터를 읽을 때 어느 udp socket으로부터 왔는지도 같이 확인할 수 있다'라는 의미로 말씀드린 거예요
      linux.die.net/man/2/recvfrom
      여기 링크의 recvfrom이 UDP 소켓 프로그래밍에서 데이터를 읽을 때 사용되는 API(혹은 시스템콜)인데, 파라미터 중에 sockaddr *src_addr 이라고 된 것이 있는데 얘가 데이터를 읽을 때 (데이터를 보낸) source UDP socket의 address를 반환하는 용도라고 보시면 됩니다
      참고로 윈도우의 경우에는 TCP 소켓에 recvfrom을 쓰게 되면 이때 이 파라미터는 무시됩니다
      (The from and fromlen parameters are ignored for connection-oriented sockets. : learn.microsoft.com/en-us/windows/win32/api/winsock/nf-winsock-recvfrom)

  • @피자맛치킨
    @피자맛치킨 5 месяцев назад

    너무 감사합니다❤❤❤

  • @pujuhong
    @pujuhong Год назад +1

    항상 감사합니다 :)

    • @ez.
      @ez.  Год назад +1

      저도 댓글 감사합니다 :)

  • @임형주서울컴퓨터소프

    항상 영상 잘 보고 있습니다. 어려운 개념들을 쉽게 설명해주셔서 쏙쏙 이해가 됩니다.학부 때 미리 접했다면 얼마나 좋았을까요...
    바쁘시겠지만 염치 불구하고 TCP 흐름/혼잡/오류 제어 영상 부탁드려도 될까요? 다른 서적들을 참고해도 항상 헷갈리는 개념이라 염치 불구하고 부탁드립니다 ㅠㅠ

  • @wisiasa
    @wisiasa Год назад

    좋은 영상 감사합니다 :)

  • @minjoon1324
    @minjoon1324 Год назад +1

    좋은 영상 감사햡니다

    • @ez.
      @ez.  Год назад +2

      오래 기다려 주셔서 감사합니다 👍

  • @jsjsnnjssk9923
    @jsjsnnjssk9923 Год назад +1

    좋은 영상 감사합니다 ㅜ

    • @ez.
      @ez.  Год назад +1

      2부까지 봐주셔서 감사합니다 😍

  • @mangovn777
    @mangovn777 9 месяцев назад

    감사합니다.

  • @강태공-c8s
    @강태공-c8s Год назад

    안녕하세요 선생님, 백엔드 인턴을 하고 있는데 모든 강의가 너무 도움이 많이 됩니다! ㅎㅎ
    혹시 블로그에 강의 내용을 정리할까 하는데 실례가 되지 않는다면 출처를 남기고 자료로 활용해도 괜찮을지 문의드립니다!