TCP

三次握手

TCP/UDP详解
tcp报文结构:
TCP/UDP详解TCP/UDP详解
第一次握手:客户端发送tcp数据包标志位SYN设置为1,随机产生顺序号seq number = X的数据包到服务器,并进入SYN_SENT状态,服务器由SYN为1知道A要求建立连接
TCP/UDP详解
第二次握手:服务器收到请求后要确认联机信息,向客户端发送tcp数据包,标志位ACK设置为1,SYN为1,确认号ack number=主机的顺序号seq + 1 = X + 1,随机产生seq为y的包,此时服务器进入SYN_RCVD状态

TCP/UDP详解
第三次握手:客户端收到tcp数据包,检查ack number是否正确,若正确客户端回再发送标志位ACK位1,ack number = 服务器的seq + 1 = y + 1的数据包,服务端检查ACK为1则连接建立成功,Client和Server进入ESTAB-LISHED状态完成三次握手,可以传输数据。

TCP/UDP详解

四次挥手

​​​​​​TCP/UDP详解

  • 第一次:Client发送请求断开连接数据包,发送一个FIN包,关闭Client到Server的数据传送。ClientFIN_WAIT_1状态。
  • 第二次:Server接受到数据包后,发送应答包,返回一个ACK包确认Client断开,然后Server进入CLOSE_WAIT状态,Client收到应答后转到FIN_WAIT_2状态。
  • 第三次:Server发送完毕数据后 发送一个断开连接数据包FIN,告诉Client我这也准备关了
  • 第四次:client收到后变为TIME_WAIT状态,然后发送一个应答包ACK给server,server进入close状态,完成四次挥手。

图片来自:https://www.cnblogs.com/zhuzhenwei918/p/7465467.html

TCP为什么是三次握手四次挥手

科普一下全双工

全双工:允许数据在两个方向上同时传输(A->B且B->A)
单工:只允许A->B或者B->A
半双工:一段时间内只有一个动作发生如A->B,那么下一个B->A得等到A->传输停止。

为什么是三次握手?

因为信道不可靠,可能存在延时或者丢包,三次是满足可靠传输的最小次数。

假设两次握手,例如C向S发起tcp请求,S收到了请求后向C返回确认,此时S已经完成了连接认为可以发送数据了,然而C还没有收到确认包,S开始向C发送数据,C认为还没有建立连接就会忽略掉所有数据包,S端迟迟没有收到确认包又会重复发送分组包,形成死循环。

那么为什么不是四次握手?
三次已经建立了稳定的连接关系,四次的话会延长连接的时间,出现网络问题时会大大延长连接时间。

为什么是四次挥手?

因为tcp是全双工传输的并且信道可能不可靠,当client端发送完数据后发送FIN包表示关闭连接,而Server端可能还没发送完毕或者存在延迟,直接关闭容易出现错误
所以四次挥手在client端发送FIN包后仅仅是Client表示我发送完了但是没断开连接,Server回复ACK表示我收到了,此时若Server还有数据没发送,则等到发送完再向Client发送FIN包表示我也发完了可以断开连接,最后Client回复ACK包表示好的我收到了,TCP连接断开。

为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

假定网络状态不好,返回给Server的ACK包没有被送达,那么Server将会反复给Client发送FIN包,2MSL是报文发送和回复所需的最大时间,在2MSL内又收到FIN包则表示Server没有收到ACK,那么Client将会再次发送,若超过2MSL时间没有收到FIN则表示对方已经收到ACK包,进入close。

TCP和UDP的区别

  1. TCP是面向连接的,传输之前要三次握手成功才会传输,UDP则是无连接的。
  2. TCP可以保证可靠传输(有连接、超时重传、应答机制),UDP不能保证可靠传输一定送到。
  3. TCP是基于流模式(tcp把数据包看成一连串无边界的字节流,一段段传输构成整个数据块),UDP是基于数据报(每一个数据报都是一个独立的对象,有指定的大小)
  4. TCP只能点到点,而UDP可以是一对一,广播,多播。

TCP/UDP的使用场景

  1. TCP主要用于实现可靠传输的情况,例如文件传输,发送和接收邮件等
  2. UDP用于高速传输和实时性较高的场合,例如QQ电话,视频聊天,直播出现丢包也只是短暂的卡顿。

使用TCP/UDP的协议有哪些?

①TCP :FTP,Telnet(远程登录),SMTP,POP3(和SMTP对应用于接收邮件),HTTP

②UDP对应协议:DNS,SNMP(简单网络管理协议),TFTP(简单文件传输协议,使用了编号确认发送的包是否有丢失)

TCP是如何完成可靠传输的?

TCP拥塞控制如何实现?

相关文章: