TCP的三次握手与四次挥手(详解+动图)

https://blog.csdn.net/qzcsu/article/details/72861891

TCP报文首部

TcP报文

HTTP

基于安全考虑默认使用tcp(面向连接的传输协议)作为传输协议(作用在进程间(套接字192.3.4.16:80)的通信,而非网络间),若要用udp,最大努力交给传输层实现http,因为安全考虑,tcp的流量控制,可靠性

保障需要放在应用层

tcp报文首部解释

源端口,目的端口各站2字节
序号:tcp连接中传送的字节流每个字节按顺序编序号,如这个字段的序号301,下一个401
确认号:期望对方发过来的第一个序号,把确认好先给对方
数据偏移:tcp数据开始到数据结束的序号差
保留:站位6,保留今后用,但目前都是0
urg:紧急 urg=1 告诉系统,此报文段为1
确认ACK: ACK=1 确认号字段有效
推送PSH:当双方进行通信,有时一端应用程序希望在键入一个命令收到对方响应时,将PSH=1
复位RST:当tcp连接出现严重错误时,需要重新建立连接
同步SYN :SYN=1 ACK=0 请求建立连接,SYN=1 ACK=1同意连接
终止FIN:FIN=1 发送方不再给对方发送连接,自己可以接受对方连接
窗口,占2字节,指的是通知接收方,发送本报文你需要有多大的空间来接受;
检验和,占2字节,校验首部和数据这两部分;
紧急指针,占2字节,指出本报文段中的紧急数据的字节数;
选项,长度可变,定义一些其他的可选的参数。

三次握手:

1、服务器端先创建TCB连接控制块,进入listen状态
2、客户端进入TCB连接控制块,发送连接请求报文SYN=1,seq=x
3、服务器收到客户端请求,同意连接,发送SYN=1,ACK=1,seq=y,ack=x+1
4、客户端收到连接,并发送确认ACK=1,seq=x+1,ack=y+1
至此连接成功(恋爱)

四次握手

1、客户端主动关闭请求FIN=1,seq=u(当前传过来的数据最后一个字节序号+1) 客户端进入等待状态,TCP即

使FIN不携带数据,也会消耗一个序号
2、服务器收到连接释放报文,发送确认报文,ACK=1,ack=u+1,并自己的序号seq=u+1,此时客户端处于半关

闭状态,客户端仍可以收到
3、服务端发送FINAL=1,ack=u+1, 假设此时seq=w(数据),
4、客户端收到并等待2MSL(服务端爬客户端没收到,会重新去发;把以前连接的报文全删掉),确认ACK=1

,ack=w+1
至此连接结束(分手)

为什么建立连接是三次握手,关闭连接确是四次挥手呢?

三次:因为建立连接时,是同步,服务端收到SYN后,并发送SYN,ACK
四次:FIN,仅仅表示对方不再发送数据了但是还能接收数据,ACK和FIN一般分开发送,而导致多次

如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

版权声明:本文为CSDN博主「小书go」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qzcsu/article/details/72861891

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值