计算机网络(二)--TCP连接

一.三次握手

1.三次握手

 

 

 

客户端发送一个SYN给服务端,SYN是由一个算法计算出来的, 同时把 SYN 标志位置为 1 , 服务端接收之后 , 发送ACK,ACK为客户端发送的SYN+1,并且发送自己的SYN,并把 SYN 和 ACK 标志位置为1

 

 

 

跟上面的一样,ACK也是用SYN+1表示

2.为什么是三次握手

这个要从初始化Socket和确定序列号和窗口大小

①    避免历史重复连接

当之前因为网络阻塞等原因而延迟到达的SYN,服务端回复ACK,但是客户端会根据自身的上下文判断这是一个历史连接,客户端就会发送一个RST给服务端,表示中止连接

②    同步双方初始化序列号

③    避免资源浪费

如果只有两次握手,那么当网络阻塞的时候,客户端会发送很多个SYN,服务端每次接收到发送ACK就会立即建立连接,就会建立很多个连接。

3.为什么ip层会分片,而TCP还需要MSS?

 

 

因为如果出现丢包情况,ip层是没有重传机制的,会交给TCP进行重传,会重新传整个TCP报文,所以当TCP也有分片的时候,如果出现了丢包,那么tcp只会重传MSS单位的数据。

4.SYN攻击是什么

服务端的SYN队列被塞满,

应对方法:使用cookie

5.如果建立了连接,但是客户端故障了

TCP有一个“保活机制”,发送一个探测报文,该探测报文包含的数据非常少,如果连续几个探测报文都没有得到相应,则认为当前的TCP连接已死。

定义一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP 保活机制会开始作用,每隔一个时间间隔,发送一个探测报文,该探测报文包含的数据非常少,如果连续几个探测报文都没有得到响应,则认为当前的 TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序。

6.Linux系统中查看TCP状态

  netstat -napt

 

二.四次挥手

 

 

1.FIN_WAIT

客户端发送了FIN之后,只是表示客户端不发送数据了而已,但是服务端可能还有代理处理和发送的数据,等到服务端不再发送数据的时候,才发送FIN给客户端

2.2MSL

报文最大生存时间

网络中可能存在来自发送方的数据包,当这些发送方的数据包被接收方处理后又会向对方发送响应,所以一来一回需要等待 2 倍的时间

 

MSL 是 Maximum Segment Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为 TCP 报文基于是 IP 协议的,而 IP 头中有一个 TTL 字段,是 IP 数据报可以经过的最大路由数,每经过一个处理他的路由器此值就减 1,当此值为 0 则数据报将被丢弃,同时发送 ICMP 报文通知源主机。

MSL 与 TTL 的区别:MSL 的单位是时间,而 TTL 是经过路由跳数。所以 MSL 应该要大于等于 TTL 消耗为 0 的时间,以确保报文已被自然消亡。

3.为什么需要TIME_WAIT

①防止旧连接的数据包

如果接收到FIN之后就立马断开的话,如果网络延迟,还有数据报文还没到达服务端,过了一会又发送到了,这样子就又得重新建立连接

②保证连接正确关闭

 

 

三.TCP和UDP的区别

1.UDP和TCP的对比

 

TCP UDP
有连接 无连接
一对一 一对一,一对多,多对多,多对一
可靠传输 尽最大努力交付,不保证可靠交付数据
首部开销大  
有拥塞控制和流量控制                    

 TCP经常用于 FTP/文件传输

UDP用于语音/视频等多媒体通信,广播通信

2.超时重传

 

 

RTT 就是数据从网络一端传送到另一端所需的时间,也就是包的往返时间。

超时重传时间是以 RTO 表示.

超时重传时间 RTO 的值应该略大于报文往返  RTT 的值

3.快速重传

快速重传(Fast Retransmit)机制,它不以时间为驱动,而是以数据驱动重传

快速重传机制只解决了一个问题,就是超时时间的问题,但是它依然面临着另外一个问题。就是重传的时候,是重传之前的一个,还是重传所有的问题。

(1)SACK

SACK( Selective Acknowledgment 选择性确认)。

这种方式需要在 TCP 头部「选项」字段里加一个 SACK 的东西,它可以将缓存的地图发送给发送方,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据

 

(2)D-SACK

 

 

3.滑动窗口

窗口大小就是指无需等待确认应答,而可以继续发送数据的最大值。举个栗子,比如我一次性可以发送100条数据,不管服务端有没有收到,反正我这边就发出100个。

窗口的实现实际上是操作系统开辟的一个缓存空间,发送方主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据。如果按期收到确认应答,此时数据就可以从缓存区清除。

 

4.流量控制

TCP 提供一种机制可以让「发送方」根据「接收方」的实际接收能力控制发送的数据量,这就是所谓的流量控制

5.拥塞控制

在网络出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延、丢失等,这时 TCP 就会重传数据,但是一重传就会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这个情况就会进入恶性循环被不断地放大….

拥塞控制,控制的目的就是避免「发送方」的数据填满整个网络。

  • 慢启动
  • 拥塞避免
  • 拥塞发生
  • 快速恢复
posted @ 2020-10-23 21:53  拿着放大镜看世界  阅读(301)  评论(0)    收藏  举报