이번 시간에는 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를 통해서 송신 호스트와 수신 호스트가 논리적으로 연결될 수 있도록 해줍니다.
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만 사용한다기 보다는 어플리케이션에서 원하는대로 추가적인 작업을 하여 보완하는 방식으로 사용됩니다.
'컴퓨터 네트워크' 카테고리의 다른 글
[Network] 포트포워딩이란? (0) | 2021.03.19 |
---|