01. 네트워크란 무엇인가.
네트워크
•
노드들이 데이터를 공유할 수 있게 하는 디지털 전기통신망의 하나
인터넷
•
문서, 그림 영상과 같은 여러가지 데이터를 공유하도록 구성된 세상에서 가장 큰 전세계를 연결하는 네트워크
크기에 따른 분류
LAN | 가까운 지역을 연결해 둔 네트워크
근거리 통신망 |
WAN | 멀리 있는 지역을 한 데 묶은 네트워크
가까운 지역끼리 묶인 LAN과 LAN을 다시 하나로 묶은 것 |
MAN | |
기타 |
연결 형태에 따른 분류
star | 중앙 장비에 모든 노드에 연결됨 |
tree | |
mesh | 여러 노드들이 서로 그물처럼 연결됨 |
혼합형 | 실제로는 star, tree 등 여러 형태를 혼합한 형태 |
네트워크의 통신 방식
유니 캐스트 | 특정 대상과 1:1로 통신 |
멀티 캐스트 | 특정 다수와 1:N으로 통신 |
브로드 캐스트 | 네트워크에 있는 모든 대상자와 통신 |
프로토콜
네트워크에서 노드와 노드가 통신할 때의 규약
•
가까운 곳: 이더넷(MAC)
•
멀리 있는 곳: IP 주소
•
여러가지 프로그램으로 연락: TCP, UDP
tracert 실습
# in mac
ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=53 time=51.793 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=53 time=48.434 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=53 time=49.088 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=53 time=53.010 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=53 time=55.343 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=53 time=49.288 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=53 time=49.303 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=53 time=47.662 ms
64 bytes from 8.8.8.8: icmp_seq=8 ttl=53 time=59.294 ms
64 bytes from 8.8.8.8: icmp_seq=9 ttl=53 time=49.545 ms
64 bytes from 8.8.8.8: icmp_seq=10 ttl=53 time=47.213 ms
64 bytes from 8.8.8.8: icmp_seq=11 ttl=53 time=47.990 ms
64 bytes from 8.8.8.8: icmp_seq=12 ttl=53 time=49.186 ms
64 bytes from 8.8.8.8: icmp_seq=13 ttl=53 time=47.083 ms
64 bytes from 8.8.8.8: icmp_seq=14 ttl=53 time=47.857 ms
64 bytes from 8.8.8.8: icmp_seq=15 ttl=53 time=56.691 ms
64 bytes from 8.8.8.8: icmp_seq=16 ttl=53 time=50.448 ms
.
.
.
Bash
복사
> traceroute -w 1 8.8.8.8
> traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets
1 192.168.219.1 (192.168.219.1) 12.608 ms 3.049 ms 1.758 ms
2 * * *
3 10.18.18.61 (10.18.18.61) 9.746 ms 10.656 ms 5.079 ms
4 1.208.100.45 (1.208.100.45) 4.657 ms
1.213.0.221 (1.213.0.221) 3.830 ms
100.74.28.1 (100.74.28.1) 4.430 ms
5 1.208.3.153 (1.208.3.153) 4.930 ms
100.74.18.1 (100.74.18.1) 5.203 ms
1.213.0.61 (1.213.0.61) 5.798 ms
6 1.213.112.33 (1.213.112.33) 3.946 ms
1.208.113.173 (1.208.113.173) 5.522 ms
1.208.106.85 (1.208.106.85) 4.144 ms
7 * * *
8 1.213.113.41 (1.213.113.41) 13.973 ms
1.213.148.37 (1.213.148.37) 7.456 ms
1.208.165.9 (1.208.165.9) 8.080 ms
9 1.208.106.18 (1.208.106.18) 41.632 ms
61.42.202.58 (61.42.202.58) 40.746 ms
61.43.235.130 (61.43.235.130) 40.626 ms
10 61.42.0.26 (61.42.0.26) 40.670 ms
1.208.179.94 (1.208.179.94) 43.458 ms
210.107.126.38 (210.107.126.38) 43.786 ms
11 142.250.168.244 (142.250.168.244) 44.423 ms 42.378 ms 41.734 ms
12 * * *
13 dns.google (8.8.8.8) 54.455 ms 48.326 ms 47.271 ms
Bash
복사
02. 네트워크의 기준, 네트워크 모델.
OSI는 논리적
TCP/IP는 실무적
패킷
•
네트워크 상에서 전달되는 데이터를 통칭
•
네트워크에서 전달하는 데이터의 형식화된 블록
•
패킷 = 제어 정보(헤더) + 사용자 데이터(페이로드)
•
여러 프로토콜들로 캡슐화됨
03. 2계층: 가까이 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다.
2계층에서 하는 일
•
하나의 네트워크 대역 = 같은 네트워크 상 = LAN에 존재하는 여러 장비들 중에서 e2e로 데이터를 전달
•
오류제어
•
흐름제어
•
다른 네트워크와 통신할 때는 항상 3계층이 도와주어야 함
2계층에서 사용하는 주소 = 물리적인 주소 = LAN에서 통신할 때 사용하는 MAC 주소
Ethernet 프로토콜
•
이더넷 헤더는 14바이트
•
LAN에서 통신할 때 사용
•
이더넷 프로토콜의 Destination Address에 MAC 주소가 담긴다
•
Ethernet Type: 상위 프로토콜(3계층)의 타입
Frame 7432: 176 bytes on wire (1408 bits), 176 bytes captured (1408 bits) on interface en0, id 0
Ethernet II, Src: Apple_59:2b:63 (bc:d0:74:59:2b:63), Dst: Technico_ae:3a:b2 (f8:3b:1d:ae:3a:b2)
Destination: Technico_ae:3a:b2 (f8:3b:1d:ae:3a:b2)
Source: Apple_59:2b:63 (bc:d0:74:59:2b:63)
Address: Apple_59:2b:63 (bc:d0:74:59:2b:63)
.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 192.168.219.188, Dst: 192.168.219.21
Transmission Control Protocol, Src Port: 55458, Dst Port: 8009, Seq: 551, Ack: 551, Len: 110
Bash
복사
04. 3계층: 실제로 컴퓨터끼리는 IP주소를 사용해 데이터를 주고받는다.
3계층의 기능
•
서로 다른 LAN(다른 네트워크 대역)을 연결하는 역할
•
라우터와 같은 3계층 장비가 필요
•
발신에서 착신까지 패킷의 경로를 제어
•
WAN에서 통신할 때는 IP 주소를 사용
3계층 프로토콜
•
ARP IP
•
IPv4 WAN에서 통신할 때 사용
•
ICMP
일반적인 IP 주소
Classful IP 주소
[10진수] 192.168.0.189
|
|
[2진수] 00000000. ~
Plain Text
복사
굳이 알 필요 없음
•
첫번째 필드 → 네트워크 대역을 구분
•
B, C … → 대역에 속해있는 PC를 구분
Classful IP 주소 + 서브넷 마스크
•
클래스풀한 네트워크 대역을 나눠주는데 사용하는 값
•
어디까지가 네트워크 대역인지 구분하는데 사용함
규칙: 1과 0이 바뀌는 곳
11111111.11111111.11111111.11000000
네트워크대역 | PC 구분
Plain Text
복사
사설 IP와 공인 IP
•
공인IP 1개 당 2^32개의 사설IP
•
특정 IP로 요청을 보내야 하는 경우는 사설 IP를 잘 사용하지 않음
•
혹은 포트포워딩을 통해 접근할 수 있도록 설정
특수한 IP 주소
Wildcard 0.0.0.0
나머지 모든 IP
Wildcard 127.0.0.1
자기 자신을 나타내는 주소
게이트웨이 주소
한 네트워크에서 다른 네트워크로 이동하기 위해 겪어야 하는 지점(외부로 나가는 관문)
05. 통신하기 전 반드시 필요한 ARP 프로토콜
ARP 프로토콜
주소 결정 프로토콜(Address Resolution Protocl)
패킷 구성
Hardware type | 16bit
ARP가 수행되고 있는 네트워크 유형 정의
이더넷(1) |
Protocol Type | 16bit
상위 프로토콜(L3)을 정의 |
Hardware Length | 8bit
물리주소의 길이를 바이트 단위로 정의
이더넷(6) |
Protocol Length | 8bit
논리주소의 길이를 바이트단위로 정의
이더넷(4) |
Operation(Opcode) | 16bit
패킷의 유형 정의
ARP Request(1)
ARP Reply(2) |
Sender HW Address | 송신자의 물리주소
이더넷(6byte 값) |
Sender IP Address | 송신자의 논리주소
IP 프로토콜(4byte) |
Target HW Address | 목적지의 물리주소
이더넷(6byte 값)
Opcde(1) → 0(송신자가 목적지의 물리주소를 알 수 없음) |
Target IP Address | 목적지의 논리주소
IP 프로토콜(4byte) |
ARP 프로토콜 동작방식
Request
1) SRC DST의 IP 주소를 지정해 패킷 통신
2) IP 프로토콜(L3)이 ARP 프로토콜에 ARP Request 메세지를 생성하도록 요청
3) ARP Request 메세지가 L3 → L2 전달 & 이더넷 프레임으로 캡슐화 / SRC 물리주소를 브로드캐스트 주소로 지정
4) 모든 호스트와 라우터는 프레임을 수신 후 자신의 ARP 프로토콜에 전달
Reply
5) DST IP 주소가 일치하는 컴퓨터가 자신의 물리주소를 포함한 ARP Reply 메세지 전송
6) SRC 가 메세지 수신 ⇒ DST IP 주소(물리주소) 획득
ARP 테이블
통신했던 컴퓨터들의 주소를 ARP 테이블에 남음
통신한 컴퓨터의 주소를 캐시처럼 관리한다
07. 컴퓨터의 프로그램끼리는 이렇게 데이터를 주고받는다
4계층 프로토콜
전송 계층(Transport layer): 송신자의 프로세스와 수신자의 프로세스를 연결하는 통신 서비스
•
연결 지향 데이터 스트림 지원
•
신뢰성
•
흐름 제어
•
다중화
TCP
연결 지향
UDP
포트 번호
•
특정 프로세스와 프롯스가 통신을 하기 위해 사용
•
하나의 포트는 하나의 프로세스만 사용 가능
•
하나의 프로세스가 여러개의 포트를 사용하는 것은 가능
•
일반적으로 정해져 있지만(Registered) 무조건 지켜야하는 건 아님
•
일반 사용자는 Dynamic 포트(49152 ~ 65535) 중에 하나 사용
사용중인 포트 확인
sudo lsof -PiTCP -sTCP:LISTEN
Password:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
launchd 1 root 10u IPv6 0x42936d4892ad404d 0t0 TCP *:49152 (LISTEN)
launchd 1 root 25u IPv6 0x42936d4892ad404d 0t0 TCP *:49152 (LISTEN)
launchd 1 root 35u IPv4 0x42936d489046c7a5 0t0 TCP localhost:8021 (LISTEN)
launchd 1 root 36u IPv4 0x42936d489046c7a5 0t0 TCP localhost:8021 (LISTEN)
launchd 1 root 48u IPv6 0x42936d4892ad472d 0t0 TCP *:50051 (LISTEN)
launchd 1 root 49u IPv4 0x42936d489046d235 0t0 TCP *:50051 (LISTEN)
Bash
복사
08. 비연결지향형 UDP 프로토콜
개요
•
전송방식이 매우 단순해서 서비스의 신뢰성이 낮음
•
데이터그램 도착 순서가 바뀌거나 통보없이 누락되기도 함
UDP 사용 예시
DNS 서버
RIP 프로토콜
09. 연결 지향형 TCP 프로토콜
개요
•
안정적으로, 순서대로, 에러없이 통신 교환
•
안전하지만 느림
패킷
일반적으로 20바이트 / 60바이트까지 늘어날 수 있음
•
Offset 헤더의 길이
•
Reseved 사용되지 않음
•
Window 송신측에서 남아있는 TCP 공간
TCP 플래그
데이터 송수신 시 엔드포인트의 상태에 따라서 표기
U | Urgent / 우선순위가 높은 데이터
Urgent Pointer: 어느 비트부터 긴급데이터인지 표기 |
A | Ack / 승인 |
P | Push / TCP 버퍼에 관계없이 데이터 전송 |
R | Reset / 연결 초기화 |
S | Syn / 동기화 비트. 상대방과 연결 시작할 때 무조건 사용 |
F | Finish / 종료 비트 |
연결 수립 과정
3Way Handshake TCP를 이용한 데이터통신을 할 때 프로세스와 프로세스를 연결하기 위해 가장 먼저 수행하는 과정
1. 클라이언트가 서버에게 요청 패킷(SYN)
2. 서버가 클라이언트의 요청을 받아들이는 패킷(SYN + ACK)
3. 클라이언트가 최종적으로 수락하는 패킷(ACK)
Plain Text
복사
1.
싱크번호 + 1= 액
2.
싱크번호 = 랜덤
3.
액 = 싱크번호 + 1
4.
싱크번호 = 받은 랜덤
보낸 쪽에서 도 보낼 때 시퀀스=액
받는 쪽에서 시퀀스←액
받는 쪽에서 액←시퀀스+데이터크기
연결 상태 변화
실선: 클라이언트
점선: 서버