TCP/IP 三次握手&四次挥手详解,以及异常状态分析

1.TCP/IP 三次握手
TCP/IP 三次握手过程

主要依靠IP协议报文中的 SYN ACK 两个标识位,SYN 表示是请求连接的报文,ACK 表示确认报文的请求

过程:

  1. 客户端处于 CLOSE 状态,服务器处于 LISTEN 状态,客户端向服务器发送请求连接报文,SYN=1 seq=x,发送成功后,客户端状态修改为 SYN_SEND 状态
  2. 服务器接收到客户端的请求报文,就发送 ACK 确认报文,表示服务器接收到了这个请求,ACK=1 syn=y ack=x+1 服务器将状态为 SYN_RCVD 状态
  3. 客户端收到服务器发送的确认报文后,到这里,客户端知道服务器接收和发送功能都没有问题,但是服务器只知道客户端有发送功能,所以有第三次握手,
  4. 客户端发送确认报文,ACK=1 ack=y+1 seq=x+1 ,这里seq=x+1 可以用来标识第一次连接的握手,到这里客户端处于 ESTABLISHED 状态
  5. 服务器收到客户端的确认报文后,知道了客户端收发能力没问题,将状态修改为 ESTABLISHED 状态,连接建立成功,可以开始发送消息了
为什么是三次握手?
  1. 确认客户端与服务器之间都有收发功能。
  2. 如客户端发出连接请求,但因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,
    客户端共发出了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,
    此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接,不采用三次握手,只要服务端发出确认,就建立新的连接了,
    此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致等待客户端发送数据,浪费资源。
半连接队列和全连接队列
  1. 对于状态为 SYM_RCVD 的状态,服务器会将这个连接加入到半连接队列中,等待客户端发送数据,当三次握手完成,服务器会将这个连接加入到全连接队列中
  2. 全连接队列,顾名思义就是指完成三次握手的连接,如果队列满了就会出现丢包的情况
ISN(initial sequence number)是否是固定的吗?

ISN 是一个随机数(本质是32位的一个计数器),用来标识

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_CX_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值