일단 파일을 받고 인트라 아이디를 입력 후 문제풀기 시작
문제 다풀고 나면 각 문제마다 get my config해서 세팅 저장
그걸 깃에 올림
문제 위에 있는 상황을 만족시키기 위한 아이피 할당문제임
예약된 아이피 주소
0.0.0.0/8 | 0.0.0.0 –0.255.255.255 |
소프트웨어 | 현재 네트워크 (소스 주소로만 유효) |
10.0.0.0/8 | 10.0.0.0 –10.255.255.255 |
개인 네트워크 | 개인 네트워크 내의 로컬 통신에 사용됩니다. |
100.64.0.0/10 | 100.64.0.0 –100.127.255.255 |
개인 네트워크 | 캐리어 급 NAT를 사용할 때 서비스 제공 업체와 가입자 사이의 통신을위한 공유 주소 공간. |
127.0.0.0/8 | 127.0.0.0 –127.255.255.255 |
호스트 | 로컬 호스트로의 루프백 주소에 사용됩니다. |
169.254.0.0/16 | 169.254.0.0 –169.254.255.255 |
서브넷 | 일반적으로 DHCP 서버에서 검색되는 것과 같이 IP 주소가 지정되어 있지 않은 경우 단일 링크에서 두 호스트 간의 링크 로컬 주소에 사용됩니다. |
172.16.0.0/12 | 172.16.0.0 –172.31.255.255 |
개인 네트워크 | 개인 네트워크 내의 로컬 통신에 사용됩니다. |
192.0.0.0/24 | 192.0.0.0 –192.0.0.255 |
개인 네트워크 | IETF 프로토콜 할당. |
192.0.2.0/24 | 192.0.2.0 –192.0.2.255 |
선적 서류 비치 | TEST-NET-1, 문서 및 예제로 지정되었습니다. |
192.88.99.0/24 | 192.88.99.0 –192.88.99.255 |
인터넷 | 예약석. IPv6-IPv4 릴레이 (IPv6 주소 블록 2002 :: / 16 포함). |
192.168.0.0/16 | 192.168.0.0 –192.168.255.255 |
개인 네트워크 | 개인 네트워크 내의 로컬 통신에 사용됩니다. |
198.18.0.0/15 | 198.18.0.0 –198.19.255.255 |
개인 네트워크 | 두 개의 개별 서브넷 간 네트워크 간 통신 벤치 마크 테스트에 사용됩니다. |
198.51.100.0/24 | 198.51.100.0 –198.51.100.255 |
선적 서류 비치 | TEST-NET-2, 문서 및 예제로 지정됩니다. |
203.0.113.0/24 | 203.0.113.0 –203.0.113.255 |
선적 서류 비치 | TEST-NET-3, 문서 및 예제로 지정됩니다. |
224.0.0.0/4 | 224.0.0.0 –239.255.255.255 |
인터넷 | IP 멀티 캐스트에 사용 중입니다. (이전 클래스 D 네트워크). |
240.0.0.0/4 | 240.0.0.0 –255.255.255.254 |
인터넷 | 나중에 사용하기 위해 예약되어 있습니다. (이전 클래스 E 네트워크). |
255.255.255.255/32 | 255.255.255.255 | 서브넷 | "제한된 브로드 캐스트"대상 주소로 예약되어 있습니다. |
네트워크 통신 순서
인캡슐레이션, 디캡슐레이션이라는 과정을 통해 원하는 목적지에 도달할 수 있게 된다.
전송계층에서 MTU 사이즈에 맞게 패킷을 쪼갠후, 각 계층에서 목적지 정보가 담긴 헤더를 붙여 내려보낸다.
각 계층별로 자신의 헤더를 확인하고 각자 할일을 수행한다.
1. 받아서 까보고 2. 내꺼면 위로 올리거나 헤더를 다시 붙이고 밑으로 내려보낸다. (내꺼가아니면 버리고 무시함)
1계층 (물리계층)
그냥 전기신호 0과 1을 어떻게 표현하고 어떻게 주고받을지 결정하는곳.
미디어 타입, 커넥터 타입, 클럭레이트 같은 속도, 비트 동기화 등을 정의한다
매체는 랜선, 동축케이블, 광섬유 등 통신케이블, 리피터, 허브, 모뎀 등이 있다.
랜선에서 각 구리선 양끝단의 역할에 맞게 순서만 맞춰ㅏ주면 되지만, 다른사람과 작업하기 위해 표준으로 맞춰준다.
사실 역할에 맞게 내부적으로 구리선의 꼬임정도가 다르기도 하고, 케이블도 표준으로 작업하기 편하게 맞춰서 나온다.
2계층 (데이터링크 계층)
이때부터 헤더가 있다.
인접장비의 통신을 보장한다. 동일네트워크에 단 하나의 맥주소만 존재해야한다.
ETHERNET, IEEE802.3, PPP, HDLC, SLIP 등 많은 프로토콜이 있다.
3계층
IP는 전체 네트워크에서의 전송을 보장한다
통신과정
컴퓨터 A와 서버의 통신을 생각해보자.
메인 : https://icarus8050.tistory.com/109
보조(HTTP 통신과정) : https://velog.io/@mrbartrns/TIL2.-http-%ED%86%B5%EC%8B%A0-%EA%B3%BC%EC%A0%95
보조(헤더 구조) : https://blog.naver.com/sujunghan726/220315439853
* 추가적인 상황. 브라우저에 google.com을 입력했을때.
소켓프로그래밍에서 TCP나 UDP 등의 프로토콜과 포트번호, 아이피주소 등을 선택하고 데이터를 보낼 수 있다.
내부적으로 보면 소켓프로그래밍 헤더 안에 Handshake 등의 과정이 포함되어있는것이다.
0. A컴퓨터의 HTTP 패킷 보내기전 사전작업.
google.com을 브라우저에 입력했을때의 과정이다.
브라우저 캐시를 확인하고 실패시 OS에 저장된 DNS캐시를 확인한다.
만약 없다면 DNS 패킷을 만들어서 DNS 서버에 질의하고 어찌저찌해서 google.com의 아이피주소를 획득해 저장한다.
이후에 서버통신 방법을 살펴볼것이기 때문에 DNS는 일단 그렇다 치고 넘어간다.
HTTP는 TCP 연결이기 때문에 서버와 미리 연결이 되어야한다.
1. TCP 3WayHandshake. (A->공유기)
물론 이것도 사전작업이지만, 구글 서버와의 첫 통신인 여기서부터 설명을 시작한다.
보낼 패킷을 간략하게 요약하면 이렇다.
소스아이피는 192.168.0.40. 개인네트워크에서 A의 IP주소를 가리키고, 소스포트는 랜덤, 도착지는 서버의 IP, 도착포트는 웹서버 포트인 80이다.
맥주소는 한 네트워크 안에서만 고유함을 보장하고, 네트워크 안에서 도착지를 의미하기 때문에 공유기의 MAC이 입력된다.
세부적으로 보면 TCP 패킷은 이렇게 생겻다.
포트를 세팅하고, 시퀀스넘버, 플래그등을 세팅 후 L3레이어에 넘겨준다.
이건 아이피패킷의 헤더이다.
여기서 아이피주소와 TTL(수명), 프로토콜(ICMP, TCP, UDP)을 세팅한다.
이더넷 헤더이다.
Preamble은 동기화에 사용되는 필드이며 DA, SA는 MAC주소를 의미한다.
type은 역시 상위 프로토콜의 타입을 의미하며, IP, IPv6, ARP 등이 올 수 있다.
Data는 인캡슐레이션된 상위 패킷 전부를 의미한다.
FCS는 에러검출에 사용되는 필드이다.
어쨋든 다시 돌아와서 주소를 지정하고 같은 네트워크의 다음 노드인 공유기녀석이 전달받게 된다.
2. 공유기에서의 작업
공유기는 이더넷 헤더의 Dest MAC주소를 확인해서 자신에게 온것인지 확인 후 패킷을 뜯어보기 시작한다
이 과정을 디캡슐레이션이라 하고, 아이피를 확인한 후 SNAT(Source Network Address Translation) 작업을 수행한다.
A의 IP는 사설에서 누구나 사용할 수 있는 사설아이피라서 돌아올때 패킷이 어떤네트워크의 사설 IP인지 알 수 없게된다.
공유기는 인터넷과 통신하기 위해 공인 아이피를 ISP에서 받아서 가지고있다.
NAT Table에 이 패킷이 누가 보내기 시작했는지 적어준다.
그리고 다시 L4, L3를 인캡슐레이션 해주는데, 아이피는 당연히 공유기의 공인아이피를 적고, 포트는 또 새로운 랜덤 포트(6000)로 해서 보낸다.
L2 인캡슐레이션 할 때는 src는 당연히 공유기의 MAC을 적고, dest는 서버의 MAC을 넣는다.
사실 공유기에서 서버까지 네트워크가 하나로 연결되어있을 가능성이 적기 때문에 destMAC은 다음 라우터를 가리킨다.
WAN에서는 Ethernet을 사용하지 않고, HDLC, PPP등의 프로토콜을 사용한다.
3. 서버에서 공유기로
서버가 SYN 패킷을 받고 ACK 패킷을 보내줘야 하는데, 역시 패킷을 디캡슐레이션 후 인캡슐레이션을 통해 TCP 패킷에 ACK 플래그를 세팅하고, 통신대상(공유기)의 포트를 적어서 캡슐화한다.
서버 입장에서는 A 라는 컴퓨터가 있는줄도 모른다.
4. 공유기에서 다시 A 컴퓨터로
공유기가 위의 패킷을 받았는데, 까보니 6000 포트로 온 패킷이였다.
NAT 테이블을 확인해보니 SourcePort가 6000인게 있었다. dst IP/Port를 다시 A의 주소로 바꿔주는 작업을 DNAT라고 한다.
패킷을 다시 인캡슐레이션, 디캡슐레이션 과정을 거쳐서 패킷을 만들고 A로 보낸다.
이렇게 SYN 과 ACK 를 하나씩 주고 받았다.
5. 나머지 작업
다시 ACK 를 보내 3 WayHandshake를 완성하고 HTTP 데이터도 어찌저찌 보내게된다.
라우팅 경로탐색 방식
https://velog.io/@dnstlr2933/IP-%EB%9D%BC%EC%9A%B0%ED%8C%85Routing
- 랜테이블 : 랜테이블은 라우터에 연결되어 있는 랜 세그먼트 내 장치의 주소를 관리하고 있으며 필터링 작업에 사용된다
- 네트워크 테이블 : 네트워크상의 모든 라우터의 주소를 보관하며 패킷의 수신지 라우터를 식별하는데 사용된다
라우팅 목적지 학습방법
1. 연결된 장치의 아이피를 알아옴
2. 스태틱라우팅. 라우팅테이블에 관리자가 직접 입력
3. 다이나믹라우팅. 라우팅 프로토콜로 학습
아이피 설정
서로가 서로에게 보낼때만 맞추면 된다.
아래의 경우 네트워크ID가 달라보이지만, C->A,B A->B,C. B->A,C 통신할때는 서로가 서로를 알아볼 수 있기 때문에 통신이 된다
라우팅 테이블 문제
라우팅테이블은 내부 네트워크가 아닌 다른 네트워크와 통신을 할때 확인하는 테이블이다.
내부네트워크끼리는 그냥 통신하면 되는데, 외부 네트워크는 내부에 아이피가 없어서 그걸 찾아가는 길을 알려줘야한다.
clientB의 라우팅 테이블을 보면
default = 0.0.0.0 = 모든 도착지 아이피 를 찾아가려면 168.135.114.254(라우터주소)와 통신하라고 적는것이다
clientA의 라우팅 테이블을 보면
168.135.114.0/16 으로 되어있다. 이게 어떻게 가능한가 통신할 네트워크는 168.135.64.0/18 인데
이것도 결국엔 서브넷 마스크까지 정확히 확인할 필요가없다.
그냥 A 입장에서 생각해보면 그냥 내가 보내고 싶은 데이터의 대상이 168.135.0.0 네트워크안에 있다면 라우터로 보내는것인데
이것이 오류라고 판단하는 이유는 그냥 서브넷 마스크를 아이피주소의 일부로 생각하기 때문인데, 아이피 헤더를 보면 아이피 주소는 적지만 서브넷마스크는 적지않는다는것을 확인할 수 있다. 결국 서브넷마스크는 데이터를 보내는 컴퓨터가 생각하기위해 만든 가상의 개념이다.
라우터입장에서도 그냥 받고 생각한다. 목적지 주소를 받았기 때문에 라우터는 어떤 네트워크에 이 아이피가 존재할지 알고있고, 그쪽 방향으로 보내면 그 반대편에 있는 PC나 라우터가 알아서 처리할것이라고 믿는다.
라우터 2개문제
라우터는 일단 자기의 네트워크인지 확인하고 없으면 라우팅테이블을 확인한다.
선수지식
가능한 아이피 대역을 받으면 그걸 서브넷마스크을 조절해서 나누는게 서브넷팅임
서브넷팅으로 네트워크를 나눠서 분배해줄 수 있다.
같은 네트워크 안에서는 같은 아이피, 맥주소를 사용할 수 없음
다른 네트워크라 해도 직접 통신하기 위해서는 같은 아이피를 사용할 수 없음.
라우터를 타고 다른 네트워크에 갈수있는데 라우터는 네트워크 아이디를 확인하기 때문에 네트워크 조차 겹치면 안됨.
인터넷은 디폴트 사용하면안된다. 인터넷은 항상 필요한 네트워크만 받게 테이블을 구성 해야한다.
공략
6층. 공략이 필요없을정도로 쉽다.
7층. 다 마스크 28
8층. 인터넷에서 주는 아이피 잘쓰자
9층. 왼쪽네트워크 빼면 2,5번인가 OK, 맨아래 빼고 맘대로할수있다
10층. 주는 힌트 잘써 주의해야됨 그리고 인터넷 /24로 바꿔. 모든 필드 무조건 다써야됨 나대지마
'42 Seoul' 카테고리의 다른 글
ft_containers (0) | 2022.08.07 |
---|---|
cub3d (0) | 2022.07.20 |
cpp module (0) | 2022.05.27 |
fork && wait && exit && 자식프로세스의 시그널처리 (0) | 2022.05.27 |
exam rank 04 (0) | 2022.05.26 |