SlideShare a Scribd company logo
1 of 40
클라이언트 개발자의 말빨 
을 위한 컴퓨터 네트워크 
기초 
넷텐션 
배현직
인터넷의 정체
LAN 
• 지역 통신망(Local Area Network) 
• 가까운 지역을 묶는 컴퓨터 네트워크 
• 정의 
– 한정된 지역에서 컴퓨터를 기본으로 하는 여러 가 
지 전자기기 사이의 자유로운 정보교환 
– 구축한 사용자가 직접 관리, 운영함 
– 다른 제조사간의 기기간에도 서로 통신 가능 
• 스위치 
– LAN의 컴퓨터를 연결해주는 중앙 컴퓨터
WAN 
• 광역 통신망 (Wide Area Network) 
– 서로 다른 LAN간의 컴퓨터 네트워크 
– 서로 다른 건물 이상의 넓은 범위간의 연결 
• 라우터 
– 서로 다른 LAN간의 컴퓨터 통신이 가능하게 해 
주는 장비
인터넷 
• 특정 스펙(OSI Layer-3)만 
맞춰주면 연결 가능한 컴 
퓨터와 네트워크 장비의 
그물망 
• 즉, 서로 다른 종류의, 많은 
스위치와 라우터의 그물망
딱 이것만 기억하자 
• 인터넷의 정체 
– 라우터를 사이에 두고 컴퓨터들끼리 연결되어 있는 거대한 컴퓨터 네트워크
잘못된 용어 바로잡기
스트림 
• 연결을 맺은 후 끊을 때까지 쭈욱 가는 1개의 데 
이터 흐름 
• 파일의 끝에 도달하기 직전까지는 원하는 크기를 
읽음 
• 그러나 네트워크에서는 
– 보낸 개수 != 받는 개수 
– 보낸 데이터의 시작 != 받는 데이터의 시작 
– 보낸 데이터의 끝 != 받는 데이터의 끝 
• 일반적 앱에서 가장 많이 쓰이는 유형 
PrintFileContents() 
{ 
fp = OpenFile("a.txt"); 
while(!fp.IsEOF()) 
{ 
data = fp.ReadStream(100); 
Print(data); 
} 
}
메시지 
• 윈도 메시지 생각하시면 됩니다. 
– 보낸 개수 = 받는 개수 
– 보낸 데이터의 시작 = 받는 데이터의 시작 
– 보낸 데이터의 끝 = 받는 데이터의 끝 
• 게임에서는 이것을 가장 많이 사용함 
• 길이 제한이 관대함 
Fire Bullet 
Position 
Direction 
Bullet Type
패킷 
• 인터넷 표준에서 주고받는 데이터 단위 
• 사용자가 별로 다루는 영역이 아님 
• 사용자가 주고받는 스트림이나 메시지는 
패킷이라는 것으로 쪼개지고 조립되는 과 
정이 반복됨 
• 길이 제한이 라우터마다 다양 (600~9000 
바이트, 보통 1300바이트)
딱 이것만 기억하자 
• 패킷과 메시지는 사실 서로 다르다 
• 스트림은 중간에 잘리거나 뭉쳐질 수 있다
IP address (약칭해서 IP) 
• Internet Protocol Address 
• 컴퓨터 네트워크에서 장치들이 서로를 
인식하고 통신을 하기 위해서 사용하는 
특수한 번호 
• 컴퓨터,스위치,라우터 각각이 가짐 
• 여러분의 스마트폰은 몇 개의 IP를 갖고 
있을까요? 
• 시연 
– c:/>ipconfig 
IPv4 주소 
IPv6 주소
Port 
• 컴퓨터 한 대에는 여러 개의 네트워킹 프로 
그램이 실행됨 
• 실행중인 프로그램(프로세스)는 여러 다른 
컴퓨터와 통신하고 있을 수도 있음 
• 그것들을 식별하고자. 
• 시연 
– c:/>netstat -ano 
11.22.33.44 
Chat.exe 
Game.exe 
Browser.ex 
e 
Port 4 
Port 5 
Port 6 
Port 7 
Port 8 
Port 9
Host name 
• 사람이 읽을 수 있는 컴퓨터의 이름 
• 컴퓨터는 host name을 IP address로 바꾸어 사용 
• 예: www.naver.com, mygame.mypublisher.com 
• 시연 
– C:/>ping www.facebook.com
딱 이것만 기억하자 
• 우리가 여지껏 IP라고 부른 것이 알고 보니 host name
네트워크의 3대 성능 요소
• 아날로그 TV에서는 잡음이 섞이면? 
• 디지털 TV에서는 잡음이 섞이면? 
디지털과 아날로그의 무지함의 예
• 스위치, 라우터에 잡음이 섞이면 
– 도착한 패킷의 내용이 훼손됨 
– 체크섬 실패 
– 따라서 버려짐
스위치와 라우터의 정체 
• 스위치와 라우터도 결국에는 컴퓨터 
• 스위치, 라우터에 과부하(가령 메모리나 CPU)가 걸리면 
– 자기가 살기 위해 패킷을 버림 
– 간혹 패킷을 계속 자기 메모리에 누적하다 뻗어버리는 기종도 있음
처리량 한계와 레이턴시 
• 단말기 사이의 라우터가 많을수록 레이턴시가 길어짐 
• 라우터가 과부하가 걸리거나 회선의 거리가 길어도 레이턴시가 길어짐 
• 아인슈타인을 이길 수 없음
회선 자체의 처리량 
• 1초 동안 얼마나 많은 데이터를 전송할 수 있는가 
• 하드웨어의 영역 
– 주파수가 높으면 보낼 수 있는 신호의 개수가 증가 
– 전압이 높으면 보낼 수 있는 신호의 종류가 증가 
– 페이즈가 다양하면 보낼 수 있는 신호의 종류가 증가 
– 선의 개수가 많으면 보낼 수 있는 신호의 개수가 증가 
– (주의: 잘 모르는 채로 대충 적은 것이므로 위 내용은 틀릴 수 있음) 
– 자세한 내용은 컴퓨터네트워크 교과서 앞단에 소개
라우터의 처리량 
• 라우터에 각 단자(포트)에 부착된 신호 처리 하드웨어의 처리 속도 
• 라우터도 결국 컴퓨터이므로, 그 컴퓨터의 데이터 처리 속도
네트워크의 성능 3대요소 
• 전송 속도(처리량 throughput 높을수록 좋음) 
– 전송될 수 있는 데이터의 단위 시간당 총량 
– 회선의 종류가 좋을수록 향상 
– 네트워크 장비의 처리 속도가 빠를수록 향상 
• 패킷 드랍율 (낮을수록 좋음) 
– 전송되는 데이터가 중간에 버려지는 비율 
– 회선의 품질이 좋을수록 낮음 
– 경로상의 라우터의 수가 적을수록 낮음 
– 라우터의 처리 성능이 좋을수록 낮음 
• 레이턴시 (낮을수록 좋음) 
– 전송되는 데이터가 목적지에 도착하는데 걸리는 시간 
– 회선의 길이가 길수록 높음 
– 경로상의 라우터의 수가 많을수록 높음 
– 라우터의 처리 성능이 나쁠수록 높음
무선 네트워크에서는 
• Wifi 자체의 전파 간섭 회피 기능 
– 자체 내장된 전송 딜레이 기능 
– 전파 간섭이 많으면 레이턴시와 패킷 드랍이 동시에 
발생
컴퓨터 네트워크에서 패킷 보내기 
• 마치, 메일을 보내는 것과 같음 
• 수신자가 도달 가능한 곳에 있기만 하면, 전송한 
패킷은 상대방에게 도달함 
• 그것을 하는 대표적인 방법이 UDP 소켓 통신 
수신자 
IP addr:port 
송신자 
IP addr:port
딱 이것만 기억합시다 
• 레이턴시와 처리량은 서로 별개 
• 패킷 드랍률이라는 복병도 있음
Socket이란 
• 파일 접근을 위해서는 => 핸들을 만든다 
• 네트웍 통신을 하기 위해서는 => 소켓을 만든다 
• 소켓 = 파일 핸들 
int file = open("myfile.txt"); 
close(socket); 
int socket = socket(TCP); 
close(file);
UDP (user datagram protocol) 
• 사용자가 정의한 메시지(데이터그램)을 전송하 
는 통신 규약 
• IP:port는 다대다 통신 가능 (아예 연결이라는 것 
자체가 존재 안함) 
• 메시지 단위로 데이터가 전송 
– 보내는 쪽이 a,bb,ccc,dddd를 전송할 경우 
– 받는 쪽은 반드시 a,bb,ccc,dddd로 받음 (패킷 드랍이 
없는 경우) 
• 패킷 드랍이 발생하면, 운영체제가 재송신을 해 
주는 일이 없으므로, 결국 패킷 드랍으로 이어짐 
• 멀티미디어 통신이나 게임 등에서 이 프로토콜을 
사용 
UDP 
socket 
UDP 
socket 
UDP 
socket 
UDP 
socket
UDP 통신 예 
• UDP 타입의 소켓을 생성하는 함수 
호출 (socket) 
• 소켓이 사용할 로컬 포트를 지정하 
는 함수 호출 (bind) 
– 이미 사용중이 아니어야 함 
– Any를 지정해서 유휴 포트를 자동 지정 
해도 됨 
• 데이터를 수신할 대상에게 데이터그 
램을 전송하는 함수 호출 (sendTo) 
• 데이터를 수신하는 함수를 호출해서 
데이터그램을 받기 (recvFrom) 
– 이때 송신한 곳의 주소와 포트도 얻음 
<단말기 11.22.33.44에서> 
main() 
{ 
s = socket(UDP); 
s.bind(any_port); 
s.sendTo("55.66.77.88:5959","hello"); 
s.close(); 
} 
<단말기 55.66.77.88에서> 
main() 
{ 
s = socket(UDP); 
s.bind(5959); 
r = s.recvFrom(); 
print(r.srcAddrPort, r.data); 
s.close(); 
} 
<실행 결과> 
11.22.33.44:53234 hello 
NOTE: 위 예시에서는 송신과 수신이 되기 위한 wait 
과정이 생략되어 있음
TCP (transmission control protocol) 
• 전송 제어 프로토콜 
• 연결 지향형 (반드시 논리적 연결을 해야만 통신 가능) 
• IP:port는 1대1 연결만 허용 
• 보내는 데이터는 반드시 상대방에게 도달함 
• 스트림 형태로 데이터가 전송 
– 보내는 쪽이 a,bb,ccc,dddd를 전송할 경우 
– 받는 쪽은 a,bb,ccc,dddd 뿐만 아니라 abbcccdddd로 받을 수 
도 있고 abb,cccd,ddd로 받을 수도 있음 
• 패킷 드랍이 발생하면, 운영체제가 알아서 재송신을 
통해 반드시 상대에게 스트림이 모두 도착하게 함 
• 거의 모든 네트워크 앱은 이 프로토콜을 사용 
TCP 
socket 
TCP 
socket
TCP 통신 예 
• UDP 통신 예와 비슷하지만, 차이점 
– TCP 연결을 하는 함수를 호출해서 상대방과 
연결 (connect) 
– 반대쪽에서는 TCP 연결 받을 수 있게 하고 
(listen) 상대방으로 연결이 들어오면 새 TCP 
socket을 추가로 생성(accept) 
– 1대1 연결이므로 송신시 수신대상 지정 안 
하며(send), 수신시 송신대상 얻지 않음 
(recv) 
<11.22.33.44> 
main() 
{ 
s = socket(TCP); 
s.bind(any_port); 
s.connect("55.66.77.88:5959"); 
s.send("hello"); 
s.close(); 
} 
<55.66.77.88> 
main() 
{ 
s = socket(TCP); 
s.listen(5959); 
s2 = s.accept(); 
r = s2.recv(); 
print(s2.remoteAddrPort, r); 
} 
<결과> 
11.22.33.44:51409 hello 
NOTE: 위 예시에서는 송신과 수신이 되기 위한 wait 
과정이 생략되어 있음. 그리고 위 결과는 송신한 내용 
이 stream의 특성상 중간에 잘리지 않음을 가정함
TCP, UDP 소켓 
• 소켓 하나로 송신과 수신을 모두 수행함 
– 송신용 소켓, 수신용 소켓 따로 만들지 마세요. 성능 더 나쁨
딱 이것만 기억합시다 
• TCP 소켓 
– 일대일만 가능 
– 패킷 유실을 신경쓸 필요 없음 
– 스트림이라 데이터가 쪼개지거나 뭉쳐짐
패킷 드랍이 발생하면 
TCP UDP 
드랍된 패킷은 재전송을 
하기 때문에, 
스트림이 시간 지연되어 
상대방에게 전송됨 
드랍된 패킷은 그냥 무시 
되기 때문에, 
데이터그램(메시지)가 상 
대에게 전송되지 못함 
레이턴시 = 
기본 레이턴시 + 
재송신 타임아웃 x 
패킷 드랍율 
레이턴시 = 기본 레이턴시
TCP와 UDP는 언제 쓰는지 
• UDP 
– 좀 버려져도 괜찮은 류 
– 캐릭터 이동, 기관총 난사, 음성/화상 데이터 
• TCP 
– 위의 경우 제외하고 모든 경우 
• MMORPG 하나의 총 메시지 종류는 약 500여개 
– 이들 중 5% 미만이 UDP 
– 그러나 이들이 전체 트래픽의 70%를 차지
무선 네트워크에서는 
• 높은 패킷 드랍율 (평균 20%. 유선은 평균 5% 미만인데!) 
• TCP를 쓰면 핑 스파이크 
• 따라서 
– 가급적 UDP 사용 
– 단, 일부 3G/LTE 기지국에서는 UDP 불가능하므로 TCP도 혼용해야
딱 이것만 기억합시다 
• 기관총 난사, 캐릭터 이동 같은 것 빼고는 다 TCP
게임의 메시지 포맷 
텍스트 바이너리 
하위호환성 유연성 높음 낮음 
통신량 많음 적음 
해커에의 노출 강함 약함 
디버깅 용이성 쉬움 어려움 
실시간 멀티플레이 온라인 게임에서는 바이너리 형식을 선호
요약 정리 
• LAN, WAN 
• 스트림, 메시지, 패킷 
• IP 주소, port, host name 
• 라우터의 과부하, 회선의 품질 
• 처리량, 레이턴시, 패킷 드랍율 
• 소켓 
• UDP, TCP
참고 서적 
• 쉽게 배우는 데이터 통신과 컴퓨터 네트워크 
(박기현 저)

More Related Content

What's hot

NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델Seungmo Koo
 
KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론Hyunjik Bae
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조Hyunjik Bae
 
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015devCAT Studio, NEXON
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉iFunFactory Inc.
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architectureJongwon Kim
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCHo Gyu Lee
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들Hyunjik Bae
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremSeungmo Koo
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?내훈 정
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)Seungmo Koo
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직Hoyoung Choi
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가Seungmo Koo
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능Yongha Kim
 

What's hot (20)

NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
 
KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능
 

Similar to KGC 2014: 클라이언트 개발자를 위한 컴퓨터 네트워크 기초 배현직

Netmanias L2,L3 Training (5) L3 SW Architecture
Netmanias L2,L3 Training (5) L3 SW ArchitectureNetmanias L2,L3 Training (5) L3 SW Architecture
Netmanias L2,L3 Training (5) L3 SW ArchitectureChris Changmo Yoo
 
[네트워크] TCP, 믿을 수 있나요!?
[네트워크] TCP, 믿을 수 있나요!?[네트워크] TCP, 믿을 수 있나요!?
[네트워크] TCP, 믿을 수 있나요!?용민 박
 
소켓프로그래밍 기초요약
소켓프로그래밍 기초요약소켓프로그래밍 기초요약
소켓프로그래밍 기초요약세빈 정
 
Netmanias L2,L3 Training (1) L2 Ethernet
Netmanias L2,L3 Training (1) L2 EthernetNetmanias L2,L3 Training (1) L2 Ethernet
Netmanias L2,L3 Training (1) L2 EthernetChris Changmo Yoo
 
글로벌 모바일 네트워크 환경 이해 Understanding global mobile network situation
글로벌 모바일 네트워크 환경 이해 Understanding global mobile network situation글로벌 모바일 네트워크 환경 이해 Understanding global mobile network situation
글로벌 모바일 네트워크 환경 이해 Understanding global mobile network situationJonghyon Sohn
 
네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)MoonLightMS
 
Interface and Protocol
Interface and ProtocolInterface and Protocol
Interface and ProtocolWonjun Hwang
 
Network Project
Network ProjectNetwork Project
Network ProjectMinho Yoo
 
08 1 인터넷과멀티미디어
08 1 인터넷과멀티미디어08 1 인터넷과멀티미디어
08 1 인터넷과멀티미디어Youngsun Lee
 
스트리밍 프로토콜
스트리밍 프로토콜스트리밍 프로토콜
스트리밍 프로토콜greenday96
 
Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명진우 이
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdfSeokju Hong
 
07_1-정보통신망기술
07_1-정보통신망기술07_1-정보통신망기술
07_1-정보통신망기술Youngsun Lee
 
07 1 정보통신망기술
07 1 정보통신망기술07 1 정보통신망기술
07 1 정보통신망기술Youngsun Lee
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷중선 곽
 
불루투스 기술 및 활용
불루투스 기술 및 활용불루투스 기술 및 활용
불루투스 기술 및 활용활 김
 
중급 소켓프로그래밍
중급 소켓프로그래밍중급 소켓프로그래밍
중급 소켓프로그래밍quxn6
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Sung-jae Park
 

Similar to KGC 2014: 클라이언트 개발자를 위한 컴퓨터 네트워크 기초 배현직 (20)

Netmanias L2,L3 Training (5) L3 SW Architecture
Netmanias L2,L3 Training (5) L3 SW ArchitectureNetmanias L2,L3 Training (5) L3 SW Architecture
Netmanias L2,L3 Training (5) L3 SW Architecture
 
[네트워크] TCP, 믿을 수 있나요!?
[네트워크] TCP, 믿을 수 있나요!?[네트워크] TCP, 믿을 수 있나요!?
[네트워크] TCP, 믿을 수 있나요!?
 
소켓프로그래밍 기초요약
소켓프로그래밍 기초요약소켓프로그래밍 기초요약
소켓프로그래밍 기초요약
 
Netmanias L2,L3 Training (1) L2 Ethernet
Netmanias L2,L3 Training (1) L2 EthernetNetmanias L2,L3 Training (1) L2 Ethernet
Netmanias L2,L3 Training (1) L2 Ethernet
 
Network researching
Network researchingNetwork researching
Network researching
 
글로벌 모바일 네트워크 환경 이해 Understanding global mobile network situation
글로벌 모바일 네트워크 환경 이해 Understanding global mobile network situation글로벌 모바일 네트워크 환경 이해 Understanding global mobile network situation
글로벌 모바일 네트워크 환경 이해 Understanding global mobile network situation
 
네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)
 
Interface and Protocol
Interface and ProtocolInterface and Protocol
Interface and Protocol
 
Network Project
Network ProjectNetwork Project
Network Project
 
08 1 인터넷과멀티미디어
08 1 인터넷과멀티미디어08 1 인터넷과멀티미디어
08 1 인터넷과멀티미디어
 
스트리밍 프로토콜
스트리밍 프로토콜스트리밍 프로토콜
스트리밍 프로토콜
 
Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdf
 
07_1-정보통신망기술
07_1-정보통신망기술07_1-정보통신망기술
07_1-정보통신망기술
 
07 1 정보통신망기술
07 1 정보통신망기술07 1 정보통신망기술
07 1 정보통신망기술
 
퀴즈요약
퀴즈요약퀴즈요약
퀴즈요약
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷
 
불루투스 기술 및 활용
불루투스 기술 및 활용불루투스 기술 및 활용
불루투스 기술 및 활용
 
중급 소켓프로그래밍
중급 소켓프로그래밍중급 소켓프로그래밍
중급 소켓프로그래밍
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2
 

More from Hyunjik Bae

웹서버와 ProudNet 서버간 상호작용 가이드
웹서버와 ProudNet 서버간 상호작용 가이드웹서버와 ProudNet 서버간 상호작용 가이드
웹서버와 ProudNet 서버간 상호작용 가이드Hyunjik Bae
 
Unity에서 회전하는 cube 만드는 법
Unity에서 회전하는 cube 만드는 법Unity에서 회전하는 cube 만드는 법
Unity에서 회전하는 cube 만드는 법Hyunjik Bae
 
웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드Hyunjik Bae
 
라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성Hyunjik Bae
 
프라우드넷의 IL2CPP 적응 기록-정종채
프라우드넷의 IL2CPP 적응 기록-정종채프라우드넷의 IL2CPP 적응 기록-정종채
프라우드넷의 IL2CPP 적응 기록-정종채Hyunjik Bae
 
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민Hyunjik Bae
 
ProudNet 1.7 소개
ProudNet 1.7 소개ProudNet 1.7 소개
ProudNet 1.7 소개Hyunjik Bae
 

More from Hyunjik Bae (7)

웹서버와 ProudNet 서버간 상호작용 가이드
웹서버와 ProudNet 서버간 상호작용 가이드웹서버와 ProudNet 서버간 상호작용 가이드
웹서버와 ProudNet 서버간 상호작용 가이드
 
Unity에서 회전하는 cube 만드는 법
Unity에서 회전하는 cube 만드는 법Unity에서 회전하는 cube 만드는 법
Unity에서 회전하는 cube 만드는 법
 
웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드
 
라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성
 
프라우드넷의 IL2CPP 적응 기록-정종채
프라우드넷의 IL2CPP 적응 기록-정종채프라우드넷의 IL2CPP 적응 기록-정종채
프라우드넷의 IL2CPP 적응 기록-정종채
 
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
 
ProudNet 1.7 소개
ProudNet 1.7 소개ProudNet 1.7 소개
ProudNet 1.7 소개
 

KGC 2014: 클라이언트 개발자를 위한 컴퓨터 네트워크 기초 배현직

  • 1. 클라이언트 개발자의 말빨 을 위한 컴퓨터 네트워크 기초 넷텐션 배현직
  • 3. LAN • 지역 통신망(Local Area Network) • 가까운 지역을 묶는 컴퓨터 네트워크 • 정의 – 한정된 지역에서 컴퓨터를 기본으로 하는 여러 가 지 전자기기 사이의 자유로운 정보교환 – 구축한 사용자가 직접 관리, 운영함 – 다른 제조사간의 기기간에도 서로 통신 가능 • 스위치 – LAN의 컴퓨터를 연결해주는 중앙 컴퓨터
  • 4. WAN • 광역 통신망 (Wide Area Network) – 서로 다른 LAN간의 컴퓨터 네트워크 – 서로 다른 건물 이상의 넓은 범위간의 연결 • 라우터 – 서로 다른 LAN간의 컴퓨터 통신이 가능하게 해 주는 장비
  • 5. 인터넷 • 특정 스펙(OSI Layer-3)만 맞춰주면 연결 가능한 컴 퓨터와 네트워크 장비의 그물망 • 즉, 서로 다른 종류의, 많은 스위치와 라우터의 그물망
  • 6. 딱 이것만 기억하자 • 인터넷의 정체 – 라우터를 사이에 두고 컴퓨터들끼리 연결되어 있는 거대한 컴퓨터 네트워크
  • 8. 스트림 • 연결을 맺은 후 끊을 때까지 쭈욱 가는 1개의 데 이터 흐름 • 파일의 끝에 도달하기 직전까지는 원하는 크기를 읽음 • 그러나 네트워크에서는 – 보낸 개수 != 받는 개수 – 보낸 데이터의 시작 != 받는 데이터의 시작 – 보낸 데이터의 끝 != 받는 데이터의 끝 • 일반적 앱에서 가장 많이 쓰이는 유형 PrintFileContents() { fp = OpenFile("a.txt"); while(!fp.IsEOF()) { data = fp.ReadStream(100); Print(data); } }
  • 9. 메시지 • 윈도 메시지 생각하시면 됩니다. – 보낸 개수 = 받는 개수 – 보낸 데이터의 시작 = 받는 데이터의 시작 – 보낸 데이터의 끝 = 받는 데이터의 끝 • 게임에서는 이것을 가장 많이 사용함 • 길이 제한이 관대함 Fire Bullet Position Direction Bullet Type
  • 10. 패킷 • 인터넷 표준에서 주고받는 데이터 단위 • 사용자가 별로 다루는 영역이 아님 • 사용자가 주고받는 스트림이나 메시지는 패킷이라는 것으로 쪼개지고 조립되는 과 정이 반복됨 • 길이 제한이 라우터마다 다양 (600~9000 바이트, 보통 1300바이트)
  • 11. 딱 이것만 기억하자 • 패킷과 메시지는 사실 서로 다르다 • 스트림은 중간에 잘리거나 뭉쳐질 수 있다
  • 12. IP address (약칭해서 IP) • Internet Protocol Address • 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호 • 컴퓨터,스위치,라우터 각각이 가짐 • 여러분의 스마트폰은 몇 개의 IP를 갖고 있을까요? • 시연 – c:/>ipconfig IPv4 주소 IPv6 주소
  • 13. Port • 컴퓨터 한 대에는 여러 개의 네트워킹 프로 그램이 실행됨 • 실행중인 프로그램(프로세스)는 여러 다른 컴퓨터와 통신하고 있을 수도 있음 • 그것들을 식별하고자. • 시연 – c:/>netstat -ano 11.22.33.44 Chat.exe Game.exe Browser.ex e Port 4 Port 5 Port 6 Port 7 Port 8 Port 9
  • 14. Host name • 사람이 읽을 수 있는 컴퓨터의 이름 • 컴퓨터는 host name을 IP address로 바꾸어 사용 • 예: www.naver.com, mygame.mypublisher.com • 시연 – C:/>ping www.facebook.com
  • 15. 딱 이것만 기억하자 • 우리가 여지껏 IP라고 부른 것이 알고 보니 host name
  • 17. • 아날로그 TV에서는 잡음이 섞이면? • 디지털 TV에서는 잡음이 섞이면? 디지털과 아날로그의 무지함의 예
  • 18. • 스위치, 라우터에 잡음이 섞이면 – 도착한 패킷의 내용이 훼손됨 – 체크섬 실패 – 따라서 버려짐
  • 19. 스위치와 라우터의 정체 • 스위치와 라우터도 결국에는 컴퓨터 • 스위치, 라우터에 과부하(가령 메모리나 CPU)가 걸리면 – 자기가 살기 위해 패킷을 버림 – 간혹 패킷을 계속 자기 메모리에 누적하다 뻗어버리는 기종도 있음
  • 20. 처리량 한계와 레이턴시 • 단말기 사이의 라우터가 많을수록 레이턴시가 길어짐 • 라우터가 과부하가 걸리거나 회선의 거리가 길어도 레이턴시가 길어짐 • 아인슈타인을 이길 수 없음
  • 21. 회선 자체의 처리량 • 1초 동안 얼마나 많은 데이터를 전송할 수 있는가 • 하드웨어의 영역 – 주파수가 높으면 보낼 수 있는 신호의 개수가 증가 – 전압이 높으면 보낼 수 있는 신호의 종류가 증가 – 페이즈가 다양하면 보낼 수 있는 신호의 종류가 증가 – 선의 개수가 많으면 보낼 수 있는 신호의 개수가 증가 – (주의: 잘 모르는 채로 대충 적은 것이므로 위 내용은 틀릴 수 있음) – 자세한 내용은 컴퓨터네트워크 교과서 앞단에 소개
  • 22. 라우터의 처리량 • 라우터에 각 단자(포트)에 부착된 신호 처리 하드웨어의 처리 속도 • 라우터도 결국 컴퓨터이므로, 그 컴퓨터의 데이터 처리 속도
  • 23. 네트워크의 성능 3대요소 • 전송 속도(처리량 throughput 높을수록 좋음) – 전송될 수 있는 데이터의 단위 시간당 총량 – 회선의 종류가 좋을수록 향상 – 네트워크 장비의 처리 속도가 빠를수록 향상 • 패킷 드랍율 (낮을수록 좋음) – 전송되는 데이터가 중간에 버려지는 비율 – 회선의 품질이 좋을수록 낮음 – 경로상의 라우터의 수가 적을수록 낮음 – 라우터의 처리 성능이 좋을수록 낮음 • 레이턴시 (낮을수록 좋음) – 전송되는 데이터가 목적지에 도착하는데 걸리는 시간 – 회선의 길이가 길수록 높음 – 경로상의 라우터의 수가 많을수록 높음 – 라우터의 처리 성능이 나쁠수록 높음
  • 24. 무선 네트워크에서는 • Wifi 자체의 전파 간섭 회피 기능 – 자체 내장된 전송 딜레이 기능 – 전파 간섭이 많으면 레이턴시와 패킷 드랍이 동시에 발생
  • 25. 컴퓨터 네트워크에서 패킷 보내기 • 마치, 메일을 보내는 것과 같음 • 수신자가 도달 가능한 곳에 있기만 하면, 전송한 패킷은 상대방에게 도달함 • 그것을 하는 대표적인 방법이 UDP 소켓 통신 수신자 IP addr:port 송신자 IP addr:port
  • 26. 딱 이것만 기억합시다 • 레이턴시와 처리량은 서로 별개 • 패킷 드랍률이라는 복병도 있음
  • 27. Socket이란 • 파일 접근을 위해서는 => 핸들을 만든다 • 네트웍 통신을 하기 위해서는 => 소켓을 만든다 • 소켓 = 파일 핸들 int file = open("myfile.txt"); close(socket); int socket = socket(TCP); close(file);
  • 28. UDP (user datagram protocol) • 사용자가 정의한 메시지(데이터그램)을 전송하 는 통신 규약 • IP:port는 다대다 통신 가능 (아예 연결이라는 것 자체가 존재 안함) • 메시지 단위로 데이터가 전송 – 보내는 쪽이 a,bb,ccc,dddd를 전송할 경우 – 받는 쪽은 반드시 a,bb,ccc,dddd로 받음 (패킷 드랍이 없는 경우) • 패킷 드랍이 발생하면, 운영체제가 재송신을 해 주는 일이 없으므로, 결국 패킷 드랍으로 이어짐 • 멀티미디어 통신이나 게임 등에서 이 프로토콜을 사용 UDP socket UDP socket UDP socket UDP socket
  • 29. UDP 통신 예 • UDP 타입의 소켓을 생성하는 함수 호출 (socket) • 소켓이 사용할 로컬 포트를 지정하 는 함수 호출 (bind) – 이미 사용중이 아니어야 함 – Any를 지정해서 유휴 포트를 자동 지정 해도 됨 • 데이터를 수신할 대상에게 데이터그 램을 전송하는 함수 호출 (sendTo) • 데이터를 수신하는 함수를 호출해서 데이터그램을 받기 (recvFrom) – 이때 송신한 곳의 주소와 포트도 얻음 <단말기 11.22.33.44에서> main() { s = socket(UDP); s.bind(any_port); s.sendTo("55.66.77.88:5959","hello"); s.close(); } <단말기 55.66.77.88에서> main() { s = socket(UDP); s.bind(5959); r = s.recvFrom(); print(r.srcAddrPort, r.data); s.close(); } <실행 결과> 11.22.33.44:53234 hello NOTE: 위 예시에서는 송신과 수신이 되기 위한 wait 과정이 생략되어 있음
  • 30. TCP (transmission control protocol) • 전송 제어 프로토콜 • 연결 지향형 (반드시 논리적 연결을 해야만 통신 가능) • IP:port는 1대1 연결만 허용 • 보내는 데이터는 반드시 상대방에게 도달함 • 스트림 형태로 데이터가 전송 – 보내는 쪽이 a,bb,ccc,dddd를 전송할 경우 – 받는 쪽은 a,bb,ccc,dddd 뿐만 아니라 abbcccdddd로 받을 수 도 있고 abb,cccd,ddd로 받을 수도 있음 • 패킷 드랍이 발생하면, 운영체제가 알아서 재송신을 통해 반드시 상대에게 스트림이 모두 도착하게 함 • 거의 모든 네트워크 앱은 이 프로토콜을 사용 TCP socket TCP socket
  • 31. TCP 통신 예 • UDP 통신 예와 비슷하지만, 차이점 – TCP 연결을 하는 함수를 호출해서 상대방과 연결 (connect) – 반대쪽에서는 TCP 연결 받을 수 있게 하고 (listen) 상대방으로 연결이 들어오면 새 TCP socket을 추가로 생성(accept) – 1대1 연결이므로 송신시 수신대상 지정 안 하며(send), 수신시 송신대상 얻지 않음 (recv) <11.22.33.44> main() { s = socket(TCP); s.bind(any_port); s.connect("55.66.77.88:5959"); s.send("hello"); s.close(); } <55.66.77.88> main() { s = socket(TCP); s.listen(5959); s2 = s.accept(); r = s2.recv(); print(s2.remoteAddrPort, r); } <결과> 11.22.33.44:51409 hello NOTE: 위 예시에서는 송신과 수신이 되기 위한 wait 과정이 생략되어 있음. 그리고 위 결과는 송신한 내용 이 stream의 특성상 중간에 잘리지 않음을 가정함
  • 32. TCP, UDP 소켓 • 소켓 하나로 송신과 수신을 모두 수행함 – 송신용 소켓, 수신용 소켓 따로 만들지 마세요. 성능 더 나쁨
  • 33. 딱 이것만 기억합시다 • TCP 소켓 – 일대일만 가능 – 패킷 유실을 신경쓸 필요 없음 – 스트림이라 데이터가 쪼개지거나 뭉쳐짐
  • 34. 패킷 드랍이 발생하면 TCP UDP 드랍된 패킷은 재전송을 하기 때문에, 스트림이 시간 지연되어 상대방에게 전송됨 드랍된 패킷은 그냥 무시 되기 때문에, 데이터그램(메시지)가 상 대에게 전송되지 못함 레이턴시 = 기본 레이턴시 + 재송신 타임아웃 x 패킷 드랍율 레이턴시 = 기본 레이턴시
  • 35. TCP와 UDP는 언제 쓰는지 • UDP – 좀 버려져도 괜찮은 류 – 캐릭터 이동, 기관총 난사, 음성/화상 데이터 • TCP – 위의 경우 제외하고 모든 경우 • MMORPG 하나의 총 메시지 종류는 약 500여개 – 이들 중 5% 미만이 UDP – 그러나 이들이 전체 트래픽의 70%를 차지
  • 36. 무선 네트워크에서는 • 높은 패킷 드랍율 (평균 20%. 유선은 평균 5% 미만인데!) • TCP를 쓰면 핑 스파이크 • 따라서 – 가급적 UDP 사용 – 단, 일부 3G/LTE 기지국에서는 UDP 불가능하므로 TCP도 혼용해야
  • 37. 딱 이것만 기억합시다 • 기관총 난사, 캐릭터 이동 같은 것 빼고는 다 TCP
  • 38. 게임의 메시지 포맷 텍스트 바이너리 하위호환성 유연성 높음 낮음 통신량 많음 적음 해커에의 노출 강함 약함 디버깅 용이성 쉬움 어려움 실시간 멀티플레이 온라인 게임에서는 바이너리 형식을 선호
  • 39. 요약 정리 • LAN, WAN • 스트림, 메시지, 패킷 • IP 주소, port, host name • 라우터의 과부하, 회선의 품질 • 처리량, 레이턴시, 패킷 드랍율 • 소켓 • UDP, TCP
  • 40. 참고 서적 • 쉽게 배우는 데이터 통신과 컴퓨터 네트워크 (박기현 저)