몇 가지 코멘트 남깁니다~ 🔸 이 영상 이어서 2부 영상까지 보셔야 제대로 이해하실 수 있습니다 2부 : 실제 시스템에서 동작하는 소켓은 표준에서 정의된 소켓과 어떻게 다른가? (ruclips.net/video/WwseO8l8rZc/видео.html) 🔸 오늘 영상은 TCP 표준인 RFC 793을 기준으로 제작된 영상입니다 작년(2022)에 TCP 표준이 RFC 9293으로 갱신돼서 나오긴 했는데, 기본 개념을 대체하지 않았기 때문에 793을 기준으로 제작하게 됐습니다 datatracker.ietf.org/doc/html/rfc793 🔸 원래 하나로 제작할 영상이었는데 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 입니다 ㅠㅠ
@@김용민-x9d 저같은 경우에는 구글링을 많이 합니다. 쓰다보면 이런저런 의문이 생기는데 그런 의문이 생길 때마다 구글링을 하는거죠. 하다보면 또 궁금한게 생기고 그럼 또 찾아보고 그렇게 하고 있습니다. 그리고 구글링해서 나온 내용에 대해서 댓글까지도 꽤 읽어보는 편이구요~ 요즘은 chatGPT 같은 것들이 있다보니 원하는 지식에 접근하는 것이 조금 더 수훨해진거 같아요
안녕하세요 쉬운코드님!! 오늘도 영상 너무 잘봤습니다!! 영상 시청후 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하다는 특성 때문이라고 이해했는데 이것도 맞을까요? 너무 당연한
오늘도 화이팅이십니다 :) 제가 지금 형편 상 모든 질문에 다 답을 드릴 순 없기 때문에ㅠㅠㅠ 간략하게 답변을 드릴게요 ㅠㅠ 그리고 약간 이해에 오해가 있으신거 같습니다 ㅠ (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/ --- 아무래도 표준에서의 정의한 소켓과 실제 동작 관점에서 구현된 소켓이 다르다보니 오해가 생긴 것 같은데요 이 부분을 잘 구분을 하시면 이해에 도움이 되지 않을까 싶어요~!
오늘도 감사합니다 선생님! 그런데 들으면서 궁금한 점이 생겼습니다. 1부의 인터넷 개념과 조금 혼동 되는데요 클라이언트 측면에서 보자면 A 컴퓨터, B 컴퓨터가 같은 공인 IP 내에 있습니다. 그런데 둘 다 브라우저에서 어느 사이트를 접속을 한다면 이에 대한 구분은 게이트 웨이의 책임인가요? OS 마다 다르기는 하겠지만 클라이언트의 경우 특정 범위의 임의의 포트를 열어서 상대 서버의 포트와 연결을 하게 되는데 A와 B의 포트 번호가 우연히 같아지면 어떻게 구분을 하나요? 아니면 OS 프로토콜과 상관없이 NAT가 A,B 를 연결할 때 포트 포워팅을 해주어서 1은 A 컴퓨터, 2는 B 컴퓨터 이렇게 해서 각 컴퓨터에 패킷을 전달해주고 이후 OS가 tcp 패킷을 보고 그에 맞는 포트 포워딩을 하게 되는 것인가요?
앗 죄송합니다 이번 영상은 NAT에 대한 설명을 한 것은 아니었어서 영상 외의 질문에는 제가 사정 상 답변을 드리고 있지 않습니다 ㅠㅠ 이 부분 양해를 부탁드리고요, 아주 간단하게만 설명하면 gateway에서 처리가 된다고 보시면 됩니다 (가정이라면 유무선 공유기가 되겠군요)
몇 가지 코멘트 남깁니다~
🔸 이 영상 이어서 2부 영상까지 보셔야 제대로 이해하실 수 있습니다
2부 : 실제 시스템에서 동작하는 소켓은 표준에서 정의된 소켓과 어떻게 다른가? (ruclips.net/video/WwseO8l8rZc/видео.html)
🔸 오늘 영상은 TCP 표준인 RFC 793을 기준으로 제작된 영상입니다
작년(2022)에 TCP 표준이 RFC 9293으로 갱신돼서 나오긴 했는데, 기본 개념을 대체하지 않았기 때문에 793을 기준으로 제작하게 됐습니다
datatracker.ietf.org/doc/html/rfc793
🔸 원래 하나로 제작할 영상이었는데 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 입니다 ㅠㅠ
항상 잘 보고 있습니다! 감사합니다.
다른 나라 통화로 결제하니 금액이 좀 크게 표기되네요😅
와아.. 저도 열일해서 후원금액 본받겠습니다..👍
실제로는 4.5 달러 후원했어요..ㅋㅋ 본의 아니게 큰 손 흉내내보네요. 열심히 돈 벌어서 다음에는 더 크게 후원하겠습니다 :)
와우~! ㅠㅠ 항상 영상을 시청해 주시고 오늘은 슈퍼땡스까지!!! 감사합니다!!!
해외에서 일하고 계신 것 같은데 멀리서도 이렇게 응원해 주셔서 더 힘이 납니다 👍
계속해서 파이팅할게요~!
설명 정말 최고이십니다. 다음영상 기다리고 있겠습니다. 파이팅입니다!!
감사합니다!!
현재 2부 영상 편집 중인데 아무래도 시간이 좀 더 필요할 것 같습니다 ㅠ
파이팅해서 늦어도 토욜에는 업로드 해 볼게요~! (내일은 어린이날이니까요 ㅎㅎ)
비트..리듬..소울....와. 역시. 쉬운코드선배님.
인생 레전드 강의입니다..
🤣🤣진짜 맨날감사하고 마음속으로 많이 존경하고 응원하고 도움받고있습니다.
넘 감사합니다 ㅠ 응원해주신 덕분에 다시 돌아왔습니다!ㅎㅎ
어렵다고 생각한 개념을 쉽게 알려주시니 너무감사합니다ㅜ
저도 항상 유익하게 봐주셔서 감사합니다 :)
정말 최고에요!! 주변 다른 사람들도 모두 볼 수 있도록 열심히 홍보하고있습니다!! 언제나 감사합니다!
크 ㅠㅠ 감동ㅠㅠ 🥹 정말 감사합니다 ㅠㅠ 저도 계속해서 파이팅할게요 👍
그냥 최고이십니다 이렇게 싑게 설명해주시다니
헤헿 좋게 봐주셔서 감사합니다 :)
명캐한 강의 감사드려요 다음이 기대되어서 구독합니다 ❤
감사합니다! 2부 영상도 있으니까 꼭 봐주시고요, 유튜브 복귀했으니 네트워크 달려봅니다!!
대기업에서 데이터 통신쪽 파트에서 일 했는데 소켓통신이 참 어려웠어요. 20년이 지난 이야기이지만요.
참 명확하게 잘 설명하십니다.
이걸 프로..프로페셔널..이런 단어가 생각나네요.
설명 잘 들었습니다.
극찬 감사합니다!! 앞으로도 많은 관심 부탁드려요 헤헤
감사합니다. 책만보다가 그냥 그런거다 하고 외우고 넘어간 부분을
이해할수있게 됬어요
감사합니다!! 실제 개념이나 동작 방식이 또 조금 다른 부분이 있어서 2부 영상도 꼭 참고 부탁드립니다 ;)
감사합니다
17:50 소켓의 재사용성, Connection Pool
22:06 고유식별자, 조합, src socket-dest socket 쌍으로 Connection 생성
멋짐돠! 2부 영상도 꼭 봐주세요. 스펙에서 정의한 내용과 실제 동작은 개념과 동작에서 차이나는 부분이 있어서용
자그마한 비유나. 활용 예시도 같이 설명에 추가하면 더 좋을거같아요! 좋은 영상감사합니다!😊
영상 좋게 봐주셔서 감사합니다 :)
활용 예시 같은 경우에는다다음 영상 즈음에 소켓 프로그래밍이라는 주제로 코드 레벨에서 실제로 어떻게 구현되는지 간략하게 설명드릴 계획이에용 👍
와 학부생 시절 네트워크 수업때 그냥 외우면서 했는데... 너무 재밌고 쉽게 알려주시네요 감사합니다.
감사합니다! 이번 영상은 표준 스펙에서 정의된 내용으로 설명한 영상이고요, 실제 개념이나 동작 방식은 또 조금 다른데 그래서 2부 영상도 꼭 참고 부탁드립니다 ;)
언제나 감사합니다
언제나 시청해 주셔서 감사합니다 :)
좋은 영상 감사합니다 ㅠㅠ 다음번 영상 학수고대중입니다! 😂
감사합니다 ㅠㅠ 영상 촬영은 했는데 편집에 시간이 꽤 오래 걸려서 시간이 좀 더 필요할 것 같습니다 ㅠㅠ
감사합니다.
너무 너무 감사합니다~~
너무 너무 러뷰~~~
과탐 생물에서 봤던 칼슘 채널이 생각나네요
칼슘 중요합니다
좋은 영상 감사합니다 ㅎ
저도 감사해요 ㅎㅎ
감사합니다^^
저두요
좋은영상감사합니다 ㅜ
영상 봐주셔서 감사해요 :)
좋은 영상 감사합니다 :)
좋은 댓글은 사랑입니다 :)
항상 잘 보고 있습니다!!
한가지 질문이 있습니다!
22:37 에서 소켓의 쌍이라고 설명을 해주시면서 오른쪽에 있는 포트가 8082 혹은 8081이 아니라 8282 라고 되어있는데 이 부분은 왜 그런 것인가요 ??
그냥 실수하신 것으로 보여져요
헉 맞습니다 ㅠㅠ 실수했어요 ㅠㅠ
8282가 아니라 8082 입니다 ㅠㅠ
이건 pin 댓글에도 적어둘게요
나중에 기회되면 소켓-epoll-nio-netty 조합도 다뤄주시면 정말 감사하겠습니다!
오 나중에 기회되면 다뤄볼게요~
감사합니다!
혹시 실례가 안된다면 질문을 드리고 싶은게 있습니다. 다양한 라이브러리에 대해서 공부하실 때 원문을 보더라도 사용법이 대부분이고 내부 원리까지 알기는 쉽지 않던데 원리파악을 위해 따로 애용하시는 방식이 있으신가요?
@@김용민-x9d 저같은 경우에는 구글링을 많이 합니다. 쓰다보면 이런저런 의문이 생기는데 그런 의문이 생길 때마다 구글링을 하는거죠. 하다보면 또 궁금한게 생기고 그럼 또 찾아보고 그렇게 하고 있습니다. 그리고 구글링해서 나온 내용에 대해서 댓글까지도 꽤 읽어보는 편이구요~
요즘은 chatGPT 같은 것들이 있다보니 원하는 지식에 접근하는 것이 조금 더 수훨해진거 같아요
@@ezcd 답변 감사합니다!
안녕하세요 쉬운코드님!! 오늘도 영상 너무 잘봤습니다!!
영상 시청후 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하다는 특성 때문이라고 이해했는데 이것도 맞을까요?
너무 당연한
오늘도 화이팅이십니다 :)
제가 지금 형편 상 모든 질문에 다 답을 드릴 순 없기 때문에ㅠㅠㅠ 간략하게 답변을 드릴게요 ㅠㅠ
그리고 약간 이해에 오해가 있으신거 같습니다 ㅠ (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/
---
아무래도 표준에서의 정의한 소켓과 실제 동작 관점에서 구현된 소켓이 다르다보니 오해가 생긴 것 같은데요
이 부분을 잘 구분을 하시면 이해에 도움이 되지 않을까 싶어요~!
너무 재미있게 봤습니다. 항상 감사합니다. 궁금한점이 소켓을 IP + PORT 라고 설명해주시는분들도 많고 애플리케이션에서 시스템호출을 할때 이용하는 파일 인터페이스라고 설명해주시는분들고 많이 존재합니다. 소켓이란 두가지 책임이 있는 것으로 이해하면 될까요?
2부는 언제올라오나요 현기증납니다
오~! 재밌게 봐주셔서 감사합니다!! 질문주신 내용은 2부에서 다루게 됩니다 :)
올리는 날짜는 요즘 저희 가정에 행사가 많긴 한데 일단 어린이날 전까지 2부 올리는 걸 목표로 하고 있습니다 👍
파이팅 해봐야죠 ㅎㅎ
오 혹시나 댓글 달아주셨나 찾아봤는데 감사합니다. 어린이날까지 존버하겠습니다
두근두근..
@@minjoon1324 앜ㅋㅋㅋ 오늘은 무리일거 같습니다.. 영상은 찍었지만 편집이 오래 걸리네요ㅠㅠ
잘보고갑니다
자주 들러주십쇼
오늘도 감사합니다 선생님! 그런데 들으면서 궁금한 점이 생겼습니다. 1부의 인터넷 개념과 조금 혼동 되는데요
클라이언트 측면에서 보자면
A 컴퓨터, B 컴퓨터가 같은 공인 IP 내에 있습니다.
그런데 둘 다 브라우저에서 어느 사이트를 접속을 한다면 이에 대한 구분은 게이트 웨이의 책임인가요?
OS 마다 다르기는 하겠지만 클라이언트의 경우 특정 범위의 임의의 포트를 열어서 상대 서버의 포트와 연결을 하게 되는데 A와 B의 포트 번호가 우연히 같아지면 어떻게 구분을 하나요?
아니면 OS 프로토콜과 상관없이 NAT가 A,B 를 연결할 때 포트 포워팅을 해주어서 1은 A 컴퓨터, 2는 B 컴퓨터 이렇게 해서 각 컴퓨터에 패킷을 전달해주고 이후 OS가 tcp 패킷을 보고 그에 맞는 포트 포워딩을 하게 되는 것인가요?
앗 죄송합니다 이번 영상은 NAT에 대한 설명을 한 것은 아니었어서 영상 외의 질문에는 제가 사정 상 답변을 드리고 있지 않습니다 ㅠㅠ
이 부분 양해를 부탁드리고요, 아주 간단하게만 설명하면 gateway에서 처리가 된다고 보시면 됩니다 (가정이라면 유무선 공유기가 되겠군요)
Socket과 WebSocket의 차이, 그리고 TCP/IP Socket이 gRPC나 HTTP에 어떤 영향을 끼쳤는지도 궁금합니다! 2부에서 다루시려나요? ㅎㅎ
앗~! 2부에서는 소켓 프로그래밍 관점에서 소켓을 다룰 예정입니다 ㅎㅎ
말씀하신 주제들은 언젠가 별도의 영상들로 다뤄볼게요~!
와 퀄리티....
쉬운코드 클라스....
21:00
하트