물리 계층
물리적인 통신을 담당한다. 데이터를 표현하는 신호는 아날로그(analogy) 또는 디지털(digital) 형태일 수 있다.
데이터링크 계층
데이터링크 계층에서의 통신은 노드-노드다. 인터넷에서 하나의 지점으로부터의 데이터 유닛은 다른 지점에 도달하기 위해 LAN과 WAN과 같은 많은 네트워크를 통해 전달될 필요가 있다.
이러한 LAN과 WAN은 라우터를 통해 연결된다.
- 서비스
· 프레임 짜기(Framing)
데이터링크 계층에서 제공하는 첫 번째 서비스는 프레임 짜기다. 각 노드에서 데이터링크 계층은 다음 노드에게 데이터그램을 전송하기 전에 네트워크 계층에서 전달받은 패킷인 데이터그램을 프레임에서 캡슐화해야 한다.
· 흐름 제어(Flow Control)
서로 다른 데이터링크 계층 프로토콜은 서로 다른 흐름 제어 전략을 사용한다. 또한 전송 계층에서 흐름 제어는 매우 중요하다.
· 오류 제어(Error Control)
전기 신호는 오류에 매우 취약하기 때문에 프레임 또한 오류에 취약하다. 첫 번째로 오류를 검출하는 것이 필요하다. 오류 검출 이후에 송신자 노드에서 이를 수정하거나 오류를 폐기하고 재전송을 송신 노드에게 요청해야만 한다.
· 혼잡 제어(Congestion Control)
일반적으로 혼잡 제어는 종대종으로 통신하기 때문에 네트워크 계층 또는 전송 계층의 문제로 여겨진다. 대부분의 데이터링크 계층 프로토콜은 직접적으로 혼잡을 완화하기 위해 혼잡 제어를 사용하지 않는다.
네트워크 계층
네트워크 계층에서의 주요 임무는 라우팅(routing)과 포워딩(forwarding)으로 둘은 서로 직접적인 연관이 있다.
라우팅은 패킷이 근원지에서 목적지까지 갈 수 있도록 경로를 설정해주는 것이다. 물리적인 네트워크는 네트워크(LAN, WAN)과 네트워크를 연결하는 라우터의 조합이다.
포워딩은 라우터상의 하나의 인터페이스에 패킷이 도착했을 때 라우터가 취하는 행동이다. 이런 행동을 취하기 위해 사용되는 라우터의 의사결정 테이블은 포워딩 테이블 혹은 라우팅 테이블로 불린다.
IPv4
- 클래스 기반의 주소 지정
인터넷이 시작될 당시 IPv4 주소는 소규모 및 대규모 네트워크를 지원하기 위해 한 가지가 아닌 세 가지의 고정된 접두사로 설계되었다.
전체 주소 공간은 5개의 클래스(A~E)로 구분된다. 이 기술을 클래스 기반 주소지정이라 한다.
클래스 | 설명 |
클래스 A | 첫 번째 비트가 0인 IP 주소를 클래스 A 주소라고 한다. 첫 바이트의 나머지 7비트가 네트워크 주소이고 하위 세 바이트는 호스트 주소이다. 큰 규모의 호스트를 갖는 기관에서 사용한다. |
클래스 B | 처음 두 비트 값이 10인 주소를 클래스 B 주소라고 한다. 첫바이트의 나머지 6비트와 두 번째 바이트가 네트워크 주소이고 마지막 두 바이트는 호스트 주소로 사용된다. |
클래스 C | 처음 세 비트 값이 110인 주소를 클래스 C 주소라고 한다. 세 번째 바이트까지가 네트워크 주소이고 마지막 한 바이트는 호스트 주소이다. 작은 규모의 네트워크에서 사용한다. |
클래스 D | 처음 네 비트의 값이 1110인 주소를 클래스 D 주소라고 한다. 클래스 D 주소는 네트워크 주소와 호스트 주소의 구분이 없이 전체 주소가 멀티캐스트용으로 사용된다. |
클래스 E | 처음 네 비트 값이 1111인 주소를 클래스 E 주소라고 하고 예약된 주소이다. |
다만 클래스 기반의 주소지정은 더 이상 사용되지 않는데 이는 주소 고갈 때문이다. 주소가 적절하게 분배되지 않기 때문에 인터넷에 연결하려는 기관이나 개인이 사용할 주소가 더 이상 남아 있지 않는 문제가 생겼다.
- 서브네팅과 슈퍼네팅
주소 고갈을 완화하기 위해 서브네팅과 슈퍼네팅의 두 가지 기술이 제안되었다.
서브넷 주소지정은 기관의 IP 네트워크 서브넷으로 분리하여 IP 주소 해석 방법에 하나의 계층을 추가하였다.
슈퍼네팅은 서브네팅과 반대로 네트워크를 합쳐 더 많은 수의 호스트를 사용할 수 있게 하는 방법이다.
- 클래스 없는 주소 지정(CIDR)
다만 위의 서브네팅과 슈퍼네팅은 실제적인 주소 고갈문제를 해결하지는 못했다. 주소 고갈 문제를 해결하기 위해서는 더 큰 주소 공간이 필요했다. 하지만 더 큰 주소 공간을 확보하기 위해서는 IP 패킷 형식의 변화가 필요한 IP 주소 길이의 증가가 필요했다.(IPv6)
단기적인 관점에서 해결하기 위해 클래스 없는 주소 지정 방식의 IPv4 주소를 사용한다.
CIDR은 기존의 클래스 A,B,C 네트워크 주소의 개념을 무시한다. 이로 인해 IPv4의 주소 공간을 효율적으로 할당할 수 있게 된다. ISP는 자신이 할당받은 주소 공간 중에서 client가 요구하는 양만큼만 잘라서 공급할 수 있게 되어 귀한 자원인 주소 공간의 낭비를 막을 수 있다.
CIDR은 주소 클래스가 없기 때문에 주소만으로 네트워크 ID의 크기를 파악할 수 없다. CIDR에서는 접두사(Net ID)의 길이를 주소 뒤의 슬래시 다음에 표기한다. 이를 CIDR 표기법 또는 슬래시 표기법이라고 부른다.
- VLSM(Variable Length Subnet Mask, 가변 길이 서브넷 마스킹)
VLSM은 서브네팅을 여러 번 반복하여 네트워크를 크기가 다른 여러 서브네트워크 계층으로 구분하는 기법이다. 이를 통해 기관은 네트워크의 실제 요구 사항에 맞게 서브넷의 크기를 조정할 수 있다.
VLSM을 사용하기 위해서는 VLSM을 지원하는 라우팅 프로토콜이 필수적이다.
- 특수 주소
IPv4 주소에는 특별한 목적으로 사용되는 this-host 주소, 제한된 브로드캐스트 주소, 루프백 주소, 사설 주소, 멀티캐스트 주소의 5가지 특수 주소가 있다.
· this-host 주소
0.0.0.0/32의 주소를 this-host 주소라고 한다. 이 주소는 호스트가 IP 데이터그램을 보내려고 하지만 근원지 주소인 자신의 주소를 모를 때 사용한다.
· 제한된 브로드캐스트 주소
255.255.255.255/32의 주소는 제한된 브로드캐스트 주소다. 이 주소는 호스트나 라우터가 네트워크상의 모든 장치로 데이터그램을 보낼 때 사용한다. 그러나 네트워크상의 라우터가 이런 패킷을 차단하기 때문에 네트워크 외부로 패킷을 보낼 수 없다.
· 루프백 주소
127.0.0.8/8의 블록은 루프백 주소(loopback address)이다. 이 블록 내의 주소를 가진 패킷은 호스트를 벗어나지 않고 호스트에 남게 된다. 블록 내의 주소는 소프트웨어의 테스트 목적으로 사용된다.
· 사설 주소
RFC 1918은 사설 주소에만 사용할 수 있는, 라우팅이 불가능한 특수 주소 집합을 정의했다. 이들 주소는 공중 인터넷에 존재하지 않는다.
10.0.0.0/8, 172.16.0.0/16 192.168.0.0/16이 사설 주소로 지정되어 있다.
네트워크 계층 프로토콜
IPv4는 비신뢰적이고 비연결형인 데이터그램 프로토콜로 최선형 전송 서비스다. 최선형 전송의 의미는 IPv4 패킷이 훼손되거나 손실, 순서에 맞지 않게 도착, 지연되어 도착 그리고 네트워크에 혼잡을 발생시킬 수 있다는 것이다.
만약 신뢰성이 중요하다면 IPv4는 TCP처럼 신뢰성있는 전송 계층 프로토콜과 함께 사용되어야 한다.
모든 TCP/UDP, ICMP, IGMP 데이터는 IP 데이터그램을 사용하여 전송된다.
- IPv4 데이터그램 형식
IP가 사용하는 패킷을 데이터그램이라 한다. 데이터그램은 가변 길이의 패킷으로 헤더와 페이로드로 이루어져 있다.
헤더는 20에서 60바이트의 길이이며 라우팅과 전송에 필수적인 정보를 가지고 있다. TCP/IP에서는 헤더를 4바이트 부분으로 표현하는 것이 일반적이다.
논리주소와 물리주소의 변환
- ARP(Address Resolution Protocol) 개요
호스트는 ARP 요청 메시지를 보낼 때 자신의 IP 주소, 자신의 물리주소 그리고 수신자측 IP 주소는 알고 있지만 수신자측 물리 주소는 모르기 때문에 물리 계층 브로드캐스트를 통해 모든 호스트에게 패킷을 전송한다.
ARP 요청 메시지를 수신한 호스트 또는 라우터는 수신 IP 주소와 자신의 IP 주소를 검사하여 자신에 대해 물리주소를 요구하는 경우라면 ARP 응답 메시지를 전송한다.
각 시스템은 ARP Cache가 있고 이 Cache에 이 정보를 보관해 둔다. (일정 시간 이후에는 삭제됨)
- ARP 메시지 종류
· ARP request
특정 IP 주소에 대한 물리 주소를 요구한다. 호스트는 ARP 요청 메시지를 보낼 때 수신자측 물리 주소는 모르기 때문에 브로드캐스트로 전송한다.
· ARP reply
물리 주소 정보를 알려준다.(unicast) ARP 요청 메시지를 수신한 호스트 또는 라우터는 자신의 물리 주소를 요구하는 경우 ARP 응답 메시지를 전송(호스트가 다른 네트워크에 있으면 라우터가 대신 전송)
- RARP(Reverse ARP)
ARP가 IP 주소에 대한 물리주소를 얻고자 하는 경우에 사용하는데 반해 RARP는 물리주소에 해당하는 IP 주소를 얻고자 할 때 사용된다. RARP는 디스크와 같은 저장장치가 없는 호스트에서 주로 사용되며 RARP 응답은 일반적으로 RARP 서버에서 생성한다.
자신의 MAC 정보를 담고 있는 RARP request 메시지를 만들어서 브로드캐스트한다. RARP 서버는 요청자의 IP 주소정보를 담은 RARP reply 메시지를 만들어 요청자의 MAC 주소로 unicast 방식으로 응답을 준다.
- GARP(Gratuitous ARP)
GARP는 별도의 프로토콜이 아니고 Sender IP와 Target IP가 동일한 ARP를 GARP라고 한다. 장비가 ARP 요청 브로드캐스트를 통해 다른 장비에게 네트워크에 있는 자신의 존재를 알리는 목적으로 사용되는 패킷이다. 이 패킷을 수신한 장비는 자신의 ARP Cache에 해당 정보가 있다면 이를 갱신한다.
GARP를 통해 IP 충돌을 감지할 수 있다. 만약 자신과 동일한 IP가 설정되어 있는 호스트가 있다면 해당 호스트로부터 ARP reply가 오기 때문에 충돌 여부를 확인할 수 있다. 일반적으로 호스트IP를 변경하거나 재부팅 시에 GARP 패킷이 생성된다.
GARP를 쓰는 주요 목적은 다른 장비들의 ARP Cache 정보 갱신에 있다. 하지만 GARP 메시지를 수신한 쪽은 상대방을 인증하지 않고 Cache 정보를 갱신하므로 악의적인 공격자에 의해 MAC 정보가 위·변조 될 수 있다.
ICMPv4
IP 프로토콜은 호스트와의 관리 질의를 위한 메커니즘이 없다. 그러나 호스트는 간혹 라우터나 다른 호스트가 동작하고 있는지 알 필요가 있다. 그리고 간혹 네트워크 관리자는 다른 호스트나 라우터로부터 정보를 획득할 필요가 있다.
인터넷 제어 메시지 프로토콜 버전4(ICMPv4)는 위의 두 가지 단점을 보완하기 위해서 설계되었다. ICMP는 IP프로토콜의 동반 프로토콜이다.
ICMPv4 메시지는 크게 오류보고 메시지와 질의 메시지로 나눌 수 있다. 오류보고 메시지는 라우터나 호스트가 IP 패킷을 처리하는 도중에 탐지하는 문제를 보고한다. 질의 메시지는 쌍으로 생성되는데 호스트나 네트워크 관리자가 라우터나 다른 호스트로부터 특정 정보를 획득하기 위해서 사용한다.
첫 번째 필드인 ICMP 유형은 메시지의 유형을 나타낸다. 코드 필드는 특정 메시지 유형의 이유를 지정한다. 마지막 공통 필드는 checksum 필드이다. 헤더의 나머지 부분은 각 메시지 별로 다르다.
IP가 신뢰성 없는 프로토콜이기 때문에 ICMP의 주된 임무중 하나는 IP 데이터그램의 프로세싱 동안 발생하는 오류를 단순 보고하는 것이다.
오류수정은 상위 계층 프로토콜에 맡긴다. 오류 메시지는 언제나 최초의 근원지에 보내진다. 왜냐하면 데이터그램으로부터 알 수 있는 경로에 대한 정보는 근원지와 목적지 IP 주소이기 때문이다.
ICMP 메시지의 중요한 점
· 어떤 ICMP 오류 메시지도 ICMP 오류 메시지를 운반하는 데이터그램의 응답으로 생성되지 않는다.
· 어떤 ICMP 오류 메시지도 처음 단편이 아닌 단편 데이터그램을 위해서 생성되지 않는다.
· 어떤 ICMP 오류 메시지도 멀티캐스트 주소, 특수 주소를 가진 데이터그램을 위해서 생성되지 않는다.
- 목적지 도달 불가(Destination Unreachable, Type 3)
가장 널리 사용되는 오류 메시지는 목적지 도달불가이다. 이 메시지는 왜 데이터그램이 최종 목적지에 도달하지 못했는지에 대한 오류메시지의 종류를 정의하기 위해 0부터 15까지 다른 코드를 사용한다.
- 근원지 억제(Source Quench, Type 4)
이 메시지는 송신자에게 네트워크에 충돌이 발생해서 데이터그램이 폐기했음을 알리는 메시지이다. 이 메시지를 전달받은 근원지는 데이터그램을 송신하는 과정을 천천히(또는 억제) 수행한다. ICMP는 이러한 메시지를 통해 IP프로토콜에 혼잡제어 메커니즘을 수행한다.
- 재지정 메시지(Redirection, Type 5)
재지정 메시지는 발신자가 메시지를 전송하기 위해 잘못된 라우터를 사용할 때 사용되는 메시지다.
라우터는 적절한 라우터에게 메시지를 전달하도록 재지정되지만, 라우터는 발신자에게 향후 디폴트 라우터로 변경해야만 한다고 알린다. 메시지 안에 디폴트 라우터의 IP 주소가 포함된다.
- 시간 경과 메시지(Time Exceeded, Type 11)
타임아웃이 발생하여 IP 패킷이 폐기되었음을 알리는 메시지이다.
· Code 0 : IP 패킷이 최종 목적지에 도달하기 전에 TTL 값이 0이 되어 해당 패킷이 폐기되었음을 알리는 메시지이다.
· Code 1 : IP 패킷 재조합 과정에서 타임아웃이 발생하여 해당 IP 데이터그램이 모두 폐기되었음을 알리는 메시지다. 일반적으로 IP 데이터그램의 일부 단편이 전송과정에서 손실될 경우 재조합에 실패하여 발생한다.
- 매개변수 문제(Parameter problem, Type 12)
매개변수 문제는 데이터그램의 헤더에 문제가 있거나(0) 어떤 옵션이 없거나 옵션의 의미를 알 수 없는 경우(1)에 전송될 수 있다.
IPv6
전세계적으로 인터넷의 급격한 보급과 무선 인터넷, 인터넷 정보 가전기기 등의 IP 주소에 대한 수요가 증가하면서 IPv4(32비트, 43억개)의 주소 체계로는 처리가 어렵다는 문제가 대두되었다.
IPv4 구조에 잠재하는 문제인 클래스 단위의 주소할당 방식은 쓰이지 않는 많은 IP 주소를 발생시켜 주소의 낭비를 초래하였다.
IPv6는 기존 IPv4의 32비트 주소길이를 4배 확장한 128비트 주소 길이를 사용한다. 보안문제, 라우팅 효율성 문제, QoS 보장, 무선 인터넷 지원과 같은 다양한 기능을 제공할 수 있다.
- 확장된 주소 공간
128비트 주소체계를 사용하는 IPv6는 IPv4의 주소부족 문제를 해결할 수 있을 만큼의 주소공간을 갖는다. IP 주소를 절약하기 위해 사용되는 NAT와 같은 주소 변환 기술도 불필요하다.
주소할당 방식은 기존의 비효율적인 클래스별 할당을 지양하고 unicast, anycast, multicast 주소 형태로 이루어진다.
- 새로운 헤더 포맷
IPv4에서 별로 사용되지 않았던 일부 헤더 필드를 삭제하고 확장 헤더를 도입하여 선택적인 사용을 가능하게 하였는데 이는 패킷을 중계하는 라우터의 부하를 줄이기 위한 것이다.
헤더를 고정 길이(4byte)로 변경하여 시스템에서 헤더 길이를 예측하기 용이해져 빠른 처리가 가능해졌다.
패킷 단편화 관련 필드가 삭제되고 패킷을 보내기 이전에 전송에 적합한 패킷크기를 알아내는 경로 MTU 탐색기능을 추가하였다.
데이터링크 계층에서 체크섬 계산이 행해지므로 checksum 필드를 삭제한다.
- 보안 기능
IPv4는 설계 시 보안에 대한 규정을 하지 않아 IPSec이라는 보안 관련 프로토콜을 별도로 설치해주어야 하는 부가적 기능을 필요로 하였다.
IPv6는 프로토콜 내에 보안관련 기능을 탑재할 수 있도록 설계되었다. 즉, 인증 절차, 데이터 무결성 보호, 메시지 발신지 확인기능을 제공한다. 또한 표준 확장헤더를 통해 네트워크 계층에서의 종단간 암호화를 제공하여 패킷에 대한 변조를 방지할 수 있다.
- IPv6 주소
· unicast address
유니캐스트 주소는 단일 인터페이스를 정의한다. 유니캐스트로 전송된 패킷은 특정한 컴퓨터에게만 전달된다.
· anycast address
애니캐스트 주소는 단일 주소를 공유하는 컴퓨터의 집합으로 정의된다. 애니캐스트 주소로 결정된 패킷은 가장 가까이 있는 애니캐스트 그룹의 구성원에게만 전송된다.
· multicast address
멀티캐스트 주소는 컴퓨터의 그룹을 정의한다. 애니캐스트는 패킷의 복사본이 그룹 중 하나의 컴퓨터에만 전송되지만 멀티캐스트에서는 그룹의 각 컴퓨터가 복사본을 수신한다.
IPv6에서는 제한된 버전에서도 브로드캐스트를 지원하지 않는다. IPv6는 브로드캐스트를 멀티캐스트의 특수한 경우로 처리한다.
IPv4와 IPv6의 변환
인터넷상의 모든 시스템이 IPv6로 변환하기 위해서는 많은 시간이 소요될 것이다. 변환 기간 동안 호스트는 IPv4와 IPv6 2개의 주소를 사용할 필요가 있다.
- 이중 스택
프로토콜이 변경되는 동안 모든 호스트가 이중 스택(dual stack)을 사용하는 것이다. 모든 인터넷이 IPv6를 사용하기 전까지 시스템은 IPv4와 IPv6를 동시에 지원해야 하는 것이다.
- 터널링(tunneling)
IPv6를 사용하는 두 호스트가 통신을 할 때 패킷이 IPv4를 사용하는 지역을 지나는 경우에 사용 가능한 방법이다. IPv4를 사용하는 지역을 지날 때 IPv6 패킷은 IPv4 패킷으로 캡슐화되고 벗어날 때 역캡슐화된다.
- 헤더 변환(header translation)
인터넷의 대부분이 IPv6로 변경되고 일부만 IPv4를 사용할 때 필요한 방법이다. 송신자는 IPv6를 사용하고 싶지만 수신자는 IPv4를 사용하는 환경을 가정하면 수신자가 IPv4 패킷을 수신해야 하기 때문에 터널링을 사용할 수 없다. 이런 경우에 헤더 변환을 통해 헤더의 형태를 완전히 변경해야 한다.
전송 계층
UDP(User Datagram Protocol)
사용자 데이터그램 프로토콜(UDP)은 비연결형이고 신뢰성이 없는 전송 프로토콜이다. UDP는 호스트 간 통신 대신에 프로세스 간 통신을 제공하는 것을 제외하고는 IP 서비스에 어떤 것도 추가하지 않는다.
UDP는 최소한의 오버헤드를 가진 매우 간단한 프로토콜이다. 만약 프로세스가 작은 메시지를 송신하기를 원하고 신뢰성에 관하여 그다지 신경을 쓰지 않는다면 UDP를 사용할 수 있다.
사용자 데이터그램(user datagram)이라고 부르는 UDP 패킷은 각각 2바이트인 4개의 필드로 만들어진 고정된 크기의 8바이트 헤더를 가지고 있다.
- UDP 서비스
· 프로세스 to 프로세스 통신
UDP는 IP 주소와 포트 번호와 결합인 소켓 주소를 이용하여 프로세스 간 통신을 제공한다.
· 비연결형 서비스(connectionless service)
UDP는 비연결형 서비스를 제공한다. 이것은 UDP에 의해 보내지는 각 사용자의 데이터그램은 독립된 데이터그램이라는 것을 의미한다. 동일한 근원지 프로세스로부터 들어와서 동일한 목적지 프로그램으로 간다고 할지라도 사용자 데이터그램은 서로 관계가 없다.
· 흐름 제어(flow control)
UDP는 매우 단순한 프로토콜이다. 흐름 제어가 없다. 따라서 들어오는 메시지로 인해 수신자 측에서 오버플로우가 발생할 수 있다.
· 오류 제어(error control)
Checksum을 제외하면 오류제어 메커니즘도 없다. 이는 송신자가 메시지가 손실되었는지 중복되었는지를 알 수 없음을 의미한다. 수신자가 checksum을 통해 오류를 검출하였을 때는 사용자 데이터그램은 아무런 동작없이 제거된다.
· 혼잡 제어
혼잡 제어를 제공하지 않는다.
· 다중화 및 역다중화
TCP/IP 프로토콜 그룹에서 동작하는 호스트에서 단지 1개의 UDP가 있으나 UDP 서비스를 사용하기 원하는 다수의 프로세스가 있을 수 있기 때문에 다중화 및 역다중화한다.
- UDP의 일반적인 응용
UDP는 흐름 및 오류 제어를 하지 않는 간단한 요청-응답 통신을 요구하는 프로세스에 적당하다. 이것은 FTP와 같이 대량 데이터를 전송할 필요가 있는 프로세스에는 보통 사용되지 않는다.
UDP는 내부 흐름 및 오류 제어 기법을 가진 프로세스에 적당하다. 예를 들어, 간단한 파일 전송 프로토콜(TFTP)은 흐름 및 오류 제어를 포함한다. 이러한 프로토콜은 쉽게 UDP를 사용할 수 있다.
UDP는 멀티캐스팅을 위한 전송 프로토콜이다. 멀티캐스팅 능력은 TCP 소프트웨어가 아닌 UDP 소프트웨어 내부에 들어 있다.
UDP는 SNMP와 같은 관리 프로토콜, RIP 같은 경로 갱신 프로토콜을 위해 사용된다.
TCP(Transmission Control Protocol)
TCP도 UDP처럼 포트 번호를 사용하여 프로세스 간 통신을 제공한다.
- 스트림 전송 서비스(Stream Delivery Service)
TCP에서 송신 프로세스는 바이트의 흐름으로 데이터를 전달하고 수신 프로세스도 바이트의 흐름으로 데이터를 수신하도록 만든다. TCP는 인터넷으로 데이터를 운반하는 가상의 튜브에 의해 2개의 프로세스가 연결되는 것처럼 보이는 환경을 만든다.
· 송신 및 수신 버퍼
송신 및 수신 프로세스가 똑같은 속도로 데이터를 만들고 처리할 수 없기 때문에 TCP는 저장을 위해서 버퍼가 필요하다.
송신 및 수신 두 가지 버퍼는 TCP 흐름 및 오류 제어 기법에 사용된다.
· 전이중 통신(full-duplex service)
TCP는 전이중 통신을 제공하기 때문에 데이터는 동시에 양방향으로 전달될 수 있다. 이를 위해 TCP는 송신 및 수신 버퍼를 가지고 있으며, 세그먼트는 양방향으로 이동한다.
· 다중화와 역다중화
UDP와 마찬가지로 TCP는 송신기에서 다중화를 그리고 수신기에서 역다중화한다. 그러나 TCP가 연결 지향 프로토콜이므로 각 프로세스 쌍을 위해 연결을 설정하는 것이 필요하다.
· 연결 지향 서비스
UDP와 달리 TCP는 연결 지향 프로토콜이다.(논리적 연결) 논리적인 연결통로를 통해 데이터를 주고받음으로써 데이터의 전송순서를 보장해준다. 이를 순서제어(Sequence Control)라고 한다.
· 신뢰성 있는 서비스
TCP는 신뢰성 있는 전송 프로토콜이다. TCP는 데이터의 안전하고 확실한 도착을 확인하기 위해 확인응답 기법을 사용한다. TCP는 실패한 전송을 탐지하고 재전송하는 것으로 신뢰성 있는 통신을 제공한다.
다만 이러한 기능을 제공하다보니 TCP는 많은 양의 자원을 사용하여 UDP보다 느리다. 또한 TCP는 unicast 통신만을 지원하므로 multicast나 broadcast 통신을 할 필요가 있다면 UDP를 사용해야 한다.
- 세그먼트
TCP에서는 패킷을 세그먼트(segment)라고 한다. 세그먼트는 20~60바이트의 헤더와 응용 프로그램으로부터 온 데이터로 구성된다.
① source port addr : 세그먼트를 송신하는 호스트에 있는 응용 프로그램의 포트 번호를 정의하는 16비트 필드이다.
② dest port addr : 세그먼트를 수신하는 호스트에 있는 응용 프로그램의 포트 번호를 정의하는 16비트 필드이다.
③ Sequence num : 세그먼트에 포함된 첫 번째 데이터 바이트에 할당된 번호를 정의한다.
④ ACK num : 세그먼트의 송신자가 다른 쪽으로부터 받기를 기대하는 바이트 번호를 정의한다. 세그먼트 수신자가 상대방으로부터 바이트 번호 x를 성공적으로 수신하였다면 x+1이 ACK 번호가 된다.
⑤ header length : TCP 헤더를 4바이트 단위의 개수로 나타낸 것이다.
⑥ Control : 6개의 다른 제어 비트 또는 플래그 비트를 정의한다.
플래그 | 의미 | 설명 |
URG | 긴급 | 1로 설정되면 세그먼트에 우선순위가 높은 데이터가 있다는 뜻이며 긴급 포인터 필드값을 활용한다. |
ACK | 승인 | 1로 설정되면 세그먼트가 승인을 포함한다는 뜻으로 승인번호 필드값은 세그먼트의 목적지가 다음에 보내야 할 순서 번호를 가리킨다. |
PSH | 밀어넣기 | 세그먼트의 송신 장비가 TCP 밀어넣기 기능을 사용했으므로 세그먼트를 받는 즉시 애플리케이션으로 송신하라는 뜻이다. |
RST | 초기화 | 송신 장비에 문제가 발생했으니 연결을 초기화해야 한다는 뜻이다. |
SYN | 동기화 | 순서 번호를 동기화하고 연결 수립을 요청하는 세그먼트이다. |
FIN | 종료 | 세그먼트의 송신 장비가 연결 종료를 요청한다는 뜻이다. |
⑦ Window size : 수신측에서 송신측에 보내는 Receiver window size로 수신버퍼의 여유 공간 크기를 의미한다. 송신측에서는 상대방의 여유 공간 크기를 통해서 흐름제어를 수행할 수 있다.
⑧ Checksum : TCP를 위한 체크섬 계산은 UDP와 동일한 절차를 따른다. UDP와 달리 필수사항이다.
⑨ Urgent pointer : 이 필드는 16비트로 URG Flag가 설정되었을 때만 유효하며 세그먼트가 긴급 데이터를 포함하고 있을 때 사용된다.
TCP 연결
TCP는 연결 지향 프로토콜로 근원지와 목적지 사이에 가상 경로를 설정한다. 한 메시지에 속하는 모든 세그먼트는 이 가상 경로를 통해서 전송된다. TCP는 연결 설정, 데이터 전송 및 연결 종료의 3단계를 필요로 한다.
- 3-way handshaking
1. 클라이언트는 SYN 플래그만 설정되어 있는 첫 번째 세그먼트인 SYN 세그먼트를 전송한다. 이 세그먼트는 순서번호의 동기화를 위한 것이다. SYN 세그먼트는 데이터를 운반할 수 없으나 순서번호를 1개 소비한다.
2. 서버는 2개의 플래그 비트가 설정된 두 번째 세그먼트인 SYN+ACK 세그먼트를 전송한다. SYN+ACK 세그먼트도 데이터를 운반할 수 없으며 순서번호를 1개 소비한다.
3. 클라이언트가 세 번째 세그먼트를 전송한다. 이것은 단지 ACK 세그먼트이다. ACK 플래그와 확인응답 번호 필드를 사용하여 두 번째 세그먼트를 수신한 것에 대한 확인 응답이다. 데이터를 운반하지 않는다면 ACK 세그먼트는 순서번호를 소비하지 않는다.
- SYN 플러딩 공격
TCP에 있어 연결 설정 절차는 SYN 플러딩 공격에 영향받기 쉽다. SYN flooding atk은 공격자가 많은 서비스 요청을 가진 시스템을 독점하여 시스템을 붕괴하고 모든 요청에 대하여 서비스를 거부하는 DoS 공격 형태에 속한다.
- 데이터 전송
연결이 설정된 후에 양방향으로 데이터 전송이 발생한다. 클라이언트와 서버 모두 데이터와 확인응답을 보낼 수 있다. 클라이언트에 의해 보내진 데이터 세그먼트에는 서버 TCP가 데이터가 수신되자마자 서버 프로세스에게 데이터를 전달하는 것을 알도록 PSH 플래그가 설정되어 있다.
한편, 서버로부터 온 세그먼트는 밀어넣기 플래그를 설정하지 않는다.
- 연결 종료
종료는 대개 클라이언트에 의해 시작되지만 데이터를 교환하는데 참여한 양쪽(Client/Server) 중 어느 한쪽에서 연결을 종료할 수 있다. 현재 구현된 대부분의 경우는 연결 종료를 위하여 3-way 핸드셰이킹과 half-close 선택 사항을 가진 4-way 핸드셰이킹의 두 가지 선택사항을 허용한다.
· three-way handshaking
1. 정상적인 상황에서 클라이언트 TCP는 클라이언트 프로세스로부터 종료 명령을 수신한 후에 FIN 플래그가 설정된 첫 번째 FIN 세그먼트를 전송한다.
2. FIN 세그먼트를 수신한 후에 서버 TCP는 상황에 대한 처리를 알리고 클라이언트로부터 온 FIN 세그먼트 수신에 대하여 확인하며, 동시에 다른 방향으로는 연결 종료를 알리기 위하여 두 번째 세그먼트(FIN+ACK)를 송신한다.
3. 클라이언트 TCP는 TCP 서버로부터 FIN 세그먼트 수신에 대한 확인으로 마지막 세그먼트인 ACK 세그먼트를 전송한다.
· half-close
TCP에서 데이터를 받고 있는 도중에도 한쪽 끝은 데이터 전송을 중단할 수 있다. 이것을 절반-폐쇄라고 한다. 어느 쪽도 half-close를 내보낼 수 있지만 보통은 클라이언트에서 시작한다.
클라이언트는 FIN 세그먼트를 전송함으로써 연결을 절반-폐쇄한다. 서버는 ACK 세그먼트를 송신함으로써 절반-폐쇄를 받아들인다. 클라이언트에서 서버로의 데이터 전송은 멈춘다. 그러나 서버는 여전히 데이터를 송신할 수 있다.
서버가 처리된 모든 데이터를 보냈을 때 ACK에 의해 확인 응답되는 FIN 세그먼트가 전송된다. 연결에 대한 절반-폐쇄 후에 데이터는 서버에서 클라이언트로 이동할 수 있고 확인응답은 클라이언트에서 서버로 이동할 수 있다. 클라이언트는 어떠한 데이터도 서버로 전송할 수 없다.
- 연결 재설정
한 종단의 TCP가 연결 요구를 거부할 수 있고, 현재 연결을 중지하거나 유휴 연결을 종료할 수 있다. 이러한 것은 RST 플래그를 가지고 수행된다.
응용 계층
- HTTP
Hypertext Transfer Protocol은 웹으로부터 웹페이지를 가져오기 위해 어떻게 클라이언트-서버 프로그램을 작성할지를 정의하는데 사용된다. 서버는 포트 80번을 사용하고 클라이언트는 임시 포트 번호를 사용한다. (HTTPS/443)
- FTP
File Transfer Protocol은 하나의 호스트에서 다른 호스트로 파일을 복사하기 위해 TCP/IP가 제공하는 표준 프로토콜이다.
- TELNET
TErminaL NETwork의 약어인 TELNET은 최초의 원격 로그인 프로토콜 중 하나이다. 로그인 이름과 암호를 요구함에도 모든 데이터를 암호화되지 않은 평문으로 전송하기에 해킹에 취약하다.
SSH가 등장하면서 TELNET의 사용은 감소되었다.
- DNS
현재 인터넷이 매우 거대해서 중앙 디렉터리 시스템이 모든 매핑을 보유할 수 없다. 또, 중앙 집중형 구조 상 중앙 컴퓨터가 고장나는 경우 전체 통신망이 붕괴된다.
현재는 이 많은 정보를 작게 나누어서 전세계의 서로 다른 컴퓨터에 저장하는 방법을 사용한다. 각 호스트는 매핑이 필요할 경우 이 정보를 가지고 있는 가장 가까운 컴퓨터와 통신하게 된다. Domain Name System이 이 방법을 사용한다.
'정보보안기사' 카테고리의 다른 글
네트워크 장비의 이해 (0) | 2023.04.11 |
---|---|
라우팅 (0) | 2023.04.09 |
네트워크 개요 (0) | 2023.04.04 |
각종 시스템 보안위협 및 대응책 - 2 (0) | 2023.03.31 |
각종 시스템 보안위협 및 대응책 (0) | 2023.03.30 |