Theo tôi hiểu, đây là những gì xảy ra khi khách hàng thực hiện yêu cầu kết nối:
- Máy chủ sẽ được liên kết với một số cổng cụ thể. Số cổng luôn bị ràng buộc với một quá trình nghe. Vì chỉ có máy chủ đang lắng nghe các kết nối đến, chúng tôi không cần phải ràng buộc về phía máy khách
- Máy chủ sẽ tiếp tục lắng nghe số cổng đó.
- Khách hàng sẽ gửi
connect()
yêu cầu. - Máy chủ sẽ chấp nhận yêu cầu sử dụng
accept()
. Ngay khi máy chủ chấp nhận yêu cầu của máy khách, kernel sẽ cấp phát một số cổng ngẫu nhiên cho máy chủsend()
vàreceive()
vì cùng một số cổng trên máy chủ không thể được sử dụng để gửi cũng như nghe, và cổng trước vẫn còn lắng nghe những kết nối mới
Với tất cả những điều đó, làm thế nào để máy chủ tìm ra cổng mà khách hàng đang nhận được? Tôi biết máy khách sẽ gửi các phân đoạn TCP với một cổng nguồn và cổng đích, vì vậy máy chủ sẽ sử dụng cổng nguồn của phân đoạn đó làm cổng đích của nó, nhưng máy chủ gọi chức năng nào để tìm hiểu về cổng đó? Là nóaccept()
không