TCP/IP详解

TCP

TCP是一种可靠的面向连接的传输控制协议,如果数据有问题会通过ARQ重传数据。这就会引入一个问题:

(1)如何确认接收方收到分组和分组的正确性?

接收方通过返回一个ACK值确认已经收到正确的分组

如此会引入以下三个问题:

(1)发送方应该对一个ACK等待多长时间

(2)如果ack丢了怎么办

(3)如果分组被接收到了,有差错

问题二如果丢了就再次发送原分组,当然这会导致接收方接受到多个拷贝,解决办法是通过序列号来处理

问题三可以通过编码技术检查数据完整性,或者不返回ack等待重传完整的分组

这种运行方式效率很低,所以出现了滑动窗口的方案。

一、TCP头部

通常一个TCP头部为20字节,即占160位,带选项时为60字节。这个值是由《头部长度》位控制,以32位字为单位,《头部长度》占4位那么最大值为15,所以

15*4=60(最大)5*4=20(最小)

源端口、目的端口、序列号、确认号、头部长度、SYN、FIN、ACK、窗口大小、TCP校验和、选项

当建立一个TCP连接时,客户端和服务器都会随机一个初始序列号值,之后客户端或服务器每发送一个数据流,会将这个数据流拆分成若干个分组,称为一个组包。接收方收到一个分组,会对序列号+1并作为ACK延时(为了与SACK选项区分)返回给发送方,表示已成功接受分组,并期望发送下一个以当前序列号开始的分组

选项:

SACK: 选择确认选项,出现空洞或接受到乱序数据发送给发送方

MSS:最大段选项

二、TCP状态转换

13.7 tcp服务器选项

猜你喜欢

转载自my.oschina.net/u/3336230/blog/1791249
今日推荐