TCP之建立连接(三次握手)

  一般面试网络,程序员基本都会问到关于三次握手,四次握手。
  四次握手下次讲解。
  本人经历好几次面试都被问到,一直没有认真搞明白,这次全面查阅书籍与对比博客进行了一下总结,希望看官仔细看完后能得到收获。

1. TCP报文首部格式

img

2. 格式字段解释

源端口: 应用进程的源端口。自身端口,比如是 64531。 16位,所以端口号只能 0~65535
目的端口: 目标主机的端口号。同样是16位。
序号:(序列号 Sequence Number)一般简称seq。字段长度32位。当值大于2的32次方时,归0.
确认号:(ACK确认序号 Acknowledgement Number)一般简称ack。注意是小写。以免以下面的ACK标记位冲突。期望收到对方下一个报文段的第一个数据字段的序号

标记位(Flag)6

URG: (紧急)紧急有效,需要快速重传
ACK:(确认)连接后的报文回应,ACK为1
PSH:(推送)接收方应该尽快将这个报文交给上层的协议,无需等待存满。
RST:(复位)重新连接
SYN:(同步)发送连接
FIN:(终止)释放连接

3. TCP建立连接

img

第一次握手

客户A 发送一个同步标记SYN=1的TCP数据段。此段中同时标明初始序号(Initial Sequence Number)ISN是一个随时间变化的随机值,即SYN=1,seq=x. 此时客户A 进入 SYN-SENT 状态

第二次握手

服务器接收到SYN包后发回确认报文。数据报文标记位 ACK=1,同时确认序号(ack) 表明客户A期待收到服务器下一个数据段的序号,即ack=x+1 (前一个数据段已收到且没有错误)

此外,设置标记位SYN=1,和服务器的初始序号y。即 SYN=1,seq=y.

此时服务器B进入 SYN-RCVD 状态,

​ 客户A进入 ESTABLISHED 状态

第三次握手

客户A回送一个确认数据段。

标记位ACK=1. seq=x+1(第一次握手自己的x即seq) , ack=y+1 (服务器B的序列号y)

接下来就是相互收发数据了。

握手阶段:

序号 方向 seq ack SYN ACK
1 A->B 10000(x) 0 1 0
2 B->A 20000 (y) 10001=10000+1 (ack=x+1) 1 1
3 A->B 10001 (x=x+1) 20001=20000+1 (ack=y+1) 0 1

希望以上知识可以带来一些帮助,如有任何疑问,请加群641792143交流与学习 或关注微信公众号 程序员干货区
       闻道有先后,术业有专攻,希望大家不吝赐教
下面是公众号二维码
在这里插入图片描述

发布了43 篇原创文章 · 获赞 1 · 访问量 2310

猜你喜欢

转载自blog.csdn.net/lpl312905509/article/details/103606825