【计网1】TCP相关知识汇总

【持续更新中】


6.6

TCP是一种流协议(stream protocol)。这就意味着数据是以字节流的形式传递给接收者的,没有固有的"报文"或"报文边界"的概念。从这方面来说,读取TCP数据就像从串行端口读取数据一样--无法预先得知在一次指定的读调用中会返回多少字节(也就是说能知道总共要读多少,但是不知道具体某一次读多少)。

TCP会记录它发送了多少字节,以及确认的字节,但它不会记录这些字节是如何分组的。实际上,有些实现在重传丢失分组的时候传送的数据可能比原来的多一些或少一些。

对TCP应用程序来说,就没有"分组(包)"这种概念。如果应用程序的设计与TCP对数据的分组方式有所关联,就应该考虑重新设计这个应用程序了。

既然任意一次指定的读操作中返回的数据量都是不可预测的,就必须在应用程序中做好应对这种情况的准备,这些情况下边界都是由应用程序级维护的。 

最简单的情况就是定长报文。在这种情况下,只需要读取报文中固定数量的字节就可以了。


如何识别出一个TCP流?

Q:给你一个报文包,求问如何识别出一个TCP流?

A:用五元组,(源ip,目的ip,源端口,目的端口,协议号(TCP)),根据这个就能识别一个tcp流了。

https://blog.csdn.net/bcbobo21cn/article/details/91349077

TCP流和TCP会话(TCP三次握手成功完成,即可建立TCP会话)

https://blog.51cto.com/hellof5/1906291

同一个会话的的报文具有相同的四元组: 源IP 目的IP | 源TCP端口 目的TCP端口 称为一个socket。
同一个会话如果“|”前后的值对调也属于一个会话,只是来自不同方向例如你Telnet到某台主机,这就是一次Telnet会话;你浏览某个网站,这就是一次HTTP会话。

即:
一次应用层的业务过程:从tcp三次连接建立到连接释放,属于同一个会话。这里会分配同一个seesion_id TCP流(flow):某一次业务过程中的数据传输过程。 即:从tcp三次握手----数据传输结束----连接释放 区别是: 会话大多是只从源到目的端的一个连接,或者是NAT或者是防火墙状态表内的一个条目。 而流大多是说从源到目的的一些数据。概念上偏向底层。 对于keep-alive连接仍然属于同一个tcp流,也属于一个tcp会话-----只要tcp连接没有断开

心跳测试:每隔一段时间向服务器发送数据包。为了节省资源,通常会发送空数据包。如果发送失败表明套接字已断开,此时需要根据特定条件释放资源并重新连接。


三次握手和四次挥手:

https://www.cnblogs.com/Qing-840/p/9283367.html

原文地址:https://www.cnblogs.com/wfish/p/13055950.html