目录
会话(session)和流的区分
流:指具有相同五元组(源IP,源端口,目的IP,目的端口,协议)的所有包
他是单向的
会话:信息交互的过程,如客户端与服务器建立链接后数据传输的过程。指由双向流组成的所有包(源和目的互换)
他是双向的
TCP连接
Telnet
Telnet协议是TCP/IP协议家族中的一员,位于OSI模型的第七层-应用层,是远程登录服务的标准协议和主要方式。
TIME_WAIT状态
主动关闭方在收到被动关闭方的FIN包后并返回ACK后,会进入TIME_WAIT状态,也叫做2MSL状态
ack:用于确认收到请求的字段
TCB:
socket包含两个成分,一个是IP地址,一个是端口号。同一个设备可以对应一个IP端口,但不同的“水管”用不同的端口号区分开来,于是同一个设备发送给其他不同设备的信息就不会产生混乱。在同一时刻,设备可能会产生多种数据需要分发给不同的设备,为了确保数据能够正确分发,TCP用一种叫做TCB,也叫传输控制块的数据结构把发给不同设备的数据封装起来,我们可以把该结构看做是信封。
一个TCB数据块包含了数据发送双方对应的socket信息以及拥有装载数据的缓冲区。在两个设备要建立连接发送数据之前,双方都必须要做一些准备工作,分配内存建立起TCB数据块就是连接建立前必须要做的准备工作。
客户端发起连接的方式叫Active Open。也就是客户端需要主动向服务器发送消息,表达自己想建立数据连接的请求,通常而言客户端会向服务器发送一个SYNC数据包。服务器发起连接的方式叫Passive Open,通来说服务器不可能知道当前时刻有哪个设备想向它发起连接,因此它只能构建一个端口,然后监听该端口,等待客户端从该端口向它发起连接请求。在OPEN阶段无论是客户端还是服务器都需要准备好TCB数据结构,但由于服务器不知道要连接它的客户端信息,因此在构建TCB模块时会默认将客户端对应的socket数据初始化为0.
三次握手
四次挥手
为什么客户端要等待2MSL
主要原因是为了保证客户端发送那个的第一个ACK报文能到到服务器,因为这个ACK报文可能丢失,并且2MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,这样新的连接中不会出现旧连接的请求报文。
如果没有这一设置,当这两端重新建立连接的时候,这一信号可能被新连接识别。
socket连接
参考文献
TCP连接中的TCB指的是什么?_什么是链接的tcb-CSDN博客