교육 정보
- 교육 과정명 : 클라우드기반 스마트융합보안 과정 16기
- 교육 회차 정보 : '23. 11. 14. 네트워크 보안 #02
요약
- TCP/IP 통신 모델 계층별 분석
- Ethernet Frame 구조
- ARP 프로토콜
- MSS 와 MTU를 가정한 데이터 분할 (??)
TCP/IP Protocol Stack
- 7층(7~5), 4층, 3~2층, 1층 구분.
- HTTP 패킷이 7~4층에서 페이로드로 전달되며 캡슐화 과정이 진행.
- IP, MAC 주소를 기반으로 ARP, RARP 프로토콜 사용
- 3계층 필수사용 프로토콜 : IP
![](https://velog.velcdn.com/images/fivedumplings/post/d36ab4cb-f22e-4c98-ae05-e3ffcd74b02c/image.png)
- 와이어 샤크 TCP/IP Protocol Stack 및 페이로드&캡슐화 기능을 각 계층별프로토콜 확인 가능
-> Network Layer 계층 패킷임을 알 수 있다. (ARP 까지사용)
![](https://velog.velcdn.com/images/fivedumplings/post/e3fe4734-aeb8-43a3-b2c4-22cb74cf972b/image.png)
Transport Layer
![](https://velog.velcdn.com/images/fivedumplings/post/73558cff-7bfe-4c6c-8ff1-d3737c843736/image.png)
- 헤더는 각 필드로 구성된다. 20~60 바이트로 구성.
- sequence number
- HLEN(Header Length)
- 4비트 사용으로 표현 가능한 수는 0~15이나, IPv4 헤더 길이는 20~60이므로, 실제 TCP Header 길이는 HLEN 길이의 4배이다.
- Flag 플래그는 6비트로, HLEN 설정 정보(Reserved : 16비트에서 HLEN, 플래그 필드 제외 공간, 추후 사용 예약 공간)
- Window Size
- TCP 속도 문제 해결 목적을 위해 존재하는 필드
- 패킷 - TCP 프로토콜 - 옵션 - 윈도우 스케일
- 고급 전송속도를 위해 윈도우 크기를 키우기 위해 사용하는 옵션이다.
- Checksum 필드
- Urgent pointer 필드
- 3-way-handshake 시 해당 필드 크기가 정해진다.
### PSH Flag
* PUSH Flag 설정 시, 3계층에서 MSS 크기에 비해 메시지 크기가 작아도 계속 패킷을 받아 MSS 크기를 채워야 다음 계층으로 보내는 것이 아니라, 다음 계층인 Transport Layer로 보낸다.
- 3 way–handshake 시, MSS를 설정한다.
- MARK 되는 조건은? == 설정되는 조건은? : payload 된 데이터가 MSS 보다 작을 때
Urg : Urgent Flag(sequence 순서가 아닌, 우선 데이터 전송 시 사용)
TCP 프로토콜
- Transmission Control Protocol, 전송 제어 프로토콜
- 서버-클라이언트 간 통신 확인 가능(신뢰성), 전송 속도 느리다. 데이터 전달, HTTP 프로토콜
netsate –an 명령어
- CMD 관리자 권한 실행
- 현재 내 컴퓨터와 연결된 대상들의 주소와 상태를 출력한다.
- ESTABLISHED : 가상 회선이 연결된 상태(클라이언트-서버)
![](https://velog.velcdn.com/images/fivedumplings/post/1693a25c-7862-46d5-abad-8505bf3a6ed8/image.png)
3-way-handshaking 과정
-
TCP 프로토콜이 전송 전,중,후
1. 전송 전 : (SYN == 1) : 3 WAY Handshaking (가상회선 설정)
가상회선 설정 전제 : 서버 UP, 서비스 UP
2. 전송 중 : TCP
3. 전송 후 :
EX)
flag - SYN : 1, 전송 전
flag - FIN : 1, 전송 종료
flag – SYN, FIN : 0, 데이터 전송 중
-
3-way-handshaking
- 클라이언트 -> 서버 : SYN
- 서버 -> 클라이언트 : SYN + ACK
- 클라이언트 -> 서버 : ACK
- ESTABLISHED 상태 (요청/응답 가능한 2개의 라인이 생성되고, 이를 세션 생성이라고 한다)
와이어샤크 예제로 3-way-handshaking 과정 확인
![](https://velog.velcdn.com/images/fivedumplings/post/02220121-ecf5-444b-bdfd-5692933fd3e6/image.png)
- Sequence Number 간소화 설정 해제 : TCP 패킷(좌측 하단) – preference – Reassemble out-of-order segments 해제 (오리지날 값을 확인 가능)
- 3-way-handshaking 과정에서 데이터가 없는 상태로 패킷 전송한다. (연결 설정 후 데이터 전송)
- 클라이언트, 서버는 처음 Sequence Number를 보낸다. 클라이언트가 보낸 SN로 서버는 AN를 사용한다.
- SN 초기 값은 무작위로 탄생한다.
- 3-way-handshaking 과정 패킷 순서 (0은 0이 아닌, Not set 의 의미)
- SYN = 1, SP=1606, DP=80, SN=767, AN = 0
- SYN = 1, ACK = 1, SP=80, DP=1606, SN=373, AN = 768
- SYN = 0, ACK = 1, SP=1606, DP=80, SN=768, AN = 374
![](https://velog.velcdn.com/images/fivedumplings/post/b56fd5f0-ce03-43cb-ba7e-337f46feeb0b/image.png)
TCP 데이터 전송 과정
트래픽 전송 과정 종류에 따른 Sequence Number, Acknowlegment Number 살펴보기
- 정상적인 트래픽 전송 과정
- 3-way-handshaking 과정에서 왜 ACK Number를 사용하는가? TCP 프로토콜의 특징인 신뢰성 때문이다. 상대 대상(클라이언트)로부터 송신자가 보낸 데이터를 받았다고 확인 가능
- AN은 클라이언트가 보낸 SN + 데이터크기임을 알 수 있다.
![](https://velog.velcdn.com/images/fivedumplings/post/995d083b-f1b2-4075-825c-c429ca7f82b6/image.png)
- 비정상적인 트래픽 전송 과정
![](https://velog.velcdn.com/images/fivedumplings/post/eda1ad3b-09c3-465a-b4a8-83d22f7ba1f7/image.png)
- SN이 5000 + 데이터크기 500 전송 후, 수신호스트로부터 SN 5200 온다면, 이는 수신호스트가 300 바이트를 받지 못한 것이다.
- 수신호스트의 AN으로 비정상적 트래픽이 수신된 것을 확인한 송신호스트는 재전송한다.
- AN 의 용도 : 수신호스트로 전송한 데이터가 잘 전달됐는지 확인 가능,
- 만약 수신호스트에서 계속 패킷 손실이 발생한다면, 송신호스트는 계속 패킷을 전송할 것이고, 이는 오버헤드를 발생시킬 것이다.
비 정상적 트래픽 전송 방지 방법
- 아래 방법은 TCP 프로토콜에서 제공하는 기능이다.
![](https://velog.velcdn.com/images/fivedumplings/post/b9bca2cf-dabf-43f6-9c25-73e86a72771e/image.png)
- SACK 설정해 문제가 있는 패킷이나, 받지 못한 패킷만 재전송 요청한다.
- RTT 설정으로 일정 시간 이후 재 전송한다. (수신호스트가 정상적으로 받은 패킷의 응답이 송신호스트가 받지 못했을 때)
- RTT란? Round Trip Time으로, 패킷이 송신지부터 수신지까지 왕복시 걸리는 시간
핸드세이킹 과정 첫 번째에서 확인할 수 있는 것
- Window Size : (최대 받을 수 있는 데이터 크기) 8192 설정
- SACK permited 설정 시, 전송 문제로 여러 패킷 중 한 개라도 문제가 있는 패킷이 있다면 해당 전송되지 않은 패킷만 재전송한다. (Selective Ack(SACK) Permitted, 선택확인 응답), 디폴트 값은 모두 재전송.
TCP 프로토콜에서의 트래픽 흐름제어
연속으로 데이터 전송 및 Winodw Size 변경
- 송신 호스트는 AN으로 SN + (Data Size 합)을 받는다.
- 두 번째 전송 패킷의 SN은 6400 이다.
![](https://velog.velcdn.com/images/fivedumplings/post/963cd6a3-e1b2-4732-a1d6-62e74355cf5a/image.png)
NAK 사용으로 손실 패킷 재전송받기
- NAK : Negative Acknowledgement 약자로, 패킷 오류 또는 잘못된 순서로 받았음을 문제가 있는 패킷의 번호와 함께 보낸다.
- 3가지 패킷을 동시에 받는다. (Window Size 이내), 수신 호스트는 손실된 패킷을 송신 호스트로 알려주기 위해 NAK를 보낸다 (비정상 SN을 사용한다)
![](https://velog.velcdn.com/images/fivedumplings/post/9c95ad5c-7bad-4eda-bdc7-f76e1c21f18a/image.png)
만약 Window Size가 0 이라면?
- 수신호스트의 시스템 문제 발생 가능으로 해당 시스템 점검이 필요하다. 단, 송신호스트가 Keep Alive를 지속적으로 보냈음에도 Window Size가 0인 경우.
TCP 연결 종료 과정
![](https://velog.velcdn.com/images/fivedumplings/post/b271471f-b435-4712-9851-565e1d234a30/image.png)
- 그림에서 클라이언트는 TIME_WAIT 후 서버로 ACK를 전송한다. (그림오류, FIN을 받자마자 ACK를 전송하는게 아님)
TCP 연결 종료 과정 중, 클라이언트의 ACK 전송 실패 발생
- 서버는 클라이언트로부터 ACK를 받지 못하면 계속 FIN을 전송해 자신의 FIN을 알린다.
- UDP : 서버-클라이언트 간 통신 확인 불가(신뢰성 X), 전송 속도 빠르다. 실시간 전송
![](https://velog.velcdn.com/images/fivedumplings/post/5495ab71-57d4-4020-b839-348d5324f230/image.png)
![](https://velog.velcdn.com/images/fivedumplings/post/3b6153dd-317e-4e4c-a750-ca4a1b3af2da/image.png)
- UDP Header는 8바이트 고정길이를 사용한다.
![](https://velog.velcdn.com/images/fivedumplings/post/2508a6ef-9392-47d3-9c8d-8216127daea1/image.png)
- UDP Header = UDP Length – UDP payload = 8 바이트 (고정)
- 2바이트(16비트)의 UDP Checksum 사용한다. 그러나 해당 기능에는 재요청 기능이 없다(비신뢰성 특징), UDP 프로토콜이 어플리케이션에서 처리한다(즉, UDP 프로토콜 자체로는 재전송 불가)
TCP vs UDP
- UDP:
1. Message-Oriented Transport Protocol : 데이터를 메시지라는 개별 패키지로 전송(가변X -> 단편화 지원 X)
- TCP:
1. Stream-Oriented Transport Protocol : 데이터를 특별한 구조 형식으로 지정해 전송하지 않는다(가변-> 단편화 지원)
#3_Internet Layer – IP 프로토콜
- TCP/IP의 Internet Layer 는 OSI 7계층에서의 Network Layer 이다.
- IP 필드 소개
- MTU & 단편화
IP 필드 소개
- IP 프로토콜의 패킷은 [ IP Header ] + [ Data ] 로 구성된다.
- IP 프로토콜 사용 시, [ Data ]는 필수로 필요하다.
MTU & 단편화
- MTU : 네트워크 기기 최대 전송 단위
예시) APP MTU: 4000byte,, LANcard: 1,500byte 라면, 앱 외부로 나갈 수 있는 최대 전송 단위가 1,500 이므로, 4,000 – 1,500 나머지는 폐기된다.
이를 해결하기 위해 등장한 개념이 단편화(Fragement) 이다.
![](https://velog.velcdn.com/images/fivedumplings/post/9fe5e4e1-5a92-49cd-ab71-25f62b1712ea/image.png)
단편화
- 위 상황에서는 3, 4 계층에서 단편화 작업을 해 줘야 한다.
- 4계층에서 단편화를 하지 않는다면 반드시 3계층에서 단편화 작업이 필요하다.(???)
- Fragmentation, 단편화(송신측) <-> Reassamble, 재조립(수신측)
- 전송 중에는 재조립 불가(비효율)
- 분할 후 분할된 조각이 순서대로 도착하지 않을 수 있다 따라서, 태그를 사용해 분할된 패킷마다 태그를 부착한다.
#### MTU 값 변경 방법
![](https://velog.velcdn.com/images/fivedumplings/post/9943cbbf-5e82-4068-bd82-1f3d5d597a7c/image.png)
MSS
- Maximum Segment Size, 최대 세그먼트 크기가 아니라, 최대 데이터의 크기를 나타낸다.
- 어? Segment는 전송 계층의 PDU 아닌가요? 왜 최대 세그먼트 크기가 아닌거죠?
- 왜냐하면 Segment 는 [TCP Header] + [ payload ] 로 이루어졌기 때문란다.
- 즉, MSS의 정의는 최대 데이터 크기를 나타낸다 (최대 Segment 크기로 정의한다고 생각하면 TCP Header 가 존재해 맞지 않는 정의..)
- 전송하려는 패킷의 헤더가 계층마다 다르다.
- PDU : 계층에서 부르는 데이터의 단위, Protocol Data Unit
- 7~5계층(메세지), 4(세그먼트 또는 데이터스트림), 3(패킷 또는 데이터그램), 2(프레임), 1(비트)
- MTU = IP Header + TCP Header + Payload <= 1500 byte ,
- 실제 전송 데이터 길이 (MTU + EthernetHeader + FCS_Frame check sequence) = 1500 + 18 = 1518
- MSS 가 1460 이면 ? IP HEADER, TCP HEADER 크기가 20 /20 이라는 의미
TTL
- Time to live 약자,
- 라우터간격 수를 1홉이라고 할 때, 패킷 전달 중 데이터그램이 통과하는 최대 홉수를 TTL 에 지정한다.
- 적절한 TTL 값이 주어져야 한다.
1. 너무 많을 경우 : 패킷이 돌아오지 못할 경우 루핑 발생 가능
2. 너무 적을 경우 : 패킷이 목적지까지 가지 못한다.
- TTL 은 OS가 설정한다.
- netsh 명령어
- CMD에서 MTU, TTL 값을 변경 가능하다? OS에서 해당 값들을 변경 가능하다. 즉, 컴퓨터(7계층) 장비에서는 하위 계층의 설정 값을 변경가능하다. (1~7계층까지 사용한다는 의미이므로)
컴퓨터 설정 값은 etc – service 파일에 들어있다. tcp 는 6번, udp는 17번처럼.
### Header checksum
- 헤더의 오류 검증 목적으로 사용한다
- 송신자 : 헤더 체크썸 필드를 제외한 모든 필드를 더한다(16진수 덧샘), 그리고 체크썸 필드기록 후 전송한다.
- 수신자 : 수신한 데이터의 헤더 체크썸 필드를 제외한 모든 필드를 더하고, 해당 값이 체크썸 필드와 같는지 확인해 무결성을 검사한다.
- 패킷 전송과정에서의 오류를 확인하기 위해 사용한다.
- 프로토콜마다 체크썸 생성 방식이 다르다. (TCP, UDP, IP, Ethernet )
- 송신자 측에서는 IP header에서 Header checksum 제외 값을 모두 더한 후 Header checksum 에 넣는다.
![](https://velog.velcdn.com/images/fivedumplings/post/16b6de20-23b9-421e-8abe-85e9ff55c746/image.png)
- Header checksum 를 만들 때, 각 자리의 수를 16비트 단위로 끊는다. 16진수 단위로 사용하기 때문이다.
![](https://velog.velcdn.com/images/fivedumplings/post/d5229e41-d989-43f0-80a5-ae13fcceffd4/image.png)
#4_Internet Layer – ICMP 프로토콜
- Internet Control Message Protocol, 약자로, 3계층 프로토콜이다.
- IP 프로토콜을 보완하기 위해 사용한다.
- IP 프로토콜의 어떤 점을 보완하는가?
1. IP Header [ Hedaer checksum ] : IP 헤더의 무결성 확인 용도, IP 헤더에서 패킷의 데이터 내용에 대해 알려주는 필드가 없다. (전송 에러 등..)
2. [ Time to live ] 필드 또한 해당 홉이 다 사용된다면 다시 알려주지 않고 해당 패킷을 폐기한다.
3. 따라서 IP 프로토콜 기능을 보조 목적으로 ICMP 프로토콜이 사용된다.
- IP Protocol 신뢰성이 없고, 비 연결형 Protocol 이라고 볼 수 있다.
- IP Protocol 에러 발생 원인, 진단기능, 상황 정보를 지원하지 않는다.
- ping 명령어는 ICMP 프로토콜을 사용한다.
ICMP 메시지
- ICMP 메시지 종류 : 1. 오류 보고 메시지, 2. 질의 메시지
- 오류 보고 메시지 : IP 패킷 중 발생 문제 보고
- 질의 메시지 : 호스트로부터 특정 정보 획득, 네트워크 문제 진단
- ICMP 메시지는 IP 메시지에 포함되어 있다.
![](https://velog.velcdn.com/images/fivedumplings/post/c4ef8b94-f972-4fca-97d8-c25cfcba9170/image.png)
![](https://velog.velcdn.com/images/fivedumplings/post/94072eed-dff4-4db8-b700-d8a77aa2e232/image.png)
- ICMP 패킷에서의 Data 는 32 byte 전송되며, 가비지 값에 해당한다.
- ICMP 패킷 세부 내용에서 Type, Code 값에 따라 나타내는 ICMP 메시지가 다르다. (ICMP Code 표 참조.)
ping 명령어 실습
- ping –t 192.168.0.1 (계속 패킷 전송)
- ping –n 3 192.168.0.1 (3개 패킷만 전송)
- ping –l 5000 192.168.0.1 (5000바이트 크기의 패킷 전송_ 세부 : ICMP 메시지 크기 = IP 프로토콜 데이터 크기)
- ping –f 192.168.0.1 (단편화 하지 말고 패킷 전송해라. )
- ping –l 5000 -f 192.168.0.1 (단편화 하지 말고 5000 바이트 크기의 핑 명령어 전송해라? - 전송 불가하다고 나온다.)
- ping 명령어에 따른 에러 보고 메시지도 따로 존재한다.
![](https://velog.velcdn.com/images/fivedumplings/post/b755d467-2f9d-4704-b5cb-3308f0f6562d/image.png)
ping 명령어로 알 수 있는 IMCP 프로토콜과 IP 프로토콜과의 관계
- ping 명령어로 (ICMP 프로토콜사용) IP 프로토콜의 데이터 내용을 MARK(설정)해 전송 가능
- 따라서, ICMP 프로토콜은 IP 프로토콜을 제어, 사용한다고 할 수 있다.
ACL.pkt 실습
- 인프라 담당자는 데이터 없는 상태에서 네트워크 인프라 작업한다.
- 처음 목적지로 핑 명령어를 사용할 때, 1,2 번째 핑은 길을 개척하는 용도(테이블에 등록됨)로 사용되어 돌아오지 않을 수 있다.
- 핑 명령어는 ICMP 프로토콜을 사용한다. ICMP 프로토콜은 핑 명령어를 사용할 때 IP 프로토콜 데이터 부분에 임시 데이터(garbage 값을 넣어)를 넣어 내보낸다. Reply – bytes는 에서 나타나는 임시 데이터이다.
![](https://velog.velcdn.com/images/fivedumplings/post/c14939a4-b091-46b9-8d8e-56d82e8f17af/image.png)
ICMP Code
- ICMP Header에 Type, Code MARK 값에 따라 ICMP 프로토콜 상태 확인 가능 (와이어샤크 툴에서 확인)
#5_Ethernet Frame 구조
-
2계층 사용 PDU 인 프레임의 구조를 나타낸다.
-
Length PDU 값에 따라 Ethernet Frame 종류 2가지 존재.
1. type 이면 = DIX Frame -> host(컴퓨터 등) 발생
2. length 이면 IEEE 802.3 Frame -> 장비(스위치 등) 발생
-
즉, 이더넷 망에서 두 종류의 프레임이 발생한다.
![](https://velog.velcdn.com/images/fivedumplings/post/a9de8dfd-2997-44ad-b3d0-5a35cdb8ef35/image.png)
- 패킷의 Ethernet – Type 확인 가능하다. 이는 호스트에서 발생(전송한) 패킷
- Preamble SFD, CRC(오류검출 코드) 와이어샤크에서 생략한다
- CRC(오류검출 코드)를 보는 방법. (와이어샤크에서는 생략하지만 설정으로 볼 수 있다.)
![](https://velog.velcdn.com/images/fivedumplings/post/0d6d9c54-5e9c-4b03-ae16-ffee04946f12/image.png)
계층별 사용 프로토콜
- L4 : TCP, UDP
- L3 : IP, ICMP, ARP, RARP, IGMP(LAN 구간에서의 멀티캐스트 프로토콜)
- L2 : Ethernet Frame 구조 ,ARP 프로토콜
#_6 ARP 프로토콜
-
ARP 패킷 종류는 2가지 있다.
1. ARP Request Packet
2. ARP Reply Packet
-
ARP 2가지 전송 방식 사용한다.
1. 유니캐스트 방식 전송
2. 멀티캐스트 방식 전송
-
SAP : Service Access Protocol : 서비스 접근 프로토콜
ARP Request Packet 확인 및 실습 파일
![](https://velog.velcdn.com/images/fivedumplings/post/22268d92-516b-4fd6-8ef7-c9e8052916af/image.png)
- 위 사진에서 알 수 있는 것(ARP 세부도 확인 시)
- Type ARP : 해당 패킷은 ARP 프로토콜을 담고 있어요.
- ARP (request)를 확인해보면
- Opcode request (1) 로 설정되어있다. 1 -> ARP request 의미한다.
- [ Sender MAC, IP를 아는데, Target IP만 알고 MAC은 모르겠다 ] 전송의미이다.
- 2번의 내용을 브로드캐스트 방식으로 전송.
![](https://velog.velcdn.com/images/fivedumplings/post/044f69d8-7e54-4414-8030-8a483ef976e1/image.png)
ARP 프로토콜
- 내 컴퓨터에서 ARP Cache Table 확인 방법 : CMD – [ arp –a ]
- ARP 프로토콜은 브로드캐스팅으로 주로 사용하지만, 유니캐스트로도 전송된다.
- ARP 프로토콜의 취약점 : ARP Request를 보내지 않아도 ARP Reply를 확인 후 ARP Cache Table에 넣는다.
- 기존의 ARP Cache Table 에 1. 10/4444 존재한다. 이는 기존 1.10/4444과 통신한 적이 있다는 것을 의미한다. 이후 1.10/1111 ARP Request 온다면 해당 요청 패킷으로부터 송신지 주소를 확인 후 (어? 나한테 온게 맞군. 내가 가진 테이블에는 이 IP에 해당하는 값이 있네? MAC 주소 업데이트한다.)
- 한 컴퓨터에는 여러 LanCard 장착 가능 -> 여러 MAC 주소 보유 가능
- LanCard 교체 후, 기존에 통신했던 서버들과 통신이 안될 수 있다. 이는 서버측에서 ARP CacheTable 의 정보가 변경되었기 때문이다.
ARP Request를 보내는 경우 2가지
- ARP Cache Table 최신화(갱신) 목적. (수신목적의 전송이 아님)
- ARP Reply를 받기 위해(수신지의 MAC 주소를 모를 때)
ping 명령어를 보내면, ARP Cache Table 이 갱신된다.
![](https://velog.velcdn.com/images/fivedumplings/post/167cde2a-8c45-499a-bbac-ca7369304075/image.png)
ARP 프로토콜 필드
- Data Link 계층에서만 ARP 사용하는가?
Network 계층에서도 사용 가능하다. ARP 프로토콜 필드에는 송/수신지의 MAC, IP 주소 필드가 존재하기 때문이다.
- IP 주소 없이 사용 가능한가?
사용 가능하다, FDDI, 토큰 링 같은 네트워크 기술에서는 ARP 프로토콜을 사용해 주소 문제를 해결한다.
![](https://velog.velcdn.com/images/fivedumplings/post/152a65b8-9dac-4bb5-969b-44f6989a5b6c/image.png)
- Protoco Type : 0x0800 => ARP 프로토콜을 의미
- Operation : 0x0001 => 해당 값이 1 : ARP Request 패킷임을 의미한다. (0x0002 : Reply)
ARP 실행 순서
- 클라이언트 목표 : [ 1.20 ] IP 주소의 MAC 주소를 알아내고자 한다.
- 스위치는 3계층 기능을 사용하는 네트워크 장비이다. (브로드캐스트 패킷을 받으면 플로딩한다)
- 클라이언트의 ARP Cache Table에는 비어있다.
- 먼저 클라이언트는 ARP Cache Table을 조회한다. 그러나 해당 테이블은 공백이다.
- 클라이언트는 ARP 프로토콜을 사용해 목표를 이루고자 한다.
- 클라이언트는 ARP Request 패킷을 Broadcast 전송한다. 스위치로 간 요청 패킷은 플로딩된다.
- [ 1.30 ] IP 주소를 가진 클라이언트는 ARP Request를 받아 역캡슐화시켜 3계층의 헤더를 확인한다. 해당 요청은 [ 1.20 ] IP 주소를 가진 수신자의 것이므로, 해당 패킷을 폐기한다.
- [ 1.20 ] IP 주소를 가진 클라이언트는 ARP Request를 받아 역캡슐화시켜 3계층의 헤더를 확인한다. 해당 요청은 [ 1.20 ] IP 주소를 가진 수신자의 것이므로, 먼저 송신지의 주소를 자신의 ARP Cache Table에 기록한다. 이후 자신의 IP, MAC 주소를 담은 ARP Response 패킷을 캡슐화시켜 클라이언트에게 전송한다.
- 클라이언트는 [ 1.20 ] 으로부터 ARP Response를 받아 자신의 ARP Cache Table에 저장한다.
ARP 진행 순서 세부
- ARP 진행 순서에는 확인해야 할 4가지가 존재한다.
- ARP 프로토콜을 사용할 때는 먼저 본인의 ARP Cache Table을 조회 후 해당 테이블에 사용하고자 하는 주소가 없을 때 ARP Request 사용한다.
- ARP Request, ARP Response를 사용할때는 각 캡슐화/역캡슐화를 사용한다.
- ARP Request의 데이터 내부 구조
![](https://velog.velcdn.com/images/fivedumplings/post/bcc5426a-b52a-4e85-a31a-5fffa4b7ec08/image.png)
- ARP Request 메시지의 수신주소와 동일한 주소를 가진 호스트는 먼저 ARP Cache Table에 기록 후, ARP Response 전송한다.