TCP/IP协议的三次握手和四次挥手

Moring,同志们,今天Val要和大家分享有关TCP/IP协议的有关内容(^__^)
主要内容:
1.什么是三次握手和四次挥手?
2.为什么要有三次握手和四次挥手?
3.为何建立连接是三次握手而断开连接是四次挥手?
4.断开连接时,主动断开链接的一方为什么要进入TIME_WAIT状态?

1.三次握手:
这里写图片描述

一、一个虚拟连接的建立是通过三次握手来实现的
请求--应答--再次确认
1.client和sever通信,client向sever发一个SYN(Synchronize)标记的包,告诉sever请求建立连接。(一个SYN包就是仅SYN标记为1的TCP包,只有当sever收到client发来的SYN包,才可建立连接,如果你的防火墙丢弃所有的发往外网的SYN包,那么你将不能让外部人和主机主动建立连接)
2.sever收到client发的SYN包后,会发一个确认SYN包的确认包(SYN/ACK)给client,表示对SYN包的确认,并继续握手操作。(SYN/ACK包仅是SYN和ACK标记设为1的包)
3.client收到来自sever的(SYN/ACK包),会再给sever发一个确认包(ACK),通知sever链接已经建立。三次握手完成,一个TCP连接完成。(ACK包就是仅ACK标记为1的TCP包,当三次握手完成连接建立以后,TCP连接的每个包都会设置ACK位。)

举个简单的例子:
1.Lucy和John在路上见面了,两人不认识对方,John想和Lucy交朋友,John就对Lucy说我们可以交个朋友吗?(这就相当于第一步client向sever发起连接);
2.Lucy听到了,然后做出回应,说好的,我们可以交朋友,确认好友请求 (相当于第二步,sever回应client的连接请求);
3.John收到了Lucy的回应,并会再给Lucy说“好了,咱们现在是好朋友了 ”。(相当于第三步,client收到回应后再发确认包,通知sever连接已经建立)

二、四次挥手,关闭连接的过程:
客户端主动关闭连接–服务端响应–服务端发送关闭连接请求–客户端响应
1.客户端发出段1,FIN位表示关闭连接请求(发送FIN,用来关闭客户端到服务器的数据传送)
2.服务端发出段2,应答客户端的关闭连接请求(服务器收到FIN,发回一个ACK,确认序号为收到的序号+1)。
3.服务端发出段3,包含FIN位,向客户端发送关闭连接请求(服务器关闭与客户端的连接,发送一个FIN给客户端)。
4.客户端发出段4,应答服务器的关闭连接请求(客户端发回ACK报文确认,并将序号设置为收到序号+1),并进入TIME_WAIT状态。TIME_WAIT状态会存在2MSL(MSL报文在网络中存在的最大生命周期)。
这里写图片描述

举个例子,关闭连接过程大致如下,现在Lucy不想和John做朋友了,
1.Lucy对John说,我们不要做朋友了;
2.John应答Lucy,行,没问题;
3.John对Lucy说:我也不想和你做朋友了;
4.Lucy回应:好,从现在起我们不是朋友了。

三、为什么建立连接协议是三次握手,而关闭连接却是四次挥手?
因为服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,SYN起同步作用)放在同一个报文中发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了,但未必你所有的数据都全部发送给了对方,所以你未必会马上关闭socket,可能还有一些数据需要发送给对方,之后再发送FIN报文给对方表示你同意关闭连接,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

四、主动断开链接的一方为什么要进入TIME_WAIT状态?
防止丢包
TCP主动关闭方采用TIME_WAIT主要是为了实现终止 TCP全双工连接的可靠性及允许老的重复分节在网络中消逝,等过了2msl(大约1~4分钟)后TIME_WAIT就会消失。TIME_WAIT状态的目 的是为了防止最后第四步4发出的ack丢失,让第3步处于LAST_ACK超时重发FIN。(2MSL:这个时 间长短跟操作系统有关 ,一般会在1-4分钟,也就是两倍的数据包最大生存时间)
TCP是建立在非连接链路的可靠传输通信方式,若在第四步主动断开连接方(client)回复(被动断开连接方)sever,发出ACK包,而由于网络原因sever并没有收到它的回应,sever再次发送FIN包,如果client不存在TIME_WAIT状态,会出现:1.原来的TCP信息已经不存在,主动方回复RST,引起被动方关闭流程错乱;2.在原来端口上建立了新的TCP连接,影响新的数据发送。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值