Dev/Network

TCP/IP란?

viae 2023. 11. 17. 14:58

 

TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP(인터넷 프로토콜)와 전송 조절 프로토콜인 TCP(전송 제어 프로토콜)로 이루어져 있으며, IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있습니다. (unreliable datagram service)

 

TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해주며, HTTP(HyperText Transfer Protocol), FTP(File Transfer Protocol), SMTP(Simple Mail Transfer Protocol) 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP라 부르기도 합니다.

 

조금 더 간략히 하면, 지역네트워크(Local Area Network = LAN) 혹은 광역네트워크(Wide Area Network = WAN)에서 원할한 통신이 가능하도록 하기 위한 통신규약(Protocol)으로 정의할 수 있습니다.

 

LAN 과 WAN 그리고 TCP/IP

위에서 언급한 LAN은 Local Area Network의 줄임말로 우리나라 말로 풀어쓰자면 지역네트워크이며, WAN은 Wide Area Network의 줄임말로 광역네트워크으로 해석할수 있습니다.

 

 

HOST 와 HOST 그리고 HOST와 Router는 다양한 종류와 다양한 품질의 네트워크 회선으로 연결될수 있습니다.

 

또한, 이는 데이터를 보내는중 각기 다른 회선으로 데이터 손상이 일어날수도 있으며, 데이터의 순서가 뒤바뀔 수 있습니다. TCP/IP는 이러한 연결된 상태에서 서로 올바른 통신을 하도록 도와줍니다.

 

 

TCP - IP

Transmission Control Protocol의 축약어인 TCP는 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 규약(프로토콜)의 일종입니다. TCP는 세계 통신표준으로 개발된 OSI 7계층에서 4번째 계층인 전송 계층(Transport Layer)에서 사용하는 규약으로, TCP 개발 배경에는 군사적인 목적이 있었으며, 과거 회선교환방식(Circuit Switching)의 문제점을 보완하고자 한 패킷교환(Packet Switching) 방식의 네트워크 환경에서 데이터의 유실, 신뢰성 문제점을 극복하고자 나온 것이 TCP였습니다.

 

TCP는 전화를 거는 것처럼 상대와 연결을 설정하고 통신을 시작하며, 절차는 다음과 같습니다.

  1. 상대에게 통신을 하고 싶다는 메시지를 보낸다. (SYN)
  2. 상대는 그 메시지에 대한 응답 + 나도 통신 준비가 되었다는 메시지를 보낸다. (SYN)
  3. 2번에서 받은 메시지에 응답을 보낸다. (ACK)

 

이와 같은 과정(three way handshake)을 통해 나와 상대가 통신준비를 마쳤고, 현재 통신이 연결되어 있음을 보장하게 되게 합니다.

 

Internet Protocol의 축약어인 IP는 호스트에서 호스트까지의 통신, 즉 보내는 컴퓨터에서 받는 컴퓨터까지의 통신을 책임지는 프로토콜입니다. OSI 7계층에서 3번째 계층인 네트워크 계층(Network Layer)에서 사용되는 규약으로, IP 통신에는 주소가 필요하며, 여기서 사용하는 주소가 아래의 IP 주소(IP Address)입니다. IP Address에는 IPv4와 IPv6 두 가지 체계가 있습니다.

  • IPv4 - 10진수 숫자 4개로 구성되며, 각각은 0~255의 값을 가지고 점(.)으로 구분됩니다. 예를 들어 123.45.67.89 같은 것이며, 일반적으로 IP 주소라고 하면 이것이다. 총 32비트의 정보를 가지므로 약 42억 개의 고유한 주소로 가지고 있습니다.
  • IPv6 - 총 128비트로 구성되며, 일반적인 표기는 4자리의 16진수 숫자 8개로 표기하고, 각각은 콜론(:)으로 구분합니다. 예를 들어 2001:0db8:0dad:0010:0000:0000:0000:0100 같은 형태.

IP를 통하지 않고 현 인터넷에서 네트워크로 통신한다는 건 불가능하며, 예외적으로 내부 사설망에서는 가능할 수 있지만, 외부와의 통신을 위해서는 IP를 거쳐야 합니다. 이러한 IP는 신뢰성인 TCP와 함께 데이터가 유실되지 않고 가급적 빠른 데이터를 보내고자 설계되었습니다.

 

 

TCP/IP 특징

1) Connection oriented

두 개 엔드포인트(로컬, 리모트) 사이에 연결을 먼저 맺고 데이터를 주고받습니다. 여기서 'TCP 연결 식별자'는 두 엔드포인트의 주소를 합친 것으로, <로컬 IP 주소, 로컬 포트번호, 리모트 IP 주소, 리모트 포트번호> 형태입니다.

 

2) Bidirectional byte stream

양방향 데이터 통신을 하고, 바이트 스트림을 사용합니다.

 

3) In-order delivery

송신자(sender)가 보낸 순서대로 수신자(receiver)가 데이터를 받습니다. 이를 위해서는 데이터의 순서가 필요하며, 순서를 표시하기 위해 32-bit 정수 자료형을 사용합니다.

 

4) Reliability through ACK

데이터를 송신하고 수신자로부터 ACK(데이터 받았음)를 받지 않으면, 송신자 TCP가 데이터를 재전송합니다. 따라서, 송신자 TCP는 수신자로부터 ACK를 받지 않은 데이터를 보관합니다. (buffer unacknowledged data)

 

5) Flow control (흐름제어)

송신자는 수신자가 받을 수 있는 만큼 데이터를 전송합니다. 수신자가 자신이 받을 수 있는 바이트 수 (사용하지 않은 버퍼 크기, receive window)를 송신자에게 전달합니다. 송신자는 수신자 receive window가 허용하는 바이트 수만큼 데이터를 전송합니다.

 

6) Congestion control (혼잡제어)

네트워크 정체를 방지하기 위해 receive window와 별도로 congestion window를 사용하는데 이는 네트워크에 유입되는 데이터양을 제한하기 위해서입니다. Receive window와 마찬가지로 congestion window가 허용하는 바이트 수만큼 데이터를 전송하며 여기에는 TCP Vegas, Westwood, BIC, CUBIC 등 다양한 알고리즘이 있습니다. Flow control과 달리 송신자가 단독으로 구현합니다.

 

 

OSI 7계층과 TCP/IP 4계층

TCP/IP 계층은 OSI 7계층을 더 단순화 시켜서 4개의 계층(Layer)로 만들어서 사용합니다.

 

1) 물리계층 (Physical layer)

물리적 계층 즉 이더넷 카드(NIC)와 같은 하드웨어를 말합니다.

 

2) 인터넷 계층 (Internet layer)

데이터를 정의하고 데이타의 경로를 배정하는일(라우팅)을 담당하며, 데이터를 정확히 라우팅 하기 위해서 IP프로토콜을 사용합니다. OSI 의 네트워크 계층(Network Layer) 과 데이터 링크 계층(Data Link Layer) 를 포함합니다.

 

3) 전송 계층 (Transport layer)

계층의 이름에서 알수 있듯이, 도착을 원하는 시스템까지 데이타를 전송하기 위한 일을 하는 게층으로, OSI 모델의 세션 계층(Session Layer)과 전송 계층(Transport Layer) 를 포함하고 있습니다. 각각의 시스템을 연결하고, TCP 프로토콜을 이용하여 데이타를 전송합니다.

 

4) 응용 계층 (Transport layer)

네트워크를 사용하는 응용프로그램(FTP, Telnet, SMTP) 등으로 이루어지며, OSI 계층의 Aplication Layer 와 Presentation Layer 를 모두 포함합니다.

 

 

TCP/IP 데이터 전송 과정

1) 송신측 과정 : 데이터 캡슐화

순수 사용자의 데이터가 생성 이되면 각각의 계층에서는 각각의 헤더(Header)를 붙이게 됩니다. 헤더라는 것은 각 계층에서 해야 할 일들을 정의한 오버헤드(Overhead)라고 할 수 있는데, 각 계층을 지나면서 각 계층에서 해야 할 일을 헤더에 붙이는 작업을 데이터 캡슐화(Data Encapsulation)라고 합니다.

 

2) 수신측 과정 : 역 다중화

이더넷 드라이버에서 수신이 되며, 해당 데이터를 어느 쪽(ARP, IP, RARP)을 보낼지 이더넷 헤더의 프레임타입(type)을 확인해서 결정합니다. IP에서는 TCP, UDP로 보낼지는 결정해야 하는데, 이때 사용되는 프로토콜의 헤더 값을 확인해서 결정하며, 응용계층에서는 각각의 포토번호를 확인해서 데이터를 보냅니다.