网络学习——TCP的三次握手与四次挥手

说正题之前先贴一张tcp的包头信息图,握手跟挥手会用到包头里的信息。

1. TCP是传输层协议。

2. TCP包头信息

  • 每行0-31位共32位信息,5行固定+1行选项,所以有20字节的固定首部
    • 源端口跟目标端口,下层服务上层,指明来源跟去路
    • seq序号,数据包的相对序号,通过序号实现数据的可靠传输,通过序号实现确认号
    • ack确认号,通过告诉对方发送下一条信息让对方知道自己已经收到对方的信息。举个栗子:A向B发送seq=x的数据包,假如B成功收到数据包,这个时候B要向A发送确认信息告诉A已收到信息,B向A发送ack=x+1。
    • 标记位
      • URG,紧急指针位,为0说明下面的紧急指针无意义;为1紧急指针有意义起作用
      • ACK,确认位,也分0/1,起作用/不起作用
      • PSH位,0/1,0意味着收到数据先放入缓存中稍后发送;1代表立即发送
      • RST,重置位,网络故障时用到
      • SYN同步位 ,建立连接时用到,为1时,请求通讯
      • FIN结束位,结束连接时用到,为1代表发起结束请求

3. TCP三次握手,客户端向服务器发起

  • 用到序号、确认号、同步位、确认位
  • 具体过程:
    • ①A客户端打开应用程序并发送同同步请求SYN=1和数据序号为seq=x的数据包到B服务器(B处在监听状态)
    • ②B成功收到数据后,再次发送同步请求SYB=1,并且发送确认位ACK=1,数据序号为seq=y的数据包和确认序号ack=x+1告诉A已收到数据
    • ③A在收到B的信息之后,要回应A的请求,发送确认位ACK=1,数据序号为seq=x+1的数据包和确认序号ack=y+1.至此,连接成功,可以传送数据了

4. TCP四次挥手,挥手过程可以是客户端向服务器发起也可以是服务器向客户端发起。以客户端向服务器发起挥手为例

  • 用到FIN位、ACK位、seq、ack
  • 具体过程:A向B发送结束请求-->B收到请求回应A已收到-->等待当前数据传输完,B向A发送同意结束-->A收到B的同意结束信息,向B发送确认收到,并在等待2个MSL(消息段的最大生命期,即消息从A到B或从B到A的时间)时间后关闭程序,B收到A发送的确认,关闭程序
    • ①客户端与服务器处于数据传输的状态,A客户端主动发送结束请求,向B服务器发送结束请求FIN=1,数据序号为seq=u的数据包
    • ②B服务器收到结束信号后,将结束指令通知应用程序,并向A发送确认信息ACK=1,seq=v,ack=u+1,继续向A传输当前数据,A在收到B的确认请求后继续处于终止等待状态,直到收到B发送的结束信息
    • ③B传输完当前数据,向A发送结束信息,FIN=1,ACK=1,seq=w,ack=u+1
    • ④A收到B的结束信息,向B回复确认信息,ACK=1,seq=u+1,ack=w+1,并在等待2个MSL时间后关闭程序,这是确保能把B传来的数据接收完。B收到A的确认信息,关闭应用程序。

猜你喜欢

转载自blog.csdn.net/qq_39155877/article/details/81912839