네트워크가 혼잡하면 윈도우 사이즈를 줄인다. (혼잡한 정도는 모른다 - 블라인드 통신 방식)
1) Go-Back-N
◾ Sender
1) Timeout 재전송
2) 정상 ACK를 받을 때마다 Timer 재시작 → Send base (윈도우에서 보낸지 가장 오래된 패킷) 에만 있음
◾ Receiver
1) 응답 → 누적 ACK
2) 순서가 틀린 pkt는 버림
• pkt hrader에 k-bit seq # 를 갖는다. • window : 전송되었지만 확인 안된 pkt를 위해 허용 할수있는 seq #의 범위
• ACK(n) : 응답 패킷중에 시퀀스 넘버가
- seq # n을 가진 ACK를 cumulative ACK(누적 ACK : 어디까지 잘 받았다고 응답하는 패킷)로 인식한다. • 수신측에서 보면 n을 포함한 n까지의 모든 pkt에 대한 ACK이다. • 가장 오래된 수신확인 안된 timer를 단일 timer로 사용한다. (Timer는 Send base에 있다.) • Timeout 발생시 : 송신되었으나 ACK가 없는 모든 pkt를 재전송한다. (window내에 전송된 모든 pkt)
2) Selective repeat
◾ sender
• 상위 layer에서 Data가 수신되면 (rdt_send())
- pkt의 다음 seq#를 검사 window 내에 있으면 pkt를 전송한다. • timeout(n) : n번째 패킷에서 timeout이 발생하면 - pkt n을 재전송하고 timer를 restart한다. • ACK(n) 이 수신 - n이 윈도우에 있다면 pkt가 수신된 것을 확인한다.
- n이 send_base와 같다면 send_base는 가장 작은 seq#를 갖는 미확인 pkt로 이동하고 window내에 이 전송 pkt가 있으면 전송한다.
◾ receiver
• pkt n [n in rcvbase, rcvbase+N-1] - ACK(n)을 송신 - out-order인경우 buffering한다. (out-order : 내가 원하지 x 패킷 / in-order : 내가 원하는 패킷) - in-order인 경우 필요하다면 buffer 에 저장된 번호가 연속적인 pkt와 함께 상위 layer에 전달하고 rcv_base를 가장 낮은 seq# 를 가진 미전송 pkt로 옮긴다. • pkt n [n in rcvbase-N, rcvbase-1] - ACK(n) • 이외의 경우 - 무시한다.
◾ 새로운 가정 : 하위 채널에 packet loss가 일어날 수 있는 경우 (data & ACKs) • checksum, seq #, ACKs만으로는 충분하지 않다.
◾ 새로운 접근 방식 : sender는 합리적인 시간 만큼 ack를 기다린다. • 합리적인 시간(Timeout)만큼 기다려도 ACK가 없으면 재전송한다. • 만일 ACK가 지연된 것이라면 - 중복을 유발하는 재전송이 일어난다. → 이미 중복 처리에 대한 준비가 되어있다. - receiver는 중복된 pkt에 대한 ACK를 재전송한다. - 이러한 작업은 실제로 문제를 일으키지는 않는다. • 위의 구현을 위해 countdown timer를 필요로 한다.
Sender
• state
- Wait for call 0 from above : TCP는 0번 패킷을 보내려고 메시지를 기다린다.
• event
- rdt_send(data) : Process > TCP [data] 전달
• action
- sndpkt = make_pkt(0, data, checksum) : data를 이용해 checksum 생성 후 data와 checksum, seq#로 패킷 생성
- udt_send(packet) : TCP > IP [packet] 전달
- start_timer : ACK를 기다리는 타이머를 시작한다.
→ state 변화
- Wait for ACK 0 : 패킷 전송후 0번 패킷에 대한 ACK가 오기를 기다린다.
i) 응답 패킷이 망가진 경우
• state
- Wait for ACK 0 : 패킷 전송후 0번 패킷에 대한 ACK가 오기를 기다린다.
• event
- rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt, 1)) : IP > TCP [응답패킷] 전달 & (응답패킷이 망가진 경우거나 응답패킷 ACK가 1인 경우)
• action
- X
→ state 변화
- Wait for ACK 0 : 패킷 전송후 0번 패킷에 대한 ACK가 오기를 기다린다.
ii) Timeout이 일어난 경우
• state
- Wait for ACK 0 : 패킷 전송후 0번 패킷에 대한 ACK가 오기를 기다린다.
• event
- Timeout 이 일어난 경우
• action
- udt_send(sndpkt) : TCP > IP [응답패킷] 재전달
- start_timer : ACK를 기다리는 타이머를 시작한다.
→ state 변화
- Wait for ACK 0 : 패킷 전송후 0번 패킷에 대한 ACK가 오기를 기다린다.
iii) 응답 패킷이 ACK
• state
- Wait for ACK 0 : 패킷 전송후 0번 패킷에 대한 ACK가 오기를 기다린다.
• event
- rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt, 0) : IP > TCP [응답패킷] 전달 & 응답패킷이 정상인 경우 & 응답패킷이 ACK 0인경우
• action
- X
→ state 변화
- Wait for call 1 from above : TCP는 1번 패킷을 보내려고 메시지를 기다린다.
iv) 응답 패킷이 ACK
• state
- Wait for call 1 from above : TCP는 1번 패킷을 보내려고 메시지를 기다린다.
• event
- rdt_rcv(rcvpkt) : IP > TCP [응답패킷] 전달인 경우 (Timeout후 패킷을 재전송하였으나 지연으로 인해 ACK 응답이 먼저 온 경우)
• action
- X (ACK 응답은 무시)
→ state 변화
- Wait for call 1 from above : TCP는 1번 패킷을 보내려고 메시지를 기다린다.
R1#show ip protocols
Routing Protocol is "eigrp 100 "Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Default networks flagged in outgoing updates
Default networks accepted from incoming updates
Redistributing: eigrp 100EIGRP-IPv4 Protocol for AS(100)
Metric weight K1=1, K2=0, K3=1, K4=0, K5=0NSF-aware route hold timer is 240Router-ID: 1.1.1.1Topology : 0 (base)
Active Timer: 3 min
Distance: internal 90 external 170Maximum path: 4Maximum hopcount 100Maximum metric variance 1Automatic Summarization: disabled
Automatic address summarization:
Maximum path: 4Routing for Networks:
1.1.1.1/32192.168.12.1/32192.168.31.1/32Routing Information Sources:
Gateway Distance Last Update
192.168.12.290285519192.168.31.390352241Distance: internal 90 external 170
topology table 확인
R1#show ip eigrp topology
IP-EIGRP Topology Table for AS 100/ID(192.168.31.1)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
r - Reply status
P1.1.1.0/24, 1 successors, FD is 5120via Connected, GigabitEthernet0/0P2.2.2.0/24, 1 successors, FD is 2172416via192.168.12.2 (2172416/5120), Serial0/0/0P3.3.3.0/24, 1 successors, FD is 2172416via192.168.31.3 (2172416/5120), Serial0/0/1P192.168.12.0/24, 1 successors, FD is 2169856via Connected, Serial0/0/0P192.168.23.0/24, 2 successors, FD is 2681856via192.168.12.2 (2681856/2169856), Serial0/0/0via192.168.31.3 (2681856/2169856), Serial0/0/1P192.168.31.0/24, 1 successors, FD is 2169856via Connected, Serial0/0/1
Bandwidth 수정
bandwidth 를 512로 줄이고 라우팅 information을 확인
R1에서 R3까지 Bandwidth 수정
R1#show interface s0/0/1Serial0/0/1 is up, line protocol is up (connected)
Hardware is HD64570Internet address is 192.168.31.1/24MTU1500 bytes, BW 1544 Kbit, DLY 20000 usec,
reliability255/255, txload 1/255, rxload 1/255Encapsulation HDLC, loopback not set, keepalive set (10 sec)
Last input never, output never, output hang never
Last clearing of "show interface" counters never
Input queue: 0/75/0 (size/max/drops); Total output drops: 0Queueing strategy: weighted fair
Output queue: 0/1000/64/0 (size/max total/threshold/drops)
Conversations0/0/256 (active/max active/max total)
Reserved Conversations 0/0 (allocated/max allocated)
Available Bandwidth 1158 kilobits/sec
5 minute input rate 104 bits/sec, 0 packets/sec
5 minute output rate 104 bits/sec, 0 packets/sec
82 packets input, 4865 bytes, 0 no buffer
Received0 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
82 packets output, 4847 bytes, 0 underruns
0 output errors, 0 collisions, 0 interface resets
0 output buffer failures, 0 output buffers swapped out
0 carrier transitions
DCD=up DSR=up DTR=up RTS=up CTS=up
R1#show ip eigrp topology
IP-EIGRP Topology Table for AS 100/ID(192.168.41.1)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
r - Reply status
P1.1.1.0/24, 1 successors, FD is 5120via Connected, GigabitEthernet0/0P3.3.3.0/24, 2 successors, FD is 2684416via192.168.12.2 (2684416/2172416), Serial0/0/0via192.168.41.4 (2684416/2172416), Serial0/0/1P192.168.12.0/24, 1 successors, FD is 2169856via Connected, Serial0/0/0P192.168.23.0/24, 1 successors, FD is 2681856via192.168.12.2 (2681856/2169856), Serial0/0/0P192.168.34.0/24, 1 successors, FD is 2681856via192.168.41.4 (2681856/2169856), Serial0/0/1P192.168.41.0/24, 1 successors, FD is 2169856via Connected, Serial0/0/1
3.3.3.0으로 갈 경우 192.168.12.2 / 192.168.41.4 둘다 BW가 2684416으로 같다. 어디로 가든 상관이 없다.
eigrp의 토폴로지를 확인하면 3.3.3.0으로 갈 경우 192.168.12.2 / 192.168.41.4 BW가 변한 것을 확인할 수 있다.
R1#show ip eigrp topology
IP-EIGRP Topology Table for AS 100/ID(192.168.41.1)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
r - Reply status
P1.1.1.0/24, 1 successors, FD is 5120via Connected, GigabitEthernet0/0P3.3.3.0/24, 2 successors, FD is 2684416via192.168.41.4 (2684416/2172416), Serial0/0/1via192.168.12.2 (2684416/1764352), Serial0/0/0P192.168.12.0/24, 1 successors, FD is 2169856via Connected, Serial0/0/0P192.168.23.0/24, 1 successors, FD is 2681856via192.168.12.2 (2681856/1761792), Serial0/0/0P192.168.34.0/24, 1 successors, FD is 2681856via192.168.41.4 (2681856/2169856), Serial0/0/1P192.168.41.0/24, 1 successors, FD is 2169856via Connected, Serial0/0/1
EIGRP 토폴로지를 확인하면 3.3.3.0 네트워크로 가는 경로 중 192.168.12.2 네트워크가 없는 것을 확인할 수 있다.
R1#show ip eigrp topology
IP-EIGRP Topology Table for AS 100/ID(192.168.41.1)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
r - Reply status
P1.1.1.0/24, 1 successors, FD is 5120via Connected, GigabitEthernet0/0P3.3.3.0/24, 1 successors, FD is 2684416via192.168.41.4 (2684416/2172416), Serial0/0/1P192.168.12.0/24, 1 successors, FD is 2169856via Connected, Serial0/0/0P192.168.23.0/24, 1 successors, FD is 6023936via192.168.12.2 (6023936/5511936), Serial0/0/0P192.168.34.0/24, 1 successors, FD is 2681856via192.168.41.4 (2681856/2169856), Serial0/0/1P192.168.41.0/24, 1 successors, FD is 2169856via Connected, Serial0/0/1
• Rapid convergence를 위해 DUAL(Diffusing Update Algorithm)을 이용한다. • Metric factor : Bandwidth, Delay를 이용한다. - Reliability(신뢰도), Load(부하), MTU(Maxium Transmission Unit) • CISCO 전용 이었으나 표준화 되었다. • Routing info 전달에 BW가 최소화되어있다. - Mulcast를 이용한다.
◾ Neighbor
: 라우팅 정보를 주고 받는 것 • 동일 AS내에 동일 K상수를 갖는 Router들로 Routing info.를 나눈다. • 주기적으로 Routing table을 전송한다. - 맨 처음 neighbor을 맺을 때 모든 routing 정보를 교환하고 이후 변경된 정보만 교환한다. - 정상적인 경우 hello 패킷만 교환한다. - 패킷의 종류 : hello, update, query, replay, ACK
◾ K상수
K상수
Metric factor
설명
K1
Bandwidth
Dst로 가는 대역폭중에 가장 낮은 대역폭으로 107을 나눈 값
K2
Load
인터페이스의 부하
K3
Delay
Dst까지의 모든 지연의 합의 1/10
K4
Reliability
인터페이스의 에러 발생률
K5
MTU
최대 패킷의 크기
• K상수는 아래 방정식의 상수로 각 메트릭 요소에 대한 비중에 차등을 주어 적용하기 위해 사용한다.
1. 네이버로 부터 받은 각각의 경로를 확인한다. 2. successor/feasible successor 경로를 결정한다. 3. successor에 문제가 생기면 feasible successor를 이용한다. 4. feasible seccessor가 없으면 새로운 successor를 찾는다.
C:\>ping 192.4.23.11Pinging192.4.23.11 with 32 bytes of data:
Reply from 192.4.23.11: bytes=32 time=13ms TTL=123Reply from 192.4.23.11: bytes=32 time=10ms TTL=123Reply from 192.4.23.11: bytes=32 time=12ms TTL=123Reply from 192.4.23.11: bytes=32 time=29ms TTL=123Ping statistics for 192.4.23.11:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 29ms, Average = 16ms