TCPIP协议学习笔记(二): 三次握手和四次挥手

TCP/IP协议学习笔记(二)

一、TCP协议
位于传输层中,面向连接的,可靠的传输协议。

面向连接指的是:
	三次握手之后,到开辟完资源,连接就有了。
可靠的传输协议是指:
	数据发送之后的确认机制。

二、三次握手四次挥手
三次握手过程:
在这里插入图片描述
1.首先客户端对服务端发出SYN来请求建立连接,并且生成序列号Seq = 1000;
2.服务端收到请求后会回送SYN + ACK给客户端,Seq=2000(数值是自己生成的,用来回应客户端),Ack为1001(客户端发送的Seq+1),这样客户端收到回应时就能准确知道是服务端的回应了;
3.客户端收到回应后会把Seq设置为1001(服务端的ACK值),同时还会把Ack值设置为2001(服务端的Seq+1),并且发送到服务端。
当完成三次握手之后,双方的操作系统才会开辟资源,资源主要是为对方服务,此时才算是连接。

在这里插入图片描述
四次挥手过程:
1.客服端需要断开连接,会先发送FIN+ACK,生成Seq = 2000,Ack = 1000;
2.服务端收到后会回送ACK,设置Seq = 1000(根据客户端发送的ACK设置),ACK = 2001(客户端发送的Seq数字+1);
3.服务端再回送FIN+ACK、Seq = 1000、ACK = 2001;
4.客户端再回送ACK,Seq=2001,ACK=1001(服务端Seq+1),这样就关闭了连接。

问题1:为什么不只进行两次握手?
答:如果只进行两次握手,那么只有客户端可以确认自己的输入和输出都是通的,而服务端只能知道自己接收端是通的,无法确认发送是否被客服端收到,即不知道输出是否是通的。

问题2:如果已经建立了连接,但是客户端突然出现故障了怎么办?那如果十年没有发送数据包,连接还是有效的吗?
答:1.TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
2.可以通过心跳机制来测试。发送一个包,如果收到一个包,那么说明还是有效的。

问题3:为什么不能是三次挥手?
答:关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,"你发的FIN报文我收到了"。**只有等到我服务端所有的报文都发送完了**,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

问题4:为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

参考链接:https://blog.csdn.net/qq_38950316/article/details/81087809

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值