From 36b9bc26b05da2abb698108163482a911bd5b4cc Mon Sep 17 00:00:00 2001 From: asahi Date: Sun, 26 Jan 2025 02:09:18 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=85=E8=AF=BBtcp=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tcpip/tcp_ip协议.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tcpip/tcp_ip协议.md b/tcpip/tcp_ip协议.md index abff205..a150d11 100644 --- a/tcpip/tcp_ip协议.md +++ b/tcpip/tcp_ip协议.md @@ -275,3 +275,22 @@ MSB和LSB的定义如下: 网络字节传输中,通常都按照`big endian`字节序来进行传输。 操作系统中,`unbuntu`和`windows`都采用`little endian`。 + +## tcp +### tcp服务 +尽管tcp和udp都同样使用ip层,但是tcp却提供和udp完全不同的服务。tcp提供了一种面向连接的、可靠的字节流服务。 +#### 面向连接 +面向连接代表两个tcp应用在通信时,必须要先建立一个tcp连接。在一个tcp连接中,仅有两方进行通信,广播和多播无法应用于tcp连接。 + +#### 可靠性 +tcp通过如下方式来提供可靠性: +- 数据应该被分割成tcp认为最适合发送的数据块,由tcp传递给ip的信息单位被称为报文段或段(segment)。 +- 当tcp发出一个segment后,其将启动一个定时器,并等待目的端收到该报文的确认。如果在指定时间内未接收到目的端的确认(ack),将针对该报文段进行重传 +- 当tcp收到来源于tcp另一端的数据,其将回复一个确认,该确认并非立即发送,而是通常会等待一段时间(几分之一秒) +- tcp将会维护其首部与数据的校验和,其是一个端到端的校验和,目的是检测数据在传输过程中是否发生变化。 + - 如果校验和不符,那么tcp将会丢弃接收到的报文段,并且不针对该报文段作确认(超时重传) +- tcp数据段会通过ip数据报来进行传输,而ip数据报并不会保证到达的顺序,故而tcp数据段也可能会乱序到达 + - tcp会针对接收到的数据段集合重新进行排序,确保接收到的数据能被成功交付给应用层 +- 因为ip数据报可能会发生重复,故而tcp需要对重复数据进行丢弃 +- tcp还能提供流量控制,tcp的每一方都有大小固定的缓冲空间,tcp接收方`只允许tcp发送方发送接收方缓冲区所能容纳的数据`。 + - 这将避免发送方发送过快导致接收方缓冲区溢出,用于协调发送方发送速率