阅读tcp文档
This commit is contained in:
@@ -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发送方发送接收方缓冲区所能容纳的数据`。
|
||||
- 这将避免发送方发送过快导致接收方缓冲区溢出,用于协调发送方发送速率
|
||||
|
||||
Reference in New Issue
Block a user