网络包
tcp和udp的比较一直是老生常谈,udp接收方会进行组包,如果丢了一个包之后,客户端不得不重传所有包,如果是tcp只需要重传丢失的部分。
组包:MTU对数据分片,每个包里都有More fragement的标志。1表示还有分片,0表示最后一个分片可以组装了
whirshark
- statistics->summary (查看统计信息,比如平均流量)
- statistics->service Response Time->ONC-RPC->program:NFSVersion:3—>create stat(衡量服务器性能)
- analyze—>expert info composite (查看重传统计、连接的建立、重置统计等等) - statistics->tcp stream graph->tcp sequence graph (生成统计图,考虑选择时间的长度)
信息显示
- Tcp previous segment lost(tcp先前的分片丢失)
- Tcpacked lost segment(tcp应答丢失)
- Tcp window update(tcp窗口更新)
- Tcp dup ack(tcp重复应答)
- Tcp keep alive(tcp保持活动)
- Tcp retransmission(tcp重传)
- Tcp ACKed unseen segument (tcp看不见确认应答)
- TCP ZeroWindow (接收方缓冲区满了)
- tcp port numbers reused(tcp端口重复使用)
- tcp fast retransmission (tcp快速重传)
- TCP Previoussegment lost(发送方数据段丢失)
- tcp spurious retransmission(tcp伪重传)
标志位
• SYN:携带这个标志的包表示正在发起连接请求。因为连接是双向的,所以建立连接时,双方都要发一个SYN。
• FIN:携带这个标志的包表示正在请求终止连接。因为连接是双向的,所以彻底关闭一个连接时,双方都要发一个FIN。
• RST:用于重置一个混乱的连接,或者拒绝一个无效的请求。
TCP/UDP
UDP不像TCP一样发送时判断MTU的大小,超过MTU发送方的网络层分片,接收方收到后在组装起来。UDP没有重传机制,所以丢包由应用层处理。分片机制存在漏洞,黑客快速发送flag为1的UDP包,接收方无法组装起来,就可能内存耗尽。
MTU
因为网络对包的大小是有限制的,其最大值称为MTU,即“最大传输单元”。大多数网络的MTU是1500字节,但也有些网络启用了巨帧(Jumbo Frame),能达到9000字节
MTU在建立连接会告知对方MSS,MTU=MSS+TCP头+IP头
发送方和接收方MUT不一致时会进行切片发送
包的大小是由MTU较小的一方决定的。
包的多少
发送方的窗口,或者是接收方的的窗口,可能是是网络带宽影响。一次能发送的数据量就是TCP发送窗口
MSS(每个TCP包所能携带的最大数据量),如果在发送窗口为16000字节,MSS为1000字节,那么就需要发出16个包
seq,ack各自维护
数据段1的起始Seq号为1,长度为1448(意味着它包含了1448个字符),那么数据段2的Seq号就为1+1448=1449。数据段2的长度也是1448,所以数据段3的Seq号为1449+1448=2897
理论上接收方回复的Ack(确认号)是等于发送方下一个seq号,ACK=seq+len而下一个seq也等于seq+len数据
一个Seq号的大小是根据上一个数据段的Seq号和长度相加而来的,seq的从小到大的重排保证的tcp的有序性。接收方通过seq+len与下一个seq的差,保证的tcp的可靠性。
查看ACK往返时间
RTT服务器ack的往返时间,在transport的flag窗口中可见。tcp.analysis.ack_rtt > 0.2表示过滤ack大于0.2s
滑动窗口
即是接收窗口小于传输数据,发送方多次传输的结果,如果发送发传输数据过快,接收方来不及处理,这时显示win的值为0,导致缓存被占满,进行流量控制。超时重传对性能影响最大,快速重传对性能影响最小,没有等待时间,包的减少量更小(减至拥塞的3个包)
拥塞窗口
发送由维护,网络层可以传输数据的多少,是在数据传输过程中防止网络堵塞(网络对发送窗口的限制)
所以没有拥塞时发送窗口越大性能越好,如果经常拥塞,限制发送窗口反而能提高性能。通过限制接收窗口来减小发送窗口。
慢启动算法
刚建立连接时不知道拥塞值RFC建议是指数递增MSS,由于基数小,开始慢。到了数据大的时候类似加法递增
重传超时
从发包到重传包这段时间称为重传包。重传之后RFC建议降到一个MSS重新慢启动。可见超时重传严重影响性能,原因1是RTO阶段不能传送数据,原因之二MSS数量急剧减少。
当发送发收到3个或以上的重复确认(Dup Ack),就意识到相应的包已经丢了,而立即重传它。这个过程称为快速重传,之所以称为快速,是它不像超时重传一样需要等待一段时间
DACK时会一直等待ACK的确认号,认为后面的包也丢了,重传丢失后的所有包。SACK只重传丢失的包
*延迟确认
收到一个包后没有数据要发送给对方,那就延迟一段时间(windows默认200ms),假如在这段时间里有数据发送,确认的信息和数据就可以在一个包发出。提高传输效率,减去网络负担
ping
查看延时和经过路由数量。TTL一般为64,最大为255