-
이석복 네트워크 (11)NAT, DHCP, 공유기, id&flgs&offsetNetwork/Network 2022. 8. 3. 09:35
===
http://ocw.hanyang.ac.kr/?course=8463
===
NAT를 사용해서 IP부족 문제를 넘기고 있다
NAT로 외부로 나갈 때 IP주소를 바꿔주는데(안 바꿔주면 가긴 가겠지만 돌아오질 못하잖아 유일한 주소가 아닐테니까)
그럼 받는 애는 라우터에서 왔다고 생각해. 그 안의 존재는 몰라
리턴패킷이 오면 그 변환과정을 게이트웨이 라우터가 알기 때문에 다시 돌려준다
===
NAT라는건 보통 게이트웨이 라우터에서 동작,
바꿔주는 IP는 게이트웨이 라우터 자기자신의 IP. 이건 전세계적으로 유일한 public IP. 근데 이거 여러개다 인터페이스만큼.
▽인터페이스만큼? 그거 하나 하나 고유한거면 부족한거 아냐? SKT가 A클래스 배정받아도 24bit로 2^24?모자랄 것 같은데.. DHCP로 아끼기도 하니까..?(생활코딩에서 컴퓨터 끄면 IP회수 한다고) 근데 또 라우터를 가지치면 무한개겠네(이따 수업에서 언급함)
▽생활코딩에선 클라이언트 입장에서 나갈때는 어케 마법으로 저장해서 돌아올 때 기억하고, 서버입장에선 포트포워딩한대
저 그림 같은 경우 게이트웨이 라우터는 인터페이스가 두군데고 각자 IP를 가지고 이 라우터는 subnet두개의 멤버다
*subnet은 같은 prefix를 가지는 애들의 집합
그러므로 저 인터페이스들은 저 subnet의 prefix를 가질 수 밖에 없다
네트워크애들이 10.0.0.1.. 이러면 마찬가지로 인터페이스도 10.0.0.4 이런게 되는 것
▽네트워크 애들도 다 인터페이스 갖고 있는거고? NIC가 사설 IP일수도 있는거고?
▽라우터에 subnet만 두개 연결 돼 있는데 그럼 다른 네트워크랑은 어떻게 연결이 되는거지? 라우터끼리 연결되는게 있으면 납득할 듯. 저번 시간의 그림을 보면 라우터 사이의 네트워크는 host가 없나. 구글에 라우터 네트워크 이미지 검색 해보니 있네
▽어쨌든 어떤 라우터에 도착해서 그 안에서 맥주소로 하면 되는거 아냐? 라우터는 자기 직접 알고 연결 돼 있는 네트워크 알고 있으니까
===
▽라우터가 2개의 subnet멤버면 10.0.0.4도 전세계적으로 고유한거 아냐? NAT로 바꿔줄 때 굳이 예를 138.76.29.7로 한건가?뭐 공유기 가지친 걸 수도 있잖아
▽내부, 외부를 나눠놓은거네, 하난 위, 하난 옆이라고 생각하고 걔는 또 바깥쪽으로 연결된게 또 있으면 사설 IP라고 생각할 수 있겠다
▽
publicIP가
10.0.0.1
10.0.0.2
10.0.0.3
... 있는데
10.0.0.1을 공유해서 쓰는 subnet을 만들 수 있는것? publicIP!
있다고 치면 거기 안에는 10.0.0.2 , 10.0.0.3 이렇게 prefix똑같이 해서 아무렇게나 IP를 만들 수 있는것 같은데?
이때 10.0.0.2랑 저 publicIP 10.0.0.2랑 다른거고
===
저번 시간에 한 NAT의 문제점 2개
- 디자인상으로 layer끼리 침범
- NAT때 port번호를 바꿔버리고 리턴패킷에서 그 포트번호로 host를 찾기 때문에 host에서 원래 포트로 찾아야 했던 프로세스를 찾을 방법이 없다
===
IPv4의 문제점
- addr space
- security
이 두개가 디자인할 때 전혀 고려가 안된 상황
security도 철학자체에 고려가 없었다
지금 그때그때마다 덕지덕지 메꾸고 있다
이건 트릭이기 때문에 IPv4는 이제 어떤 방식으로든 고치긴 고쳐야돼
IPv6든
전혀 새로운 방향의 프로토콜이든
근데 IPv4쓰면서 깨닫게된 가장 큰 교훈 두가지가
- 미래는 예측할 수 없다
- 한번 정하면 생태계라서 바꾸기가 힘들다 --전 세계의 모든 라우터를 딱 하고 바꿔야해. 소유자(사업자)도 다 틀려
그래서 섣불리 IPv6로 바꾸기도 무서워 또 뭔가 문제가 생길까봐
그래서 학계에서 새로운 방향의 프로토콜을 좀 뭐가 나타나면 유연하게 바꿀 수 있게 만드는 걸 생각하고 있음
===
DHCP
강의실 누군가한테 설정 정보 불러보라고 해서 적은 것
IP
subnet mask
routes
DNS
인터넷을 하기 위해 가장 기본적으로 알고 있어야 하는 정보, DNS는 숫자 IP주소를 쳐버리면 되긴해
옆에 쓴건 호스트 ID 네트워크에서 제일 중요한애라서 호스트ID 1번
서브넷의 ID가 192.168.1.0/24라는 것 --▽이거 설명 안한건데? 모두의 네트워크에서 네트워크 주소가 호스트 ID가 10진수로 0인 주소라고 배우긴 했어
forwading기능을 해주는 라우터의 주소를 알고 있어야 구글에 패킷을 던질 수 있다
저기 얘 주소보니까 같은 네트워크에 있는애(192.168.1)라는걸 알 수 있다. 네트워크에서 제일 중요한애라서 호스트ID 1번을 가진 것
DNS는
구글로 가기전에 구글의 IP주소를 알아야하고 그건 누군가한테 물어봐야하는데 그 물어볼 로컬네임서버의 IP주소
근데 저기보면 라우터 주소랑 같아. 라우터안에 로컬네임서버 프로세스가 동작하고 있다는 것
===
저런 필수 정보들을 누가 적어? 나는 아냐
DHCP가 한다
Dynamic Host Configuration Protocol
결국 가장 중요한 단어가 Host Configuration
노트북 뚜껑 딱 열었을 때, 제일 처음에 host를 Configue 해주는 프로토콜
Dynamic은 내가 어딜 가든 노트북 뚜껑만 열면 동적으로 저런 4가지 정보들을 해주겠다는 것
밥 먹고 컴퓨터 다시키면 다른 정보가 세팅된다
내가 새로운 곳에 갔을 때 내 IP주소, 그 지역의 라우터, DNS를 알기 어렵기 때문에 자동으로 해준다
데스크탑에서 내 자신의 고정된 IP나 라우터를 쓰는 경우도 있다 그땐 안해줘도 돼 static IP라고 한다
이동하면서 떠돌이생활하면 해줘야돼
===
DHCP 동작 과정 얘기 전에 좀 더 개념적으로
고장 IP를 쓰면 DHCP는 필요없다
한양대에서 입학하면 학번이랑 고정 IP를 준다고 쳐봐. 학교에 있을 땐 이 IP를 사용하게
그럼 큰 손해인게 IP가 최소 인원만큼 필요해
DHCP를 쓰면 동시에 active한 학생만큼만 필요해
address pool을 갖고 그때그때 분배하면 된다
대신 IP를 회수하는 작업이 필요해
===
작동방식
IP주소필요해 요청
1시간 정도 빌려줌
기간 끝나면 회수
더 필요하면 다시 요청
..
===
맨~~처음에 223.1.2 서브넷에서
누군가가 이 네트워크에 들어와, 얘가필요한 정보는 아까 그 4개
근데 얘는 애초에 네트워크에 DHCP를 통해서 자동적으로 나한테 알려줄 애가 있는지도 몰라
걔가 있다고 쳐도 걔의 IP주소도 몰라(DHCP server)
아무것도 몰라
이 상황에서 어떤식으로 진행될까?
*DHCP가 사실 DHCP server 프로세스라서
보통 DHCP server 따로 host 가 있는게 아니라 게이트웨이라우터가 DNS(얘도 프로세스), DHCP 다 맡는다
===
DHCP discover 메세지(랩탑에 DHCP Client가 있다, 얘가 메시지를 브로드캐스트)
src : 0.0.0.0 나 아직 무명이다 68 에다 DHCP 클라이언트를 돌리고 있겠다
dest : 255.255.255.255는 모든 비트가 1이면 브로드캐스트다.
*브로드캐스트 : subnet에 있는 모든 멤버는 다 이 메시지를 받아
DHCP 서버는 67번이라고 돼 있다 ▽이건 어떻게 알아? 검색해보니까 통상 67번 68번 쓰나봐
transaction ID : 는 랜덤하게 한 것
▽클라이언트가 68번 쓰면 response받아야하니까 그걸 받을 때 또 68번으로 받는건가 포트는 클라이언트나 서버나 상관없나
이 메세지를 모두가 들었다 그치만 DHCP server만 의미있게 받아들여 나머지 애들은 무시해
어떻게? DHCP server가 돌고 있는 애만 67번 포트가 돌고 있는 상황. 레이어 올라오다가 67번없네 하고 드랍
===
DHCP offer
몇개 남아있으니까 줄게(DHCP Server)
src : 자기자신
dest : 브로드캐스트(아직 사용자 이름없어), 68 --▽이름없어도 브로드캐스트는 받는구나?
사용자만 68번이 열려있어서 브로드캐스트를 혼자 의미있게 받아들인다 + 보냈던 transaction ID
yiaddrr 주는거
lifetime 이 시간 동안
offer에
라우터 IP
DNS IP 다 들어있다
===
사용자는 offer가 맘에 들면 수락해야해
offer를 수락한다는 의미로 이 offer에 대한 request를 보낸다
아직도 IP주소 확정 안돼서 0.0.0.0
난 니가 방금 준 거 사용하고 싶다는 의미로 아까의 transaction ID에서 +1시킨다
이게 끝난 순간 세팅이 됨(ACK 전인가본데?? 그림보면 request에 IP없는데? 뭐야 ACK도 브로드캐스트야)
===
offer만 하면 끝아냐??왜 뭔가 또 해
(맨 처음에 했던)discover : 나 도와주세요 였는데
근데 이때 DHCP서버가 여러개 있을 수가 있어 두개면 두개에서 각각 offer가 온다
둘중에 맘에 드는거 선택해서 하겠다고 하는게 DHCP request
===
DHCP request엔 방금 서버 주소 알려줬었는데 왜 또 브로드캐스트야?
offer 선택 못 받은 애한테 이렇게 됐다고 말해주는 것
===
게이트웨이라우터엔 DNS, DHCP 말고 또 어떤 프로세스가 돌고 있을까? NAT, firewall(뒤에 배움)
포워딩은 네트워크 레이어, 좀 밑에단에서 하는 일
원래 포워딩만 해야되는데 굳이 또 서버사기 싫고 어차피 얘도 컴퓨터니까 붙여놓은것
여러분들은 웬만하면 어딜가든 NAT 뒤에 있어요
===
SK한테 돈내면 주는게 IP address준것
▽이게 public IP인지 궁금했는데 말 안해주시네 게이트웨이 라우터라니까 public IP 맞는듯?
->마지막에 말 해주셨다!! 그건 모른대. SK에서 또 NAT를 쓸 수 있대 NAT는 끝이 없는 세상이래
내가 무선 공유기를 쓰면 저 IP address를 공유해서 쓴건데
이때 NAT, DHCP, NS 다 적용됨
무선 공유기라고 불리는게 게이트웨이 라우터 기능을 하고 있다
엄마 아빠 나 누나 동생 IP 다 prefix 똑같아. IP주소는 틀려. 근데 거쳐서 구글갈땐 또 같아 SK준 그 IP
그리고 그 (prefix).1은 무선공유기야
===
NAT는 귀여운 트릭이지만 디자인상 계속 유지하기엔 큰 문제가 있다
NAT속에서 web server 80번 돌릴 수 있겠냐고 없다고~ 이 네트워크 안에선 되는데 밖에선 접근을 못해
▽내 결론으로 그래도 어쨌든 현실에서 하긴 하니까 생활코딩에서 했던 IP랑 port를 묶어서 앞 게이트웨이 라우터의 포트에 매칭 시킨다로 결론 내렸음
===
레이어마다 포트, IP, 맥어드레스 주소가 있지만 어떤 어드레스든 모든 비트가 1이면 브로드캐스트(IP어드레스를 전부 1로 하면 내려가서 맥 어드레스 주소도 전부 1로)
===
이것저것 다 했는데 아직 이거 세개 얘기 안함
identifier
flgs
offset
===
저 세개 필드 어디에 쓰이냐면 예를 들어서
센더가 IP 패킷을 생성했는데, 4000bytes짜리
링크에서 배우겠지만 각 링크별로 링크가 한꺼번에 보낼 수 있는 데이터 유닛의 멕시멈 사이즈가 정해져 있다
Maximum transfer size(MTU). 이건 링크레이어 테크놀러지 마다 틀리다(이더넷, 와이파이, 3G..)
보냈는데 잘 가다가 특정 링크에서 MTU가 1500bytes면?
IPv4에선 MTU사이즈에 맞는 독립적인 사이즈로 바뀌어져. 서로 다른 패킷이 돼
독립적으로 진행하다가 저 맨 밑에 그림에서 합체 돼
이걸 위해 필요한게 방금 본 필드들
===
이런 패킷을 생성했다고 치자
4000, x, 0, 0
ID는 패킷별로 유일하게 센더가 정하면 되고
flag는 이 패킷 자체가 이 뒤로 flagment된 게 있는지. 당연히 처음엔 0
offset은 flagment된 경우에 첫번째 시작부분이 전체 패킷에서 어느정도에 위치하는지
가다가 MTU = 1500 짜리 만남
분리가 돼야해
4000은 전체고 헤더는 20byte야 실제로 데이터는 3980이고
패킷이 쪼개져야해
기본적으로 3개로 쪼개진다
잘 쪼개야 나중에 조립이 가능해
제일 첫번째 것
ID유지해야 합쳐진다
flag는 1, 내 뒤에 flagment있다는 말
offset는 0, 나는 제일 앞이다
두번째 offset 왜 185?
4000인데
첫번째 length 1500으로 데이터가 1480들어간 것
그럼 그 다음은 1480부터 시작해서 1480만큼 사이즈가 들어간 것
그럼 1480을 적어주면 되는데 필드 비트수 줄이려고 /8해서 적어줌 = 185
/8은 끝에 3비트씩 미는 것. 3비트씩 절약한다
3980 = 1480+1480+1020
===
분리 돼서 독립적인 패킷이 됐는데 중간에 하나가 없어지면?
reassembly 안되고
패킷이 완성이 안됐으니 위로 못올리고
TCP에서 timer터짐
'Network > Network' 카테고리의 다른 글
이석복 네트워크 (13)Distance vector (0) 2022.08.04 이석복 네트워크 (12)ICMP, link state (0) 2022.08.04 이석복 네트워크 (10)IP, CIDR, Subnets, NAT (0) 2022.08.03 이석복 네트워크 (9)복습, UDP&DNS, network layer (0) 2022.08.02 이석복 네트워크 (8)congetion control (0) 2022.08.01