UDP와 TCP는 전송계층에서 사용되는 네트워크 통신 프로토콜이다.
각 차이점을 알아보며 특징을 이해해보도록 하자.
 

UDP

UDP는 비 연결형 통신 프로토콜이다.
비 연결형 통신 프로토콜이란, 서버와 클라이언트 간의 연결 없이 데이터를 주고 받는다는 의미이다.
 
연결 없이 데이터를 주고받는다는 뜻은 클라이언트에서 서버를 향해 데이터를 보낼 수는 있으나, 그 반대로 서버에서 클라이언트로 데이터를 보낼 수는 없다는 뜻이다.
 
왜? 서버는 대상이 특정되어 있지만, 클라이언트는 불특정 다수이므로 대상을 특정할 수 없다.
=> 서버에서도 특정 클라이언트의 정보를 안다면 데이터를 보낼 수도 있다.
 
서버와 클라이언트가 연결되어 있지 않기 때문에, 각 패킷들은 서로 다른 경로로 이동하여 목적지에 도착하게 된다.
각 패킷의 경로가 다른 이유로, 패킷의 전송 시간이 일정하지 않아 보내는 순서와 도착하는 순서가 다를 수가 있다.
=> 데이터의 신뢰성이 보장되지 않는다.
 
클라이언트에서 A,B,C의 순서로 패킷을 서버로 보내면, 서버에서는 A,B,C의 순서로 패킷을 수신해야 하지만
UDP 통신의 경우 A,C,B 나 B,A,C 등 클라이언트가 송신한 순서와 다소 다를 가능성이 생긴다.
 
그렇다면, 데이터를 신뢰성있게 보내지도 못하는 프로토콜이 무슨 의미가 있을까?
UDP의 장점은 바로 속력에 있다. 데이터를 송수신하는데 있어서 고려하지 않는 것들이 많아 빠른 처리가 가능하기 때문에 네트워크에 부하를 적게 주며, 신뢰성은 낮더라도 연속성은 높은 통신을 할 수 있게 된다.
 
이러한 이유로 UDP는 비디오 스트리밍과 같이 신뢰성보다 연속성이 중요한 서비스에 주로 사용된다.
(비디오 스트리밍의 경우 중간 1프레임정도 문제가 발생하더라도 크게 눈치채지 못하지만, 느린 송수신으로 인해 화질이 저하되거나 프레임이 낮아지는 것은 쉽게 알아차릴 수 있다.)
 

TCP

TCP는 연결형 통신 프로토콜이다.
연결형 통신 프로토콜이란, 클라이언트와 서버가 논리적으로 연결된 상태로 데이터를 주고 받는다는 의미이다.
 
클라이언트와 서버가 서로 이어져 있기 때문에, 양방향 통신이 가능하다. 클라이언트에서 서버로 데이터를 보낼 수 있으며, 서버에서도 클라이언트로 데이터를 보낼 수 있다.
 
TCP 통신에서 클라이언트와 서버를 연결하는 이유는 신뢰성 있는 데이터의 송수신을 위해서이다. 서로 연결되어 있기 때문에, 데이터의 순서와 무결성을 보장할 수 있다. 또한, 유실된 패킷이 존재할 경우 클라이언트에 재송신을 요청할 수도 있게 된다.
 
TCP 통신에서 클라이언트와 서버의 연결, 해제에는 특별한 방법이 사용된다.
바로, 3 Way - Handshake4 Way - Handshake 이다.

3 Way - Handshake

3Way - Handshake 란, TCP 통신에서 클라이언트와 서버가 서로 연결하기 위해 사용하는 방식이다.
이 때, SYN과 ACK라는 두개의 플래그를 사용한다. (구체적로는 더 많은 플래그가 사용되는 것으로 안다.)
 
SYN : 무작위 난수를 담아, 상대방에게 보낸다. (응답을 요청하는 신호)
ACK : 상대가 보낸 SYN에 담긴 난수에 1을 더해, 상대방에게 보낸다. (SYN에 대한 응답 신호)
 
먼저, 클라이언트가 서버에 SYN을 보낸다. 
서버는 SYN을 수신한 뒤, SYN에 대한 ACK와 함께 새로운 SYN을 보낸다.
클라이언트는 서버에서 보낸 SYN에 대한 ACK를 다시 서버에 보내고, 서버가 ACK를 수신한 뒤 서로 연결이 확립된다.
 
이는 신뢰성 있는 통신을 위해, 서로 데이터를 송신하고 수신할 수 있는 준비가 되어있는지 사전에 확인하는 과정이다.

4 Way - Handshake

4Way - Handshake 란, TCP 통신에서 클라이언트와 서버가 안정적으로 연결을 해제하기 위해 사용하는 방식이다.
이 때는, FIN과 ACK라는 두개의 신호를 사용한다.
 
FIN : 연결을 종료하겠다는 신호
ACK : FIN에 대한 응답 신호
 
서버에 연결을 시도하는 것은 클라이언트로부터 시작되지만, 접속을 해제하는 것은 서버가 먼저 시도할 수도 있다.
그러므로, 서버와 클라이언트가 아니라 A와 B로 표현할 것이다.
A는 먼저 연결 해제를 요청하는 쪽이며, B는 해제를 요청받는 쪽이다.
 
먼저, A는 B에게 FIN을 보낸다. 
B는 FIN을 수신한 뒤 A에 ACK를 송신하고, 잠시 대기 상태에 머문다. 
(대기상태에 머무는 이유는 A가 보낸 패킷중 도달하지 않은 것이 있을 수 있기 때문에 이를 기다리는 것이다.)
 
B에서 충분히 대기했다고 판단하면, A에 FIN신호를 보낸다.
A는 FIN을 수신한 뒤, B에 ACK를 송신하고 잠시 대기상태에 머문다.
(역시나, B에서 보낸 패킷중 아직 도착하지 않은 것이 있을 수 있기 때문이다.)
 
B는 ACK를 수신받은 뒤, 소켓을 닫는다.
(이 때, A는 아직 소켓을 닫지 않았으므로 송신중인 패킷이 있다면 수신할 수 있다.)
 
A는 충분한 대기시간을 거친 뒤, 최종적으로 소켓을 닫는다.
 
이러한 과정을 통해, 연결 해제로 인해 데이터의 유실이 발생하거나 데드락에 빠지는 것을 방지할 수 있다.
 
TCP는 이처럼, 연결과 해제 과정에서도 여러 과정을 거치지만 패킷을 송수신할 때, 데이터의 신뢰성을 보장하기 위한 여러 절차를 거치기 때문에 UDP에 비해 상대적으로 느린 속력을 보인다.
 
TCP의 경우는 속도보다 신뢰성에 무게를 둔 프로토콜인만큼, 파일을 다운로드 받는 등의 서비스에 이용된다.
 

TCP vs UDP

두 프로토콜의 차이를 표로 한눈에 알아보자.

UDPTCP
비 연결형 통신연결형 통신
데이터의 신뢰성이 낮다.데이터의 신뢰성이 높다.
데이터 송수신 속력이 상대적으로 빠르다.데이터 송수신 속력이 상대적으로 느리다.
단방향 통신이다.양방향 통신이다.

 

DNS : 웹 사이트의 문자열 주소(도메인)를 IP로 변경하거나, IP를 문자열 주소(도메인)로 변경해주는 시스템
 
우리는 일반적으로, 어떠한 웹사이트에 접속하기 위해 문자열로 된 주소를 입력한다.
www.naver.com
www.google.com
www.daum.net 
이런 영문과 특수기호로 이루어진 문자열을 주소창에 입력하면 웹사이트에 접속이 된다.
하지만, 실제로는 영문 문자열이 아니라 IP주소를 알아야 웹 사이트에 접속할 수 있다.
 
구글에 PING을 한 번 보내보자.

 
[2404:6800:4005:814::2004] 라는 IPv6 주소를 확인할 수 있다.
www.google.com이라는 문자열은 어떠한 과정을 거쳐서 [2404:6800:4005:814::2004]라는 IP주소로 변환이 되고, 우리는 그 IP주소를 통해 웹 서버에 접속할 수 있게 되는 것이다.
 
이 때, 문자열 주소(도메인)를 IP로 변환하는 역할을 담당하는 것이 DNS이다.
 
복잡하고 직관적이지 않은 IP주소를 사이트 별로 모두 외우는 것은 유저 입장에서 접근성이 상당히 떨어지는 일이기 때문에, 쉽고 간편하게 접근할 수 있는 문자열 주소를 사용할 수 있게 도와주는 셈인 것이다.
 

DNS의 과정

 

1. Local DNS에 IP주소 요청

Local DNS란, 기지국의 DNS서버이다. 모든 PC는 인터넷 가입시, 해당 통신사 기지국의 DNS 서버를 등록하게 된다.
어떠한 도메인의 IP를 찾기 위해, PC는 Local DNS에 해당 도메인의 IP를 요청하게 된다.
 

2.Local DNS에서 Root Name Server에 IP주소 요청

기지국의 DNS 서버는 요청받은 도메인의 IP주소를 Root Name Server라는 DNS 서버에 요청하게 된다.
 
DNS서버는 트리 구조로 이어져있다고 한다. 해당 트리의 루트 노드가 바로 Root Name Server인 것이다.
해당 Root Name Server에 IP주소를 요청하면, Root Name Server는 TLD 네임 서버의 주소를 반환해준다. 
 

3.Local DNS에서 TLD 네임 서버에 IP요청

TLD 네임 서버란,  최상위 도메인(TLD)의 네임 서버이다. 도메인 주소를 보면, 닷(.)으로 분류되어 있는 것을 볼 수 있다.
www.naver.com 의 경우, www와 naver과 com으로 분류되어 있다. 이중 가장 뒤에 있는 com이 최상위 도메인이다.
www.daum.net  의 경우, net이 최상위 도메인이 된다.
 
우리가 Local DNS에 www.naver.com 의 IP를 요청했다면, Root Name Server에선 com의 DNS 서버를 알려주게 된다.
Local DNS는 Root Name Server로부터 제공받은 com의 DNS 서버에 다시 IP를 요청하게 된다. 최상위 도메인 naver.com의 DNS 서버를 찾아서 다시 local DNS에 반환해준다.
 

4.Local DNS에서 최종적인 IP를 받을 때까지 재귀적으로 IP요청

예를 들어, 요청한 주소가 A.B.C.D.E.F.G.com 이라고 해보자. (물론 이런 주소는 실제로는 없겠지만)
그렇다면, Root Name Server가 TLD DNS 서버를 제공해주고, 다시 TLD DNS 서버에 IP를 요청하면, G.com의 DNS 서버를 제공해줄 것이며, G.com의 DNS 서버는 F.G.com의 DNS 서버를 제공해줄 것이다.
local DNS는 A.B.C.D.E.F.G.com의 IP주소를 반환 받을 때까지 이 과정을 재귀적으로 반복하게 된다.
최종적으로 IP를 알게 되면, Local DNS는 해당 IP주소를 PC에 알려주게 된다.
 

DNS 캐싱

DNS는 이처럼 상당히 번거로운 과정을 거치고 있다. 하지만, 항상 저 모든 과정을 거치는 것은 아니다.
왜냐하면, 각 DNS는 최근에 탐색된 IP주소를 캐싱 하기 때문이다. 캐싱이란, 별도의 공간에 IP를 저장 해놓는 것이다.
 
예를 들어, Local DNS에 www.naver.com  의 아이피 주소가 캐싱되어 있다면, Root Name Server에 IP를 요청할 필요 없이 캐싱된 IP를 바로 PC에 반환해줄 수 있는 것이다. (컴퓨터에 사용되는 캐시 메모리와 동일한 기능이라고 생각하면 된다.)
 
어떠한 DNS 서버에서 캐싱된 IP주소를 발견할 수 있다면, 끝까지 재귀적 탐색을 하지 않고 중간에 종료하여 IP 주소를 얻어낼 수 있는 것이다. 그리고 이렇게 얻어낸 IP 주소는 각 DNS 서버에만 캐싱되는 것이 아니라 우리 PC에도 캐싱된다.
(cmd에 ipconfig /displaydns 를 입력하면, 캐싱된 데이터를 볼 수 있다.) 
 
하지만, PC에 캐싱된 IP정보는 모종의 이유로 변조될 수 있다고 한다. (바이러스, 해킹 등...)
www.naver.com을 을 쳤는데 다른 IP 주소로 접속이 되는 보안 취약점이 발생할 수 있다는 것이다.
그러므로, PC에 저장된 DNS 캐시는 주기적으로 정리해주는 것이 좋다고 한다.
(물론, 개인 PC 뿐만이 아니라 각 DNS 서버에서도 발생할 수 있는 문제이긴 하다.)

'네트워크' 카테고리의 다른 글

네트워크 - UDP vs TCP  (0) 2024.05.26
네트워크 - PING (Packet Internet Groper), Ping Of Death  (0) 2024.05.26
네트워크 - LAN, MAN, WAN  (0) 2024.05.26

PING이란, 호스트와 통신 상태를 파악하기 위해 사용하는 명령어이다.

 

게임을 하다 보면, 핑이 튄다는 말을 자주 들을 수 있을 것이다.

(게임에 따라 핑 수치가 높으면 빨간색으로 표시되는 경우가 있어, 빨핑이라는 용어를 사용하기도 한다.)

 

핑 수치가 높다는 것은, 현재 호스트와 데이터를 한 번 주고받는데 오랜 시간이 걸린다는 것이다.

 

우리가 PING명령어를 사용하게 되면, 호스트에게 echo Request를 송신하게 된다.

호스트에선 이를 수신한 뒤, echo Reply를 우리 쪽으로 다시 송신하게 된다.

 

우리는 echo Reply를 수신한 뒤, echo Request를 송신했던 시간을 기준으로 얼마나 걸렸는지를 계산하게 되고 이 것이 핑수치가 되는 것이다.

 

하지만, 호스트가 항상 응답을 하는 것은 아니다. 서버가 현재 닫혀있는 상태일 수도 있고, 여러 문제로 통신이 불가능한 상황일 수도 있다. 이런 경우엔 echo reply를 수신받을 수 없다. 

 

echo Reply를 수신받을 수 없을 땐, 두 가지의 메세지를 확인할 수 있다.

 

1. Request Timed Out

2. Destination Host Unreachable

 

Request Timed Out은 우리가 설정한 시간동안 echo Reply를 수신받지 못하는 경우에 확인할 수 있는 메세지이다.

서버 혼잡, 패킷 유실 등의 이유로 서버 측으로부터 응답을 받지 못하는 경우에 확인할 수 있다.

 

Destination Host Unreachable은 아예 통신이 불가능한 상황에 확인할 수 있다.

어떠한 이유로든 호스트와 연결할 수 있는 길이 없을 때 확인할 수 있는 메세지이다.

 

 

CMD에 이렇게 ping라는 명령어를 치면, 다양한 옵션을 확인할 수 있다.

 

이런 식으로 주소를 입력하여, 특정 웹사이트와의 통신상태를 확인할 수도 있다.

 

Ping은 유용하게 사용될 수도 있지만, 이를 이용한 공격 방식도 있다.

 

Ping Of Death

위의 cmd를 보면, ping 패킷은 일반적으로 32바이트 크기로 전송된다.

이를 의도적으로 64바이트 (최대크기)로 부풀린 다음, 타깃의 IP에 대량의 EchoRequest를 보낸다.

 

64바이트의 거대한 패킷은 송신 과정에서 여러 개의 조각으로 파편화되고, 타깃은 수많은 Echo Request의 파편을 수신받게 된다.

 

이 과정에서 수많은 Echo Request를 받고 다시 Echo Reply를 송신하는 것도 무리가 많지만, 여러개로 쪼개진 Echo Request를 조립하기 위해 기다리는 과정도 부하가 상당하기 때문에 타깃의 컴퓨터는 다른 작업을 실행할 수 없는 상태가 되어버린다.

 

이 것을 Ping Of Death라고 하며, D-DOS(디도스) 공격의 일종으로 분류된다.

'네트워크' 카테고리의 다른 글

네트워크 - UDP vs TCP  (0) 2024.05.26
네트워크 - DNS (Domain Naming Systyem)  (0) 2024.05.26
네트워크 - LAN, MAN, WAN  (0) 2024.05.26

네트워크 통신망은 크기에 따라 LAN, MAN, WAN으로 구분된다.

 

규모에 따라 통신망을 분류하는 이유는?

=> 트래픽을 분산시킴으로써, 효율적으로 처리하기 위해.

 

하나의 통신망에 전세계의 트래픽이 몰리면 병목현상도 매우 심해지고, 유지보수 측면에서도 매우 불리하다.

 

LAN

LAN : 가장 작은 규모의 통신망

가정집, 사무실, PC방 등에서 호스트를 연결하는 통신망이다.

이더넷 케이블이나 와이파이를 이용하여 서로를 물리적으 연결한다.

 

통신망의 길이가 짧은 만큼, 전송 속도가 MAN, WAN에 비해 빠르고, 안정성이 높다.

근거리에 있는 개인과 개인은 동일한 LAN에서 통신한다.

 

MAN

LAN : LAN과 WAN 의 중간 규모의 통신망

도시 내에 있는 수많은 네트워크를 하나로 묶는 통신망이다.

(도시에만 사용되는 것은 아니고, 규모가 큰 기업이나 대학 등에서도 발견할 수 있다고 한다. 다만, 도시 단위에서 가장 대표적으로 발견할 수 있으며, 그 비슷한 규모라고 생각하면 된다.)

 

광섬유, 동축 케이블을 전송매체로 사용한다고 한다.

 

LAN보다 연결 범위가 길지만 속력이 느리기 때문에, 개인과 개인을 연결하는데 사용하지는 않고 여러 기관을 연결하는데 주로 사용한다. 

 

WAN

WAN : 가장 큰 규모의 통신망

국가 혹은 대륙간의 통신에 사용되는 통신망이다.

(물론, 국가나 대륙간의 소통에 사용되는 것만은 아니고, 거리가 충분히 멀다면 어디에서든 발견할 수 있다.)

 

LAN, MAN에 비하면 매우 느린 속도를 보이지만, 아주 넒은 범위에서 통신이 가능하다.

인터넷, 위성 통신 등이 WAN에 포함된다고 한다.

+ Recent posts