Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

nomad-programmer

[Programming/Network] TCP/IP 스택 본문

Programming/Network

[Programming/Network] TCP/IP 스택

scii 2020. 10. 4. 00:57

컴퓨터끼리 네트워크에서 데이터를 주고받기 위해서는 그 네트워크에서 통요되는 "프로토콜(Protocol)"을 따라야 한다. 프로토콜은 규약, 규칙이라는 뜻의 낱말로 컴퓨터들이 네트워크를 통해 데이터를 주고받기 위한 "통신 규약"을 말한다.

TCP/IP는 표준 프로토콜로, 인터넷에서 데이터를 주고받는데 필요한 일련의 프로토콜 모음이다. TCP/IP는 다음과 같이 크게 내 개의 계층으로 구성되어 있으며, 한 계층 위에 다른 계층이 포개어져 있는 형태 때문에 이것을 TCP/IP 스택(Stack)이라고 부르기도 한다.

TCP/IP 스택

단순해 보이는 이 네 단계의 프로토콜 모음이 오늘날 인터넷을 떠받치고 있다. 웹 브라우저, 인스턴트 메신저, 팟캐스트 서비스의 데이터들이 모두 이 4계층을 오르내리고 있다.


링크 계층

링크 계층은 물리 계층(Physical Layer), 네트워크 접속 계층(Network Interface Layer), 미디어 접근 계층(Media Access Layer)등으로 불리기도 한다.

TCP/IP는 네트워크의 물리적인 구성으로부터 독립적인 프로토콜이다. 컴퓨터가 네트워크에 전화선의 모뎀으로 연결되어 있든, LAN(Local Area Network)에 이더넷 케이블로 연결되어 있든, 혹은 Wi-Fi에 연결되어 있는 간에 전혀 신경 쓰지 않는다. 이것은 링크 계층에서 네트워크의 물리적인 연결 매체를 통해 패킷을 주고받는 작업을 담당해주기 때문에 가능한 일이다.

패킷 (Packet)
패킷은 영어로 "소포"를 뜻하는 낱말인데, 네트워크 분야에서는 네트워크를 통해 오고 가는 데이터를 일컬어 "패킷"이라고 부른다.
소포의 포장지는 실제로 보낼 "내용물"을 안전하게 보호하고 주소를 기입하기 위해 사용한다. 영어로 패킷이라는 것은 내용물 + 포장지를 일걷는 것이다. 네크워크를 통해 전송되는 데이터도 소포처럼 포장지를 필요로한다. 이 포장지로 데이터를 싸서 보호하고, 데이터가 어디에서 어디로 가는지를 기입해야 한다. 이렇게 포장지로 포장된 데이터를 일컬어 "패킷"이라고 부르는 것이다.

네트워크 패킷은 우체국 소포와는 달리 여러 겹의 포장지로 포장된다. 애플리케이션 계층, 전송 계층, 인터넷 계층, 링크 계층 모두 패킷의 포장지다. 데이터를 보낼 때는 애플리케이션 계층부터 시작해서 링크 계층까지 포장을 하고, 데이터를 받을 때는 링크 계층부터 시작해서 애플리케이션 계층까지 포장을 뜯어 내용물을 꺼낸다.


인터넷 계층

인터넷 계층은 패킷을 수신해야 할 상대의 주소를 지정하고, 나가는 패킷에 대해서는 적절한 크기로 분할하며 들어오는 패킷에 대해서는 재조립을 수행한다. 이 계층에서 사용되는 규약이 바로 인터넷 프로토콜(Internet Protocol), 즉 IP이다. TCP/IP에서의 IP가 바로 이것이다.

IP는 내보낸 패킷을 상대방이 잘 수령했는지에 대해 전혀 보장하지 않는다. 전송 중에 문제가 생겨 패킷이 손상되거나 분실된다 해도 전혀 책임을 지지 않는다. 더군다나 IP는 상대방이 패킷을 잘 수령했는지의 여부를 파악하는 기능 자체가 없다. 그저 전송 계층에서 내려온 패킷에 주소를 붙여 네트워크 계층으로 보내기만 할 뿐이다.
인터넷 계층이 주소 지정을 담당한다고 했는데 여기에 사용하는 주소 체계가 바로 IP 주소이다.


전송 계층

전송 계층(Transport Layer)에는 이름 그대로 패킷의 "운송"을 담당하는 프로토콜이 정의되어 있다. 그 중에서도 전송 제어 프로토콜(Transmission Control Protocol: TCP)은 송신측과 수신측 간의 연결성을 제공하며, 신뢰할 수 있는 패킷 전송 서비스를 제공한다. 여러 개의 패킷을 송신하는 경우 패킷 사이의 순서를 보장하며, 패킷이 유실되기라도 하면 재전송을 해주기까지 한다. TCP/IP 프로토콜에서 TCP가 바로 이 프로토콜을 가리키는 것이며, TCP는 IP가 제공하지 않는 연결성, 산뢰성을 제공한다. 웹 문서를 전달하는 기능을 하는 HTTP를 비롯한 수많은 응용 프로그램들이 바로 이 TCP와 IP프로토콜 위헤서 동작한다.

하지만 TCP는 IP가 제공하지 않는 연결성과 신뢰성을 제공하느라 성능에서 손실을 본다. 데이터가 큰 경우에는 여러 개의 패킷에 나눠 담아 순서대로 보내야 하지만, 데이터가 충분히 작은 경우에는 하나의 패킷에 담아 보내도 된다. 이런 상황에서는 TCP가 제공하는 패킷의 순서 보장성이 필요가 없다. 또한 받아도 그만, 안 받아도 그만인 패킷의 경우에는 굳이 재전송할 필요가 없다. 다시 말해, 충분히 작고 전송 신뢰성을 요구하지 않는 데이터의 경우에는 TCP의 장점은 곧 단점밖에 되지 않는다는 뜻이다.

이를 위한 데안으로 전송 계층에는 UDP(User Datagram Protocol) 라는 프로토콜이 정의되어 있다. 이 프로토콜은 연결성도, 신뢰성도 제공하지 않지만 성능이 TCP에 비해 상당히 우수하기 때문에 전송 제어를 직접 처리하는 애플리케이션 수준에서 채용되는 경우가 많다.


애플리케이션 계층

이 계층은 각 응용 프로그램 나름의 프로토콜들이 정의되는 곳이다. 웹 문서를 주고받기 위한 HTTP(Hyper Text Tranfer Protocol), 파일 교환을 위한 FTP(File Transfer Protocol), 네트워크 관리를 위한 SNMP(Simple Network Management Protocol) 등이 애플리케이션 계층에서 정의된 프로토콜의 대표적인 예다. 애플리케이션 계층의 프로토콜들은 전송 계층의 프로토콜 중 TCP에 기반할 수도 있고, UDP에 기반할 수도 있다. HTTP와 FTP는 상대적으로 큰 데이터를 처리해야 하기 때문에 연결성과 신뢰성을 제공하는 TCP에 기반하고 있고, SNMP는 단순한 정보만을 다루는 데다 패킷을 일부 유실한다 해도 임무에 지장을 주지 않기 때문에 비용이 저렴한 UDP에 기반한다.

HTTP나 FTP처럼 표준화된 프로토콜이 아니더라도, 이 계층에서는 개발자가 나름대로의 프로토콜을 정의해서 사용할 수 있다. 이를 위한 애플리케이션 계층이다. 예를 들어 개발자가 인스턴트 메신저를 개발하는 데 필요한 프로토콜을 정의하면 그 프로토콜은 이곳 애플리케이션 계층에 속한다.

TCP/IP Stack


TCP/IP의 주소 체계 : IP 주소

우편배달부가 우편물을 배달하기 위해서는 "주소"가 필요하다. 인터넷에서도 패킷을 배달하려면 이것을 어디에서 보냈는지, 또 어디로 보낼지에 대한 정보 즉 주소가 필요하다. 그리고 인터넷에서 사용하는 이 주소를 일컬어 "IP 주소(Address)"라고 부른다.

현재 IP 주소 체계의 전환이 진행되고 있다. 기존의 IP주소는 부호가 없는 8비트 정수 4개로 구성된다. 즉 IP주소는 32비트의 크기를 갖는다. 각 8비트 정수는 0~255까지의 값을 가질 수 있으며 이 정수 네 개를 점(.)으로 연결하는 255.255.255.255와 같은 주소를 구성한다. 이 주소 체계를 IPv4라고 하는데, 이 체계에서 만들어 낼 수 있는 총 주소의 수는 256 × 256 × 256 ×256 = 4,294,967,296개다.

얼핏 보면 상당히 큰 수 같지만 2010년 한 해에만 PC가 3억 5천만대, 스마트 폰은 3억대 정도가 전 세계적으로 출하된 것을 생각해보면 40억은 정말 턱없이 부족한 수임을 알 수 있다. 1년에 약 6억 5천대 정도의 기기들이 IP 주소를 하나씩 받아간다면 만 7년이 안돼서 주소가 고갈되고 말 것이다.

이 문제를 해결하기 위해 새로 등장한 주소 체계가 있다. 바로 IPv6이다. IPv6는 주소 길이가 128비트에 이르며, 이를 이용하여 만들 수 있는 주소의 수는 340,282,366,920,938,463,463,607,431,768,211,456개에 이른다. 사실상 무한에 가까운 수라고 할 수 있다. IPv4는 8비트의 수 4개를 .으로 연결했지만 IPv6는 16비트의 수 8개를 콜론(:)으로 연결한다.

IPv6 주소의 예

1FFE:FFFF:7654:FEEA:1357:BBAC:1234:4F2D

현재는 주소 고갈이 임박한 IPv4 체계에서 IPv6 체계로 전환이 전 세계적으로 진행되고 있다. 


포트 (Port)

큰 빌딩은 대개 출입구가 여러 개 있다. 이 출입구를 통해 자동차, 사람, 물건들이 드나든다. 컴퓨터도 네트워크 패킷이 드라들려면 "주소"뿐만 아니라 출입문이 필요하다. 이 출입문을 일컬어 포트(Port)라고 부른다.

Port는 항구 또는 출입구라는 뜻의 낱말인데, 컴퓨터 네트워크에서는 패킷이 드나드는 출입구를 뜻한다. 포트는 부호가 없는 16비틑 정수로 0~65535 사이의 값을 이용한다. 예를 들어 웹 브라우저에서 사용하는 HTTP는 80번 포트를 사용하고, FTP는 21번, Telnet은 23번을 사용한다.

HTTP나 FTP, Telnet과 같은 표준 프로토콜이 사용하고 있는 포트 번호는 전 세계적으로 합의된 값이다. 이러한 포트 번호를 일컬어 "잘 알려진 포트 번호(Well Known Port Number"라고 부르며, 다음은 그 예이다.

  • HTTP : 80
  • HTTPS : 443
  • FTP : 21
  • Telnet : 23
  • SMTP : 25
  • IRC : 194
  • IIOP : 535

"잘 알려진 포트 번호"는 1~1023 사이의 수를 사용하므로 개발자는 애플리케이션 프로토콜을 정의할 때는 이 범위를 피해서 정하는 것이 좋다.

포트와 보안
포트를 설명하면서 건물의 출입구와 같다고 하였다. 건물의 보안이 이러한 출입구를 얼마나 잘 단속하느냐에 달려있듯이, 네트워크 보안도 이런 포트 단속이 큰 비중을 차지한다. 아예 서비스를 안 하도록 모든 포트를 닫아놓으면 완벽하겠지만, 현실적으로 이것이 불가능하므로 꼭 필요한 포트만을 열어놓는 것이 최선이라 할 수 있다.

TCP/IP의 동작 과정

TCP/IP는 서버/클라이언트 방식으로 동작한다. 통신을 수행하는 양단 중 한 쪽에서는 다른 한쪽에게 서비스를 제공해야 한다는 것이다. 서버/클라이언트 방식으로 만들어진 TCP/IP 서비스의 예를 들어보자.
웹 서버와 웹 브라우저, FTP 서버와 FTP 클라이언트, SMTP 메일 서버와 메일 클라이언트 등 이들 모두가 TCP/IP 기반으로 만들어졌다.

TCP/IP 통신을 위해서는 먼저 서버가 서비스를 시작해야 한다. 클라이언트가 접속해올 수 있도록 준비를 하는 것이다. 서버가 준비되고 나면 클라이언트는 서버에 접속을 시도한다. 서버가 이 접속 시도를 수락하면 서버와 클라이언트는 동등한 입장에서 데이터를 주고 받을 수 있게 된다. 서버에서 데이터를 보내서 클라이언트가 받을 수도 있고, 클라이언트가 보내서 서버가 데이터를 받을 수도 있다. 둘 사이의 용무가 끝나고 나면 접속을 종료한다. 종료 요청은 클라이언트에서 할 수도 있고 서버에서 할 수도 있다. 

TCP/IP 서버 & 클라이언트 동작 과정

'Programming > Network' 카테고리의 다른 글

[Programming/Network] UDP를 이용한 Time Server & Client  (0) 2021.02.17
Comments