Lý do của lỗi kết nối bị từ chối là gì?


114

Tôi đang cố gắng viết một chương trình máy chủ bằng C, bằng cách sử dụng một máy khách khác, tôi gặp lỗi này khi cố gắng kết nối qua cổng 2080 chẳng hạn.

connection refused

Những gì có thể là lý do của lỗi này?


Tôi chỉ gặp lỗi này do lỗi của máy chủ nơi tôi lưu trữ trang web của mình. Máy chủ vẫn có thể bị chỉnh sửa ping, downforeveryoneorjustme.com cho thấy rằng không chỉ tôi và tôi vẫn có thể truy cập nó qua FTP. Sau một vài phút, những sai lầm đã được giải quyết.
Martin Thoma

2
@moose: ping không cho bạn biết liệu một cổng cụ thể có thể truy cập được hay không khi nghe quảng cáo, chỉ là địa chỉ IP có thể truy cập được hay không. Nhưng connect()phụ thuộc vào một IP cụ thể và cổng đã sẵn sàng để sử dụng.
Remy Lebeau

Lỗi máy chủ có một câu hỏi chính tắc về kết nối bị từ chối .
Raedwald

Đây là giải thích ngắn gọn về kết nối bị từ chối .
rbinnun

Tôi nhận được kết nối bị từ chối trên Ubuntu vì tôi đang cố gắng nhận kết nối trên 'localhost' nhưng 'localhost' không được định cấu hình đúng trên máy của tôi. Thay đổi 'localhost' thành '' (Python) đã giải quyết được vấn đề.
user1097111 Ngày

Câu trả lời:


93

Có thể có nhiều lý do, nhưng phổ biến nhất là:

  1. Cổng không được mở trên máy đích.

  2. Cổng đang mở trên máy đích, nhưng phần tồn đọng của các kết nối đang chờ xử lý đã đầy.

  3. Tường lửa giữa máy khách và máy chủ đang chặn quyền truy cập (cũng kiểm tra tường lửa cục bộ).

Sau khi kiểm tra tường lửa và cổng đã mở, hãy sử dụng telnet kết nối với ip / cổng để kiểm tra kết nối. Điều này loại bỏ mọi vấn đề tiềm ẩn khỏi ứng dụng của bạn.


7
Tường lửa thường sẽ cho lỗi thời gian chờ, vì gói kết nối (SYN) vừa bị loại bỏ. Kết nối bị từ chối là do máy chủ đã nhận và từ chối gói SYN.
RedPandaCurios

15
Không phải lúc nào cũng vậy, vì tường lửa có thể được cấu hình để từ chối thay vì thả gói.
a'r

connect () với sai địa chỉ và cổng cấu hình số Server IP trong chương trình khách hàng cũng sẽ cho kết quả errno 111.
smRaj

Ngoài ra: khi bạn cần acc https nhưng bạn đã chỉ định http: // ... thì lỗi này cũng có thể xảy ra.
Fico

4
@ a'r Làm thế nào bạn biết được tình trạng tồn đọng?
Naveen Verma

75

Lỗi có nghĩa là hệ điều hành của ổ cắm nghe đã nhận ra yêu cầu kết nối đến nhưng đã cố ý từ chối yêu cầu đó.

Giả sử tường lửa trung gian không cản trở, chỉ có hai lý do (mà tôi biết) để Hệ điều hành từ chối yêu cầu kết nối đến. Một lý do đã được đề cập nhiều lần - cổng nghe đang được kết nối với không được mở.

Có một lý do khác vẫn chưa được đề cập - cổng lắng nghe thực sự đang mở và đang được sử dụng, nhưng tồn đọng các yêu cầu kết nối gửi đến được xếp hàng đợi của nó đã đạt đến mức tối đa nên không còn chỗ trống cho yêu cầu kết nối đến được xếp hàng đợi tại đó chốc lát. Mã máy chủ chưa gọi accept () đủ thời gian để hoàn tất việc xóa các vị trí có sẵn cho các mục hàng đợi mới.

Chờ một chút và thử kết nối lại. Thật không may, không có cách nào để phân biệt giữa "cổng hoàn toàn không mở" và "cổng đang mở nhưng hiện quá bận". Cả hai đều sử dụng cùng một mã lỗi chung.


4
Ngoài ra còn có một trường hợp cạnh như được giải thích ở đây: softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/… . về cơ bản nếu bạn đang căng thẳng khi kiểm tra ứng dụng máy khách / máy chủ của mình và bạn đang sử dụng cách tiếp cận ngây thơ như đã đề cập trong 3.6, lỗi "kết nối bị từ chối" có thể xảy ra và trường hợp này khác với hai trường hợp trên.
ernesto

Điều này cần được ủng hộ. Khi nguyên nhân rõ ràng (không có gì lắng nghe) đã được giải quyết, thì đây thực sự là lời giải thích khả dĩ nhất và việc khắc phục nó có thể là một vấn đề phức tạp.
Graham Nicholls

nếu tồn đọng các yêu cầu gửi đến được xếp hàng đợi đã đạt đến mức tối đa, chúng tôi có thể khắc phục điều này bằng cách nào?
ACarter

một công việc tồn đọng được IP xếp hàng đợi? Tôi đã cố gắng sử dụng telnet email-smtp.eu-west-1.amazonaws.com 25 từ một thể hiện EC2 và máy tính cục bộ của tôi, EC2 gọi dụ telnet là cho kết nối từ chối trong khi từ máy tính cục bộ của tôi nó hoạt động
dresh

"Không có gì đang nghe" có lẽ là do máy đang lên nhưng máy chủ (phần mềm) ví dụ như Apache không chạy.
ttulinsky

24

Nếu bạn cố gắng mở một kết nối TCP tới một máy chủ khác và thấy lỗi "Kết nối bị từ chối", điều đó có nghĩa là

  1. Bạn đã gửi một gói TCP SYN đến máy chủ khác.
  2. Sau đó, bạn nhận được một gói TCP RST trả lời.

RST là một bit trên gói TCP chỉ ra rằng kết nối nên được thiết lập lại. Thông thường, điều đó có nghĩa là máy chủ khác đã nhận được nỗ lực kết nối của bạn và đang chủ động từ chối kết nối TCP của bạn, nhưng đôi khi tường lửa can thiệp có thể chặn gói TCP SYN của bạn và gửi lại TCP RST cho bạn.

Xem https://tools.ietf.org/html/rfc793 trang 69:

TRẠNG THÁI ĐƯỢC NHẬN ĐỒNG BỘ

Nếu bit RST được đặt

Nếu kết nối này được bắt đầu bằng OPEN thụ động (tức là đến từ trạng thái LISTEN), thì hãy trả kết nối này về trạng thái LISTEN và quay trở lại. Người dùng không cần được thông báo. Nếu kết nối này được bắt đầu bằng OPEN đang hoạt động (tức là đến từ trạng thái SYN-SENT) thì kết nối bị từ chối, báo hiệu người dùng "kết nối bị từ chối". Trong cả hai trường hợp, tất cả các phân đoạn trên hàng đợi truyền lại phải được xóa. Và trong trường hợp OPEN đang hoạt động, hãy nhập trạng thái ĐÃ ĐÓNG CỬA và xóa TCB và quay lại.


11

Kết nối bị từ chối có nghĩa là cổng bạn đang cố kết nối không thực sự mở.

Vì vậy, hoặc bạn đang kết nối với địa chỉ IP sai, hoặc cổng sai, hoặc máy chủ đang nghe nhầm cổng hoặc thực sự không chạy.

Một lỗi phổ biến là không chỉ định số cổng khi ràng buộc hoặc kết nối theo thứ tự byte mạng ...


4
Đây chỉ là một trong số các điều kiện có thể gây ra lỗi.
Remy Lebeau

1
Cổng có thể được mở, nhưng lỗi này vẫn có thể xảy ra.
IgorGanapolsky

6

Kiểm tra phía máy chủ xem nó đang lắng nghe ở cổng 2080. Trước tiên, hãy thử xác nhận nó trên máy chủ bằng cách cấp telnet cho cổng đó:

telnet localhost 2080

Nếu nó đang lắng nghe, nó có thể phản hồi.


3

Kiểm tra trạng thái máy chủ của bạn.

Kiểm tra trạng thái cổng.

Ví dụ 3306 netstat -nupl|grep 3306.

3 Kiểm tra tường lửa của bạn. Ví dụ thêm 3306

vim /etc/sysconfig/iptables
# add
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

netstat -a đã giúp
Philip

1

Mặc dù có vẻ như không đúng với trường hợp của bạn, nhưng đôi khi lỗi bị từ chối kết nối cũng có thể chỉ ra rằng có xung đột địa chỉ ip trên mạng của bạn. Bạn có thể tìm kiếm các xung đột ip có thể xảy ra bằng cách chạy:

 arp-scan -I eth0 -l | grep <ipaddress>

arping <ipaddress>

Đây câu hỏi AskUbuntu có một số thông tin cũng có.


0

Từ quan điểm của tường lửa Checkpoint, bạn sẽ thấy một thông báo từ tường lửa nếu bạn thực sự chọn Từ chối làm Hành động, do đó tiết lộ cho kẻ tấn công biết sự hiện diện của tường lửa trước máy chủ. Tường lửa sẽ âm thầm loại bỏ tất cả các kết nối không phù hợp với chính sách. Kết nối bị từ chối hầu như luôn đến từ máy chủ


0

Tôi gặp vấn đề tương tự với máy tính làm việc của mình. Vấn đề là khi bạn nhập localhost, nó chuyển đến địa chỉ của proxy không phải địa chỉ cục bộ, bạn nên bỏ qua nó theo các bước sau

Chrome => Cài đặt => Thay đổi cài đặt proxy => Cài đặt LAN => kiểm tra Bỏ qua máy chủ proxy để tìm địa chỉ cục bộ.


0

Trong Ubuntu, Cố gắng sudo ufw allow <port_number> cho phép truy cập tường lửa vào cả máy chủ và db của bạn.



0

Trong trường hợp của tôi, nó xảy ra khi trang web bị chặn ở quốc gia của tôi và tôi không sử dụng VPN. Ví dụ: khi tôi cố gắng truy cập vimeo.com từ Indonesia bị chặn.


-1

Tôi có cùng một thông báo với một nguyên nhân hoàn toàn khác: wsock32.dllkhông tìm thấy. Cuộc ::socket(PF_INET, SOCK_STREAM, 0);gọi tiếp tục trả về một INVALID_SOCKETnhưng nguyên nhân là do tệp winock không được tải.

Cuối cùng, tôi đã khởi chạy trình theo dõi quá trình của Sysinternals và nhận thấy rằng nó đã tìm kiếm dll 'ở khắp mọi nơi' nhưng không tìm thấy nó.

Những thất bại thầm lặng là điều tuyệt vời!


1
INVALID_SOCKET không liên quan gì đến 'kết nối bị từ chối'. 'Lỗi im lặng' chỉ có thể xảy ra nếu mã của bạn thiếu xử lý lỗi cần thiết.
Marquis of Lorne,

1
ý bạn là tôi nên kiểm tra xem dll đã được tải chưa? bạn có lẽ đúng.
xtofl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.