네트워크 통신 필수 지식
네트워크란 무엇인가? 일반적인 네트워크 통신과정을 이해해보자!
1. 네트워크란 무엇인가?
네트워크 : 노드(EX:컴퓨터)들이 데이터를 공유할 수 있게 하는 디지털 전기통신망의 하나
인터넷 : 가장 큰 네트워크 → www가 인터넷이 아님
www : 인터넷을 통해 웹 데이터를 공유 시스템 → Wolrd Wide Web. 인터넷 보다 작은 개념
네트워크 분류 : LAN, WAN, Star, Mesh 등등
-
크기에 따른 네트워크 분류
- LAN(Local Area Network) : 가까운 지역을 묶은 네트워크 → 워크래프트 LAN
- WAN(Area Network) : 멀리 있는 지역을 묶은 네트워크 → LAN과 LAN을 묶음
-
연결 형태에 따른 네트워크 분류
-
Star : 중앙 장비(EX:공유기)에 모든 노드가 연결
-
Mesh : 여러 노드들이 서로 그물처럼 연결 → 먼곳에 사용
-
Mesh 예시 그림
-
-
혼합형 : 실제 인터넷은 여러 형태를 혼합한 형태(LAN, WAN)
-
네트워크 통신방식 : 유니 캐스트, 멀티 캐스트, 브로드 캐스트 등등
- 유니 캐스트 : 특정 대상이랑만 1:1 통신
- 멀티 캐스트 : 특정 다수와 1:N 통신
- 브로드 캐스트 : 네트워크에 있는 모든 대상과 통신
네트워크 프로토콜 : 어떤 노드가 어느 노드에게 어떤 데이터를 어떻게 보내는지 양식
-
Ethernet 프로토콜(MAC 주소) : 가까운 곳과 연락할 때
-
ICMP, IPv4, ARP(IP 주소) : 멀리 있는 곳과 연락할 때
-
TCP, UDP(포트 번호) : 여러가지 프로그램으로 연락할 때
- 메신저 예 : 카톡, 버디버디 중 하나로 보냈을때 받는 노드는 어느 프로그램인지 구할 때 TCP, UDP 사용
-
여러 프로토콜들로 캡슐화 된 패킷
-
캡슐화 된 패킷 그림
-
네트워크란 무엇인가? - 실습1(tracert)
-
구글과 나는 어떻게 연결되어 있나?
cmd → tracert 8.8.8.8
LAN → LAN → … → 미국 구글까지 찾아가는 IP 확인
이를 WAN과 인터넷이라 할 수 있겠다.
-
Wireshark 설치 → 프로토콜 직접 확인
Wireshark로 프토토콜 캡처 해보자
데이터를 보낼 때 프로토콜들을 동시에 조합해서 사용함을 알 수 있다!
2. 네트워크의 기준! 네트워크 모델
-
2종류 : TCP/IP 모델, OSI 7계층 모델 + 그림
차이점 : OSI는 역할 기반, TCP/IP는 프로토콜 기반
패킷 : 네트워크 상에서 전달되는 데이터 통칭 → 여러가지 프로토콜 조합!!
-
패킷 일반 구조 그림
페이로드 : 보내는 데이터
푸터는 무시하자
-
패킷+캡슐화 설명 그림
캡슐화1 → 데이터를 페이로드 + TCP를 헤더
캡슐화2 → 데이터, TCP를 페이로드 + IPv4를 헤더
즉, 패킷은 여러 프로토콜들로 캡슐화 된 것
-
패킷+디캡슐화 설명 그림
-
계층별 패킷의 이름 PDU 그림
세그먼트(4계층), 패킷(3계층), 프레임(2계층) → 위의 데이터 통칭 패킷아님!
중요 규칙
- 높은 계층 → 낮은 계층 캡슐화 가능
- 낮은 계층 → 높은 계층 디캡슐화 가능
3. 가까이 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다(2계층)
⇒ 2계층에 대해 설명
2계층 : 하나의 네트워크 대역 LAN에서 통신
2계층에서 사용 주소 : MAC주소 → LAN에서 통신할 때 사용
2계층의 프로토콜 : Ethernet → 14바이트
-
목적지 주소, 출발지 주소에 MAC주소
-
상위 프로토콜 타입 : 2바이트 → IPv4(0x0800) or ARP(0x0806)
-
출발지, 목적지 주소 설명 그림
A→B 통신 컴퓨터 설명
-
프로토콜 패킷 그림
“목적지 주소, 출발지 주소, IPv4” 실제 모습
-
4. 실제로 컴퓨터끼리는 IP주소를 사용해 데이터를 주고받는다(3계층)
⇒ 3계층에 대해 설명
3계층 : 다른 네트워크까지 통신(멀리보냄) → LAN과 LAN을 연결하는 WAN
-
IP는 패킷을 목적지 배송(주소) → 전기는 빛의 속도(빠름)
-
WAN에서 통신할 때 IP 주소 사용 → LAN은 MAC주소
-
인터넷 연결 위해서는 IP, 서브넷 마스크, 게이트웨이 필수 - 그림
-
서브넷 마스크
classful했던 IP 주소는 xxx.xxx.xxx.xxx 에서 “.”을 기준으로 네트워크 대역(본인 네트웤 위치)과 호스트(본인PC위치) 구분을 나눔.
classless한 IP 주소에서는 “서브넷 마스크”로 네트워크 대역과 호스트 구분 시작!
IP, 서브넷 마스크는 자신의 사설IP 위치 알려주는 용도
기본 게이트웨이는 공유기의 IP 위치(공유기 통해서 인터넷 가니까. 공유기 위치 필수)
-
-
Classless IP 주소 구조인 사설IP와 공인IP 사용 - IPv4
일반적인 IP 주소
-
현재 부족한 IPv4를 위해 “Classless IP 주소 구조인 사설IP와 공인IP” 사용
-
실제 인터넷 세상에서는 공인 IP로만 통신
-
예 : 3만원 주고 인터넷 설치한게 공인IP를 설치한것!
-
Classless IP 주소 구조와 공인IP - 그림
네이버에서 본것이 공인IP. 게이트웨이랑 착각 ㄴㄴ.
-
-
-
3계층에서 통신 - 그림
서로다른 LAN 네트워크 대역들이 바로 3계층에서 IP로 통신이 가능!
2계층은 스위치, 3계층은 라우터가 대표적 장치. (그림에 기기를 스위치, 라우터로 보자) ⇒ 공유기랑 모뎀으로 보면 될 것 같음.
공유기는 스위치와 라우터, 방화벽의 역할을 동시에 수행한다. 일반적으로 4개의 유선 랜 포트와 1개의 인터넷(WAN) 포트를 갖춘 구성인데, 인터넷 포트에는 인터넷 라인을(라우터 기능), 4개의 유선 랜 포트에는 노트북이나 데스크탑을 연결한다(스위치 기능). 여기에 누군가가 외부로부터 인터넷 등을 통해 내부로 침입할 수 없도록 하는 보안 기능(방화벽)을 기본 제공한다.
그림 중앙에 인터넷이 추가되면서 공인IP가 생김. (물론 사설 IP 대역 덕분에 IP주소 부족 문제가 많이 해결도 된겨)
-
3계층의 프로토콜 : IPv4 프로토콜, ARP 프로토콜, ICMP 프로토콜
5. 통신하기 전 반드시 필요한 ARP 프로토콜(3계층)
결국 같은 LAN에서 MAC 주소로 통신을 하는데 우린 IP주소로만 통신을 하고 있다!
ARP 프로토콜이 IP주소로 MAC주소를 구해줬기 때문이다.
-
ARP 프로토콜 그림
Source(Destination) Hardware Address : MAC주소
Source(Destination) Protocol Address : IP 주소
-
같은 LAN 대역 (하나의 네트워크 대역) 에서 통신 과정(A→C 통신)
C의 IP주소만 알고 있음 → c0 a8 00 1e 는 192.168.0.30 의미
- ARP에 C의 MAC은 몰라서 000… 으로 브로드캐스트!
- Eth도 마찬가지로 C의 MAC은 몰라서 FFF… 으로 브로드캐스트!
중간은 스위치로 2계층을 사용한다 하여 Eth를 사용
브로드 캐스트라서 모든이에게 요청
요청받은 모든 클라는 Eth에 MAC주소가 없는걸 확인하고 3계층 디캡슐화
C컴퓨터의 IP주소 확인 후 요청 성공 → 나머지 클라는 패킷 제거
C가 이제 A에게 응답을 보내는데 A의 IP, MAC전부 아니까 스위치를 거쳐 바로 A로 전달
A는 ARP 캐시 테이블에 C의 IP, MAC 기록!
-
ARP 테이블 그림 - cmd 확인
통신 했던 컴퓨터들의 주소가 남는곳!
명령어 arp -a 로 확인 가능
6. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다(3계층)
IPv4 프로토콜 : 다른 네트워크의 특정 대상을 찾는 → 멀리 보내는 역할 (데이터의 정확성 보장 X, TCP에서 이를 보완)
ICMP 프로토콜 : 특정 대상과 내가 통신이 잘되는지 확인하는 → 오류 메시지
-
ICMP 프로토콜 자세히 그림
통신 안될때 유지보수 빠르게 확인하는 예시
3번은 목적지까지 가지를 못한것
11번은 목적지까지 갔는데 응답을 못한것. 즉, 상대방의 문제
8번은 요청 / 0번은 응답
라우팅 테이블 : 어디로 보내야 하는지 설정되어 있는(3계층에 필수 사용!!) → 지도역할
-
라우팅 테이블 - 다른 네트워크 찾아가는 지도 그림(cmd)
IPv4 경로 테이블 → netstat -r 명령어 사용
-
라우팅 테이블 자세히 그림(전체적인 통신 흐름) A→B통신 예시
자신의 라우팅 테이블을 확인하여 해당 주소로 이동 → 반드시 B관련 주소가 있어야 갈 수 있음. 지도역할.
⇒ 네트워크 엔지니어가 설정을 당연히 해 준것
통신을 위해 패킷이 생성되며 ICMP는 요청(8)으로 생성된다.
Eth는 CC… 인데, 이더넷은 가까운곳을 가는 특징!!
또한, A의 라우팅 테이블을 보면 IP가 10.1이였다.
CC… MAC주소인 라우팅 테이블도 확인해보면 30.2 IP쪽으로 가라고 함.
Eth를 새로 22222…. 로 작성하여 패킷 전송
이것을 B까지 계속 반복!!
B는 이제 응답!! → ICMP 응답(0)으로 새로 또 작성
여기서 또 핵심은?? MAC주소를 모를때???? 인데 이때 바로 앞에서 배운
⇒ ARP 프로토콜을 사용
결론 : 통신에 ARP, IPv4, ICMP… 다양하게 다 사용한다고 생각하면 된다
-
IPv4의 조각화 그림
7. 컴퓨터의 프로그램끼리는 이렇게 데이터를 주고 받는다(4계층)
전송계층(4계층)은 송신자의 프로세스와 수신자의 프로세스를 연결
포트 덕분에 하나의 서버(컴퓨터)에 게임, 메신저 등 프로그램 구분하여 통신이 가능!
4계층 프로토콜의 종류 : TCP, UDP
“2계층 MAC주소, 3계층 IP주소, 4계층 포트번호” → 전부 “주소” 사용
포트번호 : 4계층에서 사용하는 “주소”
하나의 포트는 하나의 프로세스만 사용 가능
하나의 프로세스는 여러 개의 포트를 사용 가능
-
Well-Konown 포트
우리가 사용하는 웹 서버 포트가 80
-
포트 번호 실습 -실제 확인 cmd
netstat -ano 명령어
네이버 켰을 때?? 443(HTTPS)
PID : 4636 → 크롬
8. 비연결지향형 UDP 프로토콜(4계층)
-
DNS 서버가 UDP 프로토콜 사용하는 대표적인 프로그램
아래 예로 네이버의 IP 주소를 알려줄 때 UDP 사용
-
tftpd로 UDP 프로토콜 사용해서 파일 전송 실습
왼쪽 서버, 오른쪽 클라 → 왼쪽에 abc.txt 파일을 오른쪽 클라에서 UDP 프로토콜을 사용해서 파일 다운 → 와이어샤크에서 패킷을 확인해보자.
UDP 프로토콜 확인 (파일을 전송해주는 서버 포트:69)
9. 연결지향형 TCP 프로토콜(4계층)
-
패킷그림
TCP는 연결지향형이라고 했는데 TCP Flags로 연결할건지 했는지 이런걸 구분할 수 있다.
-
TCP 3Way Handshake
데이터크기(500바이트면?)
-
와이어샤크로 보자
위 TCP3개를 보면 3Way Handshake를 했음을 알 수 있다.
Seq값은 원래 랜덤값으로 시작해서 저렇게 숫자가 큰 것이다.
TCP연결 후 HTTP 통신 요청을 하는것이며 TCP 연결한 SEQ, ACK값을 그대로 사용함을 알 수 있다. 또한 HTTP에서 요청한 데이터 크기가 912임을 계산해보면 알 수 있다. (화살표 +Data 쪽 확인)
10. NAT와 포트 포워딩
Network Address Translation(NAT) 사용 이유는 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위함
하지만 꼭 사설IP를 공인IP로 변환 하는 데에만 사용하는 기술은 아니다.
-
인터넷 관점에서 바라본 모습 - 그림
포트포워딩은 IP, 포트를 특정 IP 포트로 넘겨주는 NAT의 응용이다.
-
포트포워딩 그림
공인 IP 2의 특정 포트로 접속을 시도하자.
공인 IP 2에 포트포워딩을 설정하자.
-
포트포워딩 실습 그림
192.168.0.1 처럼 공인 IP로 들어가서 admin으로 접속 후 포트포워딩 설정!
- 내부 IP주소(사설IP) 설정
- 외부포트(공인IP 치고 들어올 포트) 설정 → 자동으로 내부포트로 매칭
- 내부포트(서버 구동시킨 포트번호) 설정
- 예로 외부를 80으로 설정하면 웹 포트니까 포트입력없이 바로 접속
- 물론, 내부포트는 서버 구동할 때 사용한 포트 기입
11. www(웹)를 이용할 때는 이렇게 데이터를 주고받는다
-
네트워크 부하가 심한 HTTP1.0 → 개선한 HTTP1.1
HTTP1.0 에서는 이미지 하나하나 다운 받을때도 매번 이렇게 연결을 끊었다가 다시 요청했음.
HTTP1.1 에서는 이를 개선하고자 한번 연결했으면 요청,응답 처리할 거 한번에 다 하고나서 연결을 끊도록 개선함.
-
HTTP 요청 프로토콜 그림
Request Line 모습 → 요청타입, URI 매우 중요
중요한점은 GET, POST만 거의 사용. DELETE의 경우 클라이언트가 서버에 있는 데이터를 삭제한다는게 말이 안되는 보안 문제이다. 서버에서 다운만 받고 삭제는 서버가 직접해야지 클라가 서버 데이터를 건드는건 문제다.
-
burpsuite 실습 - http 요청,응답 가로채는 프로그램
자세한 과정은 언급한 영상 참고. 어렵지 않음.
댓글남기기