본문 바로가기
Study/Network

2주차_ARP Protocol / TCP Protocol

by cbqnk9 2020. 9. 21.

ARP프로토콜이란?

 Address Resolution Protocol, 주소 결정 프로토콜

네트워크 상에서 IP주소를 물리적 네트워크 주소로 대응 시키기 위해 사용되는 프로토콜

여기서 물리적 네트워크 주소란, 이더넷 또는 토큰링의 48비트 네트워크 카드 주소를 뜻함

논리적인 주소(ip)를 기반으로 물리적인 주소(mac)를 알아내는 기술

3계층 프로토콜이지만 ip하위에서 동작하는 프로토콜(2.5계층)

 

ARP종류

-기본 : mac주소가 없을 때

ARP : IP주소를 가지고 MAC주소를 알아낼 떄

RARP : MAC주소를 가지고 IP주소를 알아낼 때

Gratuitous ARP - IP충돌 감지/ 같은 동네로 인식해 보내지 못할 때 라우터 자체의 포트를 DMAC으로 지정해 라우터에 먼저 정보를 보내는 방식

Proxy ARP : 게이트웨이 주소가 없을 때 라우터가 본인의MAC주소를 전달할 때 사용하는 것

 

APR스푸핑 공격이란?

 중간자 공격 기법 중 하나로, 두 사람 사이에 끼어들어가서 데이터를 몰래 훔쳐보는 해킹 방법.

즉, LAN에서 ARP를 이용하여 상대방의 데이터 패킷을 중간에서 가로채는 기법이다.

이외에도 ARP를 이용하지만, 상대방의 인터넷을 차단시키기 위해 게이트웨이의 MAC주소를 존재하지 않는 MAC주로소 변경하는 공경도 존재함

 

ARP스푸핑 과정

출처 : https://security-nanglam.tistory.com/191

1. 공격자가 A에게 자시느이 MAC주소를 B의 MAC주소인 것처럼 속인다2. 공격자가 B에게 자신의 MAC주소를 A의 MAC주소인 것처럼 속인다.3. A는 B의 MAC주소가 공격자라 알고 있고, B도 A의 MAC주소가 공격자라 알고 있다.4. 공격자는 A에게 받은 메세지를 B에게 보내고, B에게 받은 메세지를 A에게 정상적으로 보내준다. -> 정상적인 통신과 동시에 공격자가 메세지를 읽을 수 있음

TCP프로토콜이란?

Transmission Control ProtocolOSI 7계층 중 4계층인 전송계층에 속하는 중요 프로토콜로, 네트워크 망에 연결된 프로그램 간 데이터를 순서대로, 에러없이 교환할 수 있게 하는 역할이다. 

 

특징

 

연결 지향 프로토콜신뢰할 수 있는 프로토콜

  • 데이터 송수진을 위해 클라이언트와 서버의 소켓이 연결되어 있어야 하며, 데이터가 유실되면 데이터 재전송을 요청함으로 신뢰성을 보장함
  • 흐름제어
  • 오류제어
  • 혼잡제어

4-way handshake란?

 TCP프로토콜은 클라이언트와 통신을 하기 전에 3way handshake를 통해 연결을 맺고, 연결을 종료할 때는 4way handshake를 통해 연결을 끊는다.

 

3 way handshake

https://victorydntmd.tistory.com/288

  1. 연결을 하기 전 클라이언트와 Closed 상태이고, 서버는 요청을 기다리고 있는 LISTEN 상태다.
  2. 클라이언트에서 서버에 연결을 요청하는 SYN 데이터를 전송한다.
  3. 서버가 SYN을 받으면 잘 받았다는 ACK 데이터와 함께 클라이언트 쪽에서도 포트를 열어 달라는 SYN데이터를 보낸다.
    • 그러면서 서버는 LISTEN 상태에서 요청을 받고 상대방의 응답을 기다리는 SYN_RCV로 상태가 변경 된다.
  4. 클라이언트에서 서버로부터 ACK + SYN 데이터를 받으면, 클라이언트는 포트를 열고 이에 대한 확인으로 서버에 ACK 데이터를 보낸다.
    • 그러면서 클라이언트는 ESTABLISHED 상태로 바꾼다.
  5. ACK 데이터를 받은 서버 역시 ESTBALISHED 상태로 변경되면서, 클라이언트와 서버는 연결이 된다.

이렇게 3-way handshake라는 과정을 통해 클라이언트와 서버는 신뢰성 있는 통신을 할 수 있게 된다.

 

4 way handshake

https://victorydntmd.tistory.com/288

  1. 최초에는 서로 통신 상태이기 때문에 양쪽이 ESTABLISHED 상태다.
  2. 클라이언트가 통신을 종료하자는 FIN 데이터를 보내고, 자신의 상태를 종료요청 후 ACK를 기다리고 있다는 의미로 FIN_WAIT_1 상태로 바꾼다.
  3. 서버는 알겠다는 의미로 클라이언트에 ACK 데이터를 보내면서 애플리케이션의 소켓을 닫는다.
    • 이 때 자원을 정리하는데 시간이 소요 되므로, 소켓을 닫는데 기다리고 있는 상태라는 의미에서 CLOSE_WAIT 상태로 바꾼다.
    • 그 동안 연결 종료를 요청한 클라이언트는 서버로부터 응답이 올 때까지 기다리고 있다는 FIN_WAIT_2 상태가 된다.
  4. 애플리케이션에서 소켓을 닫으면, 서버는 클라이언트로 FIN 데이터를 보낸다.
    • 그리고 자신은 클라이언트로부터 마지막 ACK를 기다리고 있는 LAST_ACK 상태가 된다.
  5. 클라이언트는 FIN 데이터를 받으면 TIME_WAIT 상태로 바꾸면서 서버에 ACK 데이터를 보낸다.
    • 클라이언트는 TIME_WATE 상태에서 일정 시간이 되면 CLOSED 상태가 된다.
  6. ACK 데이터를 받은 서버 역시 CLOSED 상태가 된다.

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

4주차_구글 클라우드 플랫폼 인스턴스 만들기  (0) 2020.11.10
01_NETWORK BASIC  (0) 2020.09.14