Home
💭

[강의정리] 따라學IT 네트워크

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.
싱크번호 = 받은 랜덤
보낸 쪽에서 도 보낼 때 시퀀스=액
받는 쪽에서 시퀀스←액
받는 쪽에서 액←시퀀스+데이터크기

연결 상태 변화

실선: 클라이언트 점선: 서버