묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
[※중요] 이해하면 인생이 바뀌는 TCP/IP 송·수신구조 ack가 보내는지는 단위?
선생님 안녕하세요 강의 듣다가 궁금한 점이 있어서 질문 남깁니다. 수신 하는 측에서 ack를 송신 측에서 보낼 때도 똑같이 frame 이라는 단위로 보내는건가요?? 비유해주신 택배차 처럼 보내는지 궁금합니다.
-
해결됨외워서 끝내는 네트워크 핵심이론 - 응용
VPN 과 일반 서비스의 차이
vpn 이라는 것과 청바지 회사 웹 서비스에서 내부 직원들만 로그인해서 볼 수 잇는 정보를 부산 직원이 열람하는 것이랑 무슨 차이가 잇나요?그냥 네이버 로그인 하는 것이나 VPN이랑 무슨 차이가 잇는 것인가요?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
포트번호에 관해 질문드립니다.
제가 이해하기로는IP주소에는 네트워크 주소와 호스트 주소가 있고 포트번호는 호스트 주소에 있는 프로세스더 정확히 말하면 소켓을 구분하는 번호로 사용된다고 이해하고 있는데요. www.naver.com 이나 www.google.com이나 뒤에 :80 포트 번호가 생략된다고 하던데(https 라면 443 이라고 알고 있습니다)포트 번호는 호스트 주소에서 프로세스를 구분 하는 용도라고 이해를 했는데http프로토콜이 80번 포트를 사용한다는게 이해가 가질 않습니다.http가 프로세스는 아니잖아요? 그런데 어떻게 포트 번호가 있는건지.. 네이버나 구글 url주소를 치면 dns서버에서 ip주소로 변환해서 회사 서버에 접속이 되고그중에서 http 프로토콜에? 웹서비스 접속을 하려고 하니 80번 포트로 접속을 하는 건지..그럼 이것은 강의에서 설명하신 포트 중에 서비스 번호를 의미하는건지.. 그리고 포트포워딩에서 포트는 위에 포트를 의미 한다기 보다강의에서 설명하셨던 2계층 포트를 의미하는건가요? 개념이 뒤죽박죽되어 이해가 가질 않아 답답한 마음에 질문드립니다.ㅠㅠ
-
해결됨외워서 끝내는 네트워크 핵심이론 - 응용
port restricted cone 방식에서 강의 3:35 질문
강의 3:35에 192.168.0.10 port 3001은 NAT table에 추가가 된게 아니라 갱신이 된 상태를 설명하는 것인가요?192.168.0.10:3000 / 8080 / 15.15.15.15:5555192.168.0.10:3001 / 8080 / 15.15.15.15:7777이게 아니라192.168.0.10:3001 / 8080 / 15.15.15.15:7777현재 테이블에 갱신이 되어서 이것만 남아 잇는 상태를 설명해주신게 맞을까요?근데 만약 이것을 설명한 것이라면 192.168.0.10:3000 / 8080 / 15.15.15.15:5555192.168.0.10:3001 / 8080 / 15.15.15.15:7777매핑된 port는 1개인데 15.15.15.15:7777이 3000으로 갈지 3001로 갈지 어떻게 판단을 하나요??
-
해결됨외워서 끝내는 네트워크 핵심이론 - 응용
9:30 랑데뷰 서버
중간에 랑데뷰 서버에 대한 내용이 나오는데 너무 생략되서 잘 모르겠습니다. 원활한 게임 통신 및 랑데뷰 서버, 홀펀칭 이야기는 후반 강의에 나오는 내용인가요?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
서브네팅의 목적 질문
서브네팅의 주목적이공인 ip 주소를 아껴쓰기 위함사설 ip에서 관리자 필요에 따라 호스트 id 범위 조절이렇게 생각하면 맞을까요?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 응용
공유기가 인터넷 ip 주소 부족 문제 (공인 ip를 받을 때 단위)
샘의 유튭에서 본 내용인데요https://www.youtube.com/watch?v=px0HDON5Wa4&list=PLXvgR_grOs1BFH-TuqFsfHqbh-gpMbFoy&index=37공인 ip를 받을 때 단위가 어떻게 되길래 100개 달라고하면 154개가 낭비가 되나요? c클래스 단위로 줄수밖에 없는 것인가요? (* 6:20 보면 클래스 단위로 준다고 말씀하신것 같은데 예시인가요 아니면 실제로 그렇게 부여되나요?) 177.232.111.220 ~ 177.232.111.255 까지 30개 가져가세요 이렇게 안되나요?
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
pymsql 라이브러리 설치 어떻게 하셨나요?
주피터 노트북 서버 만들어보기 챕터 12분 06초 경에 느낌표와 pip install 을 하면 명령어를 바로 실행할수 있어서 바로 라이브러리 설치를 하셨는데요.엔터를 누르면 그냥 줄바꿈이 되는데 어떻게 설치하셨나요?
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
CSpinLock 코드 작성중 원리에 대해서 의문점이 들어 질문 드립니다.
void CSpinLock::lock(){ bool expected = false; bool desired = true; while (_locked.compare_exchange_strong(expected, desired) == false) { expected = false; }}SpinLock의 해당 코드에서 _locked의 값이 true일때, expected의 값이 초기에는 false임으로, 해당 반복문을 통과하지 못하고 기다립니다. 그런데 expected가 locked의 값인 true로 바뀌므로 이를 반복문 내에서 expected = false; 값으로 변경해주는데, expected의 값을 false로 변경해주기 전에 true인 locked의 값이 들어오면 아직 expected의 값은 변경되기 전이므로 SpinLock을 빠져 나올 수 있지 않을까요?코드를 실행해보니 SpinLock이 잘 실행되고 있는 것은 확인했지만, 머리속에서는 납득하지 못한 의문점이 멤돌아서 이렇게 질문 드립니다.
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
그림에 있는 웹서버가 무엇인가요??
그림에 있는 웹서버가 무엇인가요?? 요청을 사용자 컴에서 보내면 문서 + css파일 + js파일 다 받아온 후에 사용자 컴퓨터의 브라우저가 조립해서 표기를 해주는것으로 알고있습니다.제가 헷갈리는 부분은 웹서버에서 정적 파일 서빙이후파일 받으면 웹서버를 거쳐서 was를 갈 필요 없이바로 was로 갈 수 있을텐데 구조가 저렇게 되있으면 반드시 거쳐가야 하는것 아닌가? 하는 의문이 들었습니다. 물론 서비스를 제공하는 회사별로 다르겠지만 일반적으로 어떻게 되는 것인가요?
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
[리눅스용 도커 설치] 편 4:20
[리눅스용 도커 설치] 편 4:20 쯤에서 질문있습니다.docker repository 등록할때 자료에 적혀있던 명령어 둘다 안되는데(1) 강의에 있는 명령어 실행시(2) 자료 아래 추가로 작성된 명령어 실행시어떻게 찾아야할지 모르겠어서... 어떻게 해야할까요?우분투는 20.04로 진행했습니다!
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TryPop()함수 중 _head와 _tail이 같을 때 ReleaseRef()를 해야하나요?
강의 코드를 똑같이 따라하는 도중 TryPop()함수에서 무한 루프에 빠지는 것을 확인하였습니다.위의 이미지 중 주석처리 한 곳이 TryPop()중 무한 루프에 빠지게 하는 함수입니다._head와 _tail이 같을 경우 ReleaseRef()에 들어갑니다. 하지만 초기 internalCount는 0이고 unsigned입니다.때문에 저의 컴퓨터 환경기준 --를 진행할 시 '1073741823'으로 바뀌면서 무한에 가까운 루프에 빠지게 됩니다.위의 이미지 같이 주석처리 할 경우 강의의 예시처럼 잘 진행되는 것을 확인 하였습니다.혹시 저 부분을 주석처리 해도 되는지, 안된다면 위와 같은 상황에서 어느 부분을 수정해야 하는지 확인해 주실 수 있으실까요?
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
GIocpCore에서 Dispatch할 때
iocpObject Dispatch할때 어떻게 자동으로 리스너 Dispatch로 들어가는건가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
클라이언트 연동 강의
안녕하세요 루키스님 제가 c++ icop 멀티스레드 환경에서 서버를 제작하고 원래 언리얼로 클라이언트 만들어서 연동하려했는데 자료가 부족해서 유니티 강의를 참고하려고합니다.Part7 : MMORPG 컨텐츠 구현 (Unity + C# 서버 연동)Part9 : MMORPG 컨텐츠 구현 (DB 연동 + 대형 구조 관리 + 라이브 준비)두가지의 강의를 들어보려고하는데 유니티와 c#에 대한 지식이없어도 들을수있을까요?언리얼 연동에 도움이 되는강의가 더 있을까요?Part5 : 데이터베이스(SQL Server) 강의는 수강하려고합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
소켓 프로그래밍 질문 있습니다!
msdn 문서도 찾아보면서 공부 중인데, 제가 이해한 게 맞나 확신이 안가서 질문 드립니다!서버가 계속 listen 상태이고 여러개의 클라이언트들이 연결을 하고 연결을 끊는 과정에서도 서버가 listen 상태를 계속 유지하게 하려면 accept() 함수를 while 문으로 반복적으로 받게 한다 (여러 클라이언트들의 연결을 수용하기 위함) accept() 함수로 백로그 큐에 있던 수신정보?연결대기정보?를 pop하여 새로운 소켓을 생성한다내부에 또다른 while 문으로 생성된 새로운 소켓을 활용해 송수신을 한다accept() 함수를 호출하는 while문 마지막 부분에 생성된 소켓을 close 한다.이렇게 하는게 맞을까요??제가 이렇게 코드를 짠 것 같은데, 서버를 실행시키고 한개의 클라이언트를 실행시켜서 송수신을 하다가 클라이언트를 종료시키면 서버도 같이 종료되는 것 같아서요...여러 클라이언트를 실행시켜도 처음 실행시킨 클라이언트만 송수신이 가능하더라구요 ㅠㅠ(제가 코드를 잘못 짠 걸수도 있습니다 ㅎㅎ;;)아래는 서버와 클라이언트의 주요 소스코드 부분입니다[Server]// 윈속 초기화와 socket(), bind(), listen() 함수 생략 while (1) { // accept() clntAddrSize = sizeof(clntAddr); clntSock = accept(listenSock, (SOCKADDR*)&clntAddr, &clntAddrSize); if (clntSock == INVALID_SOCKET) ErrorHandling(L"accept() error"); // 접속한 클라이언트 정보 출력 wprintf(L"\n[TCP 서버] 클라이언트 접속 : IP 주소 = %s, 포트 번호 = %d\n", inet_ntoa(clntAddr.sin_addr), ntohs(clntAddr.sin_port)); // 클라이언트와 데이터 통신 while (1) { recvLen = recv(clntSock, (char*)message, sizeof(message), 0); if (recvLen == SOCKET_ERROR) ErrorHandling(L"recv() error"); else if (recvLen == 0) break; // 받은 데이터 출력 message[recvLen / 2] = L'\0'; wprintf(L"[TCP/%s:%d] : %s\n", inet_ntoa(clntAddr.sin_addr), ntohs(clntAddr.sin_port), message); // 데이터 보내기 strLen = wcslen(message) * sizeof(wchar_t); if (send(clntSock, (char*)message, strLen, 0) == SOCKET_ERROR) ErrorHandling(L"send() error"); } closesocket(clntSock); wprintf(L"[TCP 서버] 클라이언트 종료 : IP 주소 = %s, 포트 번호 = %d\n", inet_ntoa(clntAddr.sin_addr), ntohs(clntAddr.sin_port)); } closesocket(listenSock); WSACleanup();[Client]// 윈속 초기화와 socket(), bind() 함수 생략 // connect() if (connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) ErrorHandling(L"connect() error"); else { printf("Connected...........\n"); } // 서버와 데이터 통신 while (1) { // 데이터 입력 wprintf(L"data input : "); if (fgetws(message, BUF_SIZE, stdin) == NULL) break; // '\n' 문자 제거 strLen = wcslen(message); if (message[strLen - 1] == L'\n') { message[strLen - 1] = L'\0'; strLen--; } if (wcscmp(message, L"q\n") == 0 || wcscmp(message, L"Q\n") == 0) break; //데이터 보내기 recvLen = 0; recvLen = send(hSocket, (char*)message, strLen * 2, 0); if (recvLen == SOCKET_ERROR) { ErrorHandling(L"send() error"); break; } printf("[TCP 클라이언트] %d 바이트를 보냈습니다.\n", strLen); while (recvLen < strLen * 2) { recvCnt = recv(hSocket, (char*)&message[recvLen / 2], BUF_SIZE - 1, 0); if (recvCnt == SOCKET_ERROR) { ErrorHandling(L"recv() error"); break; } else if (recvCnt == 0) break; recvLen += recvCnt; } message[strLen] = L'\0'; printf("[TCP 클라이언트 %d 바이트를 받았습니다.\n", strlen); } closesocket(hSocket); WSACleanup();
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
제공한 기출만 보고 시험봐도 괜찮을까요?
선생님이 제공해주신, 기출만 보고덤프에서 나오는 c03 문제는 안 보고 시험 보러 가도 될까요?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
프로세스간 연결시에 질문
프로세스간 연결시 왜 ip를 통해서 가나요?(그러니까 소켓열어서 파일 입출력하는 이유가 무엇인가요)그냥 memory를 공유할 수 잇는 방법이 잇으면 더 빠를거같은데보조기억 장치 메모리를 공유할 수 잇는 방법이 어렵거나 불가해서 저렇게하는건가요?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
tcp 관련하여 질문드립니다
안녕하세요 선생님^^tcp 관련하여 궁금한 점이 있습니다tcp는 왜 굳이 segmentation을 하나요? segmentation을 하지 않아도 ip에서 fragmentation이 일어나니까 딱히 안해도 상관없지 않나 싶은데요...2-way handshake는 아예 사용되지 않는 기법인가요?3-way handshake에서 한 클라이언트가 서버에게 다수의 syn을 보내게 되면, 서버는 이를 어떻게 처리하나요? 중복임을 인지하고 하나의 syn을 제외한 나머지는 모두 드랍하나요?궁금한건 많은데 글로 정리하는게 너무 어렵네요~~;;물론 답변해주시는 선생님도 마찬가지시겠지요~노고에 감사드립니다^^
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
서브넷 마스크에서 == 연산 질문
비트 연산이 === 보다 빠른지 아닌지 궁금합니다c언어 공부할때 비트연산이 더 빠른 것으로 기억하는데아무리 컴퓨터가 좋아져도 네트워크 빠르게 동작하려면 비트연산 사용하는게 좋지 않을까 하는 의문이 들어 질문 드립니다.
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
socket의 생성시점에 관하여
선생님! 안녕하세요.Server쪽 Socket의 생성 시점에 관하여 궁금한 점이 있습니다.질문)Server쪽 Socket은 무엇이 Trigger가 되어 Socket이 Create되고 Open되는지 궁금합니다.Client와 Server가 통신을 하기 위해선 우선 서로 Socket이 생성되어야 합니다.Client쪽에서 Process가 통신을 하기 위해 운영체제에게 요청하여 Socket을 생성(혹은 개방)한다는건 알겠습니다. 즉 Process의 요청이 Trigger가 되어 Socket이 생성이 되는거죠.그리고 Client에서 Socket이 만들어지면 Server로 요청이 가는데 이때 Server쪽 Socket이 Listen 즉 연결 대기 상태가 아니라면 Kernel의 TCP에서 연결을 받아줄 Socket이 없어서 응답을 못받아준다고 설명하셨습니다. 그럼 Server쪽에서는 Socket을 Create하고 Open되어 Listen 상태가 되어있어야 하는데 이는 무엇이 Trigger가 되어 만들어지는 건가요? 그니깐 Client에서 최초 요청을 보낼 때 Server는 이때 처음 Client에게서 요청이 온건데 그러면 당연히 Client와 통신할 사실을 모르고 있을거기 때문에 Process가 Socket을 생성해놓지 않았을거고 그러면 응답이 거부되는 상황밖에 안생기는데 이는 뭔가 아닌거 같아서요.Client에서 Server에 Socket을 만들어라는 뭔가 모르는 Trigger가 있는건가요? (나름 열심히 작성했는데 글 솜씨가 부족하여 제 질문의 의도를 파악하실지 모르겠습니다ㅠ)