[네트워크] 12차시 - 네트워크계층(2)
2023. 4. 27. 23:29ㆍCS/네트워크
728x90
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎
서브넷과 NAT 개념을 배운다.
0. 복습
- 응용(세션): FTP, DNS, HTTP, SHTP
- FTP: stateful protocol, TCP connection이 로그인해서 로그아웃할 때까지가 한 세션, 어느 디렉토리에 가서 어떤 파일을 다운받고 있고 까지가 tracking 된다.
- DNS: 컴퓨터에서 사용하는 IP주소와 사람이 기억하기 쉬운 일반적인 이름을 매핑, 응용계층에서만 사용
- HTTP: 웹 서비스를 만든 프로토콜, 단순한 설계로 확장성이 높다
- SMTP: mail.google.com에 웹 클라이언트로 접속해서 메일을 보낼 때는 HTTP를 이용하지만 핸드폰이나 컴퓨터의 메일 클라이언트를 이용해서 메일을 보낼 때에는 SMTP를 이용, 일반적으로 메일을 보내는 서비스만 SMPT, 메일을 받아오는 서비스는 IMAP
- 전송계층: TCP, UDP, RTP
- TCP: 바이트 단위로 전송, 보내는 바이트들의 내용의 순서가 바뀌지 않고, 유실이 없음, 지연시간 때문에 전화통화에 적합하지 않음
- UDP: 패킷이 사라지던, 순서가 바뀌던 신경 쓰지 않지만, 지연시간이 없기 때문에 전화통화에 적합
- RTP: 실시간 전송을 위한 추가적인 제어 패킷이 붙은 프로토콜
- 네트워크: IP
- 주소 개념 지원, 라우팅(경로) 찾기 개념 지원, 주소가 주어졌을 때 패킷을 순차적으로 보내다 보면 최종 목적지까지 가도록 하는 역할을 하는 계층
- 라우팅: 목적지가 주어졌을 때 각각의 네트워크 중앙에 있는 장비들이 패킷을 받으면 패킷을 다음 단계로 넘겨주는 역할, 재귀적으로
- 네트워크는 TCP와 묶여서 허리를 이루는 아키텍처
- IP만 고려해서 응용 계층을 만들면 됨, 링크계층을 고려할 필요가 없다.
- 링크계층 프로토콜을 만들 때에도 IP만 고려해서 만들면 된다. 응용 계층에 어떻게 서비스할지 고려할 필요 없다.
- IP를 바꾸기 어려운 문제가 있다.
- 링크: 이더넷, wifi, LTE, 3G
- 노드와 노드를 연결하는 링크를 사용, 패킷을 전송하는 링크는 무선, 이더넷, atm 등이 될 수 있다.
1. 라우팅
- DV(Distance Vector) Routing: 주변 정보만을 가지고 라우팅
- 각각의 노드는 전체 내용을 가지고 있는 것이 아니라 나와 내 주변 노드들이 최종 목적지까지 가는데 얼마큼의 비용이 드는지를 가지고, 내가 목적지까지 가는 비용을 계산하고, 그다음 최적 노드를 계산
- 주변 정보로 최적값을 찾으면 라우팅에 루프가 생기는 문제가 발생할 수 있다. 루프가 생기면 장비가 죽어버리고, 그 장비를 사용하는 네트워크 라우트가 죽어버리는 현상이 전염되어 네트워크 전체가 다운될 수 있다.
- LS(Link State) Routing: 전체 네트워크 정보를 가지고 라우팅
- 네트워크상에서 변화가 생겼을 때 count to infinity 같은 문제를 해결하기 위한 방법
- 모든 링크의 비용을 계산해서 최적값을 계산, 비용이 많이 들지만 네트워크의 속도에 대비 큰 비용이 아니기 때문에 요즘 많이 사용
2. IP
- v6: 128bit 주소체계
- 2A:38:98:68:43:39:5B:1C
- v4: 32bit 주소체계
- 192.67.42.45
3. 라우팅 테이블(= 포워딩 테이블)
- 목적지, 비용, next hop으로 구성
- Nexthop (목적지 IP) = 다음 hop Node : Nexthop이라는 함수에 목적지 주소를 넣으면 다음 hop에 해당하는 노드를 반환
- 어떤 IP 주소를 넣더라도 다음 합을 어디로 보내야 할지 결정되어야 함 - 전 세계 IP를 다 넣을 수 있어야 한다.
→ 라우팅을 위해 목적지에 IP를 쌩으로 적는 것은 감당하기 어려운 비용
⇒ 대체로 비슷한 곳에 있는 IP는 Next hop이 같을 것 ~ 묶어서 표현하는 subnet
- 어떤 IP 주소를 넣더라도 다음 합을 어디로 보내야 할지 결정되어야 함 - 전 세계 IP를 다 넣을 수 있어야 한다.
- subnet: IP 여러 개를 묶어서 하나의 엔트리로 생각할 수 있는 개념
- a.b.c.d/x : 134.64.0.0/10 → 32bit 전체 중에서 앞에 10bit만 잘라서 subnet part, 나머지 22bit는 host part
- subnet part만 보고 목적지를 판단하겠다: 라우팅 테이블의 엔트리를 줄일 수 있다.
- 경로 찾기
- LAN에서 경로 찾기
- 서로 연결된 LAN에서 경로 찾기
- 대표하는 노드 찾기
- 백본망 - 계층적인 구조가 가능하다.
4. IP 패킷의 구조
- Ethernet 헤더, IP 헤더, TCP 헤더는 바이너리 형식, HTTP부터는 문자열
- 레이어를 거칠 때마다 헤더가 변경됨
4-1. IP 헤더
- 버전, 헤더 길이, 서비스 타임, 전체 Packet 길이(16bit)
- IP는 헤더 길이가 가변적이다
- 16bit 패킷 ID, flag, fragment offset
- 동일한 ID에 대해서 fragment를 여러 조각내고 같은 ID의 fragment들을 조합한 덩어리를 TCP에 올림
- fragment offset: 중간에 조각낼 수 있게 해 줌
- TTL, upper layer, header checksum
- TTL은 라우터로 가는 hop수가 무한히 돌아 장비를 죽이는 일이 없게 하기 위해서 사용
- 1 합마다 1씩 감소 → 0이 되면 trash
- TTL을 작게 잡으면 목적지가 없는 패킷(= 네트워크 전체로 보내는 패킷)의 범위를 좁게 조절할 수 있다.
- header checksum: header 자체가 전송되다가 중간에 noise나 interference에 의해 바뀐 비트가 있는지를 검사
- TCP에도 checksum이 있기 때문에 IPv6에서는 사용하지 않음
- TTL은 라우터로 가는 hop수가 무한히 돌아 장비를 죽이는 일이 없게 하기 위해서 사용
- Source IP 주소: 전송 측 IP 주소
- Dept IP 주소: 목적지 IP 주소
- optional: 확장된 IP를 만들고 싶을 때 사용, 확장된 내용을 추가할 수 있고 이로 인해 헤더 길이(가변적)를 설정할 수 있다.
- IPv6에서는 지원하지 않음: optional 때문에 헤더 길이가 유동적이게 되고, 유동 적인 헤더 길이는 전체적인 프로세싱의 지연을 유발함
- 본문: IP 입장에서의 본문일 뿐 실제 본문은 아니다. TCP헤더를 포함한 본문
4-2. IP Fragmentation
- 프로토콜이 다른 링크 간에 패킷을 보내려면 라우터에서 IP Fragmentation을 해주어야 한다.
- 애초에 TCP라면 세그먼트 크기를 4000 Byte로 하지 않았을 수 있고
- UPD는 데이터그램 크기를 IP가 임의로 자를 수 없다. 전송 단위가 패킷이기 때문에
- 라우터: 서로 다른 링크 레이어를 연결해 주는 역할, 위에는 IP 레이어, 아래의 양단에는 서로 다른 두 레이어가 위치한다.
- 이더넷 → IP → 광섬유로 올리는 과정에서 IP Fragmentation 해주어야 한다.
- IP 헤더 기본 크기 20 Byte → 본문의 크기 3980 Byte
- flag fragment: 그 뒤에 추가적으로 남은 내용이 있는지를 알려줌
- offset: 전체 패킷에서 어디부터 시작하는지를 알려줌, 8 Byte 단위로 끊어 계산
⇒ 원래 IP에서는 1 덩어리였던 게 3 덩어리로 나뉘어서 Fragmentation 해서 전송됨, 다음 단계에서 굳이 합체하지 않아도 됨 마지막에서 합쳐져도 됨 구현에 따라 달라짐
- 마지막 단에서 하나의 IP 데이터그램이 되어 윗 레이어(TCP, UDP)로 올라가서 처리
- 하나라도 오지 않으면 안 됨
- IP 단에서는 패킷이 왔는지 잘 왔는지 관여하지 않고 TCP 레이어가 관리
5. IP 할당
- ISP 또는 기관에서 subnet 영역 할당받음
- IP를 관리하는 국제기구 ICANN(Internet Corporation fer Assigned Names & Numbers)에 요청함
- 서버 운영시 state IP를 ISP 또는 기관에서 요청하여 할당받음
- 기계에 수동 입력
- DHCP(Dynamic Host Configuration Protocol)
- 서버가 아닌 경우
- 처음 요청할 때 Src: 0.0.0.0, Dst: 255.255.255.255
- 255.255.255.255: broadcast: 모든 노드(DHCP 서버 포함)가 듣도록 하는 IP 주소, UDP 기반, TTL 세팅해줘야 함
- DHCP 서버가 남는 IP 중 하나를 골라서 응답을 한다.
- Src: 서버 주소, Dst: 255.255.255.255
- 자신이 요청했던 ID와 응답한 ID가 동일한 것을 알고 IP를 할당받을 수 있음
- ID를 브로드캐스트로 요청 → DHCP 서버에서 ID와 IP 응답 → 여러 개의 응답을 노드가 받았다면 그중 하나를 선택해서 confirmation → DHCP 서버에서 ACK과 least time을 보낸다.
- lease time(수명): 유효한 시간만큼만 IP를 할당, 노드는 재요청을 해서 least time을 연장
- 네트워크를 사용하지 않을 때에는 IP에 연결되어 있지 않기 때문에 IP를 유동적으로 사용 효율을 높일 수 있다.
6. NAT(Network Address Translation)
- 게이트웨이는 Global IP를 가지고 있고, 그 아래의 LAN 안에서의 IP는 local IP를 가지고 있다. 그렇기 때문에 LAN안의 local IP는 LAN 안에서만 유니크하다.
- Globlal IP를 가진 게이트웨이가 전체 LAN을 대표한다.
- local IP가 구글 서버에 연결해도 구글 서버에서는 Global IP가 접속한 것처럼 보인다.
- local IP안에 IP가 다르지만 같은 포트번호를 쓰는 경우 구글 서버에 접속할 때 같은 IP로 보이기 때문에 TCP 포트 번호까지 바꿔야 한다: IP 레이어와 TCP 레이어를 같이 봐야 한다.
- 원칙적으로는 IP 패킷은 처음부터 끝까지 갈 때까지 변하면 안 되지만 NAT 기법에 한해서는 Global IP를 담당하는 NAT 게이트웨이를 지나갈 때 local IP가 자신의 global IP로 변함
- NAT local IP로 사용할 수 있는 subnet: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
6-1. Port Maapping Table
- NAT Router는 IP를 2개 가진다: 안 쪽에서 대표할 수 있는 IP(= local IP에도 연결), 바깥쪽에서 대표할 수 있는 IP(= global IP에도 연결)
- port mapping Table에 의해서 NAT 영역 밖으로 나갈 때 Port가 변조됨
- 구글 서버에서 볼 때에는 같은 기기의 서로 다른 포트에서 연결한 것처럼 보임
- IP 헤더의 Src에는 IP 주소, TCP 헤더의 Src에는 포트번호 → 하나의 소켓
6-1-1. Endpoint-independent mapping Table(EIM)
- local IP, Port Number, Global Port Number
- 단점) 서비스할 수 있는 노드의 개수가 포트의 개수(16bit)로 제한되어 있음
- 해결책) Endpoint-dependent mapping Table
6-1-2. Endpoint-dependent mapping Table(EDM)
- Src local IP, Src local Port, Dept IP → Src Global Port
- 앞에 있던 포트를 재사용할 수 있다.
- 다른 서버에 같은 포트로 접속했다고 해도 LAN에 응답을 보낼 때에는 Src Port Number에게 따로 보내기 때문에 재사용할 수 있다.
- 같은 Src Global 포트로 구글, 네이버, 다음에 접속할 수 있다. 목적지가 다르기 때문
- 안에서 서비스할 수 있는 노드의 개수가 훨씬 더 증가
- 테이블 내에서 Dept IP와 Src Global의 쌍은 언제나 유일해야 한다.
- Src local IP, Dept IP와 Src Global의 쌍도 언제나 유일해야 한다.
⇒ 하나의 포트번호가 안 쪽에 있는 하나의 포트만 대표하는 것이 아니고 여러 개의 포트를 대표할 수 있도록 재사용하는 것
6-2. NAT에서 P2P 지원
- Static map 사용
- B의 GW안에 Static map을 사용하면 B머신에 웹서버를 설치할 수 있다.
- port mapping을 static 하게 설정
- 문제점
- 사전 설정이 필요 = 사용자의 지식 필요
- 안에 있는 머신 중에 하나만 같은 포트 번호에 static mapping이 가능
- Relay host
- skype 서버 혹은 기계 중 하나가 relay host가 되는 것
- 서버가 B에게 relay host와 TCP/UDP 연결 설정을 하고, 연결이 끊어지지 않도록 띄엄띄엄 패킷을 보냄
- GW안에 port mapping이 있는 상태, relay host는 B를 대표하는 상태
- 포트 연결: A → A의 GW → Relay host → Relay host와 B는 port mapping이 되어 있는 상태
- 완전히 직접은 아니다.
- NAT 내부의 노드는 사전에 Global IP를 가지는 Relay host와 영구적인 연결을 설정
- 언제 연락이 올지 모르기 때문에 연결을 계속 살려둠
- EDM, EIM 모두 사용 가능
- hole puncturing
- Global IP를 가지는 서버와 NAT 내부의 클라이언트가 사전 연결 과정을 가짐 → 각 NAT Router의 port mapping table에 등록 → 노드가 연결을 시도할 때 해당 port를 알려준다
- 연결되는 홀 자체를 서버가 미리 뚫어 놓고 있다가 홀 번호를 알려줌
- A-GW -(영구적인 연결)- skype -(영구적인 연결)- GW-B
- EIM은 포트번호가 1:1 매핑, LAN안의 노드와 GW는 EIM으로 연결
- 포트 매핑 테이블이 계속 업데이트됨
- 포트만 뚫어둔 상태에서 연결을 하고자 하면 skype가 게이트웨이의 포트번호를 알려준다
- 문제점) 사전 정보가 없어서 누가 연결했는지에 따라서 안쪽 포트번호가 달라지기 때문에 EIM에서만 가능하다.
- Global IP를 가지는 서버와 NAT 내부의 클라이언트가 사전 연결 과정을 가짐 → 각 NAT Router의 port mapping table에 등록 → 노드가 연결을 시도할 때 해당 port를 알려준다
[복습]
- 응용(세션): FTP, DNS, HTTP, SMTP / 전송: TCP, UDP, RTP / 네트워크: IP / 링크: 이더넷, wifi, LTE, 3G
- 라우팅
- DV Routing: 주변 정보만을 가지고 라우팅
- LS Routing: 전체 네트워크 정보를 가지고 라우팅
- 라우팅 테이블
- 목적지, 비용, next hop으로 구성
- 라우팅을 위해 모든 목적지에 IP를 쌩으로 적는 것은 감당하기 어려운 비용이 들기 때문에 대체로 비슷한 곳에 있는 IP는 Next hop이 같을 것으로 생각해 묶어서 표현하는 subnet을 사용한다.
- IP주소는 subnet part와 host part로 구성되어 있는데 subnet part만 보고 목적지를 판단하면 라우팅 테이블의 엔트리를 줄일 수 있다.
- IP 헤더
- 버전, 헤더 길이, 서비스 타임, 전체 packet의 길이
- 16 bit 패킷 ID, flag, fragment offset
- TTL, upper layer, header checksum
- Source IP
- Dept IP
- Optional
- IP Fragment: 큰 IP 패킷을 작은 조각으로 쪼개어 전송하는 방법
- 라우터: 서로 다른 링크 레이어를 연결해 주는 역할
- IP 헤더 기본 크기 20Byte
- IP 할당: DHCP: UDP 기반 프로토콜, 서버가 네트워크 클라이언트에게 IP 주소를 실시간으로 부여할 수 있도록 하는 것
- 255.255.255.255 : 브로드캐스트: 모든 노드가 듣도록 하는 IP 주소
- NAT: IP 패킷에 있는 출발지 및 목적지의 IP주소와 TCP/UDP 포트 숫자 등을 바꿔 재기록하면서 네트워크 트래픽을 주고받게 하는 기술
- Endpoint-dependent mapping table: local port당 global port 1개를 매핑하기 때문에 서비스할 수 있는 노드의 개수가 포트의 개수로 제한되어 있다.
- Endpoint-independent mapping table: Global 포트번호를 재사용할 수 있음
- P2P 지원: static map, relay host, hole puncturing
한국항공대학교 김철기 교수님의 [컴퓨터 네트워크] 강의 정리입니다. 감사합니다.
http://www.kocw.net/home/cview.do?lid=2943ffb74ce0e2b8
http://www.kocw.net/home/cview.do?lid=69f7b6804b2d6061
728x90
'CS > 네트워크' 카테고리의 다른 글
[네트워크] 13, 14차시 - 링크계층(1), (2) (0) | 2023.05.02 |
---|---|
[네트워크] 네트워크계층 복습 및 정리 (0) | 2023.04.28 |
[네트워크] 11차시 - 네트워크계층(1) (0) | 2023.04.25 |
[네트워크] 전송계층 복습 및 정리 (1) | 2023.04.18 |
[네트워크] 9차시 - 전송계층(2) (1) | 2023.04.18 |