2010-06-04 37 views
6

Tôi có một cái gì đó giống như một máy chủ proxy (viết bằng java) chạy giữa khách hàng của tôi và máy chủ video thực tế (được thực hiện bằng C++). Mọi thứ mà khách hàng gửi đi qua proxy này và sau đó được chuyển hướng đến máy chủ.Chuyển hướng kết nối TCP

Nó hoạt động tốt, nhưng tôi có một số vấn đề và nghĩ sẽ tốt hơn nếu tôi chỉ có thể thực hiện máy chủ proxy này để nghe yêu cầu của khách hàng và sau đó bằng cách nào đó nói với máy chủ rằng yêu cầu đã được thực hiện từ phía máy khách và rằng nó được cho là tạo kết nối trực tiếp với khách hàng.

Về cơ bản ở mức TCP những gì tôi muốn xảy ra là một cái gì đó như thế này:

1- bất cứ khi nào một khách hàng gửi một SYN để proxy của tôi, proxy chỉ gửi một thông điệp tới máy chủ thật nói với ip và cổng của khách hàng.

2- Máy chủ sau đó sẽ gửi SYN-ACK tương ứng cho máy khách được chỉ định tạo kết nối trực tiếp giữa máy khách và máy chủ.

Proxy sau đó sẽ chỉ chuyển tiếp các yêu cầu ban đầu (nhưng không chuyển dữ liệu sau) đến máy chủ thực. Tôi chỉ không biết nếu điều đó là có thể.

Thank you very much

Nelson R. Perez

Trả lời

1

Bạn không có quyền kiểm soát của TCP handshake trong Userland như thế. Đây là những gì tường lửa/router làm nhưng tất cả xảy ra trong hạt nhân. Hãy xem phần mềm tường lửa cho nền tảng của bạn - thậm chí bạn có thể không phải mã hóa bất kỳ thứ gì.

2

Đó là rất nhiều cách một số trò chơi (và Fog Creek CoPilot) làm điều đó, nhưng nó đòi hỏi hỗ trợ trên cả hai máy chủ và máy khách. Về cơ bản proxy phải nói với máy khách và máy chủ "thử liên lạc trực tiếp với ip này và cổng này" và nếu họ không thể vượt qua (vì một hoặc cả hai phía sau NAT hoặc tường lửa), họ sẽ quay trở lại thông qua proxy.

tôi thấy mô tả tốt này "ngang ngang nhau để tcp đấm lỗ" tại http://www.brynosaurus.com/pub/net/p2pnat/

+0

Ok, tôi lấy lại điều đó - có vẻ CoPilot không làm điều đó, hoặc nếu họ đã làm, họ dừng lại. Xem https://www.copilot.com/tech/ –

2

Proxy và máy chủ có nằm trên cùng một máy không? Nếu có, bạn có thể chuyển kết nối đến máy chủ bằng cách sử dụng Chuyển qua ổ cắm hoặc Trình mô tả tệp đi qua. Bạn có thể tìm thấy ví dụ trong C đây,

http://www.wsinnovations.com/softeng/articles/uds.html

Nếu họ đang ở trên các máy khác nhau, không có cách nào để vượt qua kết nối đến máy chủ. Tuy nhiên, có thể ủy quyền các gói IP tới máy chủ bằng VIP (Virtual IP). Đây là ổ cắm bên dưới, do đó bạn phải sử dụng giao diện lớp Liên kết, như DLPI.

Các vấn đề liên quan