Peer-to-Peer Communication Across Network Address Translators
-
What is NAT ?
Convert
Network Address ( and Port) between private and public.
Ví dụ: Máy
tính A đứng sau NAT (inside) gửi một gói ra bên ngoài thông qua NAT, NAT device
sẽ thực hiện map 1 ip private với 1 ip public và lưu vào 1 table trong bộ nhớ của
nó. Và khi gói tin bên ngoài (outside) đi đến NAT device nó sẽ tìm lại trong
table để tìm xem gói tin này cần chuyển đến thiết bị nào nằm sau nat (inside)
NAT Table
|
|
Inside
|
outside
|
10.0.0.1:80
10.0.0.2:80
|
202.124.211.25:10080
202.124.211.25:20080
|
-
Type of NAT
·
Full Cone
·
Restricted Cone
·
Port Restricted
Cone
·
Symmetric
Full Cone
§ Client có iAddr:iPort (inside) đi qua NAT device sẽ được map
với 1 ip eAddr:ePort.
Bất kỳ gói tin nào từ iAddr:iPort sẽ được gửi ra bên ngoài thông qua eAddr:ePort ( bất kể đích là gì)
§ Bất kì thiết bị
nào bên ngoài (outside) có thể kết nối đến iAddr:iPort bằng
cách gửi đến eAddr:ePort
Restricted
Cone
§ Client có iAddr:iPort (inside) đi qua NAT device sẽ được map
với 1 ip eAddr:ePort.
Bất kỳ gói tin nào từ iAddr:iPort nào sẽ được gửi ra bên ngoài đều thông qua
eAddr:ePort (bất kể đích là gì)
§ Một địa chỉ bên ngoài (outside) với any port mà muốn gửi đến iAddr:iPort thì
bằng cách gửi gói tin đến eAddr:ePort điều kiện là trước đó client có iAddr:iPort
đã gửi 1 gói tin đến nó (outside).
Port
Restricted Cone
§ Client có iAddr:iPort (inside) đi qua NAT device sẽ được map
với 1 ip eAddr:ePort.
Bất kỳ gói tin nào từ iAddr:iPort nào sẽ được gửi ra bên ngoài đều thông qua
eAddr:ePort (bất kể đích là gì)
§ Một địa chỉ bên ngoài (outside) với port muốn gửi đến iAddr:iPort
(inside) thì bằng cách gửi gói tin đến eAddr:ePort
điều kiện là trước đó client có iAddr:iPort
(inside) đã gửi 1 gói tin đến nó (outside) với port đó.
Symmetric
§ Một địa chỉ iAddr:iPort (inside)
khi gửi đến cái địa chỉ đích khác nhau:port thì
sẽ được map với các địa chỉ eAddr:ePort khác nhau =>
Khác với 3 loại NAT trước đó
§ Giống Port
Restricted Cone
Một địa chỉ bên ngoài (outside) với port muốn gửi đến iAddr:iPort
(inside) thì bằng cách gửi gói tin đến eAddr:ePort
điều
kiện là trước đó
client có iAddr:iPort (inside) đã gửi 1 gói tin
đến nó (outside) với port đó.
-
Trường hợp sử dụng các loại NAT
o
Thiết bị 3G/4G của
các nhà mạng viễn thông chủ yếu dùng Symmetric NAT
o
Các mạng doanh
nghiệp thường có có thiết bị firewall sử dụng Symmetric NAT
o
ADSL mode ,switch
cho cá nhân hộ gia đình sẽ sử dụng 1 trong 3 loại: Full cone, Restricted cone,
Port Restricted Cone
-
Kết nối Peer to peer
Mô hình mạng
thực tế thì không thể nào là 2 peer kết nối trực tiếp với nhau, mà phải thông
qua các thiết bị nhiều thiết bị mạng khác và trong đó sẽ có thiết bị NAT để các
thiết bị có thể kết nối trên internet được. ( vì thiết bị của bạn bình thường sẽ
là ip private nên cần thiết bị NAT để chuyển sang ip public).
Để 2 endpoint tại hai vị trí địa lý khác nhau
(có thể hiểu là 2 vlan khác nhau) có thể kết nối với trực tiếp với nhau thì 2
endpoint phải thấy được địa chỉ public của nhau.
o
Ví dụ :
A---NAT –Internet—NAT----B
Để
A có thể kết nối trực tiếp với B thì sẽ có các TH sau:
§ TH1. Nếu NAT là Full
Cone
·
TH này để A kết nối
dược với B thì chỉ cần A và B có thông tin ip public của nhau là có thể kết nối.=>
STUN server là server sẽ phản hồi lại ip public (and port) về cho client.
Nguyên
nhân: Vì Full Cone NAT thì “Bất kì thiết bị nào bên ngoài
(outside) có thể kết nối đến iAddr:iPort bằng cách gửi đến eAddr:ePort”
§ TH2. Nếu NAT là
Restricted Cone hoặc port Restricted Cone
·
TH này khác với
TH Full Cone là “Một địa
chỉ bên ngoài (outside) với any port mà muốn
gửi đến iAddr:iPort thì bằng cách gửi gói tin đến eAddr:ePort điều kiện
là trước đó client có iAddr:iPort đã gửi 1 gói tin đến nó (outside).”
ð Để A có thể kết nối tới B thì phải có 2 điều kiện:
§ A và B có thông tin IP Public (and port) của nhau=>
Stun
§ A gửi 1 gói packet có source ip: ip_private_A và destination ip: ip_public_B , gói là đi qua NAT_A sẽ khiên NAT_A cập nhận table (để
đảm bảo điều kiên ở trên )và khi đi đến NAT_B thì sẽ bị drop. Nhưng lúc nay
NAT_A sẽ có thông tin là A đã gửi tói B.Lúc này B sẽ có thể gửi tới A một cách
bình thương. => kĩ thuật Hole Punching
§ TH3. Nếu NAT là Symmetric
·
TH này khác 2 TH
trên này là ở chỗ “Một địa
chỉ iAddr:iPort (inside) khi gửi đến cái
địa chỉ đích khác nhau thì sẽ được map với các địa chỉ eAddr:ePort khác nhau”
=> dẫn đến vấn đề là A-<> STUN
server thì trên NAT_A sẽ map với ip_public_A:port
Còn khi server A->B thì NAT_A sẽ map mới
là ip_public_A:port1 => sẽ khien cho
thông tin ip public A đc lưu B không
trùng khớp
·
TH nay không thể
sử dụng kĩ thuật Hole Punching như TH ở trên được
·
Giai Pháp:
ð TURN
Như là 1 server reply
ð Dự đoán được port sẽ phát sinh trên NAT A






Nhận xét
Đăng nhận xét