Wireless and Mobile Network

뚝딱이·2024년 1월 18일
0

네트워크

목록 보기
6/8

유선상에서는 링크라는 공유된 매체에서 어떻게 데이터가 전달되는지에 대해 알아보았다. 무선상에서도 이와 비슷하게 공기라는 공유된 것에서 어떻게 데이터가 전달되는지 알아보는 것이다.

Wireless

네트워크관점에서 이동은 노트북을 가지고 잠깐 왔다갔다 하는 것이 아닌 네트워크가 바뀌는 것을 말한다.
예를 들어 내가 구글 캘리포니아 서버에 접속한다고 해보자. 이때 무선 접속이라면, 어디가 무선인가? 모두가? 아니다. 첫 hop이다. 따라서 첫 hop만이 중요하며
한 hop을 어떻게 가느냐가 중요하다.


위에서 802.~로 표시되어있는 것들이 wifi로 불리는 것들이다. 점점 데이터 속도는 좋아지는데, 데이터 반경은 좁아져 실내에서 사용하는 것들이다.

또 다른 방식으로 무선 네트워크를 나눠보자면 아래와 같다. 참고만 해두자. 우리가 사용하는 90%는 infrastructure가 있으면서 single hop인 경우이다.

특징

유선 이더넷에서는 시그널이 케이블을 통해 전달된다. 따라서 외부로부터 노이즈가 보호되어 안정적이다. 하지만 무선같은 경우에는 거리가 늘어남에 따라 exponential하게 signal의 크기가 떨어지고 외부로 부터 간섭이 커진다. 그렇다면 무슨 문제점이 생길까?

hidden terminal problem

무선 host A,B,C가 있고 와이파이의 전송 반경이 100m라고 가정하자. 이때 A-B, B-C의 거리가 각각 80m이다. 그렇다면, A의 전송반경내에 B가 존재하고, C의 전송 반경 내에 B가 존재한다. 하지만 A의 전송 반경내엔 C가 존재하지 않는다. 그럼 A가 전송하는 데이터가 C에게 들릴까? 거의 안들린다. 아래의 그래프와 같다.

그럼 A가 B에게 데이터를 전송하고 있을 때 C는 carrier sense를 해도 들리지 않는다. 즉, C는 A가 B에게 데이터를 전송하고 있는 것을 알지 못한다. 이를 C가 알아야 방해를 안하는데, C가 몰라 충돌이 나므로 문제가 된다. 이러한 문제를 hidden terminal problem이라 한다.

collision detection 불가능

또한 충돌 감지가 불가능하다. A,B,C가 각각의 전송 범위 내에 모두를 포함하고 있다고 가정하자.

이때 A가 데이터를 전송하기 시작했을 때 B가 전송 범위내에 있어도 B가 전송하는 것을 듣지 못한다. 내가 얘기를 시작하면 내 얘기가 크게 들리고 주변의 소리는 거리에 따라 내 소리보다 작게 들리기 때문이다.

그렇다면, 무선 네트워크에서는 어떻게 데이터를 전송할까?

IEEE 802.1 | Wireless LAN

WIFI는 Wireless fidelity의 약자이다. 원래 이름은 위의 IEEE 802.1이며 wifi는 사용자들을 위한 마케팅 용어이다.

가장 처음에 나온것이 802.11b, 그리고 802.11a, 802.11g 그리고 최근에 나온것이 802.11n이다. 점점 개선된 것은 data rate이다.


위의 그림을 보면 ethernet으로 연결되어있고, switch로 연결되어 끝엔 라우터로 연결되어 있는 형태다. 처음 노트북을 열게 되면 BSS에 연결하게 된다. 어떻게 연결하는지 알아보자.

BSS 연결

passive scanning

주변에 AP들은 주기적으로(초당 10번 등) beacon frame에 자기자신의 정보를 담아 broadcast한다.
그럼 host들이 그 정보로 판단을 하는 것이다.

Passive scanning이라고 하는 이유는 host는 가만히 있고 AP들이 가져다 주기 때문이다.

MAC 프로토콜

CSMA/CD를 사용한다고 가정해보자. 그럼 위에서 말했듯이 충돌 감지를 못해 멈추지도 못하고, 충돌 감지도 못하기 때문에 CSMA/CD를 사용하지 못한다. CSMA/CD는 충돌이 나면 충돌이 나지 않을 때 까지 재전송한다. 충돌이 안났다는 것은 제대로 갔다는 이야기다. 따라서 ACK가 없다. 그렇다면 와이파이는? 충돌 감지가 없어 충돌 감지가 안되므로 frame이 잘 갔는지 안갔는지 확인이 필요해 ACK가 필요한 것이다. 하지만 TCP에서와의 ACK와 혼동하면 안된다.

CSMA/CA

보낼 데이터가 있으면 carrier sense가 있으면 보내지 않고, 없으면 보낸다. 만약 충돌이 있다면 back off한다. reciecer는 SIFS만큼 기다린다음에 ACK를 보내 잘 받았다고 응답한다.

sender는 ACK를 받았을 때만 데이터를 잘 보냈다고 이해하고 다음 데이터를 전송할 준비를 하고 ACK를 받지 못했다면 재전송할 준비를 한다. 재전송할 때는 조용해 질때까지 random한 시간 만큼기다렸다가 보낸다. 왜냐? 여러사람이 있을 수 있기 때문이다.

기본 동작은 위와 같다. CSMA/CD 동작과의 차이를 생각해보자. CSMA/CD에선 충돌을 감지했을 때 바로 멈춘다. 보내야 할 데이터가 100이었는데 5만 보냈어도 충돌을 감지하면 멈춘다. CSMA/CA엔 충돌을 감지할 수 없으므로 충돌이 나도 계속 보낸다. 그렇다면 어디서 일어나는 충돌이 더 피해가 클까? CSMA/CA가 더 크다. 왜냐하면 낭비되는 시간이 더 크기 때문이다. 따라서 충돌 나는 것을 더 조심해야한다. 그렇다면 CSMA/CA의 그림만 봤을 땐 그러한 노력을 하는가? 잘 모르겠다. 그냥 충돌에 대한 피해를 다 안고 가고 있다.

그래서 CSMA/CA에다가 RTS-CTS라는 control frame을 추가해 충돌을 줄인다.

RTS : Ready to send
CTS : Clear to send

실제 내가 보내고자 하는 큰 데이터가 있어도 그 전에 조그마한 돌맹이를 먼저 던져 충돌을 확인해보자는 아이디어다.

  1. B: carrier sense
  2. B: RTS 전송 (아주작은 frame)
  3. A: RTS 전송
  4. 충돌
    • RTS끼리의 충돌은 피해가 적다. RTS가 매우 작은 frame이기 때문이다.
  5. 두 RTS는 충돌이 났으므로 A는 각각의 RTS에 대한 응답인 CTS를 보내지 못함
  6. A,B: CTS를 받지 못했으므로 random backoff
  7. A: RTS 전송
  8. AP: CTS 전송
    • 이때 모두에게 A라는 애가 이 채널을 얼마동안 사용할 것이라고 공지함
  9. A: 데이터 전송
  10. B: carrier sense해도 조용해 데이터를 보낼 수도 있지만 CTS를 통해 A가 쓴다는 것을 알았으므로 보내지 않고 잠들어 있음

그렇다면 A의 CTS가 B로 가는 도중 B가 RTS를 보내 충돌이 나면 어떻게 될까?
CTS보낼 때 RTS전송되면 섞여 noise가 되 RTS가 무의미해진다. 따라서 주변애들은 CTS, RTS 모두 못듣고, B는 A가 채널을 예약한 사실을 모른다. 하지만 A 주변에 있는 애들은 CTS를 들었으므로 조용해진다. A는 큰 데이터를 전송하고, B는 주변이 조용해지므로 RTS를 전송한다. 그럼 큰 frame과 RTS가 충돌해 모두 날아간다. 따라서 A는 ACK를, B는 CTS를 받지 못해 다시 RTS부터 시작한다.

그렇다면 CTS를 모두 잘 보냈는데, X라는 host가 새로 들어온다고 생각해보자. 이 X는 CTS를 받지 못했으므로 처음부터 다시 시작하는 것이다.

따라서 host가 많을 수록 계속 충돌,, 충돌,, 충돌 하는것이다.

재전송 횟수를 정해놓고, 일정 횟수를 넘어가면 해당 frame은 넘기고 다음 frame을 전송한다. 그렇다면 포기된 frame은 평생 전송이 안되는 것일까? 돌고돌아 TCP로 올라가 다시 전송된다.

FRAME


address field가 4개이다. TCP, IP 모두 address는 src, dest 두개였다. address4는 항상 쓰이진 않고, 1,2,3이 필수적으로 사용된다.

  • address1: 이 frame을 받는 host의 MAC address
  • address2: 이 frame을 전송하는 host의 MAC address
  • address3: 데이터부분에 해당하는 것을 처리하게 될 라우터의 address

아래의 그림을 보면 알 수 있다.

AP와 host는 무선이고, AP와 라우터는 유선이다. 따라서 AP와 host는 CSMA/CA, AP와 라우터는 CSMA/CD이다. 그리고 AP는 기본적으로 link layer 기반 device로 network layer와 관련된 기능(IP)을 할 수 없다.

AP들이 각각 다른 채널을 사용해 중복되지 않는다면 각각의 충돌 영역을 가지게 된다. 하지만, 같은 채널을 사용해 중복된다면, CSMA/CA + RTS,CTS를 통해 해결한다. AP들이 많아질수록 중복 채널이 많을 것이고 그만큼 충돌이 많을 것이다.

host입장에선 AP에서 자신의 frame을 보내는 방향에 MAC addr가 존재한다. 하지만 라우터 관점에선 AP는 switch이므로 보이지 않고 host만 보인다. 이것이 AP의 특징이다.

그렇다면, 왜 처음부터 H1 MAC address, R1 MAC address만 보내면 안되고 처음엔 세개로 보내야할까?

address가 두개만 있는 상황이라고 가정해보자.

  • src: H1 addr
  • dest: AP addr

이 frame을 AP가 받는다. AP는 link layer device이므로 IP 패킷을 꺼내더라도 할 수 있는 일이 없다. IP 패킷의 src는 H1, dest는 최종 목적지일것이다. 이는 라우터가 이해할 수 있는 데이터다.

그렇다면 dest에 AP 주소를 적지말고 라우터 주소를 적으면 안되는걸까?

  • src: H1 addr
  • dest: R1 addr

CSMA/CA 경쟁을 뚫고 채널을 선점해서 전송했는데 dest가 R1인 상황이다. 하지만 R은 없으므로 아무도 받을 수 없어 ACK를 받지 못한다. 따라서 3개를 보내야하는 것이다.

그러면 google까지 갔다가 H1으로 돌아오는 IP 패킷의 주소는 아래와 같을 것이다.

  • src: google addr
  • dest: H1 addr

R1까지 도착했다고 가정할때 이제 어떻게 될까? 위의 IP패킷을 담은 frame의 주소는 아래와 같을 것이다.

  • src: R1 addr
  • dest: H1 addr

그렇다면 위의 frame이 AP에 도착했다. 그럼 address 1,2,3을 채워야한다.

  • address1: H1 MAC addr
  • address2: AP MAC addr
  • address3: R1 MAC addr

라우터의 MAC addr는 어떻게 알까? H1이 처음에 beacon message들을 받아 주변에 누가 있는지 알게된다. 하지만 중요한건 나는 내가 누구인지 모른다. 따라서 내 IP를 알아내는 것이 최우선이다. DHCP를 통해 다음의 것들을 알 수 있다.

  • 자신의 IP addr
  • subnet mask
  • GWR IP
  • local name server IP

DHCP를 통해 위의 주소들을 알기 위해선 DHCP request를 보내야하므로 DHCP request를 담은 frame을 보낸다. 주소는 아래와 같다.

  • address1: AP MAC addr
  • address2: H1 MAC addr
  • address3: broadcast

그런데 이 frame의 data의 IP 패킷의 src는 모르므로 비우고 dest는 broadcast로 날린다. 이때 port number가 DHCP를 지칭하는 67번이므로 DHCP만이 이를 받아 IP를 지정해 다른 정보들과 함께 다시 broadcast해주는 것이다. 이때 frame의 src는 DHCP이고, dest는 broadcast인 것이다.

돌아올 때 address1,2,3은 아래와 같다.

  • address1: broadcast
  • address2: AP MAC addr
  • address3: DHCP

이때 broadcast인데 어떻게 H1이 받는 것일까? 이때 IP 패킷을 깠을 때 DHCP client port를 적어두었으므로 해당 포트를 사용하는 host로 가면 된다. 하지만, IP를 받으려고 기다리는 다른 host도 있다면 같은 port에서 기다릴 것인데 어떻게 해야할까? 바로 처음에 DHCP request를 보낼 때 transaction number를 적어서 보낸다. 따라서 application layer에서 처리하는 것이다.

여기서 이야기하는 AP는 순수한 AP이다. 하지만 흔히 보는 집에 있는 가정용 공유기는 이렇게 link layer만 있는게 아닌, GWR까지 합쳐지고 application layer까지 합쳐져 있는 형태이다.

  • type : 이 frame이 어떤 타입인지 (RTS, CTS, ACK, data)
  • duration : RTS, CTS로 채널을 예약할 때 내가 얼마나 사용할지 적어놓는 곳이다.

유튜브를 BBS1에서 보다가 BBS를 가면 AP가 바뀔 것이다. 그렇다면 이 connection이 유지될까 끊길까?

Connection : clinet와 server 사이의 TCP connection, socket과 socket을 연결한 유일한 connection이다. 전세계 수많은 TCP connection중 유일한 것이다. 이 유일한 것을 어떻게 indexing할까? src IP & port#, dest IP & port#로 indexing한다. 이 네가지 튜플이 같을 수 없기 때문이다. 이 중 하나라도 바뀐다면 같은 connection이 아니다.

내가 가만히 유튜브를 본다면 아무것도 바뀌지 않을 것이다. 그렇다면 내가 BBS2로간다면? 그럼 결국 내 IP와 port 번호가 바뀌는지 보면된다. 같은 라우터 아래에 있으므로 바뀌지 않는다. 즉, 같은 connection이다. 하지만 라우터에서 BBS1으로 가던게 BBS2로 와야한다.

라우터에서 host로 줄 데이터를 받으면 forwarding table을 보면 같은 subnet 내에 있으므로 ARP table에 가서 H1의 MAC addr를 보고 frame의 header를 채운뒤 내려보낸다. 그럼 switch는 switch table을 참조해 내려보내주면 된다. 그렇다면 원래 table에는 H1이 BBS1방향으로 가도록 되어있었을 텐데 이제는 BBS2 방향으로 기록하고 보내야한다. 그렇다면 어떻게 바꿔야할까?

H1이 BBS2로 이동하면 라우터에게 더미 메세지를 보내면, switch table이 업데이트 된다.

그런데 만약 이웃한 AP로 이동하는데 다른 서브넷이라면 src addr이 바뀌므로 connection이 끊긴다. LTE를 사용하면서 유튜브를 보면 안끊긴다. 왜일까? 어마어마하게 큰 네트워크를 같이 사용하기 때문이다.

AP와 wifi host 사이에 무선 채널의 quaility가 계속 변한다. quaility는 AP와 host사이의 거리로 좌우된다. AP에 가까우면 가까울 수록 성능이 좋다. 따라서 무선 채널의 성능을 SNR이라는 것으로 나타낸다.

보통 우리가 AP와 host사이에 전송하고자 하는 데이터는 비트들의 집합인 디지털 데이터이다. 이를 무선채널로 보내려 하는데 무선채널은 아날로그 신호이다. 따라서 디지털 데이터를 아날로그 웨이브에 어떻게 실어보낼지에 대한 규칙

BER(Bit per error)은 낮으면 낮을 수록 좋은 것이다.

  • 거리가 가까워 SNR이 좋다 -> high data rate 가 가능한 전송 방식 사용
    • 단점 : 노이즈에 취약하다. 그래서 조금만 멀어져도 BER이 높아진다.
    • 데이터가 다 갔을 때 ACK를 받는데, error가 섞이면 ACK를 안준다. 그래서 계속 재전송 하다보면 성능 낮아진다.
  • 거리가 멀어 SNR안좋다 -> 작은 전송률을 가진 전송 방식 사용

Power management

컴퓨터가 computation할 때의 전력과 무선통신에 쓰는 전력과의 차이는 무선통신에 쓰이는 전력이 10배 이상이다.


위에서 A가 쓰겠다고 해서 B가 쉬는 동안 B는 잠든다. 전력소모를 줄일 수 있는 것이다.

Celluar

전체 coverage 지역을 cell이라는 단위로 나눠서 기지국을 하나심어놓고 cell에 속하는 host들을 담당하기 때문에 이렇게 이름이 지어졌다.

Celluar network에서 사용하는 mac protocol
여기서도 첫 hop만 무선 통신이고 나머지는 유선망으로 이루어져있다. 따라서 cell 안에서 host들과 기지국 간의 통신이 어떻게 이루어지는가의 문제다. 2G는 random access 방식이 아닌 channel partitioning 방식을 사용했다. 따라서 FDMA/TDMA를 사용해 나눠서 user를 배정했다. 3G로 넘어오면서 CDMA를 사용한다.


CDMA는 각기 사용자에게 맞는 코드를 줘 자신에게 맞는 데이터들은 증폭이 되어 들리고 다른 사람에게 가는 데이터는 노이즈 처리되어 안들린다.

진화


세대(2G, 3G, 4G)는 데이터 속도로 나눈것이다. 4g가 상용화되기 위해선 이미 이전부터 개발되고 있었다. 미리 왜 개발하고 있는가? 기술시장을 선점하기 위해서이다.

3G network architecture


사용자들이 있고 사용자 주변에 무수히 많은 기지국들이 있고 그 기지국들을 관리하는 radio network controller라는 중간계층의 노드들이 있고 뒤에 MSC, SGSN등 피라미드 형태의 구조로 되어있다.

스마트폰으로 인터넷을 한다 -> IP 주소가 배정된다 (TCP connection을 열기위해 있어야함)
GGSN이 NAT, DHCP, DNS 등의 기능을 다 한다. google 서버에 접속한다면 google 서버가 바라보는 IP 주소는 이 GGSN의 IP주소이다.

이 구조내에서 사용하는 protocol은 각기 다르고 무수히 많다.

Mobility

사용자가 network를 넘나드는 mobility가 있는 상황에서 TCP connection이 안끊겼으면 좋겠다는 목표이다. 하지만 현대 internet에서는 구현이 되어있지 않으니 유의하자.

네트워크관점에서 mobility에대해 여러 정의를 내려볼 수 있는데 그 중 하나가 mobility 스펙트럼이다.

mobility가 아예 없는 상황은 앉아서 인터넷을 하다가 끝인 상황이다. 문제될 게 없다.

중간 쯤 되는 mobility는 A기관에서 앉아서 노트북을 하다가 B기관에 가서 노트북을 하는 것이다. 즉, 네트워크를 넘나드는 이동을 한 것이다. 하지만 이동은 했는데, 중간에 끊고 이동을 한 것이다. 따라서 TCP connection이 유지될 필요가 없는 상황이다. 따라서 DHCP를 통해 새로운 네트워크를 받아 사용하면 된다.

high mobility는 TCP connection을 유지하면서 다른 네트워크로 이동하는 것이다. 네트워크를 넘어가는데 유지되는 것에 관심이 있는 것이다.

이를 위해선 두가지를 생각해야한다.
1. 이동하는 대상과 어떻게 연결 할 것인가?

  • 새로운 곳에 갈 때마다 위치를 알려준다.
  • 어디에 가면 본진에 위치를 알려준다.
    따라서 host의 위치를 알고 싶다면 본진에 물어보면 된다.
  1. 계속 이동할 것인데 어떻게 유지할 것인가?

  • permanent address: 각각의 mobil host들이 갖는 고유한 정보
  • home network: permanent address가 속한 network로 본진이다.
  • home agent: home network에 속해있는 host들을 관장한다.

  • visited network: host가 이동해서 간 곳의 network
  • care-of-address: 새로운 네트워크에 갔으니 새로 배정받은 주소
  • foreign agent: 각각의 home network마다 home agent가 있다. 위 host 입장에서는 home agent가 아니니 foreign agent라고 하는 것이다.
  • correspondent: mobile host에 접속하고자 하는 것


그러면 mobile host가 원래의 home network에 있다가 visit network로 잠시 이동을 했다. 그래서 care-of-address를 배정받고 foreign agent에게 여기 왔음을 알린다. 그럼 foreign agent는 이 host의 원래 home network에 이 host가 여기있음을 알려주는 것이다.

그래서 이제 permanent address로 보낸 패킷을 home agent가 host가 다른 곳에 있음을 알리고 보내주는 것이다.

외부 노드가 permanent address에 접근할 때 home agent가 forwarding해주는 것을 indirect routing이라 한다.

장점: correspondent입장에서는 permanent address로만 보내면 되니 편하다.
단점: 멀리돌아가 오래걸린다. 즉, delay가 생긴다.

이는 mobile host를 어떻게 찾을까에대한 얘기다. 이 connection을 어떻게 유지할 것인가에대해선 얘기하지 않았다. 하지만 이는 쉽다. 새로운 네트워크로 이동하면 새로운 곳에 있는 foreign agent에게 알리는 것이다. 그러면 위의 삼각형 구조가 유지될 수 있다.

correspondent가 mobile host에 접근하기 위해 permanent address를 사용해 패킷을 보내는데, forwarding해주는 것이 아니라 다리를 놔주는 것이다. 새로운 주소를 알려주고 새로운 주소를 받은 correspondent는 해당 주소와 통신하는 것이다.

장점: 빠르다.
단점: correspondent가 할 일이 많아졌다.

어떻게 유지할까? 이동을 하면 새로운 네트워크의 foreign agent에게 연락을 해서 forwarding해달라는 것이다.

출처

컴퓨터네트워크 한양대학교 이석복
Computer Networking A Top-Down Approach 7-th Edition

profile
백엔드 개발자 지망생

0개의 댓글