Tcp和udp就像打电话通信传递,前者可靠性比后者好,udp就像使用书信方式,邮寄出去了,不保证你是否收到,可靠性不如tcp, 适合一次性传输较小数据的网络应用,如 DNS,SNMP 等。本篇介绍tcp:二者位于传输层
想必大家都听说过三次招手,四次挥手,起初我也一时半解,你们呢🐱‍🏍


首先以下是在传输的几个结果参数
SYN 建立连接 SYN=1连接请求
FIN 关闭连接请求
ACK 响应连接请求 ACK=1 确认有效 ACK=0确认无效
ack 随机序列号+1 确认号,在请求客户端发来的随机序列号(seq)+1
seq 序列号

三次握手

三次

为什么不是两次?

很简单:举个例子
如果客户端发送连接请求,但因报文丢失,接着继续发送直到服务器收到,建立连接,但是当前者报文段只是在某些网络节点滞留,延误之后才到达服务器,此时服务器误认为客户端又发出一次新的请求,等待客户端再次确认连接,不采用三次握手,然后客户端忽略服务端发来的确认,也不发送数据,服务端一直等待客户端发送数据,极大的浪费了资源。

SYN

很显然三次当中。服务器的资源发放在第二次握手之后,并等待客户端回复,如果将客户端伪造成不存在的IP地址请求,不断发送SYN包,服务端造成泛洪攻击,造成超时,长时间占用未连接队列,导致正常队列被丢弃,也就引起了服务端的拥堵甚至瘫痪。SYN不就是DOS/DDos攻击了吗?

四次挥手

四次

半连接状态

服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列。
当然还有一个全连接队列,就是已经完成三次握手,建立起连接的就会放在全连接队列中。如果队列满了就有可能会出现丢包现象。

2MSL

MSL是Maximum Segment Lifetime的英文缩写,可译为“最长报文段寿命”,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。

三和四可抽象着理解就是

太抽了,仅供参考

三次😀

A:恋爱吗?
B:我爱你
A:我也爱你

四次😭

A:分手吧
B:好吧
B:是我不够帅吗?
A:是的