컴퓨터 네트워크 정리(1,2,3,4 계층)

프롬·2021년 10월 26일
0

컴퓨터 네트워크

목록 보기
1/1

0.(1) 서론

네트워크란 컴퓨터와 컴퓨터를 연결하는 것을 의미한다. 여기서 컴퓨터는 다양한 매체가 될 수도 있다. 핸드폰이나, 데스크탑, IoT등 말이다. 기계들을 유,무선적으로 연결하는 것을 네트워크라고 통칭한다.
컴퓨터 네트워크는 기기들을, 컴퓨터 네트워킹은 소프트웨어끼리의 소통을 의미한다

physical computing, cps등 4차 산업으로 컴퓨터의 범위가 확대되고 있다는 것을 알 수 있다.

이러한 네트워크는 만약 기기마다 전파를 수신하고 해석하는 방법이 다르면, 의미가 없기 때문에 일종의 규약을 만들었는데 이를 OSI 7계층이라고 한다.


보통 OSI모델 말고 TCP/IP Protocol을 사용한다. 엄격하게 레이어로 구분해서 PDU,SDU가 있지만 실제에서는 그렇지 못한 경우가 많다.

Open Hardware

Arduino
이탈리아에서 만든 범용으로 쓸수 있고 값싼 마이크로 컨트롤러(컴퓨터와 조금 다른 의미를 가지고 있는 듯하다, 임베디드의 느낌이 크다.) (ATmega 칩을 이용)
오픈 소스를 하드웨어에 적용하여 큰 인기를 끌었다.
그래서 Uno, Nano, Mega 등 다양한 하드웨어가 있다. 이로인해 작은 컴퓨터가 대중화되었다.
위에 말했던 것은 본체이고, 추가적으로 기능을 구현하는 Module을 탈부착할 수 있다. Project Hub, Hackster.io, Maker Faire 등에서 자신의 프로젝트를 공유할 수 있다.
결과적으로 복잡한 하드웨어의 접근성을 높게해주었다!

Open Compute Project

OCP란, 데이터 센터의 설계방식을 공유하는 것이다. 2011년에 페이스북이 첫 공개를 했다. 계속 꾸준히 만들고 있음.
왜 OCP인가?하면, 데이터센터를 설계할 때 큰 노력을 들였기 때문에 성능이 확실히 좋다.
OCP TIP for Mobile Networking은 페이스북이 이동통신(5g)를 위해 공개한 것이다.
구글도 자신의 서비스에 맞춰서 Custom하여서 하드웨어와 소프트웨어를 만들고 있다. 기성 제품이 아니라 Inhousing으로 하드웨어와 소프트웨어를 만든다는 뜻이다.

Single Board Computer

RaspberryPi는 영국에서 만든 오픈 하드웨어이자, 단일보드 컴퓨터이다. 탑재하는 OS로는, Raspbian, Ubuntu core, mate, WINDOWS 10 IOT core등이 있다.

한국에는 ODROID가 있으며, 삼성의 모바일 프로세서인 엑시노스를 활용했다.

미국의 비글, INTEL(NUC), GOOGLE(CORAL, 구글의 특수한 기능을 담은 것), NVIDIA Jetson(Autonomous)

LINUX

리누스가 공짜 OS를 만들었는데 이게 점점 커졌다. 그래서 리눅스 파운데이션이 되었는데, 오픈 소스 생태계에 큰 영향을 주고 있다. AGL,MOBILE,NETWORK,OS,HYPERLEDGER(블록체인)등.. 안들어가는 곳이 없다.
진짜 많은 Variants가 존재한다. 리눅스 OS 깔려고 마음 먹는다면, 우분투, 데비안, 민트,페도라, 센트 등등.. 골라야할게 많다. 그 중 가장 범용적인 것이 우분투이다. 근데 우분투에서도 다양한 배리에이션이 존재한다. 그리고 안드로이드도 리눅스다. 슈퍼컴퓨터들 조차 리눅스를 사용한다.

Software is eating the world, in all sectors

BOTTOM-UP으로 1계층부터 살펴보려고한다.

0.(2) 네트워크 오버뷰

교수님이 강조하신거지만, 네트워크에는 무조건적으로 좋은 프로토콜은 없고, 상황에 따라 맞춰 사용한다고 하셨다. 그렇기에 넓은 마인드를 가지고 네트워크를 살펴보는것이 중요하다고 생각된다.
그리고 네트워크를 분리하는데는 다양한 목적이 있는데,

물리적인 모양으로 비교하면

1.버스형
장점 : 노드의 추가, 삭제가 쉬우며 특정 노드의 장애가 다른 노드에 영향을 주지 않는다.
단점 : 공통 배선의 대역폭을 공유하기 때문에, 노드 수가 증가하면 네트워크의 성능이 저하된다.

2.링형
장점 : 단 방향 통신으로 신호 증폭이 가능하며, 거리 제약이 적다.
단점 : 노드의 추가 삭제가 용이하지 않다.

3.트리(스타)형
단점 :주 노드가 망가지면 네트워크의 사용이 불가능해진다.
장점 : 장애 발견이 쉽고, 관리가 용이하다.

4.메쉬형
장점: 특정노드가 다른 노드에 영향을 주지 않고, 회선 장애에 유연한 대처가 가능하다.
단점: 그러나 그만큼 케이블이 늘어나기 때문에 비용부담이 발생한다.

5.복합형으로 이루어져 있으며,

규모로 나눈다면,
WAN(Wide) > MAN(Metro,도시) > LAN(Local) > BAN(Body)... 로 나눌 수 있다.

1계층. 물리적 계층

데이터가 있다고 생각해보자. 데이터는 우리에 관점이 아니라 기기의 관점에서본다면, 전기적 신호로 이루어져있다. 그렇기 때문에 우리가 논리적으로 설계한 이야기를 전기적으로 변환하여, 물리적으로 이동이 가능하게끔해주는게, 물리적 계층이다. 예를 든다면, 케이블 같은 걸 생각할 수 있다.

2계층. 데이터 링크 계층

일단, 데이터 링크 계층은 에러 검출과 프레임화,흐름제어 등을 담당한다. 이를 두 부분 MAC(Multi-Access-Control)과 DLC(Data-link-Control)로 이루어져있다.
처음으로 MAC을 살펴보자. MAC은 Medium(쉽게 선으로 생각하자)에 어떻게 접근하는지다.
접근하는 방법은 크게 3가지로 나눌 수 있다.

1.Random-Access

1. ALOHA
처음 생긴 랜덤 엑세스 방식으로, 간헐적인 데이터 통신을 위해서 만들어졌기 때문에 응답을 받을 때까지 계속해서 송신한다. 무식하게 쏘기 때문에 데이터가 겹치는 경우가 있기 때문이다. 그래서 랜덤으로 시간차를 두고 반복한다. 또한, 쏘는 시간차를 슬롯화하여, 그러니깐 연속적이던것을 이산적으로 하여 데이터가 겹치는 경우를 피하는 방식이 생겼는데 이를 Slotted ALOHA network라고 한다.

2. CSMA(Carrier sense)
이는 ALOHA에서 발전된 방법으로 현재 통신이 이루어지고 있는지 확인하고 나서 통신을 시작하는 방식이다. 그러나, 물리적인 거리 때문에 일어나는 Propagation time 때문에 데이터의 충돌이 일어날 수 있다. CSMA가 신호를 확인하는 방법도 여러가지가 있으며, 다음과 같다.

i)1-persistent
계속 채널을 보고있다가 idle 상태가 되면 바로 발송한다. 그로인해, 지연이 적은편이지만 계속 본다는 것 때문에 전력 소모가 일어날 수 있다.

ii)non-persistent
가끔씩 확인하여 발송한다. 그로인해 지연이 발생하지만 전력 소모가 적다.

iii)p-persistent
Idle 상태가 되면 기다렸다가 메세지를 쏜다.
위와 아래의 중간 버전이라고 볼 수 있겠다.

3. CSMA/CD (Collision Detecting)
Propagation time을 개선한 것으로, 이로 인해 일어난 충돌을 감지하고 그렇다면 (Random Backoff, Exponential Backoff)Backoff Time을 지난 후에, 다시 보낸다. 이는 Ethernet의 주요 기술로 사용된다.

4. CSMA/CA (Collision Avoid)
무선에서 사용하는 기술으로, 송신단에서 RTS를 보내면 수신단은 주변에 CTS를 보내 지금 여기로 데이터가 오고 있음을 알려 충돌을 피한다. 그리고 송신이 메세지를 쏘면 ACK로 응답한다. 그러나, 범위의 차이때문에 일어나는 Hidden station problem이 존재한다. 이를 해결하기위해 RTS,CTS,ACK가 존재한다.
Contention window, (= Backoff Window)는, idle 상태에서 IFS 만큼의 시간이 지나고 나서의 시간이다. 즉, 누가 송신하게 될지 경쟁하는 시간 구간이라고 생각하면 될듯하다.

말그대로 랜덤하게 접근한다.
(추가적인 사항:https://itstory.tk/entry/CSMA-CSMACD-CSMACA-%EB%9E%80)

Controlled Access Protocols

1. Reservation
중앙에서 Beacon frame을 통해 예약하여 데이터를 전송한다. 이렇기 때문에 충돌이 발생하지 않지만, 지연시간이 발생한다.

2. Polling
Select,poll으로 Data를 송,수신한다. Select은 주 노드에서 요청하는 것으로 일반 노드에게 수행할 수 있는지 여부를 물어보고 ACK를 받으면 Data를 전송한다. 반대로 Poll은 주 노드에서 요청하는 것은 맞지만 일반 노드에게 줄 데이터가 있는지 계속해서 물어보는 것을 의미한다. 충돌이 발생하지 않아서 좋지만 그만큼 낭비되는 데이터가 많다.

3.Token Passing
고리형태의 토폴로지를 생각해보자, 원으로 순환하면서 말할 차례를 돌아가는 것이라고 생각하면 되는데, 이를 토큰이라고 한다. 이렇기 때문에 충돌이 없지만 확장성이 좋지 못하다.

중앙 통제를 받으며 통신하는 것이다.
느리지만, 충돌이 없다.

Channelization Protocols

1. FDMA
프리퀀시, 즉 주파수를 이용한 프로토콜이다.

2. TDMA
압축해서 아주 빠른 네트워크로 보내, 수신자에겐 압축을 해제하여 들려준다. 그렇기 떄문에 하나의 매체에서 많은 스테이션이 소통 가능한데, 살짝 지연시간이 존재하긴한다(압축 해제). 그러나 감지하기 어려울 정도이다.

2세대 이동통신은 FDMA와 TDMA를 합쳐서 사용했다.

3. CDMA
Code-division으로, Station이 가지고 있는 특정 Code를 사용하면, 여러 스테이션이 암호화하여 Medium에 쏜 것을 다 더한 값을 유의미하게 해석할 수 있다.

이렇게 이루어지며, MAC에서는 주로 어떻게 전송할지와, 약한 에러 검출을 한다.

(자세한 내용은 다음 사이트에 정말 잘 정리되어있다
http://blog.skby.net/%EB%8B%A4%EC%A4%91-%EC%A0%91%EA%B7%BC-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9Cmultiple-access-protocol/)

그 위에 있는 DLC에 대해 알아보자, 여기서는 조금 더 데이터와 관련된 일을 한다.

1. DLC가 하는 일

1. Framing
3계층에서 내려온 Data를 나누고, 주소를 담으며, 에러 검출 코드를 담는다, 그리고 Header&Trailer을 붙이며, FLAG로 1계층에게 통신 준비를 시킨다.
그리고 FLAG와 똑같은 비트가 있을 수도 있기 때문에 FLAG와 같은 것이 있다면 앞에 ESCape를 붙인다.(ESC도 마찬가지)이를 un/stuffing이라고 지칭한다. 그리고 이러한 데이터는 Char형과 Bit형으로 나눌 수 있다. 옛날에는 bit로 썼는데 데이터를 아껴쓰기 위함이었다. bit stuffing은 01111110 이런 경우, 011101110 이런 식으로 만들어서 할 수 있다.

2. Flow and Error Control
계속해서 Feedback을 주고 받음으로서 Flow Control을 한다. 2계층 이상은 논리적인 연결(실제적인 것은 아님)이 가능한데, 연결 여부에 따라서 그러한 과정이 존재여부가 결정된다. 즉, 연결이 없으면 연결, 해제, 유지 등의 과정이 없다. 만약 논리적 연결이 없다면 이런 컨트롤이 되지 않는다.

그래서 이를 구현한 프로토콜은 다음과 같다

2. DLC Protocol

1. Simple Protocol(자연계 존재 불가)

2. Stop and wait Protocol

메세지를 보내고 ACK가 올 때까지 기다린다. 프레임을 만들 때, CRC를 붙여 준다. 예를 들어 Data-CRC이다. 수신부에서 받고, 프레임과 CRC를 계산하여(?) 두 부분이 일치한다면 ACK를 보낸다. 만약 변질되었을 경우 이 프로토콜에서는 프레임을 그냥 버린다. 송신부에서는 어차피 ACK를 받을 때까지(Timer 내에) 반복하기 때문에 버려도 상관 없다. 그렇기 때문에 없어진 경우도 똑같이 반복한다.
만약 ACK가 분실될 경우, 네트워크에 똑같은 데이터가 올라가는 단점이 있다. 이를 해결하기 위해 프레임에 0,1을 붙여주는 방법이 있다.

-Piggybacking
ACK에 필요한 메세지도 같이 붙여보낸다.

3. Go - Back - N protocol
stop and wait는 기다리는 동안 메세지를 보내지 못하기 때문에 전송량에 문제가 있다.
그래서 이 프로토콜은 기다리는 시간을 활용한 것이다. 기다리지 않고 계속해서 프레임을 보낸다. 이 때 보낼 수 있는 메세지의 크기는 Window size = 2^m - 1을 만드는 m의 크기이다.
ACK를 받지 않으면 버퍼에 저장되어 있기 때문에, 못받아서 Sender의 타이머가 터지면, S_f버퍼가 있는 곳부터 다시 보낸다. 그래서 이러한 점을 개선한 프로토콜이 선택적 반복 프로토콜이다.

4.Selective Repeqtive Protocol
이 프로토콜은 손실된 패킷만 재전송할 수 있게 해준다. 그 이유는 송/수신부 모두 윈도우를 가지고 있기 때문인데, 윈도우의 크기는 2^(m-1)이다. 즉 절반만 사용한다. 수신부에서 만약 받았던 것이라면 못받았다고 NAK 메세지를, 잘받았으면 ACK 메세지를 보내기 때문에 송신부는 무엇을 다시 보내야하는지 알 수 있다.

자세한 내용: https://frontjang.info/entry/%EC%A0%84%EC%86%A1%EA%B3%84%EC%B8%B5-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C%EC%9D%98-%EA%B5%AC%ED%98%84%EB%B0%A9%EC%8B%9D

DLC EXAMPLE

1. HDLC
2계층 위로 Application level이 바로 올라간 경우이다. 예를 들어 Fax, 카드결제 같은 경우이다.(전화선 연결)
HDLC는 프레임을 구분해 놓았는데,
i)I-frame
User info를 주고 받을 때 사용한다.
ii)S-frame
ACK 메세지를 이용할 때 사용한다.
iii)U-frame
관리자 입장에서 필요한 정보를 넣는다. 연결을 하고 해제하는 그런 역할을 한다.

2. PPP
3계층 이상의 어플리케이션에서 이 사용자의 합법 여부를 판단하기 위한 프로토콜, 또한 IP protocol이 원할하게 동작하게 함.
PPP프레임의 PAP/CHAP는 Auth하는데 중요한 역할을한다.

에러의 종류는, 사라지거나 변질된 경우가 있다.

MAC/DLC(데이터 링크 계층)의 활용 예

1. Ethernet
이더넷은 CSMA / CD를 사용화한 기술로, 제록스가 만든 기술이지만 그렇게 기술적 어려움은 없다. 그러나, 이더넷이 환영받는 점은 바로 호환성에 있다. 그렇기 때문에 케이블이 구리에서 광섬유로 바뀌어도 호환가능하며 별다른 데이터링크의 교체 없이도 효과를 누릴 수 있다. Framing이 가능하지만 Error Control을 불가능하며 재전송이 가능하다. 1,2계층이 묶여서 IEEE 902.3 Standard가 되었다. Flag에는 preable,SFD가 있고 CRC는 종료 코드이다.

처음에는 Bus topology를 사용했고, 후에는 Star Topology로 사용하면서 충돌 요소가 사라졌기 때문에 최근에는 Physical과 Framing만 지원한다!

Bus topology와 star topology가 섞여있는 네트워크에서, Bus topology의 줄을 잘라 Bridge로 이음으로써, 에러의 양을 줄였다(위에 CSMA/CD의 단점을 살펴보자) 그리고 Startopology로 가기전에도 bridge를 이용한다.

선으로 연결되어있기 때문에 어찌되었건 전류가 흐르는데 이를 전원공급으로 활용할 수 있고 이를 POE, Power of Ethernet이라고 지칭한다.

이더넷을 이용해 시간을 동기화하는 규격을 IEEE 1588이라고 한다.(GPS가 사용불가능할 경우)

2. WiFi
와이파이도 1,2계층으로 MAC-Layer과 Physical-layer로 이루어져있다. 거기에 LLC가 존재하며, 에러 컨트롤이 없다.
또한 무선이라서 출력에 따라 범위가 결정되며, 사용되는 주파수 대역은 2.4GHz, 5, 60GHz이며 CSMA/CA를 사용했다.

Wifi의 토폴로지는, Ad hoc network라고 근거리의 장치들끼리 스스로 주파수로 통신하며, Access point는 Internet에 접속하기 위한 장치이며, 여러 장치에서 신호를 받아 인터넷으로 송/수신한다.

Wifi에 여러 레이어들이 올라갈 수도 있는데
대표적으로 DCF(/CA)와 PCF가 있다. 전자는 충돌방지를 할 수 있고 후자는 Contention-free를 목표로 한다.

Wifi의 세부 특징을 구별하는 것은 Band, Rate, Channel Bandwidth이다.

또한 AP는 SSID(이름)을 가진 Beacon을 모든 station(핸드폰이라고생각하면 될듯하다)에게 뿌리고 제어 접근 기술에서 배웠던 Poll Message를 station에게 보낸다. 만약 station이 Data와 ACK를 보내면, polled 만 보낼 수 있고, 다른 것은 NAV상태가 되게끔하는게 AP Repetition이다.

3. BlueTooth
Blutooth 는 WiFi와 같은 무선 주파수 대역을 사용한다. WiFi 와 Blutooth는 비인가 대역(ISM)을 사용한다. 그래서 와이파이 장비가 많고 블루부스 장비가 많다면
간섭이 일어난다. 블루투스는 끊임없이 통신하기 위해만들어졌으며, 처음에는 저속의 데이터였지만, 후에는 오디오에 사용될만큼 Datarate가 증가하였다. 블루투스는 OSI7계층을 따르지 않고 그 위에 PPP를 쌓아 인터넷을 하거나, 1계층의 Baseband에서 Audio를 사용할 수도 있다. 또한 제조사의 구분 없이 호환이 가능하다.

4. BLE(Low energy)
Low energy와 같이 블루투스와 다른점은 연속적이 아니라 간헐적으로 통신을 한다는 것이다. 그래서 음성같은 데이터와는 어울리지 않는다. 즉, 연속적인 데이터가 필요없을때 사용하기 좋은데 예를들어 피트니스같은게 있다.
그리고 BLE의 다른 점으로는 Pairing, Broadcastion, Mesh Network가 가능하다.

이와 같이 Networking이 가능하려면 Third-party device, Mesh node, Mesh gateway등 3개 이상의 장치가 필요하다. 서드 파티는 핸드폰, 리모컨을 생각하면 좋다. 즉 노드를 활용하거나 수행시킨다. gateway는 노드의 대장이라고 생각하면 되고 mesh node들은 각각 data를 감지하거나, 동작을 수행한다.

5. LoRa(Long Range)
1,2 계층이며 낮은 주파수이기 때문에 멀리 가지만, 큰 데이터에는 어울리지 않는다. 그래서 넓은 지역에서 의미가 있을때, 예를 들어 광산, 에너지 산업 등에 많이 쓰인다.

6. LoRaWan
1,2 계층이지만 소프트웨어로 네트워킹을 구현했다. 이로 IoT 장치를 연결한다. 최근에 나온 기술이며, Low power WAN은 전에도 있었지만 사장되고 LORAWAN이 살아남았다. OSI 7 Layer을 지키지 않는다. 즉 1,2계층 위에 바로 어플리케이션이 존재한다. 각 sensor가 gateway와 통신하고 gateway는 유/무선으로 네트워크 서버에 보내고, 이후 application server에 도달한다.

아두이노, 라즈베리파이로 직접 만들수도 있고 다양한 기업이 장치를 지원한다.

7. 5G
셀룰러 폰이 점점 진화하고 있다. 그로인해 네트워크도 진화하는데, 기술은 5G이다.
<추가해야함>
자세한 내용
IMT2020
http://blog.skby.net/5g-imt-2020/
5G CORE
http://blog.skby.net/5g-core-network/

3계층. 네트워크 계층

네트워크 계층이 하는 일은 다음과 같다. 그리고 네트워크 계층끼리는 논리적으로 연결되어있다.

네트워크 계층이 하는 일

1. 패킷화
위에서 내려온 데이터를 보낼 수 있게끔, 쪼개는데 이를 패킷화한다고한다.

2. 라우팅과 포워딩(스위칭)
라우팅은 말 그대로 길 찾기이다. 포워딩은 입-출력 단자의 하나의 짝이다. 패킷이 도착했을 때 무슨 행동을 할지이다. 즉, 라우팅은 포워딩들의 경우의 수라고 할 수 있는데 이 중 가장 효율적인것을 찾는다(다익스트라 알고리즘). 이를 포워딩, 또는 라우팅 테이블이라고 한다.

네트워크 계층을 구현하는 방법

1. Datagram Approach - Connectionless
패킷이 순서 상관없이 각각 가장 빠른길로 간다. 그래서 도착하는 순서가 다르다.

2. Virtual Circuit Approach - Coneection Orient
순서대로, 하나의 경로로 가기 때문에 순서대로 도착한다.
일단 연결을 하고 그 경로로만 전송된다.

더 자세한 이야기
https://laguna.tistory.com/2656745

네트워크의 성능(논외)

이렇게 많은 방법이 존재하기 때문에 네트워크의 성능을 나타낼 수 있는데 지연, 처리량, 패킷 손실률로 측정가능하다.

1. 지연(Delay)
전송 지연, 전파 지연, 처리 지연, 큐 지연 등 4가지
전송지연은 패킷 두개를 보낸다고 하면 하나를 보내고 나서 다음 패킷을 보낼 때까지의 간격이다. 패킷의 길이가 길수록 이도 늘어난다.
전파지연은 말 그대로 전파의 속도 때문에 일어나는 지연양을 의미한다.
처리 지연은, 라우터나 클라이언트가 패킷을 캡슐, 역캡슐화하기 때문에 일어나는 지연을 의미한다.
큐잉 지연은 하나의 패킷을 처리하는 동안 뒤에는 다른 처리되지 못한 패킷들이 기다리고 있는데 이를 의미한다.

2. 처리량
링크를 여러 호스트가 사용한다면, 병목 현상이 일어난다. 예를들어, 한 명이 나한테 도넛을 5분에 하나씩 주는건 계속해서 먹을 수 있다고 치면, 3명이 나한테 도넛을 5분에 하나씩 주면 1/3씩 밖에 처리하지 못하는 것이다.

3. 패킷 손실
버퍼의 오버플로로 인해 패킷 손실이 일어날 수 있다.

네트워크 층의 혼잡은 처리량, 지연과 상관이 있는데 네트워크 용량을 넘어가면 지연은 무한대로 올라가며, 처리량은 용량을 넘어가면 점점 줄어든다. 서비스에 따라서 버퍼, 패킷 로스등을 판단하는게 중요하다.

자세한 내용은 https://yonghyunlee.gitlab.io/temp_post/network-1/

네트워크 계층의 논리적 주소

IPv4는 8개의 비트 4개로 이루어져 있는데, 이를 8개씩 묶어서 4개의 단위로 표현한다. 그래서 이로 표현할 수 있는건 2^32, 약 40억개의 논리적 주소를 표현할 수 있다. 이정도로 충분하다고 생각했지만, 인터넷의 규모가 커지면서 IPv6를 이용하는 추세이다. 사실 IP는 하나의 줄마다 매겨지는게 맞다. 32bit에서 앞에 N bits(Prefix)는 네트워크가 부여하고, 32-N bits(Suffix)는 사용자가 정의하는 것이다.

Classful
클래스 A
(0???????)
클래스 B
(10?????? ????????)
클래스 C
(110????? ???????? ????????)
클래스 D
(1110???? ???????? ???????? ????????)
클래드 E
(1111???? ???????? ???????? ????????)

?표시는 Prefix임을 의미한다.

IPv6는 버전 때문에, 신흥국가나 특정 조직에서 쓴다.

Classless는 맨 뒤에 Prefix length를 표시해야한다.(CIRD slash)

routingprefix를 보고 길을 찾아간다. prefix를 보고 합치는 걸 address address aggregation(주소 축약)이라고 한다.

이슈들을 해결하기 위해


1. DHCP(Dynamic Host Configuration Protocol)

동적으로 아이피를 할당하는 것이다.
컴퓨터에 비해 아이피가 적으면, 컴퓨터에 아이피를 필요할 때 할당하는 것이다.
이 과정을 규약한게 DHCP이다. (UDP를 이용해서), DHCPDISCOVER은 서버가 받고, 받으면 DHCPOFFER를 한다. 그리고 DHCPREQUEST(요청)을 한다. 그리고 나면 서버에서 DHCPACK를 받는다. Leasetime과 SourceAdderess(본인), Your address등을 채워준다.

2. NAT
사설 IP(누군가와 중복이 가능하다)를 공인 IP로 사용하게끔해주는 것. 소규모 장소에서 가상으로 나누어서 사용하는 것을 공용에서 의미있는 Ip로 만드는 것이다. NAT에서 변환을 해준다. 이것때문에 중첩되지 않는 키값을 만들어야한다. KT는 거대한 Private Network를 쓴다.

longest mask matching은 내부망에 있던 것이 바깥으로 나왔을때를 대비해, 포워딩 테이블의 맨 위에 올려 놓는 것을 의미한다.

IP Protocol

IP의 Header은 20~60byte이다.
payload는 다양한 프로토콜(tcp/udp)가 들어갈 수 있다.
IP를 이용해 다양한 컴퓨터와 연결할 수 있다. 그렇다면 다양한 하위 계층을 만나게 되는데, 옛날에 구현된 것도 보내기 위해서 잘게 짜르는 패킷화를 하게 된다. 이를 Fragmentation이라고 한다. 밑에 하위 계층인, 프레임에서 받을 수 있는 것을 최대 용량을 MTU라고 한다.
잘게 자르기 때문에 첫번째 바이트 / (나눈 갯수)로 Offset을 표현하여 구분한다. 라우터를 통과하면서 라우터가 알아서 밑에 계층을 위해서 쪼개준다.

IPv4는 보안 기능이 없기 때문에, 보안 레이어를 따로 올려야한다.(스니핑,스푸핑,모디피케이션 공격)

ICMPv4
IPv4는 connection-less이기 때문에 connection하게 구현한 것(에러 검출 등)이 이것이다. ICMPv4 헤더에 IP헤더를 붙혀서 돌려준다.
1. Ping
ping auniversity.edu 이런 식으로 연결 가능한지 알 수 있다. 그 외 네트워크 성능을 체크 가능하다.
2. Traceroute
목적지까지의 모든 네트워크 노드(중간에 있는 네트워크)를 알 수 있다!

Mobile IP

모바일같이 움직이는 경우의 할당하는 가상 IP(셀룰러 모드?)

소프트웨어화
지금까지 이렇게 해왔지만!!!! 앞의로의 네트워크는 바뀔 가능성이 있다. 기계중심에서 구현 중심(VNFs)으로, Standard에서 API로, 비제어 네트워크에서 제어가능한 네트워크로! 왜냐?

라우터를 이용해 왔지만 라우터에 큰 문제가 있음을 느끼는데, 왜냐하면 이전의 라우터는 제어와 전송 기술이 합쳐져 있었기 때문에 새로운 프로토콜을 탑재하거나, 커스텀 하기 힘들고 중앙에서 제어하기도 힘들고, 필요 이상의 기술이 들어갈 수 있었기 때문이다. 그래서 제어와 전송을 분리하기로 한다. 그래서 필요한 기술이 SDN과 NFV이다.

SDN(소프트웨어 정의 네트워크)
제어부와 전송을 라우터에서 분리했기 때문에, SDN Controller을 제어부라고 한다. 이들은 자동으로 라우터들의 전송을 관리하여 네트워크를 최적화한다. 이에 대표적인 소프트웨어로 Opendaylight가 있다.
NFVs(Network Function Virtualization)
기존의 서버는 특정한 기능을 위해 비싼 특정한 서버를 사용해야했다. 그러나 NFV의 아이디어는, 범용 서버에 소프트웨어를 올려 특정한 기능을 하게끔 만드는 것이다. (예, OPNFV, LINUX, OPENFLOW->OPENWRT)
그래서 둘은 다른 기술이며, 다만 같이 사용했을 경우 시너지가 좋다.
그래서 현재 데이터센터 등에서 사용하고 있다. 혹은 하드웨어 없이 비디오게임을 할 수 있는 산업(이름이 기억이 안난다..)등이 있다.

현재는 TELCOM FRIENDLY APPROACH/IT FRIENDLY 등 아키텍처가 있으며 네트워크 뿐만 아니라 스토리지으로써 소프트웨어 정의가 가능하다.

5G에 SDN/NFV를 적용하려는 시도가 계속되고 있다.

P4란 프로그래밍언어로, 데이터 세션도 소프트웨어화하기 위함이다.(자세히 모르겠습니다)

SDN과 NFV의 차이점을 알고가자
https://www.itworld.co.kr/news/105521

SDN 자세한 내용
http://blog.skby.net/sdn%ea%b3%bc-%ec%98%a4%ed%94%88%ed%94%8c%eb%a1%9c%ec%9a%b0openflow/

4계층. 전송 계층

어플리케이션을 찾아가는 역할을 한다. 이를 Process to Process라고 하며, 클라이언트(요청)-서버(응답)이 있으며 Remote host, Remote process,Local host, Local precess가 필요하다.

이 계층에서의 주소는 '포트 Port' 를 쓴다 0~1,023은 Well-known port로 정해져있다. 그 외의 경우는 알아서 정한다. 스타크래프트같이 유명하면 프로그래머들이 알아서 그 포트를 피하기도 한다 ㅋㅋ
Well-known은 주로 서버가 사용한다. 4계층 이상에서 사용하는 경우, Socket Address를 사용하는데 IP+Port를 의미한다. ex:200.23.56.8/69
De-multiplexer라고한다.

(Well-known port , 출처: ResearchGate)

전송계층의 역할

  1. 오류 점검
  2. 전송된 데이터의 목적지 식별(포트)

전송계층의 종류

  1. 연결형
    연결형은 신뢰성을 중요시한다 그래서 느린 단점이 있다. 연결 설정 과정이 존재한다. 예시로 UDP가 있다.

  2. 비연결형
    비연결형은 속도를 중요시한다. 그래서 누락되는 경우가 있다. 만약 동영상 스트리밍 같이 조금 누락되어도 연속적인게 중요할 경우 쓰인다. 신뢰성이 낮다. 예시로 TCP/SCTP가 있다.

신뢰성속도를 잘 판단하여 서비스를 구현한다. 예를 들어 게임 서버에서 실시간 동기화, 비실시간 동기화의 차이 등을 볼 수 있다.

상위 계층에도 패킷 오류가 있을 가능성이 있으므로 에러 검출이 필요하다!

전송계층의 프로토콜

1. TCP
연결로 바이트(중요)의 흐름이 일어난다.
TCP는 위에서 내려온 데이터에 TCP 헤더를 붙이고, 이를 세그먼트라고 한다. 처음 통신할 때 논리적 연결을 해야하기 때문에, 헤더의 코드 비트를 통해서 알 수 있으며 6비트 중 ACK와 SYN는 각각확인 응답연결 요청을 의미한다. 이를 Simulaneous Open이라고 한다. 또 이와 같이 세번에 걸쳐 확인하는데, 이를 3-WAY HANDSHAKE라고한다. 그리고 종료할때도 이런 식으로 한다. FIN을 활용한다.
SYN FLOODING ATTACK은 SYN을 악용해서 공격하는 경우를 말한다.


그리고 확인 응답 번호일련번호가 있는데, 확인응답 번호에서 시작하여 데이터의 크기만큼 점점 쌓여간다. 이를 통해 재전송 제어가 가능하다. 세그먼트와 데이터의 순서는 상관없기 때문에 이것이 중요하다고 볼 수 있다. 이는 0~2^32-1개의 번호 사이에서 전해진다. 바이트의 첫번째가 이 번호가 된다. 처음 핸드셰이크를 할때 버퍼 크기(윈도우)를 전달해주고 꾸준히 윈도우의 크기를 전달해준다.

Pushing data ,Urgent Data 이거는 버퍼를 무시하고 바로가는 데이터(대체로 빨리빨리 필요한 데이터?, 그 증거로 Urgent point가 들어가는 장소가 있다.)를 말하는데 이정도까지 만드는 경우는 잘 없다는 듯 하다.

Half-close, 즉 한 쪽만 송신이 닫힌 상태로 통신이 가능하다.

Full-Duplex Service이다.

그리고 헤더의 윈도우 크기를 통해 전송 속도를 조절해 오버플로우를 방지한다. 이로 인해 연속적인 세그먼트 전송이 가능하다.

또 포트 번호가 존재하는데 애플리케이션의 주소라고 생각하면 된다.

TCP는 버퍼로 저장한다(Circular array). 연결이 종료되면 버퍼를 삭제한다.
<중요>
지금까지 그랬듯이 에러 검출을 하기위해 타이머가 존재한다. 데이터를 받으면, ACK-Delaying Timer가 동작하는데 그 동안, Server에서 데이터가 또 온다면 ACK를 보내지않는다. ACK를 0.5초 단위(일정 단위)로 하기때문에, TCP(1972년)으로 대량을 고속으로 보낼 때에는 서버에서 클라이언트에 ACK-delaying을 하지 말라고 요청을 하라고 한다.
클라이언트는 재전송 요청을 하고, 서버는 Receiver buffer가 있다. 즉 Selective Reaptive이다.
Fast - transfor
이건 초기의 이야기고, 현재의 TCP는 빠른 재전송으로, 계속해서 ACK를 요청하고, 3번 연속 Lost 되었다는 ACK를 받으면 바로 재전송하여, RTO Timer가 터지지 않아도 빠르게 재전송을 할 수 있게된다.

Slow start, exponetial increase
윈도우 사이즈와 상관없이, 아랫단에서 뭔가 문제(정체)가 일어날 수 있기 때문에 1,2,4,8 이렇게 지수 스케일로 증가시켜보면서 네트워크의 부하를 방지한다!

congestion avoidance, additive increase
선형적으로 사이즈를 크게하는 것이다.

Taho-TCP(SS + CA)
지수적 증가를 하다가, Time-out이 오면, 그 값을 ssthresh에 저장하여 그 값부터는 선형적으로 더한다. 또 time-out이 오면 ssthresh에 저장하고 지수적 증가... 이렇게 반복한다.
Reno-TCP
3dupACKs의 경우를 에러로 판단하지 않는다.
= Fast Recovery

그래서 이러한 기능을 잘 생각해서 어플리케이션을 작성해야한다.

2. UDP
프로세스의 식별만이 역할이다. 에러검출, 플로우 컨트롤의 기능이 없다.
효율성을 중요시하기 때문에 헤더가 단순화 되어있다. 포트, 길이, 체크섬(CRC?)으로 되어있다. 그렇기 때문에 브로드캐스트에 적합하다.

UDP에서는 큐로 요청이 관리된다. 프로세스가 시작되면 운영체제에게 포트번호가 요청되고, 입력, 출력 큐가 생성된다. 프로세스가 종료되면 큐는 제거된다. 입력큐가 왔는데, 큐가 없거나 오버플로우가 발생하면 Port unreachable message를 서버로 보낼 것을 OS가 요청한다. 반대로 출력큐에 오버플로우가 발생할 수 있는데 이때, OS가 프로세스에게 기다리라고 말한다.

서버 프로세스는 운영체제에 따라 큐 생성 방법은 다르지만, Well-known port에 대해 입력 큐와 출력 큐를 생성한다. 마찬가지로 서버에게 포트 도달불가를 클라이언트로 보낸다.

UDP를 이용한 어플에는 다음이 있다.
1.FTP,TFTP
2.RIP,SNMP 등..
3.브로드캐스팅

자세한 내용 https://m.blog.naver.com/twers/50117815403

...

네트워크 총정리를 위해(사실은 시험) 작성하였고, 프로그래머로 살아가면서 점점 크게 작성해볼 예정입니다. 지금은 되게 내용이 부정확하고 장황할 수 있습니다 ㅠㅠ 그런 점이 보인다면 이야기해주시면 감사하겠습니다.

profile
경희대 소프트웨어융합학과 게임컨텐츠트랙 Web / Game Graphics / 딥러닝

0개의 댓글