Network 기초 쌓기
용어 정리와 도식화로 네트워크를 이해해보자.
TCP/IP 도식화
보내는 쪽
받는 쪽
전송계층에서 Acknowledgement
식별자
User
계층, Kernel
계층이 상호작용 하기 위해서 interface 가 존재하는데
- 이를
socket
이라고 부른다. socket
이라는interface
는file
형태로 추상화된다.file
형태로 존재하기 때문에 User 계층에 존재하는 Application Process 에TCP
가 접근할 수 있게 된다.
MAC 주소
H/W
계층 식별자 (L2
)- 하드웨어 주소라고 볼 수 있다.
- 그럼
MAC
주소는 절대로 변경이 불가능한건가?- 변경할 수 있다.
NIC
가 있어서LAN
에 연결되기에NIC
의 개수만큼MAC
주소를 가지고 있다.
IP 주소
Network
계층 식별자 (L3
)
Port 번호
Transport
계층 식별자 (L4
)- 개발자 관점에서
process
번호 - 네트워크 관리자 관점에서는
service
번호 - 통신공사 관점에서는
interface
번호
Host, Switch, Network
Host
- 인터넷에 연결된 컴퓨터이다.
Network
의 이용 주체- End-Point(= 단말기) 라고 부른다.
Network
Host
는Network
그 자체라고 볼 수 있다.Switch
로 분류된다.Router
를 통해 switching 이 이루어진다.MAC
주소를 통해 switching : L2 스위치IP
주소를 통한 switching : L3 스위치 (= router)PORT
번호를 통한 switching : L4 스위치HTTP
특정 정보를 통한 switching : L7 스위치- L7 로 갈수록 헤더에 붙는 정보가 많아져 연산량이 증가하기 때문에 가격이 비싸진다.
Network 는 개념적으로는 독립적인 장치가 어떤 영역 내에서 물리적 통신 채널을 통해서 서로가 직접 통신할 수 있도록 지원하는 데이터 통신 체계이다.
인터넷 또한 물론 네트워크이고, 다음과 같이 말할 수 있다.
인터넷 : Router + DNS 의 집합체
네트워크의 단위 ⭐
네트워크 인터페이스 선택 원리와 기준
윈도우 OS 인 경우, route PRINT
명령어를 통해 IPv4 경로 테이블을 확인할 수 있다. 거기서 메트릭, 즉 비용이 가장 적은 인터페이스가 우선적으로 선택된다.
맥 OS 인 경우 직접 확인해보니 좀 달랐다.
- en0 : WIFI
- en1, en2 : 썬더볼트를 통한 IP 제공
- lo : loopback
- ubun# : 제 3자에 의해 사용되는 tun/tap 인터페이스
- kernel 단에서 제공되는 가상 인터페이스(?)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
❯ netstat -nr
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 192.168.0.1 UGScg en1
127 127.0.0.1 UCS lo0
127.0.0.1 127.0.0.1 UH lo0
169.254 link#13 UCS en1 !
192.168.0 link#13 UCS en1 !
192.168.0.1/32 link#13 UCS en1 !
192.168.0.1 88:36:6c:b0:7f:7c UHLWIir en1 1170
192.168.0.4 f0:d4:f7:5f:d3:3f UHLWI en1 1190
192.168.0.6/32 link#13 UCS en1 !
192.168.0.20 8e:cc:ff:30:fa:22 UHLWI en1 1137
192.168.0.25 link#13 UHLWI en1 !
192.168.0.255 ff:ff:ff:ff:ff:ff UHLWbI en1 !
224.0.0/4 link#13 UmCS en1 !
224.0.0.251 1:0:5e:0:0:fb UHmLWI en1
239.255.255.250 1:0:5e:7f:ff:fa UHmLWI en1
255.255.255.255/32 link#13 UCS en1 !
networksetup -listnetworkserviceorder
명령어를 통해서 여러 네트워크 인터페이스의 우선순위를 확인할 수 있고, 네트워크 설정에서 변경도 가능하다. 다만, 구체적인 메트릭 값이 얼마인지는 최근 자료에서는 찾을 수 있는 것이 없었다. 어떤 포럼에서의 질답을 보니 메트릭을 확인해서 내부적으로 로드밸런싱이 이루어지고 있고, 구형 맥에서는 해당 값을 확인하는 설정 탭이 따로 존재한것으로 보인다.
1
2
3
4
5
6
7
8
9
10
11
12
13
❯ networksetup -listnetworkserviceorder
An asterisk (*) denotes that a network service is disabled.
(1) Ethernet
(Hardware Port: Ethernet, Device: en0)
(2) USB 10/100/1000 LAN
(Hardware Port: USB 10/100/1000 LAN, Device: en5)
(3) Thunderbolt Bridge
(Hardware Port: Thunderbolt Bridge, Device: bridge0)
(4) Wi-Fi
(Hardware Port: Wi-Fi, Device: en1)
ipconfig getsummary en1
을 입력하면 아래와 같다 (몇 가지 정보는 지웠다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
❯ ipconfig getsummary en1
<dictionary> {
Hashed-BSSID : 3c:d6:4f:02:cc:22
IPv4 : <array> {
0 : <dictionary> {
Addresses : <array> {
0 : 192.168.0.6
}
ChildServiceID : LINKLOCAL-en1
ConfigMethod : DHCP
DHCP : <dictionary> {
LeaseExpirationTime : 11/28/2023 17:59:05
LeaseStartTime : 11/28/2023 15:59:05
Packet : op = BOOTREPLY
htype = 1
flags = 0
hlen = 6
hops = 0
xid = 0xd4d1b35f
secs = 0
ciaddr = 0.0.0.0
yiaddr = 192.168.0.6
siaddr = 0.0.0.0
giaddr = 0.0.0.0
chaddr = 14:98:77:83:ff:4a
sname =
file =
options:
Options count is 7
dhcp_message_type (uint8): ACK 0x5
server_identifier (ip): 192.168.0.1
lease_time (uint32): 0x1c20
subnet_mask (ip): 255.255.255.0
router (ip_mult): {192.168.0.1}
domain_name_server (ip_mult): {"",""}
end (none):
State : BOUND
}
IsPublished : TRUE
Router : 192.168.0.1
RouterARPVerified : TRUE
ServiceID :
SubnetMasks : <array> {
0 : 255.255.255.0
}
}
1 : <dictionary> {
ConfigMethod : LinkLocal
IsPublished : TRUE
ParentServiceID :
ServiceID : LINKLOCAL-en1
}
}
IPv6 : <array> {
0 : <dictionary> {
ConfigMethod : Automatic
DHCPv6 : <dictionary> {
Mode : None
State : Inactive
}
IsPublished : TRUE
RTADV : <dictionary> {
State : Solicit
}
ServiceID :
}
}
InterfaceType : WiFi
LinkStatusActive : TRUE
NetworkID :
SSID : jj
Security : WPA2_PSK
}
또한 netstat
명령어를 입력하면, 실시간 통신 상태를 터미널에서 확인할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
❯ netstat
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 192.168.0.6.55428 server-13-225-12.https ESTABLISHED
tcp4 0 0 192.168.0.6.55426 server-13-225-12.https ESTABLISHED
tcp4 0 0 192.168.0.6.55425 stackoverflow.co.https ESTABLISHED
tcp4 0 0 192.168.0.6.55390 20.205.69.80.https CLOSE_WAIT
tcp4 0 0 192.168.0.6.55387 stackoverflow.co.https ESTABLISHED
^[[Atcp6 0 0 fe80::809f:82ff:.55212 c4145b6d-1a09-47.55504 ESTABLISHED
tcp6 0 0 fe80::809f:82ff:.55211 c4145b6d-1a09-47.55503 ESTABLISHED
tcp4 0 0 192.168.0.6.55203 td-in-f188.1e100.https ESTABLISHED
tcp4 0 0 192.168.0.6.55202 lb-140-82-113-25.https ESTABLISHED
tcp4 0 0 192.168.0.6.55200 121.53.203.203.https ESTABLISHED
tcp4 0 0 192.168.0.6.55199 131.160.120.34.b.https ESTABLISHED
tcp4 0 0 192.168.0.6.55198 17.57.145.134.5223 ESTABLISHED
tcp4 0 0 192.168.0.6.55197 ec2-35-174-127-3.https ESTABLISHED
tcp4 0 0 192.168.0.6.55196 lb-140-82-113-25.https ESTABLISHED
tcp4 0 0 192.168.0.6.55163 stackoverflow.co.https ESTABLISHED
그렇다면, Linux, Window, Mac 할 것 없이 라우팅 테이블이 가지고 있는 정보를 토대로 인터넷에 연결된다.
- IP 주소를 라우팅 테이블에 적힌 모든 서브넷 마스크와 비트 연산(AND) 한다.
- 계산된 값(= )을 모든 네트워크 대상과 비교한다.
- 일치하는 네트워크 대상에 대한 메트릭 값을 비교하고, 가장 비용이 적은 인터페이스를 선택한다.
- 소켓에 TCP/IP 를 바인딩하고, 소켓 -> 세그먼트 -> 프레임 을 보내 통신한다.
공유기 작동 원리 ⭐
NAT : 네트워크 주소 변환
공유기가 중간에 IP 주소, PORT 번호를 바꾼다!
강사님 명언: 연결은 착각이다.
그럼 네이버에서 다시 패킷을 보낼 때, 아래와 같이 보낸다.
그럼 네이버에서 전송된 패킷이 공유기를 거치며 NAT 에 관련 정보가 담겨있으니, 테이블을 검색한다.
IP 주소의 종류
인터넷은 Router 와 DNS 의 집합체이다.
- Global IP
- Global IP 가 동일할 수 없다. (
GSLB
생각하지 말기)
- Global IP 가 동일할 수 없다. (
- Private IP
curl https://ifconfig.me
터미널에 입력하면 주소 확인 가능- A 클래스, B 클래스, C 클래스, D 클래스
- C 클래스: 192.168.x.x
- 공유기에서 주로 사용
Loopback
- 127.x.x.x (127.0.0.1)
- Host 자신을 의미한다.
- 패킷이 만들어지지만, 외부로 나가지 않는다.
- 패킷이 IP 계층까지 도착하지만, 다시 Host 로 돌아간다.
- 그렇다면, 외부와 접점이 없는
IPC(Inter Process Communication)
경우- loopback (localhost=127.0.0.1) 을 사용하면 될 것 같다.
- 하지만, IPC 에서 소켓 통신을 사용하면 불필요한 전처리 과정을 거쳐야하기 때문에 느리다.
- Docker 를 사용하는 경우, 컨테이너 간 통신은 또 linux namespace 를 활용하여
- localhost 를 통해 내부 통신이 가능하고, 이는 따로 정리한다.
- Broadcast
CIDR
👷🚧
8비트로 사설 IP 를 잘게 쪼개서, 버려지는 것이 없도록 낭비를 막기 위한 도입된 꼼수이다. 좀 더 세밀하게 잘라서, 낭비되는 자투리를 최대한 막는것이 목적.
또한 192.168.10.70/26
등으로 표기하면 IP 가 가지는 범위에 대한 정보를 한 줄로 전달할 수 있다.
32비트 중 24비트는 네트워크 ID 이고, 나머지 8비트는 호스트 ID 이다.
1
xxxx xxxx.yyyy yyyy.zzzz zzzz.#### ####
192.168.10.70/26
라는 표현식에서 /26
을 생각해보자. 해당 숫자를 통해 서브넷 마스크를 유추할 수 있다. 32비트 중 26비트, 간단하게 32개의 숫자 중 맨 앞에서부터 숫자 1이 26개 있다는 것을 뜻한다.
1111 1111(2).1111 1111(2).1111 1111(2). 1100 0000(2)
1111 1111(2)
를 10진법으로 변환시키면 255 이다.
그럼 위 서브넷 마스크는
255.255.255.192
가 된다.
IP | 192.168.10.70 |
---|---|
서브넷 마스크 | 255.255.255.192 |
0 ~ 255 까지 총 256개의 숫자 중, 192개 부터 시작하니 256 - 192 = 64
여기서 가장 IP, 마지막 IP 는 네트워크 주소, 브로드 캐스트 주소를 나타내기 때문에 사용할 수 없다.
따라서 64 - 2 = 62
총 62개의 호스트를 가질 수 있다.
256 에서 192 를 제외한 결과인 64 는 256 / 64 = 4 로
4개의 서브넷 네트워크를 가질 수 있음을 나타낸다.
네트워크 | IP 범위 |
---|---|
네트워크 A | 192.168.10.0 ~ 192.168.10.63 |
네트워크 B | 192.168.10.64 ~ 192.168.10.127 |
네트워크 C | 192.168.10.128 ~ 192.168.10.191 |
네트워크 D | 192.168.10.192 ~ 192.168.10.255 |
단, 가장 처음과 마지막 IP 는 사용할 수 없다.
다시 192.168.10.70/26
를 살펴보자.
- 4개의 분리된 네트워크를 가질 수 있으며
- 각 62개의 호스트를 가진 네트워크를 사용할 수 있고
- 그 중에서 두번째 네트워크에 속한다는 것
서브네팅, 슈퍼네팅
IPv4 주소는 8비트 4개씩, 총 32비트로 구성된다.
192.168.10.70/26
에서 뒤에 붙는 /26
는 서브넷 마스크가 가지는 1의 개수를 나타낸다. 그럼 /0
~ /32
까지 있을 수 있지 않겠는가?
하지만, Private IP 에서 클래스 A 가 처음 8비트는 네트워크 ID 를 나타내기 때문에, 가장 처음, 가장 마지막 IP 는 각각 네트워크 ID, 브로드 캐스트 IP 에 할당되기 때문에 사용할 수 없다. 따라서 /8
부터 /30
까지 붙을 수 있다.
서브넷 마스크와 AND 비트 연산을 통해서 네트워크 ID 를 날리고 호스트 ID 를 구할 수 있는데, 숫자 1이 빠지고 줄어드는 것에 따라서 개수가 달라질 것임을 예상해볼 수 있다.
공유기를 사용하는 가정에서 사용되는 192.x.x.x
IP는 클래스 C 에 속한다.
가상 인터페이스
👷🚧
가상 IP
출처 에 정말 잘 정리가 되어 있다.
방화벽 이중화 예시
컴퓨터 200대가 있고, 방화벽에 막혀 있을 때 패킷이 대체 어느 놈한테 가야하는지 누가, 어떻게 결정할까? 가상의 IP 을 부여해서 각각의 IP 을 가진 컴퓨터가 가상 IP 를 바라보게 하면 된다.
실제 물리 주소를 담는 그릇 역할을 한다고 이해했고, 그릇에 담기는 내용물은 바뀔 수 있다. 따라서, 로드 밸런싱 과정에서 특정 경로에 문제가 발생 해 네트워크 통신이 불가능한 상황이 발생하면, 그릇에 통신이 가능한 내용물로 교체하면 된다.