Tcp三次握手和四次挥手理解

TCP:是一种面向连接的、可靠的、基于字节流的传输层通信协议。而当我们提到TCP协议时一定忘不了与UDP进行比较,下面将首先介绍两者的区别。

TCP协议与UDP协议的区别。
在这里插入图片描述
TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。
UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击
UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。 基于上面的优缺点,那么: 什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP

 接下来进入本文正题

 三次握手(连接建立)示意图如下图3.1所示
在这里插入图片描述
三次握手通俗来讲就是客户端与服务器通信前进行的一次连接建立下文将客户端与服务器端简称为C与S端。分为以下三步:
1.C端向S端发送同步序列号SYN并置发送序号为x此时C端进入同步发送阶段;
2.S端在收听阶段接到C端发来的请求报文后回复同步序列号SYN与确认号ack并且置发送序号为y,如果确认收到ACK=1,否则为0同时进入同步收到阶段;
3.C端回复S端确认收到同时发送seq序列号与ack确认号,置ACK为1进入连接建立阶段;

 四次挥手(释放连接)如下图3.2所示
在这里插入图片描述
四次挥手通俗来讲就是C端与S端结束通信释放连接过程一般情况分为以下四步。
1.C端向S端发文送释放连接请求,进入FIN-WAIT-1(终止等待1)阶段;
2.S端向C端发送ACK=1表示自己已经确认收到C端的释放请求进入CLOSE-WAIT阶段,但是S端有可能还未向C端发送完最后的一部分数据所以此时C端进入FIN-WAIT-2(终止等待2)阶段;
3.S端数据发送完后向C端发送释放连接请求,发送seq,ack号,此时进入LAST-ACK(最终确认)阶段;
4.C端收到S端的连接释放报文后发出确认ACK=1同时发出seq,ack号进入TIME-WAIT阶段,值得注意的时此时TCP连接还没有释放,必须经过2*MSL(两个最长报文段寿命)的时间后,进入CLOSER状态。而当S端只要收到C端发出的确认后就会立即进入CLOSED状态。

常见的几个问题:
1.三次握手是否可以改为两次?
  否,引用网上一段广为流传的解释:
  我们知道,3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
  现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

2.TCP年粘包问题
  TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。
具体解决方法可以参考:https://www.cnblogs.com/kex1n/p/6502002.html
3.长连接和短链接
(1)长连接:进行一次连接建立,数据传送两次以上。
(2)短链接:进行一次连接建立,数据传送一次则释放连接。
4.为什么会有TIME-WAIT状态?
原因有以下两种情况:
(1)如果S端发送给C端FIN请求释放时在这个过程中ack可能丢失致使C端没有接收到,则C端将会重新发送FIN释放请求,这个时候如果S端已经关闭了那么就不会接收到,这样的情况不符合TCP的连接可靠性,所以当我们设置TIME-WAIT可以避免这种情况。
(2)防止上一次连接中的包迷路会与新连接的包重复所以可以经过2MSL可以使得上一次的重复包全部消失。

Tcp和Udp的区别

  1. TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。而UDP是无连接的
  2. TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
  3. TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
  4. TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率
  5. TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。
  6. TCP面向的是字节流的服务,UDP面向的是报文的服务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值