Tại sao việc tạo kết nối TCP mới được coi là đắt tiền?


9

Tôi không hiểu tại sao việc tạo kết nối TCP mới được coi là một nhiệm vụ đắt tiền. Về cơ bản, thiết lập kết nối mới đề cập đến việc thực hiện bắt tay 3 bước của TCP. Vì vậy, đó là gửi hai gói và nhận một gói. Xem xét rằng hàng ngàn gói (dữ liệu-) sẽ tuân theo, cái bắt tay không thể là phần đắt tiền. Có thể không


Có lẽ do sử dụng CPU và bộ nhớ của các kết nối?
joeqwerty

@joeqwerty Tôi hiểu rằng kết nối TCP mới thường có nghĩa là tạo ra một tiến trình / luồng mới trên máy chủ, nhưng đó không phải là do TCP, mà là do ứng dụng.

Nếu hàng ngàn gói dữ liệu theo sau, thì bắt tay không phải là phần đắt tiền. Nhưng tại sao không sử dụng kết nối TCP mới cho mỗi khối dữ liệu? Bởi vì việc tạo kết nối TCP mới rất tốn kém. Đó là lý do tại sao bạn thiết lập một kết nối và sau đó sử dụng nó cho hàng ngàn khối dữ liệu.
David Schwartz

1
Cũng xem xét việc tạo kết nối mới có thể không bị giới hạn chỉ với bắt tay TCP. Ví dụ, SSL thêm rất nhiều thương lượng về xác thực và chi tiết mã hóa lên hàng đầu.
Zoredache

Câu trả lời:


10

Tôi tin rằng, nói chung, việc mở kết nối TCP được coi là tốn kém khi so sánh với khả năng sử dụng lại các kết nối đã mở bằng cách giữ cho nó mở. Bạn đã đúng, việc mở kết nối sẽ chỉ mất 3 gói / lượt, nhưng thời gian đó - 3 x RTT của bạn - vượt xa chi phí sử dụng lại kết nối đã mở, gần hơn với 0. Sự chênh lệch thậm chí còn tăng nhanh hơn nếu bạn đang mở và đóng kết nối thường xuyên.

Mặc dù vậy, bạn chắc chắn là chính xác, khi so sánh với số lượt bạn sẽ xem là ứng dụng "đúng như vậy", 3 gói đó có vẻ khá nhỏ, nhưng một lần nữa, nó phụ thuộc vào cách bạn muốn so sánh các tùy chọn VÀ ứng dụng của bạn hoạt động như thế nào / bạn dự định mở một kết nối bao nhiêu lần.

Chỉnh sửa Nếu chúng ta đang nói UDP so với TCP, Cheekaleek ở đây chính xác 100% - về lâu dài là rất lớn khi so sánh với các hoạt động không kết nối của UDP


1
Một ví dụ điển hình mà tôi đã thấy trong theo dõi gói: Kết nối MySQL được sử dụng lại có thể chuyển các truy vấn trong vòng 2-5ms. Một loạt các truy vấn ElasticSearch chuyển các truy vấn trong khoảng 17-25ms, phần lớn thời gian đó là trong thiết lập kết nối (bao gồm cả tra cứu DNS ban đầu).
sysadmin1138

2

Đó chắc chắn là nhiều chi phí hơn là gửi một gói UDP và không quan tâm đến những gì xảy ra trong quá khứ.

TCP cũng đi kèm với nhiều dữ liệu tiêu đề hơn và duy trì trạng thái kết nối, sẽ tiêu tốn tài nguyên.

Vì vậy, có, so với UDP, TCP đắt hơn, nhưng đắt là một thuật ngữ tương đối.

"Kết nối TCP là bạn thân của con gái ???"


5
"TCP connections are a girl's best friend???" Không, họ không phải. Tôi đã có một cô gái hàng ngàn người trong ngày sinh nhật của cô ấy và tất cả những gì cô ấy làm là ngừng trả lại email của tôi. :(
HoplessN00b

2

Nó không chỉ gửi và nhận gói. Bộ nhớ bổ sung phải được phân bổ và ở các bảng trạng thái mạng tối thiểu được cập nhật ở mỗi bước cho đến khi phiên được thiết lập. Không đề cập đến bất kỳ kiểm tra bảo mật bổ sung nào có thể được thực hiện (bảo vệ giả mạo tuyến đường, v.v.).

Chỉ sử dụng một số số ví dụ (vì chúng tôi không nói về bất kỳ hệ điều hành cụ thể nào) nếu một gói cho phiên được thiết lập có chi phí CPU là 1 đơn vị, chi phí của phiên mới có thể gấp 10 hoặc 100 lần chi phí bằng số hoạt động thực hiện. Hầu hết các tường lửa phần cứng mà tôi đã làm việc có thể xử lý một lượng lớn các kết nối mới mỗi giây ít hơn so với chúng có thể xử lý các phiên đã thiết lập.

Nó thường không phải là một vấn đề lớn, đặc biệt là khi một SYN-SYN / ACK-ACK xảy ra trong một phần nghìn giây, nhưng đối với các hệ thống lớn có nhiều khách hàng, các phiên mới có thể biến thành một chi phí đáng kể .


2

Số lượng - hoặc loại - lưu lượng truy cập ít quan trọng hơn nhiều so với mã được liên kết với việc phân bổ bộ nhớ thực sự và theo dõi thông tin trạng thái liên quan. Nếu bạn muốn hiểu rõ hơn về ý nghĩa của điều này, hãy xem số lượng mã trong nhân Linux được liên kết với TCP so với liên kết với UDP hoặc ICMP. Một so sánh cực kỳ khó hiểu cho thấy TCP yêu cầu thứ gì đó gấp 10 lần số dòng mã được tìm thấy trong UDP.

Trong mạng IP, số lượng bảo trì nhà nước cần thiết là một trong những yếu tố quan trọng nhất quyết định khả năng mở rộng. Đối với các điểm cuối TCP, điều này không chỉ thể hiện ở SYN / ACK mà còn trong việc bảo trì liên tục các cửa sổ trượt, số thứ tự, quản lý bộ đệm và các hành động QoS, v.v. Kiểm tra mức độ phức tạp của FSM đối với tcp và xem xét sự thiếu hụt vốn có của UDP ...

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.