TCP/IP三次握手,个人学习笔记

一、TCP/IP协议是什么

简单来说,TCP/IP协议是我们现实生活中网络通信的基础,它是一个集合,由许多的网络通信(规则)协议组成。

稍微具体一点,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。
这再一次说明TCP/IP协议是一个集合,而不是某一个或者两个简单的“规则”。

二、在具体的场景下,TCP/IP协议各自发挥着什么作用?

我们前面提到TCP/IP包含许多协议。
为了使每个协议分工明确,同时也方便修改和升级。并且修改的时候并不会影响到其他协议正常工作,每个协议也只需要考虑自己的内容,不必去理会其他需要处理的内容。

TCP/IP里把这些协议进行了分层,一共四层。
从上至下依次是:应用层、传输层、网络层、链路层。

三、TCP/IP为什么可以保证通信的有序和安全?

要想了解握手和挥手,千万不能急,一定要先看下面的图
在这里插入图片描述
这是一个TCP报文
在这里插入图片描述

在这里插入图片描述

用一句简单的话来说就是,TCP的建立需要双方确认:自己能发信息,并且对面能收到自己发的信息
不难理解,这个过程可以分解成四个动作
1、客户端发确认
2、服务端收,并回复
3、服务端发确认
4、客户端收,并回复

思考问题

1、四个动作为什么是三次握手

原因很简单
上面的第2、3步是可以由服务器同时完成的,换句话说
服务器确认是否收到客户端的包,
发送一个确认信息给客户端,
这两步可以由同一个包完成

2、如果三次握手的过程中,第二次握手失败了会怎么样

首先我们需要回忆一下,第二次握手做了哪些事情:

  1. 服务器回应客户端,已经收到连接请求
  2. 服务器发出信号,询问客户端是否能收到消息

可以看出第二次握手的动作都是服务器在做,这时答案已经比较清晰。
不需要死记硬背,大致的逻辑如下:

  1. 动作失败了那就重试
  2. 谁失败的就由谁来重试
  3. 做动作什么失败了就重试什么动作

然后还要补充一些细节,比如
服务器发重试的时候要等多久?服务器怎么判断自己的第二次握手失败了?
这时答案就比较完整了:
服务器在发出了“第二次握手”之后,会进入叫做半连接的状态
在这个状态中它其实时在等回应,等待时间内如果没有收到客户端回应的“第三次握手”,就会重新发“第二次握手”,至于等待的时间则会按照重发的次数慢慢递增变长,分别是1秒 2秒 4秒 8秒 16秒 32秒
怎么知道这个等待时间的呢?- - 可以从cat /proc/sys/net/ipv4/tcp_syn_retries 文件查看。

有心的朋友会发现,上述情况中,服务器在决定要不要重发"第二次握手"时,判断依据是自己有没有收到回应。继续推导,服务器没收到“第三次握手”又分两种情况:

  1. 第二次握手没发送成功
  2. 第二次握手成功发送,但是第三次握手没发送成功

在实际工作中我们一般都不知道是哪一种,需要观察推断

  • 第二次握手没发送成功:第一次握手和第二次握手都会重发
  • 第三次握手没发送成功:只有第二次握手被重发
3、大写的ACK和小写的ack分别代表什么

ACK只有两个值,1表示已确认
ack的值跟上一个接收的包的序号有关,是确认编号
ack的作用就是表示自己已经收到的序号为X的包,X=seq+1

抓包演示

图中 演示的是一次握手失败的情况

106.122.x.x 是客户端 IP,172.16.x.x 是服务端 IP。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值