TCP/UDP

TCP协议

当应用程序想通过TCP协议实现远程通信时,彼此之间必须先先建立双向通信通道,基于该双向通道实现数据的远程交互,该双向通道直到任意一方主动断开才会失效

三次握手

建立双向通道的过程称之为三次握手,建立通道的发起者可以是客户端也可以是服务端,下面我们就以客户端先主动发起为例

  • 客户端会朝服务端发送一个请求询问服务端:"我能不能挖一条通往你家的地道"

  • 服务端收到请求,回复说:"好吧 你挖吧",由于TCP是双向通道,客户端挖向服务端的通道只能给客户端朝服务端发消息使用,服务端要向给客户端发消息是没办法走这一条通道的,需要自己挖一条通往客户端的通道

    所以服务端在回复同意客户端挖通道的同时还会问一句:"那我能不能也挖一条通往你家的通道"

  • 客户端收到服务端请求后客户端到服务端的通道就挖成功了,然后也会同意服务端的请求,服务端挖向客户端的通道也会成功

总结:之所以称之为三次握手就是因为中间的服务端的同意,和请求合并成了一次请求

四次挥手

建立一个连接需要三次握手,而终止一个连接要经过四次握手

当服务端或者客户端不想再与对方进行通信之后,双方任意一方都可以主动发起断开链接的请求,我们还是以客户端主动发起为例

  • 客户端由于已经没有任何需要发送给服务端的消息了,所以发起断开客户端到服务端的通道请求

  • 服务端收到该请求后同意了 至此客户端到服务端的单项通道断开

  • 服务端这个时候不会立刻朝客户端发器请求说那我也断开到你家的通道吧,服务端需要想想我手上还有没有需要发送给客户端的消息,如果还有的话,那我不能立马断开,先把数据发完才能断

    等服务端检查完毕之后发送也没有数据要给客户端了,这个时候就会朝客户端发起断开服务端到客户端的通道请求

  • 客户端同意该请求,至此四次挥手完成

总结:挥手必须是四次,中间的两次不能合并成一次,原因就在于需要检查是否还有数据需要给对方发送

总结

TCP作为一种面向连接的,可靠的协议,它属于传输层的协议。只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

UDP

UDP介绍:

用户数据报协议,属于传输层的协议,无连接,不保证传输的可靠性。

TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。

使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。

UDP的优势:
①开销更小
TCP为了保证其可靠性,首部包含20字节,以及40字节的可选项,UDP首部只有8字节
②速度更快
UDP发送数据之前没有TCP的连接建立过程;
TCP提供了过多的保护,在及时性上做了很多的妥协,比如:控制微包(Nagle算法),延时ACK,流量控制,超时重传等,这些设计严重影响了Tcp的速度和及时性

UDP传输过程中存在的主要问题:
①丢失和乱序:因为UDP不提供ACK、序列号等机制,所以是没有办法知道是否有报文丢失以及接收方到达等报文顺序是否和发送方发送的报文数据一样;
②差错:对于差错问题则是可以通过校验和等检测到,但是不提供差错纠正;
③数据完整性,UDP协议头部虽然有16位的校验和,但是IPv4并不强制执行,也就是说UDP无法抱枕数据的完整性

原文地址:https://www.cnblogs.com/kai-/p/11990204.html