[CS]TCP/IP

한상욱·2024년 8월 7일
0

CS&자격증후기&잡담

목록 보기
17/21
post-thumbnail

들어가며

우리가 사용하는 어플리케이션은 서버와 통신을 통해 대규모 사용자가 함께 정보를 공유하는 형태로 이루어져있습니다. 이렇게 서버와 어플리케이션은 네트워크를 이용해 통신을 하는 구조입니다. 그렇다면 정확하게 어떻게 통신을 할 수 있는 것일까요? 바로 TCP/IP를 이용하게 됩니다.

서버와 클라이언트

서버와 클라이언트라는 말을 들어보셨을 것입니다. 서버와 클라이언트는 각각 서비스를 제공하는 자와 서비스를 제공받는 자로 해석이 되죠. 컴퓨터에서는 서버와 클라이언트를 비슷한 개념으로 이용합니다.

우리가 사용하는 어플리케이션은 여러명의 사용자가 이용합니다. 그렇다면 어떻게 서로 데이터를 주고받을 수 있을까요? 가장 단순하게 아래와 같은 형식을 생각해볼 수 있습니다.

이러한 경우 서비스 이용 고객 nn에 따라서 한 고객이 정보를 공유하게 되면 총 n1n-1번 정보를 공유하게 됩니다. 그러한 공유가 사용자만큼 발생할 수 있으므로 n(n1)n(n-1)번 통신을 하게 되겠네요. 이러한 형식은 모든 통신을 유지해야 되기 때문에 비효율적입니다. 하나라도 끊기면 통신이 가능하지 않겠죠. 그렇다면 이러한 통신만을 처리하는 장치를 중앙에 배치하면 어떨까요?

이렇게 되면 중앙에서 모든 사용자의 정보를 전달받고 사용자들에게 전달하면서 훨씬 간단한 구조를 나타내게 되었습니다. 여기서 가운데는 서버 그리고 그 서버로 통신을 주고받는 종단장치는 모두 클라이언트라고 하게 됩니다. 이제 서버와 클라이언트에 대한 이해가 되셨겠죠?

TCP/IP

이제 서버와 클라이언트가 어떻게 통신망을 구축하는지 알았습니다. 그렇다면 서버와 클라이언트는 어떻게 통신을 할 수 있을까요? TCP/IP를 이용합니다.

TCP/IP는 L3, L4에서 사용되는 프로토콜입니다. 자세하게 알아볼까요?

"""
TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP (인터넷 프로토콜)와 전송 조절 프로토콜인 TCP (전송 제어 프로토콜)로 이루어져 있다. IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다.(unreliable datagram service) TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP로 부르기도 한다. - 위키백과
"""

이렇듯 TCP/IP는 TCP와 IP를 함께 부르는 용어입니다. 곧 TCP/IP는 IP를 이용해 목적지에 도달하며 TCP를 이용해 송신자와 수신자의 논리적 연결과 신뢰성을 보장한다는 의미죠.

그렇기에 인터넷을 통해 데이터를 주고받을 때, TCP의 특성으로 데이터가 제대로 전달되었는지 검증하기에 HTTP, HTTPS, FTP, SMTP 등같은 데이터 전송 프로토콜의 기반이 되게 됩니다.

TCP

TCP는 L4에서 이용하는 프로토콜로 서버와 클라이언트의 신뢰성 있는 연결과 데이터 송수신을 보장합니다. 이를 위해서는 서버와 클라이언트가 안정적으로 연결되어야 할 것 입니다.

서버와 클라이언트는 어떻게 서로 연결상태를 맺게 될까요? 3-way handshake를 이용합니다.

이미지 출처

3-way handshake는 아래와 같은 순서로 진행되게 됩니다.

  • 클라이언트는 서버에게 연결 요청을 위해 SYN 패킷을 보냅니다.
  • 서버는 클라이언트의 SYN 패킷을 확인한 후 확인 완료 패킷인 SYN-ACK 패킷을 전송합니다.
  • 클라이언트는 SYN-ACK 패킷을 확인한 후 확인이 완료되었다는 의미로 ACK 패킷을 서버에게 보냅니다.
  • 서버가 ACK 패킷을 확인하면 서버와 클라이언트가 서로 연결되게 됩니다.

이제 TCP의 연결과정을 알아보았으니 어떻게 서로의 신뢰성을 보장하는지 알아봅시다.

TCP는 흐름 제어를 합니다.

송신자는 얼마나 데이터를 보낼 수 있는지, 수신자는 얼마나 데이터를 받을 수 있는지 끊임없이 확인하며 TCP Header 내의 Window Size를 이용해서 전송 데이터의 양을 결정합니다. 보통 이러한 정보는 수신자가 결정하게 됩니다. 그리고 이러한 정보를 전달하면서 수신자는 Acknowlegement Number를 송신자에게 전달하죠. 뭐 의미를 보자면 "이번에는 100번을 받았으니 다음인 101번을 달라."라는 의미로 사용됩니다. 그리고 이러한 데이터의 순서는 Sequence Number라고 합니다.

TCP는 혼잡 제어를 합니다.

네트워크를 이용해 데이터를 보내는 것은 보내는 것이지만, 네트워크 자체가 혼잡하다면 제대로 데이터를 보낼 수 없습니다. TCP는 여러가지 방법을 이용해서 해당 혼잡도를 확인하고 데이터를 전송하게 됩니다.

profile
자기주도적, 지속 성장하는 모바일앱 개발자가 되기 위해

0개의 댓글