source 포트에서는 gateway 라우터로 packet을 보낸다.
source 포트만의 전용 gateway라우터까지의 선이 있는 것이 아니라
physical layer에서 여러 매체들과 공유하면서 갈 수 있는 방향으로 모두 퍼지게 된다.
많은 사람들이 공유하고 있는 매체를 통해 메시지를 전달하기 때문에 충돌이 발생하지 않아야 제대로 msg가 원하는 목적지까지 전달될 수 있다.
따라서 link layer에서 하는 가장 중요한 일은 충돌이 발생하지 않게 발생하면 어떻게 해결할지이다.
유선인 link layer는 어떻게 충돌을 관리하는가?
transport layer와 network layer는 operating system 내부에 구현되어 있다. (소프트웨어로 코드로 구현되어 있다.)
link layer는 network interface card (=NIC, adaptor) 내부에 구현되어 있다. (카드처럼 안에 구워져 있다.)
네트워크 layer의 id packet이 network interface card 내부에 전달되어 link layer의 전송단위인 frame 내의 data부분에 포함되어 전달된다.
실제로는 다양한 매체가 공유하는 채널을 통해서 packet을 보내면 시그널이 모든 link로 퍼지게 되면서 문제가 발생한다.
이때 signal을 모든 매체로 전달하는 매체를 broadcast medium 이라고 부른다.
매체에 signal을 실어서 접근할때 (=Medium access) 조절을 하여 충돌을 해결하고자 하는 기술을 MAC (Medium Access Control) protocol이라고 부른다.
wifi, LTE 등이 MAC protocol의 예시이다.
가정: link의 bandwidth를 R (bps)이라고 하자.
다음은 이상적인 MAC protocol 모델을 위해 갖추면 좋을 조건들이다.
위의 이상적인 프로토콜 방식으로 다가간 3가지 방식에 대해 알아보자.
시간을 쪼개서 여러사람이 접근할 수 있도록 하는 방식이다.
각 사람별로 자기자신이 전송할 시간을 time slot으로 나눠서 자기자신의 시간대에만 packet을 전송하는 원리이다.
각자 자기자신의 주파수가 배정되어 있어 자신의 주파수에만 packet을 전송하는 원리이다.
보내고자 하는 데이터가 있을때 보내고 싶다면
(1)충돌을 어떻게 탐지할 것이며 (2)충돌이 발생한 경우 어떻게 처리할 것인가?
broadcast medium이 어디서나 적용할 수 있는 것이다.
누군가 얘기하고 있으면 끝날때까지 기다리고 공백이 생기면 대화하는 프로토콜과 유사하다.

노란색 프레임과 빨간색 프레임이 동시에 겹치게된다.
노란색, 빨간색 frame을 error를 포함한채 온전히 받지 못하면 frame이 모두 날라가면서 t0 - t1 시간동안 frame이 하나도 살아남지 못하면서 채널이 낭비되게 된다.
propagation delay가 존재하기 때문에 발생한다. 그러나 propagation delay (빛의 속도) -> 0 은 불가능하기 때문에 충돌은 날 수 밖에 없다.
충돌이 발생했음에도 이미 transfer를 시작하면 구분하지 못하고 계속 transfer를 한다.
그러면 이후 충돌이 발생하면 감지하는 방안을 살펴보자.
내가 전송하는데 다른 사람의 얘기가 들어오면 감지를 하고 멈춘다.

충돌을 감지하면 자신의 packet전송을 멈췄다.
충돌을 한 후 누가 먼저 패킷 전송을 시작할 것인지에 대해서는 중재자가 부재하면 해결하기 어려운 상황이다. 여기서는 분산처리기 때문에 더욱 중앙처리장치가 없다.
다음은 CSMA/CD에서 어떤 알고리즘으로 해결했는지에 대해서 정리했다.
연속적으로 m번의 충돌이 발생했다면 {0, 1, 2, ..., 2^m -1} 까지의 숫자들 중 하나를 랜덤하게 골라 나온 숫자만큼의 시간만큼 기다리는 방식이다.
충돌이 계속 발생하면 선택할 범위가 넓어지므로 오래 기다릴 가능성이 높아진다.
패킷을 보내는 매체의 입장에서는 또다른 매체가 얼마나 더 있는지 알 수 없기 때문에 충돌 횟수에 따라 기다리는 시간의 범위를 늘리는 것이다.
결국, 충돌이 발생하면 backoff (=delay)했다가 데이터를 재전송하는 것이고 충돌이 많이 날수록 backoff 시간이 길어져서 네트워크가 느리고 지연된다. 이것이 random access protocol의 장점이자 단점이다.
많이 사용되지는 않는 방식이다. master controller가 보낼 데이터의 여부를 확인하는 방식이다.
token을 가지고 있는 host만이 데이터를 전송할 수 있다.
문제점은 token을 잃어버리는 경우 더이상 전달이 이루어지지 않는다는 것이다.
random access 방식의 CSMA를 인터넷에서 사용한다.
라우터를 거치지 않고도 접근이 가능한 subnet은 LAN으로 연결되어 있다. 따라서 GateWayRouter로 가기전에 여러 매체가 공유하고 있는 집합이 sunet이고 이 집합을 Local network area라고 한다.
bus: 예전에 유행하던 라우터 방식이다.

star: 요즘의 LAN 구성은 switch에 꽂아서 이어주는 방식으로 아래의 그림과 같다.

application(ms) -> transport (segment) -> network (ip packet) -> link(frame)
다음은 frame의 header에 담겨있는 정보이다.

packet의 충돌을 어떻게 해결하는지는 굉장히 중요한 사안이고 다음은 이더넷에서의 해결방법에 대한 설명이다.
말하기 전에 듣고, 누가 말하면 조용해지고, 충돌이 감지되면 그 즉시 말을 멈추고 기다린다. exponential하게 backoff 하면서 기다린다.
TCP:
- source 포트에서 destination 포트까지 보내면서 제대로 전송됐다는 packet을 다시받지 않으면 packet을 재전송한다.
- timeout value가 크다.
Link Layer:
- GateWayRouter가 받았다는 확신 즉 CD가 발생하는 경우에만 프레임을 재전송한다.
- 따로 feedback이 필요하지 않다.
따라서 기왕이면 link layer에서 재전송을 하는게 시간 절약적이다.
충돌이 발생했는데 CD(충돌감지)가 나지 않으면 gate way router 에 도달했다고 확신하기 때문에 데이터를 재전송하지 않는다.
A --- B --- C --- D --- E
: 나열된 거리와 유사하게 라우터가 실제로 멀리 위치해있다고 해보자.
1) A에서 frameA를 전송한다.
2) E는 listen을 하고 있다가 frameE를 전송하기 바로 직전까지 frameA가 전송되고 있음을 알지 못하므로 그대로 전송한다.
3) frameE를 내보내는 도중 frameA가 라우터E에 도달하고 CD를 감지한다.
4) CD가 감지된 후부터는 frameE 보내기를 중단하고 이미 전송된 frameE는 라우터 A를 향해 전달된다.
-> 이때 이미 충돌이 발생하므로 frameA는 처리할 수 없는 데이터가 된다.
5) 라우터A가 frameE가 도착하기 직전에 모든 frameA를 전송한다.
6) frameE를 받고 나서는 충돌이 발생하지 않았으므로 라우터A는 문제상황을 인지하지 못한다.
A가 frameA를 좀더 길게 보냈으면 frameE를 받고 CD를 감지했을 것이다. 따라서 최소한으로 A가 데이터 프레임을 구성해야하는 길이가 64byte이다. minimum frame size는 64byte이다.
이더넷 프레임의 헤더에 들어가는 MAC address에 대해서 알아보자.
[ header | DATA ] 로 이루어진 data frame에서 data 부분은 ip packet으로 이루어져 있고 header 부분은 48 bit의 MAC address로 구성되어 있다.
여기서 MAC address의 구성은 다음과 같다.
예를 들어 frame을 구성하는 부분은 다음과 같이 대응된다.
ex) 1A-2F-BB-76-09-AD
MAC address를 변경한다는 의미는 결국 source address를 위조해서 바꾸는 것이지 고유번호 자체를 바꾸는 것은 아니다.

DHCP라는 프로토콜을 통해서 GateWayRouter의 IP주소를 알게 된다.
그러면 packet과 frame의 source와 destination은 다음처럼 구성할 수 있다.
- IP packet header
source: 나 자신의 ip
destination: DHCP를 통해 알게된 dest의 ip (예를 들면 구글의 ip주소)
- frame header
source: 나 자신의 ip
destination: gateway router의 MAC address
각 host 내부를 보면 ARP (Address Resolution Protocol) table이 있다.
[ IP주소 | MAC 주소 | TTL ] 을 각 칼럼으로 가진 table이다.
그러나 처음부터 모든 GateWayRouter의 MAC 주소가 존재할 순 없어서 이를 채워넣는 것을 ARP가 한다.
1) host A(자기자신) 는 전체 LAN에 broadcast 하게 ARP request를 한다.
a) ARP request frame header
source=hostA의 ip주소
dest=broadcast(1) : LAN에 속한 모든 매체가 받음
b) ARP request frame data
gateway의 ip주소
2) LAN에 속한 매체중 메세지에 담긴 gateway의 ip주소가 동일한 gateway만 응답한다.
a) gateway가 host A에게 자기자신의 MAC주소를 포함하여 프레임을 전달한다.
예를 들어 GateWayRouter의 ip주소와 mapping되는 MAC주소를 TTL=2 라고 하면 2시간동안 유효함을 의미한다.
1) GateWayRouter는 [source: hostA, dest: Google] 로 구성된 ip packet만 볼것이다.
2) Gateway도 라우터이므로 forwarding table을 참조하여 next IP인 R1의 ip 주소를 확인한다.
3) Gateway에서 전송할 frame은 { ip packet: [source: hostA, dest: Google] + header 부분: [source: GateWayRoter의 MAC address, dest: R1' Mac address] } 이다.
라우터는 여러개의 인터페이스로 구성되어있다.
처음 hostA로부터 받은 input 인터페이스와 gateway로부터 나가는 output 인터페이스는 다르므로 gatewayrouter의 MAC address는 값이 다르다.
4) CSMA를 이용하여 R1으로 전달
...
이렇게 반복하여 Google까지 전달된다.



당연히 자연스럽게 알게된다. 하지만 ARP table의 field를 보면 TTL이 있어 유효기간이 존재할 것이다. 따라서 필요한 경우 갱신해야 한다.

장점:
그렇다면 switch forwading table은 어떻게 만드는 것일까?

위의 그림을 보고 다음과 같이 table을 구성할 수 있다.
0) 처음엔 switch-table은 아무 정보도 없다.
1) A -> A' frame을 받으면 A는 1번 포트에 위치함을 알 수 있다.
2) switch가 전체 host에 flood(broadcast와 유사한 의미)하게 A -> A' frame을 보내고 응답을 보낸 A'을 알게되면 table에 입력된다.

아래의 그림과 같이 switch로 여러개의 연결을 만든다.
network layer관점에는 switch가 없다.


예를 들어 C->I
1) [source: C, dest: I] frame을 C가 보낸다.
2) S1이 받고 self-learning을 통해 C가 3번 포트인걸 알게 된다.
3) S1은 I의 주소를 몰라 0, 1, 2 포트로 flooding 한다.
4) S4도 I의 주소를 몰라서 또다시 S1을 제외한 S2, S3로 flooding한다.
...
이런식으로 I의 주소를 알게 될 때까지 request하고 응답하면
예를 들어 I->C
1) [source: I, dest: C] frame을 I가 보낸다.
2) S3가 frame을 받고 이미 self-learning을 통해 C의 포트를 알기에 forwarding된다.
3) S4도 frame을 받고 알고있는 C의 포트로 forwarding 된다.
...
이런식으로 C의 주소까지 응답 frame이 전달된다.


실제 가정용 무선 공유기는 통신사에서 제공한 모뎀과 연결되어 케이블을 통해서 통신사 인터넷과 연결되는 것이다.
무선 공유기라는 하나의 가상 컴퓨터를 연결시켜서 하나의 ip 주소가 배정된 것이다.
이 특수한 컴퓨터는 application 계층에서 NAT가 동작하고 가상 ip를 임의로 생성하여 여러 host들과 연결한다. 이때 공유기는 각 host의 private ip를 받아오기 위해 DHCP를 사용하기도 하고 local LAN server로 사용되기도 한다.
라우터와 라우터가 연결된 것으로 생각하면 된다. 가정용 공유기는 routing이다.
여러 기기를 연결하는 방법은 다음과 같다.
1) 라우터를 붙여서 확장한다.
-routing
2) 스위치를 붙여서 확장한다.
-switching
결론적으로 switching이 서브넷을 생성하지 않으므로 더 간단하다.

구글, 야후, 아마존이 운영하는
데이터 센터를 가면 그 크기가 그림과 같이 상당하다.

여기의 서버들은 모두 switch로 연결하여 계층화시켜 전체가 연결되어 있다.
외부에서 request가 오면 어느 포트가 가장 적합한지 routing해준다.
사용자가 많아질수록 계층화시키고 그 계층화는 switch가 담당한다.
