udp协议和tcp协议_TCP协议与UDP协议

TCP协议与UDP协议

TCP协议

 是一种是可靠的传输协议,是一种流式协议(以数据流的形式进行通信);
 是一种安全协议(全双工通信,收发信息都需收到确认信息才能完成收发)

TCP协议的特点:

(1)可靠,慢,全双工通信;

(2)建立连接需要经历三次握手,断开连接需要经历四次挥手;

(3)在建立起连接后,发送每一条信息都有回执;而且为了保证数据的完整性,还有重传机制(超时重传,数据确认)

UDP协议

 不可靠传输协议,是一种数据报文协议

UDP协议的特点:

(1)快,无连接;

(2)不安全,可能回丢失数据

TCP三次握手四次挥手

TCP三次握手

(1)第一次握手:client和server都处于关闭的状态。客户端将6位标志位SYN(表示一个连接请求)置为1,随机产生一个序列值seq=x,将数据包发送给server,client进入SYN_SENT(同步已发送)状态,等待Server确认。

(2)第二次握手:server端在收到数据包后,由SYN=1,seq=x知道了client正在请求连接,将SYN和ACK都置为1ack=x+1,同时随机产生一个序列值seq=y,将数据包发送给client告知其确认请求连接,server端进入了SYN_RECV(同步已接收)状态,此时系统应该为TCP连接分配TCP缓存和变量

(3)第三次握手:client在接收到数据包后,通过ACK=1,ack=x+1知道server已经同意了自己的连接请求,将ACK 置为1,ack=y+1,将数据包发送给server。Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client和Server就可以开始传输数据。

帮助记忆

西门大郎和潘小莲

 # 【第一次握手】
 西门大郎对王婆说:我家财万贯,去告诉隔壁的潘小娘皮,我想和他花前月下(SYN=1,seq=x);
 # 【第二次握手】
 王婆对潘小莲说:隔壁西门官人,人帅钱多,想和你花前月下;潘小莲:我也喜欢西门官人(ACK=1,ack=x+1,SYN=1,seq=y);
 # 【第三次握手】
 王婆对西门:官人,小莲已经同意了。西门:王妈妈,这是50两金子,今晚告诉小莲,我在后花园等她(ACK=1,ack=y+1,seq=x+1);

此时两者的联系已经建立了

577d2e442c936fb51ae26a1c2c48dd5c.png

面试问题:为什么client还需要发送一次确认了?可以两次握手吗?

答:主要为了防止失效的请求连接有传到了server。client A需要连接 server B,由于网路原因,第一次请求没有到达B,于是A又发送了一次请求,B收到了第二次请求并确认,建立起连接,后来第一次的请求终于到达了B,B以为A又发送了一次连接请求,于是向A发送确认报文段。如果不采用三次握手的话,只要B确认了,新的连接就建立起来了,但是此时A不理睬B也不向B发送数据,B一直在等待A的确认,就造成了资源的浪费。

面试题2:Server端容易受到SYN洪水攻击?

答:server端的资源是在二次握手的时候分配的,client 端的资源是在三次握手的时候分配的,所以server端容易受到SYN泛洪攻击。SYN泛洪攻击是指client在短时间伪造出大量不存在的IP向server端发送连接请求,server回复确认包,并等待client确认。但是由于源地址不存在,server需要不断得重发直至超时,这就使得正常的SYN请求因为队列满了被丢弃。

措施:

(1)降低主机的等待时间使主机尽快的释放半连接的占用;

(2)短时间受到某IP的重复SYN则丢弃后续请求。

注意:

 # 在高并发的情况下,服务器一般处于SYN_RECV状态

TCP四次挥手:

断开,可以是server和client任意的一方发起请求。

这里以客户端断开为例:

client这边已经没有要发送给server的数据,主动发起断开链接的请求

(1)第一次挥手:将FIN置为1,同时随机生成一个序列号seq=u,将数据包发送给 server端,此时client端进入FIN_WAIT_1状态;

(2)第二次挥手:server端收到client发送过来的报文段后,知道client那边已经没有数据传给自己了,但是自己还有数据没有传完。因此,将ACK置为1,ack=u+1,seq=v,将数据包发送给client。此时,server端处于close_wait状态,客户端--->服务端传输链接断开。client收到server发送的ACK报文后,进入FIN_WAIT_2状态。

(3)第三次挥手:server没有数据要传输给client了,向client发送FIN报文(FIN=1,ACK=1,ack=u+1,seq=w),服务端此时进入最后确认状态(LAST_WAIT),等待client 的确认。

(4)第四次挥手:client收到server端发出的FIN报文后,向server发送ACK报文(ACK=1,ack=w+1,seq=u+1),A进入TIME_close状态。经过一段时间后进入close状态。

d74658ad9fbcc98e522e83487b8a97ac.png

面试题:为什么client在Time_wait后需要等待2MSL?

答:(1)确保client发送的最后一个ACK报文能够到达server;

(2)防止已失效的链接出现在本次链接中。

为什么TCP挥手是四次,而不是三次?

答:TCP是全双工通信。server端和client端都可以接收和发送消息。挥手过程不像握手过程那样,可以把ACK、SYN放在同一报文里。一般都由一方主动发起,另外一方被动关闭。(1)发起的那一方先发送FIN报文(表示它没有数据传给被动方);

(2)被动方收到FIN报文后,但是它还有数据没有传完,所以先发送一个ACK报文;

(3)期间被动方还可以传输数据,待数据传输完毕后再发送一个FIN报文;

(4)主动方收到FIN报文,再发送一个最后确认报文(ACK),主动方进入Timewait状态;

(5)经过一段时间后,主动方关闭连接,被动方关闭连接。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值