[1부] 프로토콜 표준 스펙에서 정의한 Socket(소켓), Port(포트), TCP connection(연결) 개념

Sdílet
Vložit
  • čas přidán 4. 07. 2024
  • #socket #port #TCPconnection #UDP #네트워크 #쉬운코드 #백발백중
    인터넷이나 네트워크 상에서 통신하기 위해서는 소켓과 포트, TCP 커넥션(connection)의 개념을 정확히 이해할 필요가 있습니다
    이 개념들은 기본적으로 TCP 표준 문서(RFC 793)에서 정의되어 있는데요,
    그래서 오늘 1부 영상에서는 프로토콜 표준 스펙에서 이들 개념들을 어떻게 정의했는지 살펴보고요,
    2부 영상에서는 이 표준을 현실 세계에 적용하면서 개념적으로 차이가 발생한 부분을 설명드리도록 하겠습니다
    1부와 2부를 모두 보셔야 정확히 이해하실 수 있습니다!!
    00:00 오프닝
    00:12 두 모델 : OSI 7 layer vs TCP/IP stack
    01:57 소켓 & 포트는 TCP/IP stack으로 살펴보자
    02:12 TCP/IP stack을 두 부분으로 구분
    03:28 port 개념
    06:47 프로세스 간의 통신과 인터넷 프로토콜
    08:29 프로세스 간의 통신에 필요한 프로토콜
    08:56 TCP 개념
    09:21 TCP connection 개념
    11:30 port 식별 : port number 개념
    13:10 port 식별 : port number만으론 부족함
    13:49 Socket 개념 (IP addr + port number)
    15:15 TCP connection과 socket의 관계
    18:00 UDP 개념
    19:01 UDP와 socket
    19:52 TCP/IP stack에서 socket의 개념
    20:28 표준에서 정의한 개념을 바탕으로 예제
    24:22 오늘 영상 이해할 때 주의 사항
    24:46 클로징
  • Věda a technologie

Komentáře • 46

  • @ez.
    @ez.  Před rokem +5

    몇 가지 코멘트 남깁니다~
    🔸 오늘 영상은 TCP 표준인 RFC 793을 기준으로 제작된 영상입니다
    작년(2022)에 TCP 표준이 RFC 9293으로 갱신돼서 나오긴 했는데, 기본 개념을 대체하지 않았기 때문에 793을 기준으로 제작하게 됐습니다
    datatracker.ietf.org/doc/html/rfc793
    🔸 이 영상은 1부 영상입니다
    2부 : 실제 시스템에서 동작하는 소켓은 표준에서 정의된 소켓과 어떻게 다른가? (czcams.com/video/WwseO8l8rZc/video.html)
    🔸 원래 하나로 제작할 영상이었는데 40분 넘길 것 같아서 나눴습니다
    분량이 너무 길어지지만 않았다면 무조건 하나로 내보낼 영상이었습니다
    그만큼 2부까지 꼭 보셔야 정확히 이해하실 수 있습니다
    🔸 2부 영상에서는 오늘 언급된 개념들을 현실 개발 세계로 옮기면서 발생한 차이를 설명합니다
    실제 소켓 동작 방식을 (특히 TCP 소켓의 동작 방식을) 2부에서 설명하기 때문에
    백엔드 서버 개발자라면 2부 영상의 내용을 알고 계시는 것이 필요합니다
    🔸 영상 초반에 OSI 모델과 TCP/IP stack 모델부터 설명한 이유
    - 실제로 인터넷이 TCP/IP stack 기반으로 동작합니다
    - TCP/IP stack을 이루는 프로토콜들이 활발하게 개발되고 확립되던 시기에 포트, 소켓 개념 또한 정리됐기 때문입니다
    - 마찬가지로 TCP, UDP 또한 인터넷이 만들어지던 시기에 개발된 프로토콜이기 때문입니다
    🔸08:16 '그만큼 별다른 기능 없이’라는 표현은 Internet protocol이 기능이 없다는 의미가 아닙니다
    reliable할 수 있도록 하기 위한 추가적인 기능이 없다는 의미입니다
    🔸17:25 그러나 실제로 TCP 소켓이 동작하는 방식은 이 부분이 다릅니다
    그 외의 개념들은 실제 프로그래밍 세계에서도 똑같거나 거의 유사하거나 미묘하게 차이난다고 보시면 됩니다
    🔸22:35 ~ 24:21 오타가 있습니다 ㅠㅠ connection들에서 8282가 아니라 8082 입니다 ㅠㅠ

  • @captainpenguin2399
    @captainpenguin2399 Před 9 měsíci

    너무 너무 감사합니다~~

  • @Que55
    @Que55 Před 3 měsíci

    명캐한 강의 감사드려요 다음이 기대되어서 구독합니다 ❤

  • @wisiasa
    @wisiasa Před 9 měsíci

    좋은 영상 감사합니다 :)

  • @user-gq7wn7ne2y
    @user-gq7wn7ne2y Před rokem

    와 학부생 시절 네트워크 수업때 그냥 외우면서 했는데... 너무 재밌고 쉽게 알려주시네요 감사합니다.

  • @실험맨
    @실험맨 Před 9 měsíci

    감사합니다. 책만보다가 그냥 그런거다 하고 외우고 넘어간 부분을
    이해할수있게 됬어요

  • @seosawon
    @seosawon Před rokem +1

    언제나 감사합니다

    • @ez.
      @ez.  Před rokem +1

      언제나 시청해 주셔서 감사합니다 :)

  • @supersuperwow
    @supersuperwow Před rokem +1

    설명 정말 최고이십니다. 다음영상 기다리고 있겠습니다. 파이팅입니다!!

    • @ez.
      @ez.  Před rokem +1

      감사합니다!!
      현재 2부 영상 편집 중인데 아무래도 시간이 좀 더 필요할 것 같습니다 ㅠ
      파이팅해서 늦어도 토욜에는 업로드 해 볼게요~! (내일은 어린이날이니까요 ㅎㅎ)

  • @eunjijeong9808
    @eunjijeong9808 Před rokem +1

    소켓의 개념적 내용이 잘 와닿습니다 ㅎㅎ 😀

    • @ez.
      @ez.  Před rokem +1

      헤헤 감사합니다 :) 오늘 저녁에 2부 영상도 올라갑니다 👍

  • @country_dog574
    @country_dog574 Před rokem +1

    정말 최고에요!! 주변 다른 사람들도 모두 볼 수 있도록 열심히 홍보하고있습니다!! 언제나 감사합니다!

    • @ez.
      @ez.  Před rokem +1

      크 ㅠㅠ 감동ㅠㅠ 🥹 정말 감사합니다 ㅠㅠ 저도 계속해서 파이팅할게요 👍

  • @user-ix4gv7it4v
    @user-ix4gv7it4v Před rokem +3

    어렵다고 생각한 개념을 쉽게 알려주시니 너무감사합니다ㅜ

    • @ez.
      @ez.  Před rokem +2

      저도 항상 유익하게 봐주셔서 감사합니다 :)

  • @jasonpark6072
    @jasonpark6072 Před 2 měsíci

    대기업에서 데이터 통신쪽 파트에서 일 했는데 소켓통신이 참 어려웠어요. 20년이 지난 이야기이지만요.
    참 명확하게 잘 설명하십니다.
    이걸 프로..프로페셔널..이런 단어가 생각나네요.
    설명 잘 들었습니다.

  • @jammyjamjamm
    @jammyjamjamm Před 6 měsíci

    비트..리듬..소울....와. 역시. 쉬운코드선배님.
    인생 레전드 강의입니다..
    🤣🤣진짜 맨날감사하고 마음속으로 많이 존경하고 응원하고 도움받고있습니다.

  • @yongk1883
    @yongk1883 Před rokem +1

    그냥 최고이십니다 이렇게 싑게 설명해주시다니

    • @ez.
      @ez.  Před rokem +1

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

  • @jsjsnnjssk9923
    @jsjsnnjssk9923 Před rokem +1

    좋은영상감사합니다 ㅜ

    • @ez.
      @ez.  Před rokem

      영상 봐주셔서 감사해요 :)

  • @아라리카
    @아라리카 Před rokem +1

    자그마한 비유나. 활용 예시도 같이 설명에 추가하면 더 좋을거같아요! 좋은 영상감사합니다!😊

    • @ez.
      @ez.  Před rokem +2

      영상 좋게 봐주셔서 감사합니다 :)
      활용 예시 같은 경우에는다다음 영상 즈음에 소켓 프로그래밍이라는 주제로 코드 레벨에서 실제로 어떻게 구현되는지 간략하게 설명드릴 계획이에용 👍

  • @user-md4wf6bl4w
    @user-md4wf6bl4w Před rokem +1

    좋은 영상 감사합니다 ㅠㅠ 다음번 영상 학수고대중입니다! 😂

    • @ez.
      @ez.  Před rokem +1

      감사합니다 ㅠㅠ 영상 촬영은 했는데 편집에 시간이 꽤 오래 걸려서 시간이 좀 더 필요할 것 같습니다 ㅠㅠ

  • @Keepheap
    @Keepheap Před 3 měsíci

    와 퀄리티....

  • @CosmicPy
    @CosmicPy Před rokem +7

    항상 잘 보고 있습니다! 감사합니다.
    다른 나라 통화로 결제하니 금액이 좀 크게 표기되네요😅

    • @NLDS003
      @NLDS003 Před rokem +2

      와아.. 저도 열일해서 후원금액 본받겠습니다..👍

    • @CosmicPy
      @CosmicPy Před rokem +2

      실제로는 4.5 달러 후원했어요..ㅋㅋ 본의 아니게 큰 손 흉내내보네요. 열심히 돈 벌어서 다음에는 더 크게 후원하겠습니다 :)

    • @ez.
      @ez.  Před rokem +2

      와우~! ㅠㅠ 항상 영상을 시청해 주시고 오늘은 슈퍼땡스까지!!! 감사합니다!!!
      해외에서 일하고 계신 것 같은데 멀리서도 이렇게 응원해 주셔서 더 힘이 납니다 👍
      계속해서 파이팅할게요~!

  • @user-vu3it2sp5y
    @user-vu3it2sp5y Před rokem +1

    오늘도 감사합니다 선생님! 그런데 들으면서 궁금한 점이 생겼습니다. 1부의 인터넷 개념과 조금 혼동 되는데요
    클라이언트 측면에서 보자면
    A 컴퓨터, B 컴퓨터가 같은 공인 IP 내에 있습니다.
    그런데 둘 다 브라우저에서 어느 사이트를 접속을 한다면 이에 대한 구분은 게이트 웨이의 책임인가요?
    OS 마다 다르기는 하겠지만 클라이언트의 경우 특정 범위의 임의의 포트를 열어서 상대 서버의 포트와 연결을 하게 되는데 A와 B의 포트 번호가 우연히 같아지면 어떻게 구분을 하나요?
    아니면 OS 프로토콜과 상관없이 NAT가 A,B 를 연결할 때 포트 포워팅을 해주어서 1은 A 컴퓨터, 2는 B 컴퓨터 이렇게 해서 각 컴퓨터에 패킷을 전달해주고 이후 OS가 tcp 패킷을 보고 그에 맞는 포트 포워딩을 하게 되는 것인가요?

    • @ez.
      @ez.  Před rokem +1

      앗 죄송합니다 이번 영상은 NAT에 대한 설명을 한 것은 아니었어서 영상 외의 질문에는 제가 사정 상 답변을 드리고 있지 않습니다 ㅠㅠ
      이 부분 양해를 부탁드리고요, 아주 간단하게만 설명하면 gateway에서 처리가 된다고 보시면 됩니다 (가정이라면 유무선 공유기가 되겠군요)

  • @dev_pedia
    @dev_pedia Před rokem +1

    Socket과 WebSocket의 차이, 그리고 TCP/IP Socket이 gRPC나 HTTP에 어떤 영향을 끼쳤는지도 궁금합니다! 2부에서 다루시려나요? ㅎㅎ

    • @ez.
      @ez.  Před rokem +1

      앗~! 2부에서는 소켓 프로그래밍 관점에서 소켓을 다룰 예정입니다 ㅎㅎ
      말씀하신 주제들은 언젠가 별도의 영상들로 다뤄볼게요~!

  • @deniapark761
    @deniapark761 Před rokem +1

    항상 잘 보고 있습니다!!
    한가지 질문이 있습니다!
    22:37 에서 소켓의 쌍이라고 설명을 해주시면서 오른쪽에 있는 포트가 8082 혹은 8081이 아니라 8282 라고 되어있는데 이 부분은 왜 그런 것인가요 ??

    • @nick6267
      @nick6267 Před rokem +1

      그냥 실수하신 것으로 보여져요

    • @ez.
      @ez.  Před rokem +1

      헉 맞습니다 ㅠㅠ 실수했어요 ㅠㅠ
      8282가 아니라 8082 입니다 ㅠㅠ
      이건 pin 댓글에도 적어둘게요

  • @minjoon1324
    @minjoon1324 Před rokem +1

    너무 재미있게 봤습니다. 항상 감사합니다. 궁금한점이 소켓을 IP + PORT 라고 설명해주시는분들도 많고 애플리케이션에서 시스템호출을 할때 이용하는 파일 인터페이스라고 설명해주시는분들고 많이 존재합니다. 소켓이란 두가지 책임이 있는 것으로 이해하면 될까요?

    • @minjoon1324
      @minjoon1324 Před rokem +1

      2부는 언제올라오나요 현기증납니다

    • @ez.
      @ez.  Před rokem +2

      오~! 재밌게 봐주셔서 감사합니다!! 질문주신 내용은 2부에서 다루게 됩니다 :)
      올리는 날짜는 요즘 저희 가정에 행사가 많긴 한데 일단 어린이날 전까지 2부 올리는 걸 목표로 하고 있습니다 👍
      파이팅 해봐야죠 ㅎㅎ

    • @minjoon1324
      @minjoon1324 Před rokem +1

      오 혹시나 댓글 달아주셨나 찾아봤는데 감사합니다. 어린이날까지 존버하겠습니다

    • @minjoon1324
      @minjoon1324 Před rokem +1

      두근두근..

    • @ez.
      @ez.  Před rokem +2

      @@minjoon1324 앜ㅋㅋㅋ 오늘은 무리일거 같습니다.. 영상은 찍었지만 편집이 오래 걸리네요ㅠㅠ

  • @jerryk0269
    @jerryk0269 Před rokem +2

    안녕하세요 쉬운코드님!! 오늘도 영상 너무 잘봤습니다!!
    영상 시청후 24:15 부근에 "하나의 socket이 여러 connection에서 사용 가능" 부분 이후 몇가지 질문이 생겼는데요,
    Q1. tcp에서는 connection을 생성할 때 3-way handshake를 수행하게 되는데 이때 발생하는 connection은 아니고, 통신을 말하는 connection을 의미하는 걸까요?
    Q2. tcp에서는 3-way handshake 후 목적지와 출발지를 바인딩하면서, 위 조건을 만족하기 위해 socket을 복사하는 식으로 구현하는 것이라고 이해할 수 있을까요? (외부에서 봤을 때는 추상화 되어서 하나의 소켓과 통신하는 것처럼 보일테니까요)
    Q3. 그렇다면 3-way handshake 이후 주소지를 바인딩해야 하는 이유는 무엇일까요? 2부 영상에서 주소지를 바인딩하는 내용은 있는데 복사해서 바인딩하는 이유에 대해서는 정확히 이해되지 않아서 궁금합니다…! 제가 추측하기로는 시스템 계층에 있는 네트워크 관련 buffer에 있는 sequence number와 ack number을 저장하는 테이블과 소켓을 매핑해서 찾아가게 만드려는 의도가 아닐까? 라는 생각이 들긴 합니다
    +) 추가로 하나의 socket이 여러 connection에서 사용 가능한 이유 역시 논리적으로는 socket이 unique하다는 특성 때문이라고 이해했는데 이것도 맞을까요?
    너무 당연한

    • @ez.
      @ez.  Před rokem +1

      오늘도 화이팅이십니다 :)
      제가 지금 형편 상 모든 질문에 다 답을 드릴 순 없기 때문에ㅠㅠㅠ 간략하게 답변을 드릴게요 ㅠㅠ
      그리고 약간 이해에 오해가 있으신거 같습니다 ㅠ (1부 영상 먼저 보셨으면 좋았었을 것 같아요ㅠ)
      이 영상은 프로토콜 표준 관점에서 소켓을 설명했습니다.
      표준에서는 소켓을 포트의 주소로 정의합니다
      즉, 표준에서 소켓은 으로 이루어진 주소를 의미합니다
      Q1.
      표준에서는 하나의 소켓이, 즉 하나의 주소를 의미하기 때문에 하나의 주소가 여러 커넥션에서 사용될 수 있다는 의미입니다
      어떻게 보면 당연한 얘기겠죠, TCP connection은 서로 다른 두 소켓의 조합으로 정의되고 식별되기 때문입니다
      Q2, Q3
      질문이 정확히 어떤 의미인지 이해가 잘 되지 않습니다 ㅠㅠ
      2부에서는 실제 동작 관점에서 소켓을 설명했어요. 실제 동작에서는
      TCP 소켓의 경우 TCP 연결을 맺기 위해서는 listening socket으로 요청을 보냅니다
      OS레벨에서 요청이 맺어지면 (이건 OS가 알아서 하는 영역), 실제로 데이터를 읽고 쓸 수 있는 새로운 TCP 소켓을 반환합니다
      이때 이 TCP 소켓의 ip 주소와 port number가 listening socket과 동일하다라고 말씀을 드리게 됐습니다
      TCP 소켓 프로그래밍에서 서버 쪽 소스 코드 보시면 보다 더 이해가 잘 되실 것 같아용~!
      www.geeksforgeeks.org/tcp-server-client-implementation-in-c/
      ---
      아무래도 표준에서의 정의한 소켓과 실제 동작 관점에서 구현된 소켓이 다르다보니 오해가 생긴 것 같은데요
      이 부분을 잘 구분을 하시면 이해에 도움이 되지 않을까 싶어요~!