180 likes | 356 Views
APP. Indirect Layer. TCP 1. TCP 2. TCP n. APP. TCP. Freeze. Mobility Agent. APP. APP. MIP APP. MIP APP. TCP. TCP. TCP intercept. TCP intercept. MSIG. NDIS. MSIG. TCP inject. TCP inject. NDIS. CMC. CMC. Mobile Status. Mobile Status. Link Detection.
E N D
APP Indirect Layer TCP1 TCP2 TCPn
APP TCP Freeze Mobility Agent
APP APP MIP APP MIP APP TCP TCP TCP intercept TCP intercept MSIG NDIS MSIG TCP inject TCP inject NDIS CMC CMC Mobile Status Mobile Status
Link Detection Foreach <sec> Check if there is DATA (TCP) (received packet from L2/L3) { For each <additional received packet from TCP layer> } Yes Data Link Detection No Data Keep alive ICMP <#number, time (RTT)> Wf==0 Check Wf Check Keep alive Keepalive OK Wf==1 Keepalive Timeout Normal Resume Disconnect Start Timeout’ While <exist in hash> Set (Wf=1) Send Packet Out Send Win Update Clear Hash Clear (Timeout’) Set (Wf=0) Timeout’ Yes Persistence (Zero Window) No Yes Hash No <SIP, DIP, Sport, Dport> Seq Compare Hash Store Wf = 0: Connect Wf = 1: Disconnect old==new old<new old>new Send ZeroW Update Seq Ignore (Initial Wf = 0)
CheckIPPacket Flag = 0: Resume Flag = 1: Disconnect Flag = -1: Normal Operation Check TCP TCP Disconnect Flag Flag==1 Flag==-1 Flag==0 Build Zero W Copy Packet Retrieve Hash Info Build Window Update Packet CreateTCP Htable_Insert Htable_Destroy SendIPPacket
Assumption & Questions? 1. Retransmission packets have to be in order; (1:OK), 2 (break), 3, 4, then 2, 3, 4 Answer: Yes 2. If 1 lost and retransmit 1 then (break) 2, so next retransmit 2 (faster than another 3rd retransmit), we send anyway. Answer: OK (RTO per socket state not per packet) Verify (GobackN: 1 timer, Selective Repeat: timer per packet) 3. Given 2, 3, 4 (break) lost and retransmit 2, 3, 4 then link is resumed, if sending only 2 Wupdate, What happen? Answer: OK (last real ack) 4. Or, 2, 3, 4(break) lost and retransmit 2, 3, 4 then another 2, 3, 4 but we only send ZeroW for 2 not for 3 and 4 Answer: OK (last real ack) 5. For per connection, it’s only 1 unique socket ID <SIP, DIP, SPORT, DPORT> Answer: Yes 6. * SEQ round up issue * does not matter since we keep updating the least seq (will send ZeroW anyway) Answer: No problem since we check if SEQ is equal not less than. 7. Whether should we have Buffer Control or Queuing? Answer: N/A 8. If we send ZeroW with OLD-SEQ back, what’s happen? Answer: N/A 9. Whether should we send an old ack (if not, it’s OK to willing to lost data)? (Timeout Implementation) Answer: N/A 10. What if IPSec is implemented from CN to MN directly? Answer: It’s not our purpose to do that. Basically, an encryption tunnel would be ended at HA or VPN gateway 11. Should we use MobileIP keepalive rather than ICMP? (ICMP -> MobileIP independency) Answer: In case, Session Persistence is in separate box from HA, ICMP is better. <number> = Need to be verified
If Status is off { do nothing or while(hash.exist) { build UpdateW packet w = 1024, len = 0 send UpdateWindow packet back to TCP } Clear Hash else { foreach TCP packet hash socket state if exist { if oldSEQ>newSEQ updateSEQ else if oldSEQ==newSEQ build freezing packet { sync = ack, w = 0, len = 0 send ZeroWindow packet back to TCP } } else { Store socket state return; } }
APP Server Mobile VPN APP APP APP VPN GW HA Session Persistence Module Mobility VPN Client (CMC) Persistence Engine/HA Module TCP connection APP Server APP APP APP TDI/ Winsock Netmotion Server Netmotion Client (Internet Mobile Host ≈ MobileIP) RPC over UDP TCP connection UDP connection
P1 P2 ZWA ZWA Server Client ZWP ZWP
Client HA Server Probe TCP Freeze Probe . . . Probe Ack . . . TCP Freeze Probe Ack Update Window Mobility Agent Update Window Resume Connection Client Client Probe Probe . . . . . . TCP Freeze Probe Ack Update Window TCP Freeze Probe Ack Update Window Mobility Agent Mobility Agent Resume Connection
Client Client Probe Probe . . . . . . TCP Freeze Probe Ack Update Window TCP Freeze Probe Ack Update Window Mobility Agent SUSPEND request Mobility Agent Save all TCP connection state SUSPEND grant Suspend the mobile node Resume the mobile node RESUME request Restore all TCP connection state RESUME grant
Client Server HA TCP Freeze Probe Probe . . . Probe Ack . . . TCP Freeze Probe Ack Update Window Update Window Mobility Agent SUSPEND request Save all TCP connection state SUSPEND grant Suspend the mobile node Resume the mobile node RESUME request Restore all TCP connection state RESUME grant
Probe TCP Freeze Probe Ack TCP Freeze SUSPEND request Mobility Agent Probe SUSPEND grant Save all TCP connection state Probe Ack Suspend the mobile node RESUME request Resume the mobile node RESUME grant Update Window Restore all TCP connection state Update Window Probe Probe TCP Freeze TCP Freeze Probe Ack Probe Ack SUSPEND request Mobility Agent Mobility Agent SUSPEND grant Save all TCP connection state Suspend the mobile node RESUME request Resume the mobile node RESUME grant Update Window Restore all TCP connection state Update Window
APP APP APP APP APP APP Session Persistence Module Session Persistence Module Mobility VPN Client (CMC) Mobility VPN Client (CMC)
Ack6 win0 100 Ack6 win0 len0 ZWP 6 Ack101 len1 Probe Ack 100 Ack6 win0 len0 Win Update 100 Ack6 win4 len0 Original Ack 6 7 8 9 DATA6 ~9 win4
Data1, Win=4 1 100 Ack2 win4 len0 Ack2, Win=4 Data2 to 5, Win=4 2 3 4 5 ZWA Ack6, Win=0 100 Ack6 win0 len0 ZWPs 100 Ack6 win4 len0 Ack6, Win=4 Probe Ack Data6 to 9, Win=4 6 7 8 9 Win Update
100 Ack6, Win=0, len=0 Ack6, Win=0 ZWP: 6Ack101, len=1 Probe Ack: 100Ack6, Win=0, len=0 . . . Win Update: 100Ack6, Win=4, len=0 Original Ack 6 7 8 9 Data6 to 9, Win=4