묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
RUDP 질문드립니다
게임 서버 같은 경우에 RUDP를 이용하는 방식이 듣고보니 되게 좋은 것 같아서 구현하려고 하는데 생각 이상으로 고려해야할게 너무 많아서 혹시 저런 것을 구현하는 이론이 있을까요?
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
클라이언트가 먼저 연결종료를 해야한다고 하신부분 질문입니다.
클라이언트가 만약 소켓 연결을 정상 종료하지 않고 프로그램을 끄게 되는 경우 예컨데 정전으로 인해 클라이언트 PC가 종료됐다면 서버는 알턱이 없으니 결국 TimeOut을 체크해서 서버가 연결을 종료해야할 것 같은데 맞을까요?제 생각엔 위와 같은 흐름으로 진행되고 다른 방법은 떠오르지 않는데 혹시 대응할 수 있는 방법이 있을까요?
-
미해결비전공자의 전공자 따라잡기 - 네트워크, HTTP
OSI 7 계층 전체 프로세스 작동 방식
물리->데이커링크->네트워크->트랜스포트->세표응 이런 일련의 과정을 CHUNK로 봤을 때 예를 들어 클라이언트->서버로 보낼 때 물리부터 세표응까지 한번 일어나고 다시 서버-> 클라이언트로 갈 때 다시 물리부터 세표응까지의 과정이 일어나나요?궁금합니다..
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
질문있습니다
채팅 서버 코드 상에서 쓰레드를 생성한 직후 바로 CloseHandle함수를 호출하여 쓰레드 핸들을 해제해주는 부분이 있는데 쓰레드의 동작이 완료되기 전에 CloseHandle을 해줘도 문제가 없나요??리스닝 소켓과 accept함수로 생성된 소켓의 포트 번호가 25000으로 netstat와 wireshark 상으로 보면 동일하게 나오는데 여러 개의 소켓이 하나의 포트 번호를 공유할 수 있나요?? 아니면 netstat와 wireshark의 편의 기능인가요?? accept하면 랜덤한 포트번호를 할당받아서 소켓에 부여한다고 알고 있어서 질문드립니다 ㅠ리스닝 소켓도 버퍼가 있나요??shutdown(hSocket, SD_BOTH);로 리스닝 소켓을 shutdown해주고 나서 accept를 해봤는데 클라이언트의 접속이 잘 되더군요. 리스닝 소켓의 shutdown은 아무런 효과가 없는 건가요??클라이언트와 연결돼있는 상태에서 closesocket(hSocket);을 해서 리스닝 소켓을 해제해봤더니 서버에 연결돼있는 모든 클라이언트에게 RST가 보내졌습니다.그럼 서버가 종료될 때 클라이언트 연결을 끊으려고 모든 클라이언트 소켓들을 순회하면서 closesocket을 해주는 대신 리스닝 소켓하나만 closesocket을 해주는 방식을 써도 될까요??
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
TCP_NODELAY 옵션
TCP_NODELAY 옵션을 주면 입출력 버퍼를 사용하지 않는다고 하셨는데 입력 버퍼도 사용하지 않나요??맞다면 보내는 측의 send()와 받는 측의 recv()가 1:1 매핑이 되는 건가요?? ( 받는 측에서 TCP_NODELAY 옵션을 줬다면 )
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
질문있습니다
1. send()함수는 패킷을 보내는 함수가 아니라 소켓의 출력 버퍼에 데이터를 쓰는 것이고, recv()함수는 소켓의 입력버퍼에서 데이터를 읽어들이는 거라고 보면 될까요?? 데이터를 모아서 한번에 패킷을 보내는 것이 패킷의 갯수를 줄여서 성능 상의 이점이 있다는 건 알겠지만 데이터를 받을 때도 입력 버퍼에서 모아놓았다가 한번에 읽어들이는 것이 좋다는 것은 잘 모르겠네요...ㅠㅠ데이터를 받을 때 패킷을 보낼 때와 마찬가지로 일정 시간 대기해서 데이터가 쌓이도록 한 다음 읽어들인다는 건가요??
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
IOCP에서 WSASend 사용 관련 및 시간 소요 요청 처리
먼저 좋은 강의 감사드립니다.IOCP를 사용 시 채팅서버에서 수신의 경우는 WSARecv를 사용하였으나, 송신은 일반 send 함수를 사용하고 있습니다.송신의 경우 WSASend를 사용하는 것이 send를 사용하는것 대비 장점이 없는 것인지요?WSASend 사용 관련하여 해당 함수를 사용해야 하는 상황에 대해 설명 부탁드립니다.추가로 IOCP의 thread (GQCS)에서 처리하는 일이 시간이 소요되는 처리를 해야 하는 시나리오 (파일 송신 등)에서, 사용자 수가 증가하는 경우 할당할 수 있는 thread가 없어, 동시 접속이 늘어나는 경우 문제가 발생할 수 있을 것으로 판단됩니다. 이런 경우 어떻게 설계를 하는 것이 타당한지 의견을 구하고자 합니다.감사합니다.
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
IOCP의 WSAOVERLAPPED 구조체 상속에 관해서..
안녕하세요 IOCP 관련 자료를 찾아보던 중 WSARecv/WSASend 할 때 넣어주는 WSAOVERLAPPED 구조체를 상속한 사용자 구조체를 넘겨주는 경우를 봤습니다. 이렇게도 사용이 가능하다면 WSAOVERLAPPED 를 상속받았으니 호환 될 것이고 추가적인 데이터도 담을 수 있어 도움이 되겠다는 생각입니다.하나 궁금한 것이 있는데요 IOCP를 이용해서 넘긴 WSABUFF의 메모리영역은 커널에 의해 보호 받는다고 알고 있습니다. 마찬가지로 WSAOVERLAPPED 구조체도 커널에 의해 메모리 관리가 되는지 만약 관리가 된다면 상속을 통해 추가적으로 들어가는 정보도 관리에 포함이 되는지 궁금합니다감사합니다~
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
메일 질문있습니다
5/31 이벤트 유튜브 영상 (https://youtu.be/3rpEsV0vnB8) 보고서선생님께 메일 보냈었는데메일이 안 간건지보낸 메일 주소가 잘못된건지보낸 방식이 잘못된건지 답변을 못 받았습니다.어떤 메일 주소로 어떻게 캡쳐해서 보내드리면 될까요?
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
Callback 기반 비동기 파일 입/출력 질문
안녕하세요 수업 잘 듣고 있습니다 감사합니다. Callback 기반 비동기 파일 입/출력 부분에 질문이 있습니다. 만약 IoThreadFunction 함수에서 다수의 WriteFileEx 를 호출하고 콜백을 모두 같은 FileIoComplete 함수로 받는상황이 있을경우 테스트 해보니 하나의 파일 IO만 완료되도 SleepEx 가 통과되는 상황이 발생하는데요 이경우 만약 모든 콜백을 받길 원하면 구조적으로 스래드 하나당 하나의 WriteFileEx를 호출하도록 하거나 별도로 이벤트를 이용해서 처리하거나 하는 방법이 떠오르긴 한데 이방법이외에 다른 방법도 있을까요??
-
미해결비전공자의 전공자 따라잡기 - 네트워크, HTTP
what is my ip
시스템설정 -> 네트워크탭 -> 이더넷에 나와있는 IP 주소 192.168 ~ 은 공유기에서 사용하는 사설 IP이고, Google 에서 what is my ip 라고 치면 나오는 IP 가, 내 공인 IP라고 보면 되는걸까요??
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
입/출력 비동기 처리 순서 문제
이벤트 기반 파일 입/출력 강의에서 예제를 통해 프로세스가 요청한 작업의 순서와 운영체제가 실제로 해당 작업들을 처리하는 순서가 달라질 수 있다는 것을 보여주셨습니다.저는 이 예제의 결과를 보면서 프로세스에서 요청한 작업들이 커널 레벨의 큐에 순차적으로 삽입된다고 하더라도, 결국 운영체제도 큐에서 꺼낸 작업들을 비동기로 처리한다는 것으로 이해했는데요. 서로 다른 작업들을 비동기로 처리하기 위해서는, 결국 각 작업들이 서로의 완료 여부와는 관계 없이 독립적으로 수행되기 위해 멀티 Threading과 같은 방식을 처리될 것으로 예상됩니다.궁금한 점은 여기서 생겨났는데요, 이렇게 최종 작업마저 비동기로 처리하게 되면 I/O 작업의 순서가 꼬여 프로세스 입장에서 기대하는 파일의 최종 상태와 실제로 모든 작업을 끝마친 파일의 상태가 달라지는 경우가 발생할 수 있지 않나요?만약에 발생하지 않는다면, 왜 발생하지 않는지 궁금합니다.
-
해결됨비전공자의 전공자 따라잡기 - 네트워크, HTTP
안녕하세요. 궁금한게 있습니다.
안녕하세요. 궁금한게 있습니다.원 서버보다 리버스 프록시가 정적 파일 서빙해주는 역할이나 압축 같은 것을 더 잘한다 하셨는데 이때 각각 특화된 프록시를 사용하는 것인가요? 아니면 프록시에서 압축, 정적파일 서빙 등 모든 일을 다 하는데 원 서버보다 더 빠른것인지 궁금합니다.또한 API Gateway도 Proxy라 하셨는데 관련 내용을 못찾고 있어서요ㅠㅠ 혹시 어떻게 검색하면 관련 문서를 볼수 있을지도 궁금합니다.항상 감사합니다.
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
tcp 통신 관련하여 질문드립니다
안녕하세요 선생님~tcp 관련해서 질문을 드리고 싶습니다. ^^tcp 버퍼라는게 따로 존재하나요? 아니면 소켓 버퍼가 곧 tcp 버퍼인가요?segmentation된 데이터는 어디서 조립되나요? 만약 소켓 버퍼에서 조립된다면 recv했을 때 덜 조립된 데이터를 받거나 하진 않는지 궁금합니다.관련 책에서 본 내용인데요, 송신 버퍼에 1바이트의 여유만 있어도 tcp는 send가 가능하다는데 이러면 데이터가 다른 관련없는 데이터와 섞여서 송신되거나 하지는 않나요?다른건 안그러는데 이상하게 네트워크 쪽만 공부하면 자꾸 깊게 파고들려고 하네요. ;;호기심을 적당히 가져야 진도를 빠르게 뺄텐데... 그래도 좋게 생각해야겠죠? ㅎㅎ항상 좋은 강의 감사드립니다~^^
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
Wireshark을 어떻게 분석해야 하나요?
안녕하세요 선생님^^강의를 보면서 Wireshark 분석도 따라해보고 있는데요,제가 루프백 환경에서 진행을 하고 있어서 그런지 뭔가 뒤죽박죽 같더라구요특히 14번 패킷은 아무데서도 Ack=5가 안나왔는데 Seq=5를 보내니까저로서는 도저히 뭐가 뭔지 모르겠어서.. ㅠㅠ;;어디서부터 실마리를 잡아야 할까요..?분석 관련해서 조언을 얻고 싶습니다!!
-
해결됨비전공자의 전공자 따라잡기 - 네트워크, HTTP
내 라우터에서 IP 부분을 떼었다가 붙이는 이유
안녕하세요 제로초님.5분 32초에 내 라우터에서 IP부분을 떼었다가 다시 붙여준다는 말씀을 하셨는데, 이미 네이버 IP를 목적지 IP로 갖고 있는데도 떼는 이유가 무엇인지, 떼었다가 붙였다가 하는 것은 케이스 마다 다르게 행해지는 것인지 궁금합니다.그리고 떼었다가 붙인다면 어떤 정보가 붙는건지 알려주시면 감사하겠습니다😊계속 강의를 보다보니 질문이 늘어나네요..ㅎㅎ+ 내 라우터가 인터넷을 통해서 네이버 라우터IP 주소를 아는 방법은 라우팅 테이블이라는 방법으로 물어물어 IP주소를 알게된다고 하셨는데, 내 컴퓨터는 네이버 IP를 DNS를 통해서 이미 알고있다고 하셨는데 왜 물어물어 가는건지도 설명해주시면 감사하겠습니다!
-
해결됨비전공자의 전공자 따라잡기 - 네트워크, HTTP
내 라우터에서 naver 라우터까지 전송과정 질문
3분 35초쯤 보면 내 라우터가 naver 라우터의 MAC주소를 알기때문에 목적지MAC주소에 naver MAC주소가 담겨서 간다고 하셨습니다이전 강의까지 배우기로는 내 라우터 안에 있는 스위치와 각 기기들간에는 MAC주소로 전송을 하고 내 라우터와 다른 라우터들 사이에서는 ip주소를 통해서 전송을 한다고 들었는데 뭐가 맞는건지 헷갈립니다라우터끼리의 데이터 전송에서 MAC주소도 사용되고 IP주소도 사용되는건가요?내 라우터는 다른 라우터들의 MAC주소를 다 알고있나요?
-
해결됨비전공자의 전공자 따라잡기 - 네트워크, HTTP
강의명 데이터의 전체 흐름에서 라우터간 주소 획득 과정 질문드립니다.
제가 이해한 바가 맞는지 궁금해서 질문드립니다.내 라우터에서 네이버 라우터의 MAC주소를 알기 위해서 인터넷을 통해 옆 사람에게 묻는 방식으로 네이버 IP가 있는 곳까지 가서 MAC주소를 얻어온다.이렇게 이해하는 것이 맞을까요?6분 대에 설명하신 것에 라우팅 테이블이 네이버 라우터의 IP를 찾아온다고 하셨습니다. 그런데 네이버 IP는 맨 처음부터 알고 있으니까 MAC주소를 얻어오는 것이 맞는 것 같은데 어떻게 이해하면 좋을까요? 감사합니다.
-
해결됨비전공자의 전공자 따라잡기 - 네트워크, HTTP
네트워크계층 제가 이해한게 맞나요?
101동 아파트를 생각한다고 했을 때 각 세대마다 기기들(컴퓨터 등)의 MAC주소가 있는데 이런 MAC주소들이 스위치에 모이게되고 스위치도 MAC주소를 가지고 있다. 101동 아파트 전체의 스위치들이 하나의 라우터에 모이고 스위치들이 모인 라우터를 네트워크라고 부르며 IP주소를 가지고 있다. 여기까지 제가 이해한 내용이 맞나요? 그렇다면 101동 주민들의 네트워크 IP주소는 모두 똑같다는 말인가요?
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
Windows 프로젝트 만드는 방법
안녕하세요~ IOCP까지 강의를 들으면서 예제들을 다운로드 하면서 실행하고 이해하고 하였습니다. 예제들인, Windows 프로젝트를 다운로드해서 실행하는 방식 말고, 직접 손 코딩이 하고 싶어 만들려고 하니, 오류도 나고 뭐가 뭔지 잘 모르는 부분이 있어 남겨봅니다. 일단 저가 시도 한 부분 적어보고, 수정해야 할 부분 피드백 부탁드립니다.(아니면 그냥 순차적으로 전체적으로 하는 방법 설명해주셔도 됩니다.^^)첫번째로. Windows 데스크 톱 마법사에서 데스크톱 애플리케이션 미리 컴파일된 헤더만 클릭하였습니다.두번째로 미리 컴파일된 헤더 추가하는 방법 링크 https://hungrysoul9.github.io/2019/09/26/add-vs-pre-complied-header/ 처럼 stdafx.cpp 추가하고 stdafx.h 해서 뭘 어떻게 해야되는지 모르겠고,->여기서 조금 헤더파일 pch관련된 부분 수정하고 ctrl+f5 누르면(심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태오류 LNK2019 WinMain@16"int _cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 함수에서 참조되는 확인할 수 없는 외부 기호 IOCP_chat D:\C++\IOCP_chat\MSVCRTD.lib(exe_winmain.obj) 1오류 LNK1120 1개의 확인할 수 없는 외부 참조입니다. IOCP_chat D:\C++\IOCP_chat\Debug\IOCP_chat.exe 1)다음과 같은 오류가 뜹니다..따라서 ->https://pang2h.tistory.com/156링크를 참조해서 속성 링커에 시스템에 하위 시스템을 콘솔 또는 지우니까 해결이 되었는데,,,이렇게 만들어 지는 건가요?해결이 되었다면 되었는데,,C/C++과는 다르게 Windows 프로그래밍은 처음이라,, 어떻게 프로젝트를 만들어야 하는지 정리 한번 부탁드립니다. 또는 맞게 잘 하였다면,, 피드백 부탁드립니다. 감사합니다.(질문 등록하고 수정하고 한 글입니다...^^)