加油!偷博仔
今天的看到的诗,是灰色的
天是灰色的
路是灰色的
楼是灰色的
雨是灰色的
在一片死灰之中
走过两个孩子
一个鲜红
一个淡绿
————《感觉》1980年7月
进入正题
一、 TCP:面向连接的传输
1.TCP:概述 (RFCs: 793, 1122, 1323, 2018, 2581)
Explanation:
·
所谓没有报文边界:
发送方发两个小报文,也许接收方收到1个大的报文,或者反过来。
发送和接收缓存,
为了超时重发或者检错重传,匹配Send和receive的速度不一致
·
MTU:
Maximum Transmission Unit,最大数据传输单元,网络传输最大报文包;以太网MTU最大值是1500B
MSS:
Maxitum Segment Size应用进程发给传输层TCP实体的报文段,要根据MSS的大小进行切分和加TCP头部信息,变成TCP报文段(segment)
·
所以,(Message 转换成字节流,再被划分成一个个的MSS)
MSS+TCP头部信息+IP头部信息 <= MTU(比如以太网MTU1500B),(“于是就不存在一个分片的问题?”什么分片…)
·
否则,如果要发送的IP数据报比数据链路层的MTU大,则无法发送该数据报。
还可以参考一下这位网友的分享:MSS与MTU的关系
2.TCP报文段结构
Make some explanation:
16bits 源端口,16bits目标端口
32 bits 序号、确认号。
所以,聪明的,同理可得:可选项32bits;校验和等等16bits
字节序号:
对于应用层交下来到Message,划分层一个个的MSS,每一个TCP报文段(segment)的body部分,就是载荷部分(对应MSS),而载荷部分第一个Byte(字节)在整个字节流的offset(偏移量) 就是字节序号
3.TCP 序号, 确认号
接收方处理乱序的segment 可以缓存也可以drop,没有规定。取决于…
Explanation:
- Host A → Host B Seq=42, ACK=79, data = ‘C’:
HostA,商量的初始序号是Seq = 42,并且希望Host B 初始序号从 79号开始,要求回显字节C- 接着Host B → Host A Seq=79, ACK=43, data = ‘C‘:
由于此前Host B 收到了Seq42,处理完后确认ACK=43。同时ACK=43说明Host B已经收到42及以前,并且希望Host A从43开始。
…于是就这样了
4.TCP往返延时(RTT)和超时
设置和测量/估计RTT都要得当啊。
-
Q&#