본문 바로가기
반응형

프로그래밍/네트워크39

TCP 소켓의 입출력 버퍼 TCP 소켓 입출력 버퍼란? TCP 소켓의 데이터 송수신에는 경계가 없다. 예를 들어, 송신 측에서 write() 함수로 여러 데이터를 보내도 수신 측에서는 read() 함수 한 번으로 그 데이터를 수신할 수 있다. 또 송신 측에서 write() 함수로 용량이 큰 데이터를 보내도 수신 측에서 read() 함수로 그 데이터를 여러 번에 나눠서 수신할 수도 있다. (1대 1로 매핑되지 않는다.) 송신 측에서 100 bytes의 데이터를 보냈을 경우 수신자는 20 bytes씩 다섯 번에 나누어 수신할 수 있다는 뜻이다. 그런데 20bytes의 데이터를 수신하는 동안 나머지 80 bytes의 데이터는 어디에 있어야 할까? (네트워크 상에 떠있을 수는 없다.) 또한, 송신자가 100bytes의 데이터를 20 by.. 2023. 8. 23.
빅 엔디언(Big Endian) 리틀 엔디언(Little Endian)에 대해서 엔디언(Endian)이란? 엔디언(Endian)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(byte order)라고 한다. 엔디언은 보통 큰 단위가 앞에 나오는 빅 엔디언(Big-endian)과 작은 단위가 앞에 나오는 리틀 엔디언(Little-endian)으로 나눌 수 있으면, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들 엔디언(Middle-endian)이라 부르기도 한다. 빅 엔디언과 리틀 엔디언 빅 엔디언(Big-endian) 큰 단위가 낮은 메모리 주소에 들어간다 리틀 엔디언(Little-endian) 큰 단위가 높은 메모리 주소에 들어간다. 어느 한쪽이 압도적으로 좋거나 나쁘지 않음 인텔 프로세.. 2023. 8. 14.
INADDR_ANY에 대해서 INADDR_ANY이란? INADDR_ANY는 자동으로 해당 컴퓨터에 존재하는 랜카드 중 사용가능한 랜카드의 IP주소를 사용하라는 의미이다. INADDR_ANY 사용 이유 예를 들어 2개의 랜카드가 설치되어 있는 컴퓨터에서 각각의 IP주소가 192.168.0.1, 192.168.0.2라고 가정할 때 외부에서 192.168.0.1로 데이터를 보내거나 192.168.0.2로 데이터를 보내거나 내 컴퓨터로 오는 건 동일하다. 하지만 프로그램의 IP주소를 192.168.0.1로 등록했다면 192.168.0.2로 들어오는 데이터는 수신하지 않는다. 즉, 같은 컴퓨터임에도 불구하고 등록한 IP주소가 다르면 데이터를 처리하지 않는다. INADDR_ANY를 사용하면 192.168.0.1로 오는 데이터, 192.168... 2023. 8. 14.
TCP 3-way Handshake & 4-way Handshake TCP 3-way Handshake란? TCP는 장치들 사이에 논리적인 접속을 성립(establish) 하기 위하여 3-way handshake를 사용한다. TCP 3-way handshake는 TCP/IP 프로토콜을 이용해서 통신하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다. Client > Server : TCP SYN Server > Client : TCP SYN ACK Client > Server : TCP ACK 여기서 SYN는 'synchronize sequence numbers', ACK는 'acknowledgement'의 약자이다. 이러한 절차는 TCP 접속을 성공적으로 성립하기 위하여 반드시 필요한 절차.. 2023. 8. 14.
Unity Mirror & Mirage 네트워크 라이브러리에 대해서 게임 서버를 구현하려면 무엇이 필요한가? 일반적으로 서버/클라이언트 모델의 온라인 게임을 만들고 운영하려면 게임 서버 빌드를 만들고 호스팅 해야한다. 그 서버 빌드에는 서버 엔진 파트와 게임 컨텐츠 파트가 구현되어야 한다. 엔진 파트 - Transport 설계, 소켓 통신, API등 전반적인 네트워킹 기능 컨텐츠 파트 - 게임의 온라인 컨텐츠 기능 엔진 파트 구현은 어떻게 구현할 수 있는가? 직접 구현 먼저 성능과 필요한 기능을 고려해 서버 엔진을 팀내에서 자체적으로 제작하는 방법이 있다. 이 방법의 장점은 서버 기능의 확장, 유지 보수가 용이하다. 구현하고자 하는 게임에 최적화도 가능하다. 그리고 구현 방식을 자유롭게 선택 가능하다. 하지만 서버 엔진을 구현하기 위해 필요한 네트워크 지식을 모두 알아야.. 2023. 8. 9.
사이더(CIDR)란 무엇인가? 사이더(CIDR) AWS, GCP, Azure 등 퍼블릭 클라우드 등을 사용할 때 네트워크 설정에서 VPC 및 Subnet을 생성하여 네트워크를 구성하게 된다. 이때 CIDR(Classless Inter-Domain Routing) 블록을 이용하여 10.10.1.0/24 등과 같이 표시하게 된다. 보통 찾아보면 c클래스 일때는 /24, 특정 IP만 지정할때는 /32라는 식으로 간략하게만 설명이 되어 있곤 한다. 사이더(Classless Inter-Domain Routing, CIDR)는 클래스 없는 도메인 간 라우팅 기법으로 1993년 도입되기 시작한, 최신의 IP주소 할당 방식이었던 네트워크 클래스를 대체하였다. 사이더는 IP주소의 영역을 여러 네트워크 영역으로 나눌 때 기존방식에 비해 유연성을 더해 .. 2023. 7. 19.