2013-07-03 37 views
16

TCP là luồng có nghĩa là dữ liệu có nghĩa là được truyền như một luồng byte tiếp tục. Nhưng điều làm tôi bối rối là TCP tạo ra các phân đoạn và chuyển nó xuống IP. IP tạo ra các gói đóng gói các phân đoạn và chuyển chúng. Vậy chính xác là dòng liên tục ở đây?Luồng TCP và thông điệp UDP

UDP mặt khác là định hướng thư. Nó nhận các thông điệp từ tầng ứng dụng, tạo ra các gói dữ liệu và đẩy nó xuống IP. Cho đến nay nó cũng giống như TCP, thay vào đó một datagram được tạo ra và đẩy xuống. Điều gì khiến giao thức này trở thành một thông điệp được định hướng?

Trả lời

16

Giao diện/API giới thiệu cho bạn người sử dụng (lập trình viên) của các giao thức này là:

UDP

tin nhắn theo định hướng, bạn có một API (gửi/recv và tương tự) mà cung cấp cho bạn khả năng gửi một gói dữ liệu và nhận một gói dữ liệu. 1 send() kết quả cuộc gọi trong 1 datagram được gửi, và 1 recv() gọi sẽ nhận được chính xác 1 datagram.

TCP

Suối định hướng, bạn có một API (gửi/recv và tương tự) cung cấp cho bạn khả năng để gửi hoặc nhận một luồng byte. Không có sự bảo toàn các ranh giới tin nhắn, TCP có thể gộp dữ liệu từ nhiều cuộc gọi send() thành một phân đoạn, hoặc nó có thể chia nhỏ dữ liệu từ một lệnh send() thành nhiều phân đoạn - và recv() chỉ cung cấp cho bạn dữ liệu trở lại, không liên quan đến số lượng các cuộc gọi send() tạo ra dữ liệu bạn nhận được.

+0

Bản chất trực tuyến này của TCP có liên quan với độ tin cậy của nó không? –

+2

@LuisVasconcellos Không thực sự. Có thông báo/giao thức dựa trên datagram có thể cung cấp cho bạn độ tin cậy tương tự như TCP. – nos

+0

Câu trả lời hay! Giả sử chúng ta có dữ liệu là "Xin chào". Nếu chúng ta giả định mỗi từ ở đây dưới dạng thông báo thì UDP sẽ gửi chúng dưới dạng "Hi" và "there" với nhau dưới dạng các gói dữ liệu riêng biệt nhưng theo thứ tự bất kỳ. Trong khi trong TCP, "HiThe" và "re" có thể được tạo thành hai phân đoạn riêng biệt nhưng nó đảm bảo rằng cả hai phân khúc này đến đúng thứ tự. Tôi hiểu có đúng không? – Zephyr

1

TCP là luồng được định hướng bởi vì nó có thể tập hợp dữ liệu ở định dạng liền kề. Ví dụ. bạn có dữ liệu từ số 1 đến 4000 byte. Bây giờ nó sẽ được chia thành các phân đoạn tcp nơi mỗi phân đoạn sẽ có một số thứ tự nói đầu tiên là 1-1200 byte, thứ hai là 1201 - 2400 và vân vân.

Nó có thể được phân phối theo thứ tự trong khi được gửi qua gói dữ liệu ip nhưng được lắp ráp thành dữ liệu liền kề ở đó bằng cách xuất hiện dưới dạng luồng. Số thứ tự giúp sắp xếp lại các gói.

Một Giải thích sâu hơn chút là:

Một dòng byte bao gồm một đoạn lớn của dữ liệu không có phân đoạn hoặc những vi phạm khác. Với khối dữ liệu (nhỏ hơn) khối dữ liệu được gửi và nhận được cùng một lúc như một toàn thể. Trong thực tế nó có nghĩa là với datagrams mỗi gửi/ghi cuộc gọi gửi một gói, và mỗi đọc/recv gọi nhận được một gói, trong khi với giao thức dòng dữ liệu có thể được gửi và nhận theo bất kỳ cách nào. Ví dụ. Người gửi có thể gọi send() mười lần, trong khi người nhận nhận được tất cả dữ liệu đó bằng một cuộc gọi recv. Với datagrams mười gửi các cuộc gọi có nghĩa là mười gói và mười nhận cuộc gọi

Datagrams and streams

Byte streams

1

Các chuyên về TCP là rằng hành vi này là trong suốt đối với resp người dùng. ứng dụng.

Điều duy nhất mà ứng dụng phải làm là gọi send()recv() để gửi và nhận dữ liệu.

Các lớp bên dưới đảm bảo rằng dữ liệu được nhận chính xác theo thứ tự đã gửi và dữ liệu bị thiếu được truyền lại nếu dữ liệu "bị thiếu".

UDP, OTOH, giữ dữ liệu của một send() gọi chung với nhau, ngay cả khi được chia thành nhiều gói IP. Theo cách này, các dữ liệu này có thể được xem như một gói dữ liệu.

4

TCP là giao thức hướng kết nối có nghĩa là đầu tiên thiết lập kết nối với người nhận, sau đó gửi dữ liệu trong phân đoạn (PDU cho lớp vận chuyển) được chuyển bởi gói IP. Bằng cách này, nó được gọi là luồng vì nó giữ luồng dữ liệu từ đầu đến cuối trong quá trình truyền.

UDP là giao thức truyền tải ít kết nối (giống như IP) với đơn vị dữ liệu được gọi là datagram. Vì vậy, không giống như tcp, UDP truyền dữ liệu mà không cần thiết lập kết nối chỉ gửi các tin nhắn datagram đến lớp IP để được truyền tải.