[네트워크] ICMP, ARP, TCP/UDP 프로토콜

까막이의 몸부림·2024년 1월 30일
0

네트워크

목록 보기
3/3
post-custom-banner

ICMP (Internet Control Message Protocol)

“IP에서의 오류 보고 및 제어를 목적으로 하는 프로토콜”

네트워크 계층의 IP 프로토콜은 정상적으로 통신이 이루어졌는지를 확인하지 않기에 신뢰할 수 있는 전달을 보장하지 않음.

그래서 IP는 별개로 ICMP를 이용하여 진단과 경고 메시지를 보내는 기능을 제공.

-> 진단 기능 : End to End 통신이 가능한지를 확인. ICMP 헤더에 echo request/reponse 메시지를 기술하여 통신.
-> 도달 불능 메시지 전달 : 데이터가 목적지에 도달하지 못한 이유를 통지. 수신된 패킷을 폐기한 통신기기는 IP 패킷의 출발지로 해당 메시지를 전송.
  • 명령어 ping, traceroute가 ICMP를 사용.

ICMP 구조

IP 데이터 부분에 ICMP 메시지를 포함하여 패킷을 전송.

Type : ICMP가 제공하는 서비스의 종류.
Code : Type을 세분화하여 나타낸 식별 정보.
Checksum : 자기 자신에 대한 무결성 검증. (오류 검출)

ICMP 메시지 종류

ICMP 메시지 종류

Type 0, 8 : 특정 호스트에서 목적지 시스템까지 도달이 가능한지, 현재 운영 중인지 검사. (ping) ping을 사용하면 Type 8인 Echo Requst 패킷을 목적지로 전송. 목적지 시스템은 Type 0인 Echo Reply 메시지를 반환.

Type 5 : 더 빠른 경로가 있다는 것을 알림. 더 나은 게이트웨이를 알려줌.

Type 11 : TTL이 0이 된 경우, Fragment 중 하나가 손실되어서 다시 조합할 수 없는 경우.

Type 3 : IP 패킷이 목적지에 도달할 수 없게 되었을 때, 경로 상의 마지막 라우터는 출발지 시스템에게 도달할 수 없었다는 Type 3 메시지를 전송. 해당 메시지는 세분화된 Code를 통해 목적지에 도달할 수 없는 이유를 제공.

Type 3인 Destination Unreachable 메시지의 Code.

ARP (Address Resolution Protocol)

“물리적 주소인 MAC 주소와 논리적 주소인 IP 주소를 매칭하는 프로토콜”

목적지 호스트에 데이터를 전송하기 위해서는 목적지 호스트의 MAC 주소가 필요. 따라서 목적지 IP를 알고있지만 MAC 주소를 모를 때 ARP를 이용하여 IP 주소를 MAC 주소를 알아와야 함.

작동 과정

  1. 출발지 시스템에서 ARP Cache Table에 목적지 MAC 주소가 존재하는지 확인.
    2. ARP 테이블에 목적지 MAC 주소가 없다면 ARP Request 패킷을 브로드캐스트. 3. 패킷을 받은 목적지에서 자신의 MAC 주소를 ARP Reply 패킷으로 반환.
    4. ARP Reply 패킷을 받은 출발지 시스템은 ARP Cache 테이블에 해당 정보를 기록.

ARP Cache Table

IP 주소와 MAC 주소를 1:1로 매칭시킨 정보를 정리해둔 테이블.

arp –a 명령어를 이용하여 ARP Cache Table 확인 가능.

ARP 패킷 구조

Hardware Type : ARP가 수행되고 있는 네트워크 유형. Ex) 이더넷 -> 1
Protocol Type : 상위 프로토콜. Ex) IP -> 0x0800
Hardware Length : 물리적 주소의 길이를 바이트 단위로 정의.
Protocol Length : 논리적 주소의 길이를 바이트 단위로 정의.
Operation : 패킷의 유형. Ex) ARP Request -> 1 ARP Reply -> 2
Sender Hardware Address : 송신지의 물리적 주소
Sender IP Address : 송신지의 IP 주소
Target Hardware Address : 목적지의 물리적 주소
Target IP Address : 목적지의 IP 주소

TCP/UDP

TCP (Transmission Control Protocol)

“3-way handshake를 이용하여 연결 지향적이고 신뢰성 있는 통신을 제공”

대부분의 인터넷 응용 분야들은 신뢰성과 순차적인 전달을 필요로 함.
TCP 프로토콜은 클라이언트와 서버가 데이터를 교환하기 전에 TCP 연결을 확립함으로써 종단 간에 연결 지향적이고 신뢰성 있는 전송 서비스를 제공.
-> 신뢰성 있는 연결을 위해 3-way handshake를 통해 연결.
-> 연결 종료 시, 4-way handshake.

  • UDP보다 속도가 느림.

흐름 제어 : 송신과 수신 측의 데이터 처리 속도의 차이를 해결. Stop and wait, Sliding window.
혼잡 제어 : 네트워크의 혼잡을 피하기 위해 송신 측에서 보내는 데이터의 전송 속도를 조절. AIMD, Slow Start.
오류 제어 : 전송 도중에 오류가 발생했는지 검출. 체크섬 필드.
재전송 제어 : 중복 ACK가 들어오거나 타임아웃이 되었을 때 패킷 유실을 감지하고 재전송.

TCP 헤더 구조

Source Port : 발신지 포트 번호 - Destination Port : 목적지 포트 번호
Sequence Number : 분실/지연이 발생해도 데이터를 순서대로 재배열하기 위한 순서 번호.
Acknowledgement Number : 수신 받고자 하는 다음 바이트의 순서 번호.
Header Length (Offset) : 헤더의 길이를 32bit 단위로 나타냄.
Reserved : 차후 사용을 위해 남겨둔 예비 필드.
Flags : 6 종류의 제어 비트 플래그.
Window : 윈도우 버퍼 크기. 수신 가능한 최대 데이터 크기.
Checksum : 세그먼트에 오류가 발생했는지 여부를 검사.
Urgent Pointer : URG Flag가 설정된 경우, 긴급 데이터의 순서번호. 해당하는 데이터 먼저 처리.

TCP 헤더 Flag

URG : Urgent Pointer 필드의 값이 유효함을 나타냄.
ACK : Acknowledgement 필드의 값이 유효함을 나타냄. 클라이언트가 보낸 최초의 SYN 패킷 이후에 전송되는 모든 패킷은 ACK 플래그 설정.
PSH : Push 기능. 수신 측에 버퍼링된 데이터를 푸시해줄지 여부를 질의.
RST : 커넥션 Reset. 설정되어 있을 경우, 수신 측은 즉시 연결을 끊음.
SYN : Sequence Number 동기화. 양쪽이 보낸 최초의 세그먼트에 설정.
FIN : 남은 송신 데이터가 없음을 의미. 정상 종료를 요청.

-> 명시적 혼잡 통보를 위한 Flag

ECE : ECN Echo. SYN이 1로 설정된 경우, 명시적 혼잡 통지가 가능함을 의미. (ECN 사용함) SYN이 0으로 설정된 경우, 네트워크가 혼잡하니 세그먼트 윈도우 크기를 줄여달라는 요청.
CWR : 혼잡 윈도우 축소 플래그. ECE Flag로 설정된 세그먼트를 수신하였으며 혼잡 제어 매커니즘에 의해 응답하여 윈도우 크기를 줄였음을 의미.

3-Way Handshake

데이터를 전송하기 전에 신뢰성 있는 전송을 보장하기 위해 사전에 연결을 설정하는 과정.

  1. Client가 Server에게 접속을 요청하는 SYN 전송.
  2. SYN을 받은 Server는 SYN+ACK를 Client에게 전송.
  3. SYN+ACK를 받은 Client는 Server에게 ACK를 전송

4-Way Handshake

연결을 종료하기 위한 과정.

  1. Client가 연결을 종료하겠다는 의미의 FIN을 Server에게 전송.
  2. FIN을 받은 Server는 ACK을 Client에게 전송.
  3. 다시 Server는 Client에게 FIN 전송.
  4. Client는 Server에게 ACK 전송.

-> 연결 과정과 달리 4단계인 이유?
: Client가 데이터 전송을 마쳤더라도 Server는 아직 전송할 데이터가 남아있을 수 있으므로 일단 FIN에 대한 응답만.
데이터를 모두 전송한 뒤에 FIN 전송.

UDP (User Datagram Protocol)

“신뢰성이 떨어지지만 속도가 빠른 비연결형 통신을 제공”

3-way handshake 같은 절차로 연결을 성립시키지 않고 통신하는 비연결형 서비스.

할당되는 논리적인 경로가 없으며 각각의 패킷들이 다른 경로로 전송 가능.
데이터의 수신 여부를 확인하지 않음.
흐름 제어, 오류 제어 또는 손상된 세그먼트의 수신에 대한 재전송 제어를 하지 않음.
-> 데이터 손실/오류/순서 뒤바뀜의 위험이 있음. (신뢰성 없음)
-> TCP보다 속도가 빠름.

데이터의 속도와 연속성이 중요한 실시간 서비스(영상 스트리밍) 등에 사용.
DNS가 기본적으로 UDP를 사용.

UDP 헤더 구조

Source Port : 출발지 포트 번호.
Destination Port : 목적지 포트 번호.
Length : UDP 헤더와 데이터를 포함한 길이.
Checksum : 오류 검사.

post-custom-banner

0개의 댓글