본문 바로가기

컴퓨터공학 기초/네트워크

[네트워크] IP의 한계점을 해결하는 TCP / + UDP의 개념

앞서 ip의 한계점을 살펴본 적이 있다.

1) 비연결성 : 상대방의 서비스가 가능한지 확인이 불가능

2) 비신뢰성 : 패킷이 손실될 수도 있으며, 순서가 보장되지 않음. 

 

이런 문제점을 해결하기 위해서 TCP라는것이 나오기 시작했다. 

 


TCP/IP 4 레이어 : 

먼저 이 TCP를 설명하기 위해서는 TCP/IP 4 레이어를 설명할 필요가 있을 것 같다. 

네트워크에서 메시지를 전송하려고 할 때, 거치게 되는 순서 정도로 생각해도 될 것같다. 

응용계층 : 여기서 우리의 메시지가 입력된다. 

전송계층 : 이곳이 바로 우리가 지금 공부하려는 TCP와 UDP가 존재하는 곳이다. 응용계층에서 전달된 패킷에 TCP의 정보를 한번 감싸준다. 

인터넷계층 : 위에서 TCP로 감싸진 패킷에 한번 더 IP로 감싸는 것이다. 

네트워크 엑세스 : IP로 감싸진 패킷을 LAN드라이버와 LAN장비를 통해서 전달되는 계층이라고 생각해볼 수 있을 것 같다. 

 

아주 브리프한 설명들이다. 

네트워크 엑세스쯤에 도착했을 때, 우리가 그려볼 수 있는 패킷의 그림은 아래와 같을 것이다. 

전송 데이터가 우리가 응용 계층에서 받은 데이터이고, 

초록색 부분이 전송 데이터에 TCP로 감싼 부분이고, 

주황색 부분이 IP로 감싼 부분이라고 생각하면된다. 

 


IP의 문제점을 해결하는 TCP의 특징들 : 

위의 사진을 보면 이해할 수 있듯이, 

초록색에 해당하는 부분 안에는 port, 전송제어, 순서, 검증 등등의 정보들이 들어간다. 

이제 생 IP만 전달되는 것이 아니라, 그 위에 TCP가 얹어져서 전달되는 것이다. IP만으로는 해결할 수 없었던 문제들이 TCP가 얹어지면서 해결된다. TCP는 다음의 특징들이 있다. 이것들이 곧 IP의 문제점을 해결한 포인트라고 할 수 있다. 

 

1) 연결지향 : 쟤랑 나랑 연결되어있는지를 먼저 확인한다는 것이다. 저 친구의 컴퓨터가 꺼져있으면, 연결이 안된다. 연결이 안되면 데이터를 전송하지 않는다. 3 Way Handshake 라고도 한다. 

2) 데이터 전달 보증 : 데이터를 전달한 것을 보증해준다. 기존에는 데이터가 잘 전달되었는지 안되었는지 확인할 길이 없었지만, TCP는 데이터가 잘 전달되었으면 잘 전달되었다, 전달이 잘 안되었으면, 잘안되었다고 응답을 준다. 

3) 순서보장 : 순서를 보장해준다. 

 

각각의 내용들에 대해서 자세히 알아보자. 


1)연결지향 : 

 

tcp를 통해서 처음 연결을 시도하면 다음과 같은 3way handshake 현상이 생긴다. 

먼저는 클라이언트 쪽에서 서버로 syn라는 메시지를 보낸다. '나 너랑 연결할께! 씬!'

그러면 서버쪽에서 ack로 응답해준다. '알겠어! 에크!'

그러면 다시 클라이언트에서도 ack로 응답하는 것이다. '나도 알겠어! 에크!'

 

이렇게 서로 씬, 에크로 응답을 주고 받으면 서로를 믿을 수 있게 된다. 이 과정을 통해서 우리가 연결되었구나를 알 수 있다. 이제 이렇게 연결이 되고나면 데이터를 전송하기 시작한다. 만약 중간에 서버가 꺼져있었다면, 연결이 안되었다는 것을 사전에 알 수 있었을 것이다. 그래서 메시지를 전송하려는 시도를 하지 않을 것이다. 

 

그런데, 사실상 이것은 개념적으로만 연결되었다는 것을 아는가? 옛날에는 친구집에 전화를 하면 전화국에서 목적지에 해당하는 집으로 포트를 뽑아서 직접 연결시켜줬었다. 그런데, 이 3웨이 핸드쉐이크는 단순히 개념적으로 논리적으로만 확인하는 절차를 거치는 것이다. 

 


2)데이터 전달 보증 : 

어떻게 데이터를 전송하고 나서, 그것을 잘 받았는지 알 수 있을까? 

데이터 잘 받았음! 하고 서버가 응답을 주면 된다. 끝. 


3) 순서 보장 :

드디어 순서보장에 대한 이야기로 넘어왔다. 내가 전송하고 싶은 1,2,3번의 데이터가 있다. 순서도 1,2,3번이다. 그런데 인터넷 노드를 거치다보니 서버쪽에 1,3,2번으로 도착한 것이다. 

그러면 서버쪽에서 TCP에 있는 순서 정보를 까보고, 2번에 있어야 할 자리에 2번이 있는지 확인을 하고, 2번이 없다면, 다시 클라이언트로 요청을 보낸다. 

"빠꾸! 2번부터 다시 보내라! 순서는 지켜야지"

그러면 클라이언트는1번은 놔두고, 2번부터 다시 패킷 정보를 보낸다. 

 

 

 

이렇게 TCP를 통해서 ip만으로는 해결할 수 없었던 지점들을 해결하게 되었다. 


UDP란 무엇인가? : 

udp는 아까 전송계층에서 TCP와 함께 존재하는 프로토콜이라고 생각하면된다. 사실 이 udp는 기능이 없다. 그래서 하얀 도화지라고 생각하면 된다. ip와 거의 같다고보면 되는데, 단 한가지 다른 부분이 있다. 그것은 바로 port! 

포트가 무엇인지에 대해서는 다음시간에 자세히 알아보겠지만, 어쨌든 udp에는 ip에는 없는 '포트'라는 것이 존재한다. 음 쉽게 말하면 ip로 여러가지 패킷이 올텐데, 이것들을 구분해주는 것이 포트다. 이것은 게임용 패킷이구나, 저것은 메시지용 패킷이구나. 이런식으로 구분가능하게 해주는 것이 포트이다. 

 

tcp가 등장하면서 대부분의 인터넷은 TCP가 차지하게 되었다. 점유율 90% 이상! 그런데 최근에는 최적화적인 부분에서 장점이 있어서, UDP가 각광을 받고 있는 중이라고 한다. 자세한 내용은 검색을 통해서 알아보시도록! 

 

다음 시간에는 port에 대해서 알아보자. 

 


본게시물은 모든 개발자를 위한 HTTP 웹 기본 지식의 강의에서 들은 내용을 정리한 것입니다.