ݺߣ

ݺߣShare a Scribd company logo
클라이언트 개발자의 말빨 
을 위한 컴퓨터 네트워크 
기초 
넷텐션 
배현직
인터넷의 정체
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

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. 참고 서적 • 쉽게 배우는 데이터 통신과 컴퓨터 네트워크 (박기현 저)