메세지를 전달하기 위해 필요한 TCP

June 16, 2024 (3mo ago)

TCP가 등장하게 된 배경

TCP 이전에 네트워크 계층이 있었고 네트워크 계층에서는 IP에 대해서 이전 블로그에서 자세하게 설명했었습니다. IP의 특징을 살펴보면 전송 계층이 없어도 될 것만 같습니다. 하지만 전~~혀 그렇지 않습니다. 이러한 이유는 무엇일까요?

이는 IP는 신뢰 없는 통신이기 때문입니다. 이는 IP가 비연결형 통신이기 떄문에 일어나는 일입니다. 이는 연결 상태를 유지하지 않는다는 것을 의미합니다. 이러한 특징의 단점은 명확합니다. 연결을 유지하지 않은 상태로 특정 이미지나, 영상, 파일을 다운 받을 경우 무슨 일이 일어날까요? 패킷이 엉망진창으로 도착할 것입니다! 어떤 패킷을 도착했는데 어떤 패킷은 도착하지 못하고 어떤 패킷은 가장 마지막에 와야 하는데 먼저오는 일이 발생하게 될 것입니다. 이런 일이 반복해서 일어나면 네트워크를 사용하는 사용자는 무슨 생각을 하게 될까요? 신뢰 없다고 생각하게 되지 않을까요?

위의 글을 보았을 때 단점 밖에 없는 것 같은데 어째서 IP는 이러한 단점을 수정하지 않고 계속해서 사용할 까요? 이에 대한 이유는 성능이 좋기 때문입니다. 앞서 설명했던 비연결형이어서 생기는 문제를 어떻게 수정하는게 좋을까요? 신뢰할 수 있게끔 만들기 위해서 필요한 것들은 뭐가 있을까요?

신뢰할 수 있게끔 하기 위해서는 모든 패킷이 성공적으로 도착하기 이전까지 연결된 대역폭을 해제하지 않고 계속해서 연결 상태를 유지하는 것입니다. 하지만 이러한 작업은 비용이 발생하기 떄문에 성능의 저하를 일으킬 수 있습니다. 컴퓨터로 파일을 다운 받으면서 다른 인터넷 작업을 수행할 경우 속도가 느려지는 것을 다들 한 번씩은 경험해보셨을 거라고 생각합니다.

인터넷에서 특정 작업들은 작업의 결과물의 신뢰성 보다는 속도를 우선 시하는 작업이 있습니다. 예를 들어 넷플릭스같은 서비스가 이에 해당합니다. 넷플릭스는 기기가 소화할 수 있는 대역폭에 따라 다른 화질의 동영상을 제공합니다. 이때 네트워크를 통해서 전달되는 패킷이 몇몇 손실되어서 잠시 화질이 나빠지거나 버퍼링이 생기는것을 경험해보셨을 겁니다. 이때 "아 빨리 연결되었으면 좋겠다.." 라고 생각하시지 않았나요? 이러한 작업들은 정확성 보다 속도가 더 우선시 되기 때문에 비연결형 통신을 사용하는 것입니다!

하지만 금융 서비스와 같이 선뢰를 최우선으로 하는 서비스들은 비연결형 통신으로 사용할 수 없기 때문에 연결형 통신인 TCP가 등장하게 되었고 오늘날에 널리 사용되고 있습니다.

TCP에게 가기 전에 알아야할 포트

여기서 하나 짚고 넘어가야 할 것이 있습니다. 전송계층의 역할에 대해서 짚고 넘어가야 합니다. 전송계층은 네트워크 계층과 응용 계층을 연결하는 다리의 역할을 합니다. 앞서 TCP를 이용하여 연결을 유지한다고 가정할 경우 네트워크의 대역폭은 연결되어있다고 가정할 경우 어떤 응용프로그램에서 사용할 것인지를 알아야 연결한 네트워크를 통하여 패킷이 정확하게 도착할 수 있습니다. 그렇기 때문에 이러한 역할을 위해 포트가 필요합니다. 연결되어 있는 주소에 추가적으로 포트를 기록함으로써 어느 애플리케이션으로 패킷이 전달되어야 하는지를 알 수 있게끔 만드는 역할을 수행하는 것이 포트의 역할입니다!

포트는 어떻게 구성이 될까요? 우선 포트는 0~65536사이의 숫자로 제한되어 있습니다. 그리고 이 중에서도 종류가 나뉘는데 크게 알려진 포트, 등록된 포트, 동적 포트로 나뉘게 됩니다.

| 포트 종류 | 포트 번호 범위 | | -------------- | -------------- | | 잘 알려진 포트 | 0~1023 | | 등록된 포트 | 1024~49151 | | 동적 포트 | 49152~65535 |

| 잘 알려진 포트 번호 | 설명 | | ------------------- | ------ | | 20, 21 | FTP | | 22 | SSH | | 23 | TELNET | | 53 | DNS | | 67, 68 | DHCP | | 80 | HTTP | | 443 | HTTPS |

예시로 121.53.85.3:443 이 주소에 대해서 살펴보겠습니다. 121.53.85.3는 IP 주소이고 :443는 포트 번호이고 이는 알려진 포트에 해당하고 HTTPS 에 해당합니다. 그러므로 121.53.85.3:443의 의미는 121.53.85.3 IP 주소를 가진 서버가 443 포트에서 HTTPS 서비스를 제공하고 있다는 것을 의미합니다.

위와 같이 어떤 응용프로그램이 어떤 포트를 사용해서 어떤 서버를 이용하는지에 따라서 어떤 응용프로그램으로 연결 되어야 하는 지를 추측 할 수 있습니다. 앞서 추측을 강조했는데 이러한 이유는 단순히 IP주소와 포트 만으로 특정 애플리케이션을 연결지을 수는 없기 때문입니다. 만약 현재 실행되고 있는 프로그램이 동일한 주소를 사용한다고 가정하면 어떤 애플리케이션인지 정확하게 구분할 수 없기 때문에 추측할 수 있다고 강조한 것입니다. 정확한 주소를 알아낼 수는 없지만 탐색의 범위를 줄일 수 있기 때문에 포트는 애플리케이션을 특정하는데 있어 중요한 역할을 수행합니다.

TCP! TCP! TCP!

TCP는 앞서 이야기 했던 전송을 신뢰할 수 없는 문제를 해결하기 위해 등장한 프로토콜입니다. 어떠한 특징을 갖고 있기에 이러한 문제를 해결할 수 있는지에 대해서 자세하게 알아보겠습니다.

tcp 세그먼트 구조

TCP에 대해서 이해하기 위해서는 세그먼트 구조에 대해서 이해해야 합니다. TCP의 세그먼트 구조는 TCP 헤더 + Payload를 묶어서 TCP 세그먼트 구조라고 표현합니다.