摸着W5500学习计算机网络4——TCP的三次握手

一、第一个问题:为什么是三次握手,而不是两次握手,或者是四次握手。

下面是按照我的理解画的,我觉得应该就是这个道理。当然这里面我只画了序号,还有确认号什么的。

二、第二个问题:序号是干啥用的?

    TCP把数据看成一个无结构的,有序的字节流。个报文段的序号是该报文段首字节的字节流编号。假设主机A通过TCP连接到主机B,并发送一个数据流。主机A中的TCP将隐式的对数据流中的每一个字节编号。如果数据流有50000个字节,MSS=1000,数据流首字节编号为0。那TCP将该数据流构建成500个报文段,给第一个报文段分配的序号是0,第二个报文段分配的序号是1000,依次类推。

三、三次握手报文解析

这是我用wireshark抓到的一次http请求。从第34行可以看到,在通讯前,计算机先通过ARP协议得到了设备的MAC地址。然后就是TCP通讯的三次握手。

我们来观察一下TCP的连接是怎么建立的。

第一步:客户端的TCP首先向服务器端的TCP发送一个特殊的报文段,一般称为SYN报文段,这个报文段不能携带应用层数据。

       这个报文段的首部中的SYN被置1,另外,客户端会随机选择一个初始序号,放入序号字段中。这个报文段被封装在一个IP数据报中,发送给服务器。具体的截图如下所示:

从图中可以看到,初始序号应该是个随机数x,但是这里是0

 

第二步:服务器读取到SYN报文段,为该TCP连接分配TCP缓存和变量,然后向客户端发送允许连接报文段。这个报文段称为SYN ACK报文段,也不能携带应用层数据。

这个报文段包含了3个重要信息:

SYN = 1

②在TCP首部的确认号字段置为x+1,这里为0+1 = 1

③服务器将自己的初始序号y,放入首部的序号字段。

截图如下:

从图中可以看到,服务器的初始序号应该是个随机数y,但是这里是0

 

第三步:在收到SYN ACK报文段后,客户端也要分配内存和变量。客户端再向服务器发送一个报文段,这最后一个报文段是对服务器的允许连接的报文段的确认(客户端通过将y = y+1放置到TCP的首部确认字段来完成此项工作)。此时连接已经建立,所以SYN被置为0

这个报文段可以携带应用层数据。

下面是截图:

这样TCP的三次握手就完成了。

今天就写这么多吧。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值