컴네 개념 정리

jj·2022년 6월 16일
0

CS

목록 보기
7/9

-> 널럴한 개발자 network 기초이론 내용을 듣고 정리한 글입니다.

인터넷의 TCP/IP 프로토콜과 패킷 교환 방식

커널 요소를 추상화한 file을 socket이라 부른다. 예를 들어, TCP Socket이란 TCP 프로토콜을 user mode application가 접근할 수 있도록 file 형태로 추상화한 interface이다.

  • MAC주소: H/W주소이다. 변경하는 방법이 있다고 한다. NIC(Network interface card)식별자이다. LAN카드가 NIC이다.

  • IP주소: Host에 대한 식별자 (host: 인터넷에 연결된 컴퓨터)

  • NIC하나에 IP주소 여러개가 binding 될 수 있다.

  • port: process, 서비스, 인터페이스 식별자



Host

  1. Network 자체인 경우: switch
    -> Router, IPS, Firewall (IPS, Firewall 은 방화벽이다.)

  2. Network 이용주체인 경우: endpoint
    -> server, client (server와 client가 지정되지 않는 경우 peer라고 함)


Network란 router와 DNS의 집합체이다.


L2 switch: MAC 주소로 Switching

L3 switch: IP 주소로 Switching

L4 switch: port 번호로 switching

L7 switch: HTTP 프로토콜로 switching



유선 네트워크로는 Ethernet이 있고 무선 네트워크로는 802.11.~~ 같은 애들이 있음.

한 device에 브라우저 process가 여러개 떠있으면 두 process의 port 번호는 다르다. packet이 L1 layer로 들어와서 L4 layer에서 process 고를 때 port 번호로 고른다. port 번호는 2^16 = 0~65535 이다. 0과 65535는 안쓰므로 (broadcast 주소, )


  • IPv4: 32bit 주소체계, 43억개정도, 8bit씩 끊어서 표기

  • IPv6: 128bit 주소체계


IP 주소에는 Network ID와 Host ID가 있다. 몇번째 까지가 Network ID인지는 Network Mask를 통해서 알 수 있다. 255.255.255.0 이 Network Mask이면 Network ID는 24번째 bit까지이다. CIDR 방식으로 192.168.60.14/24로 표현할 수 있다.


socket생성할 때 기본적으로 port번호가 제공된다.

switch가 하는일은 경로선택이다. Router는 기본적으로 L3 switching을 한다. router에 Network Interface 중 최적화 경로를 선택한다. 이는 routing table을 보고 이루어지는데 평소에 router들 끼리 특정 프로토콜을 통해 계속 통신하여 routing table을 갱신한다. routing table에는 특정 IP로 가기 위해서 다음에 방문해야할 라우터의 IP주소가 적혀져있다.


routing table 장점: network 변화에 대한 대처가 빠르다.

routing table 단점: 주기적인 경로 계산으로 인해 CPU 사용량이 많아진다.

관리자가 직접 라우팅 경로를 선택해서 보내면 경로관리가 효율적이지만 network변화에 대한 대처가 느리다.


socket에서 다루는 data 단위는 stream이다. stream은 끝을 알 수 없는 일렬로 쭉 늘어진 data이다. 이것은 segment단위로 일정하게 잘라서 TCP Header를 붙인 것이 segment이다. 여기에다가 IP header를 붙이면 packet이 되고 여기에다가 ethernet주소를 붙이면 frame이 된다.


MTU는 packet의 최대크기로 보통 1500byte이다. 여기에서 TCP header, IP header (20byte + 20byte)를 뺀 1460byte가 MSS(maximum segment size)가 된다.


인터페이스 선택

process에서 network와 통신을 할 때 연결된 network가 여려개면 그 중에서 선택을 하는데 이때 기준이 되는 값이 메트릭값이다. 통신하는데 드는 cost라고 생각하면 된다. 메트릭값은 link속도, hop수, 시간지연 등으로 계산한다.


웹의 탄생

웹은 테모시 버너스 리가 탄생시켰다. text로만 이루어져 있던 컴퓨터를 text + link로 확장하고자 했다. HTML을 인터넷에 연결해야 하는데 HTML을 전달하기 위해서 HTTP를 만들었다.


LAN, WAN

LAN: H/W로 설명되는 Network, MAC주소로 식별, broadcast로 닿는 범위

WAN: S/W로 논리적으로 설명되는 Network, IP주소로 식별


L2 Switch

MAC주소로 switch(48bit)

up-link는 switch나 router의 L1 layer에서 볼 수 있는 port이다. link-up은 인터넷 케이블에 연결되는 것을 뜻하고 link-down은 연결을 해제하는 것을 말한다.

total-length: 16bit이므로 최대 IP header가 64KB가 될 수 있다.

version: v4인지 v6인지

IHL(Header Length): 보통 5, ip header 한 줄은 32bit = 4byte, 4*5하면 20bytes가 됨.

TTL: time to live, 패킷이 router를 지날때마다 TTL이 1씩 감소, 0되면 버린다. router와 router사이 간격을 1 hop으로 표현하는데 1 hop당 TTL을 1씩 감소시킨다. 보안규정에 따라 router가 TTL이 0인 packet을 버린후에 packet sender한테 ICMP를 보낼 수도 있고 안보낼 수도 있다.



Proxy


  1. forward Proxy: IP우회, 캐싱, 보호/감시

  2. reversed Proxy: 로드밸런싱, 보안


우회

naver에서는 9.9.9.9에서 접속한줄 안다. 하지만 proxy에서 통신내역을 모두 감청할 수 있으므로 주의해야 한다. proxy는 user mode application socket으로 stream data를 주고 받는다.


감시/보호

data 전송/유입이 proxy를 통해서 이루어지므로 virus wall로써 적용할 수 있고 반대로 data 전송할 때 packet을 다 볼 수 있으므로 감시도 가능하다.


reversed proxy

web application fire wall, client가 아닌 server를 위한 방화벽

외부에서 web server에 proxy를 통해서만 접근 가능하게 해서 보안성을 높인다.

Nginx, Apache WS 등이 있다.



라우터 구조

라우터도 컴퓨터이다. Data가 나갈 때나 외부에서 들어올 때 drop시킬지 bypass시킬지 결정하면 방화벽이고 bypass시키고 routing처리만 하면 router이다. bypass 할 때 NIC가 여러개인 경우 interface 선택도 한다.



네트워크에 host가 연결되는 방식


Inline

packet 단위로 bypass / drop 하는 장치. router, 방화벽 등


out of path

sensor: L2 distribution을 통과하는 모든 packet을 port mirroring하고 그 기록을 보면서 장애대응이나 DPI(deep packet inspection)를 한다.



3 way hand shake에서 교환하는 것

SYN 번호, MSS, Flow control 정책, window size



Flow control


1. stop and wait

packet을 받았다는 ack를 받으면 다음 packet을 전송한다. network 지연이 심해진다.


2. sliding window

수신측에서 남은 window 크기만큼 송신측에서 ack 없이 packet전송이 가능하다.



LAN 케이블을 뽑으면 TCP 연결은 어떻게 될까?


유지된다. 보통 max 75초. 유선의 경우 흔하지 않은 경우이지만 무선의 경우 매우 많이 일어나므로 그럴때마다 TCP연결을 끊고 다시 연결하면 latency가 너무 많이 생긴다. 게임의 경우 오래 유지할수록 client간동기화가 깨질수도 있기 때문에 빨리 끊는 편이다.


L1~L2 수준의 충격이 있을 때 applicatoin 수준에서 어떻게 반응할지 설계를 잘해야 한다. 잘못하면 Item 버그가 발생한다.

-> item 버그: Item 버린 후 다시 줍자마자 LAN 연결을 끊고 TCP연결이 끊기기전에 Item을 줍고 LAN을 연결한다. 처음 버린 user가 주은게 동기화 되기전에 끊어서 둘다 줍는게 가능하다.



인터넷으로 정보를 전달하는 방법


  1. Unicast

  2. Broadcast

  3. Multicast

multicast는 broadcast와 흡사하다.

broadcast이면 host id가 2진수로 1111 1111 이다. MAC 주소도 16진수로 FF..FFF이다.



IP 주소 종류


Global IP: 기본적으로 unique함. router는 IP가 Global IP일 경우에만 routing한다.

Private IP: 사설 IP이다. 인터넷 연결이 불가능하다. 공유기가 Global IP를 공유해줘서 인터넷연결이 가능해진다.

Loop back: host 자신으로 127.0.0.1이다. 외부로 나가지 않고 내부에서 통신한다.



Network 급


A Class: 8(network) + 24(host) -> 2^24개의 computer 연결 가능

B Class: 16 + 16

C Class: 24 + 8

D Class -> multicast를 위한 주소



* 라우터 통신할 때 frame header가 계속해서 바뀐다. frame header에는 MAC주소가 적혀있다.



ARP 프토토콜

IP주소로 MAC주소 알아내는 Protocol. L2 switch에서는 학습모드에서 포트마다 MAC주소를 저장한다. 학습이 끝나면 어느 port에 어느 MAC주소가 연결돼 있는줄 알고 바로 switching이 가능하다. L2 switch는 저장가능한 MAC주소를 용량으로 나타낸다.


만약 send host가 gateway IP 주소만 아는 경우에 ARP 프로토콜을 통해서 broadcast쿼리를 날린다. 쿼리에는 gateway IP주소가 적혀있다. 각 host는 쿼리를 받고 자기 자신의 IP 주소이면 MAC 주소를 send host에게 unicast로 보내준다. 이때 send host는 받은 MAC 주소를 ARP 캐시에 저장한다.



단편화

routing 경로에 있는 어떤 router의 MTU가 send host의 MTU보다 작을 경우 단편화가 발생한다. l4 payload를 작은 MTU에 맞게 자르고 잘려나간 작은 payload 조각에 IP header를 복사한다. 이때 두 IP header의 ID값은 동일하고 offset값을 통해 잘려나간 패킷이 어느 부분인지 표시한다. 예를들어 1000에서 잘랐을 경우 기존 패킷의 offset은 0이고 잘려나간 패킷의 offset은 1000이다.


해결법: MTU를 하향 평준화한다. Network 성능지표에는 bps,pps등이 있는데 pps를 낮추기 위해서이다. pps = packet per second



유해사이트 차단 원리

  1. DNS에서 IP주소를 확인하고 유해사이트일 경우에 응답을 warning.or.kr IP주소로 한다.

  2. ISP에서 3-way-handshake 과정에서 URI정보를 얻어내어 유해사이트인 경우에 해당 사이트인 것처럼 속여서 warning.or.kr를 보낸다.



대칭키 방식

동일한 key로 encode, decode 가능. key는 매번 random하게 생성되어 안전하다. key길이가 짧고 비대칭키에 비해 알고리즘도 단순하여 빠른 통신이 가능하다.


1. 서버에서 공개키, 개잍키 생성. 인증기관에 서버정보와 공개키를 줌.

2. 인증기관도 본인의 공개키, 개인키가 있음. 서버의 정보를 검증한 뒤에
서버에서 제출한 정보&공개키를 암호화해서 인증서를 만들고 서버한테 준다.

3. 인증기관은 웹 브라우저에 공개키 제공.

4. client가 서버에 접속하면 인증서를 받게 된다.

5. 웹에 공개된 공개키로 인증서를 decode하면 서버정보와 서버 공개키를 
알게되고 이 과정에서 해당 서버로부터 온 응답임을 확신할 수 있다.

6. 서버의 공개키로 대칭키를 암호화해서 서버에 보낸다.

7. 서버는 개인키로 decode해서 대칭키(비밀키)를 획득한다.

8. 세션이 종료되면 대칭키는 폐기된다.



Congestion control


  1. AIMD: 처음엔 packet을 1개 보내고 문제없이 도착하면 window 크기를 1씩 증가시킨다. 1차함수꼴로 window size가 증가한다.

  2. slow start: ack당 window size를 1씩 증가시킨다. 지수꼴로 window size가 증가한다. 한번 혼잡해지면 window size를 1로 줄인다. 이때 혼잡해지는 window size를 기억해두었다가 다음부터는 혼잡size/2 까지는 지수꼴로 그 다음부터는 1씩 증가시킨다.

  3. Fast recovery: 동일한 ack를 3번 받으면 혼잡인것으로 알고 window size를 줄인다.

  4. Fast transmit: 혼잡하면 window size를 반으로 줄인다.



공유기 작동원리

gateway로써 작동한다. 내부 network와 외부 network를 연결해준다.


NAT table에 host의 요청정보를 기록한다. packet의 IP header에 sender의 IP주소를 global IP주소로 바꾸고 port번호도 새로 생성해서 바꾼다. destination측에서는 공유기에서 접속한걸로 인식하게 된다. 응답을 받아올 때도 destinatoin측에서 공유기로 packet을 보내면 port번호와 sending IP보고 host찾아서 IP 주소를 다시 private IP로 바꿔서 보내준다.


방화벽역할을 자동으로 하게 된다. 해커가 접속하려해도 NAT table에 기록이 없으면 packet이 버려진다.

profile
끊임없이 공부하는 개발자

0개의 댓글