이번 글에서는 네트워크의 이론에 대해 정리하겠습니다.
먼저 네트워크는 PC간 통신이 아니라 프로세서 간 통신이라고 말하는 것이 옳습니다.
cf) 작동하기 위해 작업이 메모리에 있는 상태를 프로세스, 그런 작업을을 실행하게 하는 cpu를 프로세서, 작업을 지시 하는 프로그램. 이것이 좀더 정확한 표현입니다.
=A program is a definite group of ordered operations that are to be performed. On the other hand, an instance of a program being executed is a process. *참조 https://techdifferences.com/difference-between-program-and-process.html
네트워크를 작동하는 프로그램은 두가지가 있습니다. Client Program과 Server Program인데 Client Program은 사용할때만 작동하지만 Server Program은 항상 작동하고 있어야 합니다. 왜냐하면 Client는 사용하고 싶을때만 접속하면 되지만 Server는 언제 누가 접속할지 알수없기 때문에 항상 연결되어있어야 하기 때문입니다. PC를 서버로 사용하는 경우 해당 PC는 항상 작동중이어야 합니다.
cf) 서버사용하는 OS가 윈도우가 아닌 리눅스로 많이 사용하는 이유는
1. 리소스를 적게 차지한다
2. 직관적이다(편의성은 유저마다 다르기에 제외하더라도 오류확인같은 작업이 확실하다)
위와 같기 때문이다.
여기서 Client와 Server의 의미를 알아야 하는데 Client는 서비스 요청자, Server는 서비스 제공자입니다. 우리가 사용하는 이더넷을 예로 들면 Client는 사용자, Server는 ISP라고 생각할 수 있습니다. 또한 Server-Client간의 통신은 1:1통신으로 이루어 지는데 이는Unicast방식이라고 합니다. 반대로 불특정 다수에게 데이터를 송신하는 방식을 Broadcast방식이라고 합니다.
7 Layer 5 Layer의 구성은 다음과 같습니다.
data edge | HTTP | FTP |
SMTP IMAP
POP |
....... | Application | Application |
Presentation | ||||||
Session | ||||||
TCP/UDP | Transport | Transport | ||||
data core | IP | Network | Network | |||
Ethernet | PPP | FDDI | ....... | DataLink | DataLink | |
Physical | Physical |
각각 계층에 대한 간단한 설명은 다음과 같습니다.
1. Physical Layer
frame을 전기적 신호로 랜선을 이용해 전송하는 계층
2. Data Link Layer
송수신MAC주소를 확인하는 계층
datagram에 MAC주소를 합쳐서 frame으로 변환하거나 frame의 MAC주소를 제거하여 datagram으로 변환
3. Network Layer
누가보내고 누가받는지에 대한 IP값을 저장하는 계층
segment에 IP주소를 합쳐서 datagram으로 변환하거나 datagram의 IP주소를 제거하여 segmentfh로 변환
4. Transport Layer
데이터의 안정성(데이터가 손상됬는지, 데이터의 크기, 데이터를 분할해서 송신하는지 등)을 확인하는 계층
data를 segment로 변환하거나 segment를 data로 변환
5. Application Layer
원래는 5 Layer구성으로 Application으로만 설명했는데 나중에7 Layer 구성으로 기존 Application으로 부르던 Layer를 Application, Presentation, Session으로 세분화 시켰습니다. 데이터를 확인 및 송신
서로 데이터를 다음 Layer에 맞게 수정하면서 Layer간 통신을 하게 되는데 이때 통신은 Blind 통신으로 서버에서 물리계층을 나가는 순간부터 수신여부나 어디까지 갔는지 알수없습니다. 즉, 패킷이 어디쯤 가고 있는지, 도착했는지, 수신한것인지 등에대한 내용을 추적하지 않습니다. ≒ 편지전송
DataLink프로토콜중 Ethernet을 가장 많이 사용하는 이유는 단순해서 만들기 쉽기때문입니다.
Ethernet의 네트워크 추상화(topology)는 3가지 입니다.
첫째, Star형
둘째, RIng형
셋째 Bus형
현재는 Ethernet을 많이 쓰기 때문에 자주 그립니다. Bus형 통신방식은 전송방식에 규격이 없습니다.
다만 한 라인을 이용해 통신하기 때문에 기본적으로 1:1통신 또는 1:all통신만 가능합니다. 여기서 1:all은 데이터를 전선에 올리면 수신자가 알아서 수신하는 방식(multicast방식) 즉, 전기적 신호를 전선에 뿌리기만 하고 수신에는 신경을 쓰지 않습니다. 반면에 broadcast방식도 데이터를 다른 모든 포트에 보내기는 하지만 목적지를 연결된 네트워크안에서 자신을 제외한 나머지 네트워크로하여 전송하는 방식입니다.
Bus형 추상도를 그릴때 항상 양끝은 선으로 막혀있어야 합니다. 실제로 양끝에서 데이터가 소실될수있게 55ohm(Ω)이 존재하기 때문입니다.
이 Ethernet에서 사용하는 통신방식의 특징은 CSMA/CD방식인데
CS(CarrierSense) MA(MultiAccess) / CD(CollisionDetect)으로
CarrierSense는 데이터를 보내기 전 라인에 데이터가 있는지 확인하고 있으면 기다리고 없으면 송신하는 것이고,
MultiAccess는 1:다수가 통신이 가능하다는 것입니다.
CollisionDetect는 다른포트에서 같이 데이터를 송신하다 충돌되서 발생한 충돌된 전기신호(collision)발생하게 됩니다. 그렇게 되면 collision이 목적지가 없는 쓰레기 값으로 변형되는데 그후 모든 포트에 전달된 후 사라지고 나면 수신한 포트는 목적지가 자신이 아니기때문에 collision을 버리게 됩니다. 그후 네트워크상에 collision값이 사라졌는지 확인하고 통신을 다시 하는 것입니다.
# of node
이 환경에서 노드 수가 A인 경우와 노드 수가 B인 경우는 보여지는 속도는 같더라도 네트워크 상태는 전혀 다릅니다.
노드 수가 A인 경우는 최대 전송속도로 네트워크가 이루어지는 굉장히 깨끗한 상태인 반면, 노드 수가 B인 경우에는 이상적으로는 네트워크 속도가 완만한 상승곡선으로 올라가야 하지만 실제로는 통신량이 너무 많아 collision이 많이 발생해서 속도가 저하된것입니다. 이를 해결하기위해서는 네트워크의 최대 상한 속도를 높히거나 노드수가 줄어든 것처럼 네트워크를 구성하는 방법 두가지 밖에는 없습니다.
따라서 네트워크를 노스수가 줄어든것처럼 구성하는 방법을 사용할 수 밖에 없는데 물리적으로 해결할 수 없기때문에 외부장치를 사용합니다.
- Repeater(HUB)
리피터(허브)를 사용하게 되면 네트워크를 분리하여 포트 하나에 연결시키기 때문에 물리적으로 동일한 네트워크가 됩니다. 그래서 마치 하나의 네트워크처럼 보이기 때문에 네트워크에서 사용하는 대역폭 감소하게 됩니다.
- Bridge
#1 | #2 |
A | C |
B | D |
Bridge의 중요한 기능은 어떤 포트에 어느 노드가 연결되어있는지 정보를 저장해놓는다는 것이고, 그것을 통해 데이터를 넘겨야 할지 말아야 할지 결정하는 것 입니다. 이를 알기위해 A에서 B로 데이터를 보내는 경우를 예로 들겠습니다. 네트워크를 처음 구성하고 A에서 B로 데이터를 보내게 되면 MultiAccess방식으로 A가 보내는 데이터가 A와 연결된 모든 포트로 전송이 됩니다. 이때 당연히 B는 데이터를 받고 확인합니다. 하지만 Bridge는 어떨까요? Bridge는 수신한 포트정보는 A밖에 없기때문에 table에는 A외에 다른 노드는 누가 있는지 어느 포트에 연결되어 있는지 알수없습니다. 따라서 Bridge에서는 데이터를 2번 포트로도 보내서 C, D도 받게 합니다.
그리고 시간이 어느정도 흐른후 Bridge가 table을 완성한뒤에 마찬가지로 A에서 B로 데이터를 보낸다고 합시다. 마찬가지로 B는 제대로 데이터를 받겠죠? 이번에 Bridge는 어떨까요? 이미 table에 B노드는 1번 포트에 연결되어 있는것을 알고있기때문에 이번에는 데이터를 버리게 됩니다.
- Switch
Switch는 간략하게 설명하면 브릿지에서 포트 수를 늘려놓은것이라고도 말할 수 있지만 엄밀히 말하면 대략적인 기능은 같지만 알고리즘같이 디테일한 부분은 다르기 때문에 다른것 입니다. Switch의 가장 큰 장점은 단일 네트워크 안에서 노드간의 송신이 동시에 이루어지는것 처럼 보일 수 있다는 것입니다. 예를 들면 A노드와 B노드가 통신할때 C노드와 D노드도 통신이 가능하다는 점입니다. Bridge의 경우 네트워크가 나누어져 있어 다른 네트워크로 넘어가면 딜레이가 생겼지만 Switch는 그런일이 발생하지 않게 됩니다.
하지만 Switch도 딜레이가 발생하게 되는 경우가 있는데 하나는 통신이 이루어질때 거의 동시에 일어나지만 collision때문에 미세한 시간차 순서가 발생합니다. 그리고 그 순서에 따라 데이터를 송수신하게 되는데 한꺼번에 많은 데이터가 오게되면 Q버퍼라는 임시 저장소에 Stack되게 되는데 버퍼가 모두 차게 되면 먼저 여유가 생길때 까지 Delay가 됩니다. 만약 Stack을 할수있는 공간이 없는데도 데이터가 오면 Overflow가 되어 데이터값을 Drop합니다. 그 데이터 값을 다시 송신할지에 대한 프로토콜은 TCP를 따릅니다.
*Packet = frame = carrier?
패킷은 합쳐지는 모든 데이터들을 통칭하는 것으로 frame, datagram, segment 모두 패킷이라고 할 수 있습니다.
그리고 carrier는 frame을 의미하기도 하지만 기본적으로 데이터를 이동시키는 전기적 신호를 말하기 때문에 carrier가 frame보다는 범주가 크다고 볼수있습니다.
이제 IP주소에 대해 배워보겠습니다. Ethernet에서 IP를 설정할때는 IP주소, Netmask, Gateway 이렇게 3가지가 반드시 필요합니다. 각각에 대한 설명은 다음과 같습니다.
-IP주소
IP주소는 32bit(4byte)로 이루어져 있습니다. 그런데 32bit를 10진수로 표현하면 너무 크기 때문에 1/4씩 표현하게 되었습니다. 따라서 a.a.a.a같은 모습을 하게 되는데 a의 범위는 0~255가 됩니다(1byte로는 255까지밖에 표현할 수 없다). 따라서 IP주소는 0.0.0.0 ~ 255.255.255.255가 가능합니다. 그리고 IP주소는 network주소와 host주소가 결합된 형태입니다.
-Netmask
Netmask도 IP주소와 같이 32bit(4byte)로 이루어져 있지만 255와 0으로만 구성되어 있습니다. Netmask가 필요한 이유 는 IP주소중에 어디 부분까지가 네트워크주소인지확인 하기 위해서 입니다. 이유는 Ethernet에서 통신할때 아무런 설정없이 그대로의 상태에서는 IP가 같은 네트워크 끼리만 통신하기 때문입니다.
-Gateway
Gateway는 다른 네트워크와 통신하기 위해 사용하는 주소로 IP주소로 사용할 수 있는 주소중 하나를 선택하여 사용합니다.
네트워크 주소와 호스트 주소를 확인하는 방법은 IP주소와 Netmask를 논리연산중 &연산 하면 됩니다.
이제 호스트 주소는 네트워크 주소를 제외한 나머지 부분이 호스트 주소가 됩니다.
예를 들어 네트워크주소가 1.1.1.0인 네트워크가 있다고 가정하면 사용할수있는 호스트 주소의 범위는 1.1.1.0~1.1.1.255 입니다. 하지만 여기서 1.1.1.0은 네트워크 주소이므로 IP주소로 설정 할수없고, 1.1.1.255는 Broadcast주소이므로 IP주소로 설정할 수 없습니다. 참고로 MAC주소는 48bit(6byte)인데 앞의 3byte는 제조사 고유번호입니다. 이주소들 중에서 FF-FF-FF-FF-FF-FF는 MAC주소의 Broadcast주소입니다.
Gateway주소는 위에서 언급했듯이 자신이 속한 네트워크 중 사용 가능한 주소 하나를 선택하여 설정하는것인데 보통은 1.1.1.1같은 첫번째주소를 사용합니다.
이제 등장하는 녀석이 Router라는 녀석인데 이녀석이 Gateway와 연결되어 외부의 네트워크에 접속할 수 있게 합니다.
Router에는 Router Table이라는 것이 존재해서 연결된 네트워크에 대한 정보를 저장하게 됩니다. Bridge와 생긴것은 비슷하지만 Bridge는 다른 네트워크로 바로 연결된다는 점이고 Router은 포트에 IP주소를 할당받는다는 점입니다. 예를들만 1.1.1.2 노드에서 2.1.1.5 노드로 데이터를 전송하려고 한다면 네트워크 전송은 1.1.1.2에서 1.1.1.1(gateway)로 가서 라우터를 통해 2.1.1.1로 데이터가 전송된 후 2.1.1.5로 데이터가 전송됩니다.
그리고 라우터 끼리는 라우터 요청, 라우터 응답을 통해 자신이 가진 테이블정보를 공유합니다. 따라서 라우터를 통해 네트워크확장을 하게되면 라우터 테이블을 작성할 필요없이 확장된 네트워크에 연결된 라우터에게서 테이블 정보를 받아옵니다.
추가적으로 공유기는 NAT방식으로 데이터가 전송됩니다. NAT방식은 쉽게 생각하면 데이터 송수신할때 네트워크 안에서 외부로 통신을 하게 되면 외부에서 볼때는 게이트웨이와의 통신이라고 생각하게 하는것 입니다.
이를 이용하면 노트북에서 고정IP를 사용하는것 처럼 보이게 할 수 있습니다. 실제로 노트북은 주로 무선인터넷을 사용하기 때문에 유동 IP를 사용합니다. 그래서 터미널 연결시 네트워크변경으로 끊겼다 연결됬다가 비규칙적으로 연결 혹은 해지가 됩니다. NAT방식을 사용하면 노트북의 네트워크를 공유기 네트워크로 인식하여 외부에서는 고정 IP인것으로 보이게 되어 연결이 일정하게 유지되게 됩니다.
'교육 > Netwrok' 카테고리의 다른 글
Day 7 (0) | 2019.11.26 |
---|---|
Day 5 (2) (0) | 2019.11.22 |
Day 4 (0) | 2019.11.22 |
Day 2 & 3(2) (0) | 2019.11.22 |
Day 2 & 3(1) (0) | 2019.11.22 |