/etc/init.d/networking restart
Hãy để tôi giải thích. Giao thức điều khiển truyền (TCP) được thiết kế để trở thành giao thức truyền dữ liệu hai chiều, có trật tự và đáng tin cậy giữa hai điểm cuối (chương trình). Trong ngữ cảnh này, thuật ngữ đáng tin cậy có nghĩa là nó sẽ truyền lại các gói nếu nó bị mất ở giữa. TCP đảm bảo độ tin cậy bằng cách gửi lại các gói Xác nhận (ACK) cho một hoặc một loạt các gói nhận được từ máy ngang hàng.
Điều này cũng tương tự đối với các tín hiệu điều khiển như yêu cầu / phản hồi chấm dứt. RFC 793 định nghĩa trạng thái TIME-WAIT như sau:
TIME-WAIT - đại diện cho việc chờ đủ thời gian để vượt qua để chắc chắn rằng TCP từ xa đã nhận được xác nhận về yêu cầu chấm dứt kết nối của nó.
Xem sơ đồ trạng thái TCP sau:
TCP là giao thức giao tiếp hai chiều, vì vậy khi kết nối được thiết lập, không có sự khác biệt giữa máy khách và máy chủ. Ngoài ra, một trong hai người có thể gọi thoát, và cả hai đồng nghiệp cần phải đồng ý đóng cửa để đóng hoàn toàn kết nối TCP đã thiết lập.
Chúng ta hãy gọi người đầu tiên gọi những người bỏ cuộc là người chủ động gần hơn, và người khác ngang hàng thụ động gần hơn. Khi hoạt động gần hơn gửi FIN, trạng thái sẽ chuyển đến FIN-WAIT-1. Sau đó, nó nhận được ACK cho FIN đã gửi và trạng thái chuyển đến FIN-WAIT-2. Khi nó nhận được FIN cũng từ thụ động gần hơn, hoạt động gần hơn sẽ gửi ACK đến FIN và trạng thái chuyển sang TIME-WAIT. Trong trường hợp thụ động gần hơn không nhận được ACK đến FIN thứ hai, nó sẽ truyền lại gói FIN.
RFC 793 đặt TIME-OUT gấp đôi Thời gian phân đoạn tối đa hoặc 2MSL. Kể từ MSL, thời gian tối đa một gói có thể đi lang thang trên Internet, được đặt thành 2 phút, 2MSL là 4 phút. Vì không có ACK cho ACK, nên người hoạt động gần hơn không thể làm gì ngoài việc chờ 4 phút nếu nó tuân thủ đúng giao thức TCP / IP, chỉ trong trường hợp người gửi thụ động chưa nhận được ACK đến FIN của nó (về mặt lý thuyết) .
Trong thực tế, các gói bị thiếu có lẽ rất hiếm và rất hiếm nếu tất cả xảy ra trong mạng LAN hoặc trong một máy.
Để trả lời nguyên văn câu hỏi, Làm thế nào để buộc một ổ cắm trong TIME_WAIT?, Tôi vẫn sẽ giữ nguyên câu trả lời ban đầu của mình:
/etc/init.d/networking restart
Thực tế mà nói, tôi sẽ lập trình nó để nó bỏ qua trạng thái TIME-WAIT bằng cách sử dụng tùy chọn SO_REUSEADDR như WMR đã đề cập. Chính xác thì SO_REUSEADDR làm gì?
Tùy chọn ổ cắm này cho hạt nhân biết rằng ngay cả khi cổng này đang bận (ở
trạng thái TIME_WAIT), hãy tiếp tục và sử dụng lại bằng mọi cách. Nếu nó bận, nhưng với một trạng thái khác, bạn vẫn sẽ nhận được một địa chỉ đã bị lỗi sử dụng. Nó rất hữu ích nếu máy chủ của bạn đã bị tắt, và sau đó khởi động lại ngay lập tức trong khi các socket vẫn hoạt động trên cổng của nó. Bạn nên lưu ý rằng nếu có bất kỳ dữ liệu bất ngờ nào xuất hiện, nó có thể gây nhầm lẫn cho máy chủ của bạn, nhưng trong khi điều này là có thể, thì điều đó không có khả năng.
TIME_WAIT
máy chủ" , chỉ cần bỏ qua ba câu trả lời đầu tiên để tránh câu hỏi thay vì trả lời nó.