본문 바로가기

컴퓨터 네트워크

[Network] IP 프로토콜과 TCP, UDP

728x90
반응형

 

 

이번 시간에는 IP 프로토콜과 TCP, UDP에 대해서 다뤄보고자 합니다.

프로토콜은 컴퓨터 내부나 컴퓨터 사이에서 데이터의 교환 방식을 정의한 규칙 체계입니다. 따라서 데이터의 형식이 서로 상호 합의가 된 규칙에 따라 교환됩니다.

 

 

 

인터넷 프로토콜 (IP 프로토콜)

 

인터넷 프로토콜, 줄여서 IP는 송신 호스트와 수신 호스트가 패킷 교환 방식으로 데이터를 주고 받을 때에 사용하는 프로토콜이며, OSI의 네트워크 계층(3계층), TCP/IP의 인터넷 계층에 해당합니다.

이 때 송신 호스트와 수신 호스트는 IP 주소라는 것을 가지게 되는데, 이것은 전세계의 여러 호스트 중에 나를 특정할 수 있는 고유한 주소라고 볼 수 있습니다. 흔히 볼 수 있는 123.123.123.1 과 같은 형식입니다.

따라서 IP 프로토콜은 지정한 IP 주소에 내가 보내고자 하는 데이터를 전달하고, 이 데이터를 패킷이라고 하는 조각 단위 쪼개 데이터를 주고 받는 것에 초점을 둡니다.

 

 

IP에서는 전송 데이터에 다음과 IP 패킷 정보를 추가합니다.

[IP 패킷] 송신 호스트 IP, 수신 호스트 IP 등 ...
[데이터] 전송 데이터 

 

 

이렇게 만들어진 패킷을 인터넷 망 안에 있는 노드를 통해서 원하는 도착지까지 전송합니다.

이 때 전송하고자 하는 데이터의 크기가 크다면 데이터가 쪼개져 보내지므로 여러개의 패킷을 보내는 상황이 생길 수도 있습니다.

수신 호스트에서 해당 패킷들을 전달받으면 잘 받았다는 의미를 담은 패킷을 다시 송신 호스트로 보내줍니다.

 

이로써 IP 프로토콜을 사용하여 데이터를 성공적으로 주고 받았습니다.

 

 

IP 프로토콜의 한계점

 

위와 같이 IP 프로토콜을 이용해 데이터를 주고 받았을 때에, 언뜻 보면 큰 문제가 없어보일 수 있습니다.

하지만 다음과 같은 상황들이 생길 수 있게됩니다.

 

- 비연결성

만약 서버가 불능 상태인 경우와 같이 수신 호스트가 패킷을 받을 수 없는 상황이어도 송신 호스트는 이를 알 수 없어 계속 패킷을 전송하게 됩니다.

 

- 비신뢰성

앞서 말했던 것처럼, IP 프로토콜은 데이터의 크기가 크면 패킷 단위로 사이즈를 줄여 보내게 되고, 이 패킷들은 각각 인터넷 안의 노드를 타고 수신 호스트에 도착합니다.

하지만 이 인터넷 안의 노드들은 각각 내부적인 정책에 따라 패킷을 전송하기 때문에 늘 수신 호스트가 송신 호스트에게 같은 경로를 타고 패킷을 보내는 것은 아닙니다.

즉 A, B, C, D 패킷을 순서대로 보내도 수신 호스트에서는 B, C, A, D와 같이 순서가 뒤바뀐 패킷을 받게 되는것이죠.

 

뿐만 안이라 인터넷에서 패킷을 전송하는 도중에 문제가 생겨 패킷이 사라지는 경우도 있을 수 있습니다.

이러한 경우에 수신 호스트에서는 이 패킷이 제대로 온 것인지 확인할 방법이 없기 때문에 신뢰성에 대한 문제가 생기게 됩니다.

 

- 어플리케이션이 동일한 IP를 사용하는 문제

하나의 컴퓨터에서는 다양한 어플리케이션이 돌아가게 됩니다.

예를 들어 내 컴퓨터에서 웹브라우저, 게임, 채팅이 함께 돌아가고 있다고 가정하면 각 어플리케이션들은 각기 다른 서버와 통신해야 합니다.

이 때 웹브라우저, 게임, 채팅은 모두 내 컴퓨터의 IP를 함께 사용하고 있기 때문에 다른 서버에서 내 IP만 가지고는 어떤 어플리케이션에게 데이터를 주어야할지 알 수 없습니다.

 

 

 

TCP와 UDP

 

TCP와 UDP는 OSI의 전송 계층(4계층), TCP/IP의 전송 계층에 존재하는 프로토콜입니다.

두 프로토콜 모두 IP 프로토콜을 기반으로 하고 있지만, 각각의 특징을 갖고 있으며

보통 인터넷 계층인 IP 프로토콜 위에 TCP, UDP 중 알맞은 것을 선택하여 올림으로써 보완하는 역할을 합니다.

 

TCP(Transmission Control Protocol)

 

TCP에서는 패킷에 TCP 세그먼트를 추가함으로써 IP 프로토콜의 한계점을 어느정도 극복할 수 있게됩니다.

[IP 패킷] 송신 호스트 IP, 수신 호스트 IP 등 ...
[TCP 세그먼트] 송신 호스트 Port, 수신 호스트 Port, 전송 제어(순서, 검증 ...) 등 ...
[데이터] 전송 데이터 

 

위의 TCP 세그먼트에서 볼 수 있듯이 Port 구분을 통해 IP 프로토콜에서 어플리케이션을 구분할 수 없던 문제를 해결하였습니다.

또한 데이터를 원활하게 전송하기 위하여 회선접속의 확인, 상대방의 확인, 데이터가 올바르게 전송되었는가의 확인 등을 체크하는 전송 제어를 통해 IP 프로토콜의 비연결성과 비신뢰성을 극복하였습니다.

 

 

TCP의 특징

 

- 연결 지향

TCP는 TCP 3 way handshake를 통해서 송신 호스트와 수신 호스트가 논리적으로 연결될 수 있도록 해줍니다.

TCP 3 way handshake

SYN을 통해 접속을 요청하고, ACK를 통해 요청을 수락하여 현재 통신이 가능한 상태임을 알려줍니다.

이 일련의 과정을 통해 서로 연결되어 데이터를 전송하게 됩니다.

 

- 데이터 전달 보증

송신 호스트가 데이터를 보내면, 수신 호스트는 TCP 패킷을 통해 누락된 데이터나 잘못된 데이터가 없는지 검사합니다.

이 때 문제가 없으면 데이터를 잘 받았다는 응답을 해주고, 문제가 생기면 절차에 따라 송신 호스트에게 알림으로써 송신-수신 호스트 간 데이터 전달이 잘 되었는지 확인할 수 있습니다.

 

- 순서 보장

IP 프로토콜만 사용했을 경우에는 패킷 순서가 바뀌어 도착해도 송신 호스트가 알 수 없었지만,

TCP 프로토콜의 경우에는 수신 호스트가 패킷 순서를 검사하여 잘못 되었음을 확인하면 특정 패킷부터 재전송하도록 요청할 수 있습니다.

따라서 결과적으로 패킷의 순서가 송신할 때의 순서와 같도록 보장할 수 있습니다.

 

 

UDP(User Datagram Protocol)

 

UDP에서는 패킷에 UDP 데이터그램을 추가함으로써 IP 프로토콜의 한계점 중 몇 가지를 극복하게 됩니다.

[IP 패킷] 송신 호스트 IP, 수신 호스트 IP 등 ...
[UDP 데이터그램] 송신 호스트 Port, 수신 호스트 Port, 체크섬 등 ...
[데이터] 전송 데이터 

 

위의 UDP 데이터그램은 TCP와 다르게 단순히 포트와 체크섬으로 이루어져 있어,

IP 프로토콜의 어플리케이션 구분 문제는 해결했지만 다른 문제들은 해결하지 않습니다.

 

 

UDP의 특징

 

- 비연결형

TCP와 같은 핸드쉐이킹 절차가 없기 때문에 서로 통신이 가능한 상태인지 확인할 수 없습니다.

 

- 데이터 전달 보증 및 순서 보장 불가능

전송 제어를 하지 않기 때문에 데이터가 중간에 없어지거나 순서가 바뀌어도 수신 측에서 알 수 없습니다.

 

- 단순하고 빠름

별도의 제어나 추가적인 작업이 없기 때문에 단순하고 빠릅니다.

따라서 보통 UDP의 경우 UDP만 사용한다기 보다는 어플리케이션에서 원하는대로 추가적인 작업을 하여 보완하는 방식으로 사용됩니다.

 

 

 

 

728x90
반응형

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

[Network] 포트포워딩이란?  (0) 2021.03.19