외로운 Nova의 작업실

정보보안기사 필기 - 20(TCP/IP) 본문

Certification/정보보안기사

정보보안기사 필기 - 20(TCP/IP)

Nova_ 2022. 11. 29. 14:20

- 물리 계층

물리 계층에서의 통신은 호스트-라우터, 라우터-라우터, 라우터-호스트만을 보는데, 교환기도 물리적 통신에 포함되어 있습니다.

 

- 데이터링크 계층

데이터링크 계층의 통신은 노드-노드입니다. 노드는 보통 라우터를 말합니다. 

 

<데이터링크 계층의 서비스>

프레임짜기 : 데이터그램을 전송하기전에 네트워크 계층에서 전달받은 패킷인 데이터그램을 프레임에서 캡슐화해야합니다.

흐름 제어 : 서로 다른 데이터링크 계층의 프로토콜은 서로 다른 흐름제어 전략을 사용합니다. 

오류 제어 : 전기 신호는 오류에 취약하기 때문에 프레임 또한 오류에 취약합니다. 따라서 오류를 검출하는 과정이 필요합니다. 오류 검출 이후에는 송신자 노드에서 이를 수정하거나 오류를 패기하고, 재전송을 송신 노드에게 요청해야만 합니다.

 

- 네트워크 계층

네트워크 계층의 임무는 라우팅과 포워딩입니다.

포워딩 : 패킷이 도착했을때 라우터가 취하는 행동으로 패킷을 버릴건지, 경로를 알려줄건지 결정합니다.

라우팅 : 근원지에서 목적지까지 갈 수 있도록 경로를 선택해주는 것입니다.

 

<IPv4 클래스기반의 주소 지정>

전체 주소 공간은 5개의 클래스로 구분되며 이 기술을 클래스 기반 주소지정이라고합니다.

A클래스 : 0~127

B클래스 : 128~191

C클래스 : 192~223

D클래스 : 224~239, 처음 네비트값이 1110인 주소로 멀티캐스트용으로 사용됩니다.

E클래스 : 240~255, 처음 네비트값이 1111인 주소로 추후 사용을 위해 예약된 주소입니다.

 

<IPv4의 주소고갈>

클래스 기반의 주소는 적절히 분배되지 않았기 때문에 주소고갈문제가 발생하였습니다. 이에따라 서브네팅과 슈퍼네팅의 두가지 기술이 제안되었습니다. 하지만 실질적으로 주소 고갈 문제를 해결하지 못했습니다. 또한, 장기적인 관점에서는 더 큰 주소공간이 필요했고 단기적으로는 일단 먼저 주소사용이 필요했습니다.

 

<CIDR, 클래스 없는 주소 지정>

일단 먼저 주소들이 급하기때문에 단기적인 관점에서 해결을 위해 클래스 권한을 삭제하였습니다. 이에따라 ISP는 자신이 할당 받은 주소 공간중 클라이언트가 요구하는 양만큼 잘라서 공급할 수 있게되어 주소공간의 낭비를 줄일 수 있게되었습니다. 하지만 클래스가 없다면 어디서부터 어디까지 네트워크부분인지 알수없기때문에 ip마지막에 슬래스를 붙이고 슬래시다음에 어디까지 네트워크인지 표시하기 시작했습니다.

 

<VLSM>

VLSM(variable length subnet mask, 가변 길이 서브넷 마스킹)은 클래스기반 주소지정에 있었던 서브넷 기능을 본따 만든 것으로 CIDR에서 서브넷 기능을 하여 좀 더 IP가 효율적으로 사용되게 하였습니다.

 

<특수 주소>

디스-호스트 주소 : 0.0.0.0/32

제한된 브로드캐스트 주소 : 255.255.255.255/32

루프백 주소: 127.0.0.0/8

사설주소 : A클래스는 10.0.0.0/~10.255.255.255 , B클래스는 172.16.0.0~172.255.255.255, C클래스는 192.168.0.0~192.168.255.255

 

<네트워크 계층 프로토콜 - IP>
IP(internet protocol)은 비신뢰적이고 비연결형인 데이터그램 프로토콜로 최선형 전송 서비스입니다. 여기서 최선형 전송의 의미는 패킷이 손실되거나 순서가 맞지않고 지연될 수 있다는 것을 뜻합니다. 만약 신뢰성이 중요하다면 전송 계층의 TCP프로토콜과 함께 사용되어야합니다. 또한 IP에서 사용하는 패킷을 데이터그램이라고하며 헤더와 데이터(페이로드)로 이루어져있습니다. 헤더는 20에서60바이트 길이지만 보통 4바이트를 사용합니다.

 

<ARP>

ARP(address resolution protocol)은 수신자 측의 ip는 알고 있지만 수신자측의 물리주소는 모르기때문에 물리 계층 브로드캐스트를 통해 모든 호스트들에게 패킷을 전송합니다. ARP요청 메시지를 수신한 호스트는 만약 자신의 물리주소를 요구한 경우라면 ARP 응답 메시지를 유니캐스트로 전송합니다. 또한 각 시스템은 ARP cache가 있어 cache에 각 ip의 mac주소를 저장해 둡니다. 물론 일정 시간 경과후에는 삭제됩니다.

 

<RARP>

RAPR(reverse address resoluion protocol)은 ARP의 역연산으로 물리주소만 알고있을때 ip주소를 얻는 방법입니다. 디스크와 같은 저장장치가 없는 호스트에서 주로사용되며 일반적으로 RARP서버에서 RARP 응답을 생성합니다. 

 

<GARP>

GARP(Gratuitous ARP)는 불필요한 ARP로 sender IP와 target IP가 동일한 ARP요청입니다. 이는 브로드캐스트를 통해 다른장비에게 네트워크에 있는 자신의 존재를 알리는 목적으로 사용되며 수신한 장비는 ARP Cache에 해당 정보가 있다면 갱신합니다. 자신의 MAC정보를 동일 네트워크사으이 다른 장비들에게 알려 ARP Cache를 갱신하도록 하는것이 목적입니다. 또한 IP 충돌 감지도할 수 있는데 만약, 동일한 IP를 가진 호스트가 있다면 호스트로부터 ARP 응답이 오기때문에 감지가 가능합니다. 일반적으로 호스트 IP를 변경하거나 재부팅시에 GARP패킷이 생성됩니다.

 

<ICMPv4>

ICMPv4(internet control message protocol version 4)는 호스트가 간혹 라우터나 다른 호스트가 동작하고 있는지 확인할 수 있게하고 네트워크 관리자가 다른 호스트나 라우터로부터 정보를 획득할 수 있게해줍니다. ICMP의 메시지는 오류보고 메시지와 질의 메시지로 나눌 수 있습니다. IP프로토콜과 같이 사용되는 동반 프로토콜입니다.

 

<오류보고 메시지>

IP가 신뢰성없는 프로토콜이기때문에 ICMP의 주된 임무중 하나는 IP 데이터그램의 프로세싱 동안 발생하는 오류를 보고하는 것입니다. 단지 보고만 합니다. 오류수정의 경우 상위계층프로토콜에게 맡깁니다. 다음은 ICMP 오류메시지의 중요한 점입니다.

  • ICMP 오류메시지는 ICMP 오류메시지를 운반하는 데이터그램의 응답으로 절대 생성되지않습니다.
  • ICMP 오류메시지는 처음 단편이 아닌 단편 데이터그램의 오류로 절대 생성되지 않습니다.
  • ICMP 오류메시지는 멀티캐스트 주소를 가진 데이터그램의 오류로 절대 생성되지 않습니다.
  • ICMP 오류메시지는 특수한 주소(127.0.0.0)를 가진 데이터그램을 위해서 생성되지 않습니다.

아래는 오류메시지의 종류입니다.

  • 목적지 도달불가 메시지(destination unreachable) : type3의 메시지로 목적지에 도달하지 못한 이유에따라 0~15까지 다른 코드를 사용합니다.
  • 근원지 억제 메시지(source quench) : type4의 메시지로 네트워크에서 충돌이 발생하여 데이터그램이 폐기되었음을 알리는 메시지입니다. 이메시지를 받으면 송신자는 송신하는 과정을 천천히 수행합니다.
  • 재지정 메시지(redirection) : type5의 메시지로 발신자가 잘못된 라우터를 사용할때 발생하는 오류메시지 입니다. 향후 바꿔야하는 디폴트 라우터 ip주소를 오류메시지에 포함시켜 변경해야함을 알립니다.
  • 시간경과 메시지(time exceeded) : type 11의 메시지로 code 0인경우에는 도착지에 도달하기전 TTL값이 0이 되어 패킷이 폐기되었음을 알립니다. code 1인경우에는 패킷 재조합 과정에서 타임아웃이 발생하여 폐기되었음을 알립니다.
  • 매개변수 문제(parameter problem) : type 12의 메시지로 헤더에 문제가 있거나(코드 0) 옵션이 없거나 옵션의 의미를 알 수 없는경우(코드 1) 발생합니다.

 

<질의 메시지>

인터넷에서 호스트나 라우터가 활성화되었는지 알아봅니다. 핑(ping)과 트레이스루트(traceroute)와 같은 디버깅 도구에서 에코 요청과 에코 응답 메시지쌍을 확인 할 수 있습니다.

 

<IPv6>

IPv4의 주소고갈 문제로 장기적인 관점에서 해결을 위해 IPv6를 만들었습니다. 주소길이를 32비트에서 128비트로 확장하였고 보안문제(IPsec), 라우팅 효율성 문제, QOS(quality if service) 보장, 무선인터넷 지원과 같은 다양한 기능을 제공합니다. 주소할당 방식은 클래스별 할당을 지양하고 유니캐스트, 애니캐스트, 멀티캐스트 주소형태로 이루어집니다. 또한 헤더를 고정길이로 변경하고 패킷 단편화 관련 필드가 삭제됬으며 체크섬 필드도 삭제되었습니다.

 

<IPv6 - QOS>

응용프로그램이 QOS를 요구하는 경우 트래픽을 실시간 트래픽과 비실시간 트래픽으로 구분하는 것이 필요한데 IPv6는 헤더의 플로우 레이블 필드를 이용해 효과적으로 트래픽을 분류할 수 있습니다.

 

<IPv6 - 보안기능>

IPv6에서는 IPsec이라는 보안 관련 프로토콜을 별도로 설치해줘야합니다. 이를 통해 인증 절차, 데이터 무결성 보호, 메시지 발신지 확인 기능을 제공하며 표준 확장헤더르 통해 종단간 암호화까지 제공하여 패켓에대한 변조를 방지할 수 있습니다.

 

<IPv6 주소>

IPv6에는 IPv4의 브로드캐스트 주소가없습니다. 아래는 IPv6에 있는 주소 체계입니다.

  • 유니캐스트 주소 : 유니캐스트 주소는 단일 인터페이스를 정의하며 유니캐스트로 전송된 패킷은 특정한 컴퓨터에게만 전달됩니다.
  • 애니캐스트 주소 : 애니캐스트는 애니캐스트 그룹의 구성원에게만 전송됩니다.(가장 짧은 경로를 가지는)
  • 멀티캐스트 주소 : 멀티 캐스트는 패킷의 복사본이 그룹의 각 컴퓨터 모두가 수신합니다.

<IPv6에서 IPv4로 변환>

인터넷상의 모든 IP를 IPv4에서 IPv6로 한번에 변환하는 것은 어려워서 둘을 혼용하여 쓰기로 했습니다. 이를 가능하게 하는 기술은 이중스택, 터널링, 헤더 변환이 있습니다.

  • 이중 스택: 모든 호스트들이 IPv4 스택과 IPv6 스택을 같이 이용하여 동시에 원하는 방법입니다.
  • 터널링(tunnerling) : IPv6가 IPv4를 사용하는 지역을 지나는 경우에 IPv6 패킷은 IPv4 패킷으로 캡슐화되고 이 지역을 벗어날때 역캡슐화 되는 기술입니다. 
  • 헤더 변환 : IPv6를 사용하는 호스트가 IPv4를 사용하는 호스트에게 패킷을 보낼때 헤더 변환을 통해 Ipv6의 헤더를 IPv4의 헤더에 맞춰 변환시키는 기술입니다.

 

- 전송 계층

<UDP>

UDP(user datagram protocol)는 비연결형이고 신뢰성이 없는 전송 프로토콜입니다. 프로세스가 작은 메시지를 송신하기 원하고 신뢰성에 관하여 그다지 신경쓰지않는다면 UDP가 좋습니다. UDP 패킷은 각각2 바이트인 4개의 필드로 만들어진 고정된 크기의 8바이트 헤더를 가지고 있습니다.

 

<UDP 서비스>

  • 프로세스-프로세스 통신 : UDP는 소켓주소를 이용하여 프로세스간의 통신을 제공합니다.
  • 비연결형 서비스 : UDP에 의해 보내지는 각 사용자 데이터그램은 독립된 데이터그램이며 서로 관계가없습니다.
  • 비흐름 제어 : 흐름제어를 사용하려면 스스로 제공해야합니다.
  • 비오류 제어 : 오류제어를 사용하려면 스스로 제공해야합니다.
  • 비혼잡 제어 : UDP는 패킷이 매우작고 산발적이여서 네트워크에 혼잡이 생기지 않아 혼잡 제어 기능이 없습니다.
  • 다중화와 역다중화 : 다중화와 역다중화 서비스를 제공합니다.

 

<UDP 응용>

  • 흐름 및 오류제어를 하지않는 간단한 요청-응답 프로세스에 적당합니다.
  • 만약 내부 흐름 및 오류 제어 기법이 필요하다면 TFTP와 같이 사용합니다.
  • UDP는 멀티캐스팅을 위한 전송 프로토콜이며 TCP는 멀티캐스트 기능이 없습니다.
  • SNMP와 같은 관리 프로토콜과 함께 사용됩니다.

 

<TCP>

TCP(transmission control protocol)은 연결형이고 신뢰성이 있는 전송 프로토콜입니다.

 

<TCP 서비스>

  • 프로세스간의 통신 : TCP는 UDP처럼 프로세스간 통신을 지원합니다.
  • 스트림 전송 서비스 : TCP에서는 송신 프로세스는 바이트 흐름으로 데이터를 전달하고 수신 프로세스도 바이트의 흐름으로 데이터를 수신하게 만듭니다. 가상의 통로인 튜브에 의해 2개의 프로세스가 연결되는 것처럼 보이는 환경을 만듭니다.
  • 송신 및 수신 버퍼 : 송,수신 프로세스가 똑같은 속도로 데이터를 만들고 처리할 수 없기때문에 TCP는 퍼버가 필요합니다. 이를위해 각 송수신 프로세스는 버퍼를 한개씩두며 TCP의 흐름  및 오류제어 기법에 사용됩니다.
  • 전이중 통신 : 데이터는 양방향으로 전달될 수 있습니다.
  • 다중화와 역다중화 : 다중화와 역다중화를 지원합니다.
  • 연결-지향 서비스 : TCP는 논리적인 연결을 통해 데이터를 주고받음으로써 데이터의 전송순서를 보장해줍니다. 이를 순서제어라고 합니다.

<세그먼트>

TCP에서는 패킷을 세그먼트라고 합니다. 헤더는 20~60바이트입니다. 아래는 세그먼트 형식관련 내용입니다.

  • source port address : 세그먼트를 송신하는 호스트에 있는 응용 프로그램의 포트번호입니다.
  • destination port address : 세그먼트를 수신하는 호스트에 있는 응용프로그램의 포트번호 입니다.
  • sequence number : 순서번호라고하며 세그먼트에 포함된 첫번째 데이터 바이트에 할당된 번호입니다.
  • acknowledgment number : 확인응답 번호라고하며 송신자가 다른쪽으로 부터 받기를 기대하는 바이트 번호입니다. 상대방으로 부터 바이트 번호 x를 성공적으로 수신하였다면 x+1이 확인 응답 번호가 됩니다.
  • HLEN : 헤더 길이를 4바이트 단위의 개수로 나타낸것이빈다.
  • URG : 1로 설정되면 세그먼트에 우선순위가 높은 데이터가 있다는 뜻입니다.
  • ACK : 1로 설정되면 세그먼트가 승인을 포함한다는 뜻으로 승인 번호 필드값은 세그먼트의 목적지가 다음에 보내야할 순서번호를 가리킵니다.
  • PSH : 세그먼트를 받는 즉시 애플리케이션으로 송신하라는 뜻입니다.
  • RST : 송신장비에 문제가 발생했으니 연결을 초기화해야한다는 뜻입니다.
  • SYN : 순서번호를 동기화하고 연결수립을 요청하는 세그먼트입니다.
  • FIN : 송신 장비가 연결 종료를 요청한다는 것입니다.
  • window size: 수신측의 수신 버퍼의 여유공간 크기를 의미합니다. 이를 통해 흐름제어를 수행합니다.
  • checksum : 검사합이라고하며, 오류 비트를 검출합니다. UDP는 선택사항이지만 TCP는 필수사항입니다.
  • urgent pointer : URG 플래그가 설정되었을때만 유효하며 긴급 데이터가 포함됩니다.

<TCP - 연결설정>

TCP에서 연결 설정은 세방향 핸드셰이크(three-way handshaking)이라고 불립니다.

이러한 연결 설정의 통신은 SYN 플러딩 공격을 가능하게합니다. 즉 d-dos 공격을 가능하게합니다.

1.클라이언트 : 연결가능해?(S)

2.서버 : 연결 수락(A)할게 연결가능해?(S)

3. 클라이언트 : 연결 수락할게(A)

 

<TCP - 데이터 전송>

1. 클라이언트 : 연결 수락(A)상태이고 데이터를8001번부터 9000번까지 push해줘

2. 클라이언트 : 연결 수락(A)상태이고 데이터를9001번부터 10000번까지 push해줘

3. 서버 : 연결 수락상태(A)이고 데이터 10000번까지 받았어

4. 클라이언트 : 어 그거 맞아

 

<TCP - 연결 종료>

종료는 어느 한쪽에서 연결을 종료할 수 있습니다. 세-방향 핸드셰이킹과 네-방향 핸드셰이킹중 한가지를 선택하여 연결을 종료합니다.

 

<연결 종료 - 세방향 핸드셰이킹>

1. 클라이언트 : 연결 수락(A)인데 이제 연결 종료(F)할게

2. 서버 : 나도 연결 수락(A)인데 나도 이제 연결 종료(F)할게

3. 클라이언트 : 종료 수락(A) 할게

 

<연결 종료 - 네방향 핸드셰이킹>

TCP에서는 데이터를 받고 있는 도중에도 한쪽 끝은 데이터 전송을 중단할 수 있습니다. 이를 절반 폐쇄라고합니다. 이를 위해 4방향 핸드 셰이킹을 지원합니다. 절반 폐쇄후에는 서버는 여전히 데이터를 송신할 수 있지만 클라이언트는 더이상 어떠한 데이터도 서버로 전송할 수 없는 상태가 됩니다. 즉, 클라이언트 송신 - 서버 수신 경로는 폐쇄됩니다.

1. 클라이언트 : 연결 수락(A)상태 인데 이제 연결 종료(F)할게

2. 서버 : 그래 연결 종료 수락(A)할게 근데 나 지금 보내고 있는게 있어서 이거 다보내고 종료할게

3. 서버 : 나 연결 수락(A) 상태 인데 이제 연결 종료(F)할게

4. 클라이언트 : 그래 연결 종료 수락(A)할게

 

- 응용 계층

<주요 프로토콜>

HTTP : 웹페이지를 가져오기 위해 어떻게 클라이언트-서버 프로그램을 작성할지를 정의하는데 사용됩니다.

FTP : 파일 전송 프로토콜로 하나의 호스트에서 다른 호스트로 파일을 복사하기 위한 프로토콜입니다. 디렉터리 이름 문제 구조 문제를 해결해줍니다.

TELNET : 원격 로그인 프로토콜이지만 해킹에 취약하여 SSH가 대신 사용됩니다.

DNS : 도메인 네임 시스템입니다.

 

Comments