Tcp与Udp协议总结

Tcp协议常见知识

1. Tcp是面向链接的运输层协议,在应用程序使用TCP协议之前,必须先简历TCP连接,传输完毕后,需要断开TCP连接。

2. 每一条TCP连接只有两个端点,每一条TCP连接是点对点的。

3. TCO提供可靠的服务,在使用TCP连接传送数据时,无差错,不丢包,不重复,按序到达。

4. TCP提供全双工通讯,TCP允许通信双方的应用进程在任何时候都可以发送数据,并且在两端都设有发送缓存和接收缓存,来存放通信数据,在发送的时候,数据被传输给缓存后,就可以不再去管它,而TCP会在合适的时候把数据发送出去,接收正好相反。

5. 面向字节流,TCP中的流指的是输入到进程或输出的字节序列,面向字节流的含义是虽然应用程序和TCP的交互是一次一个数据块,但TCP将应用程序交付下来的数据看成一串字节流,不需要去理解其含义,对于字节流的解析由接受方的应用程序自行解析。

源端口和目标端口各占2字节,源端口标识了主机上发起传送的应用程序,而目标端口标识了主机上传送到达的应用程序,这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。

封包序号Sequence Number占用4字节,由于TCP封包必须要放置在IP包中,如果TCP数据太多,则无法全部放到一个IP数据包中,则需要进行分段处理,封包序号就应用于此,可以让接收方将收到的多个数据包重新组合起来。

确认号占用4字节,保存的是期望获得的下一个数据包的编号,如果确认号正确则代表上一个数据包成功接收。

UDP协议常见知识:

用户数据报协议UDP只在IP服务上增加了很少的功能,UDP主要特点是:

1. UDP是无连接的,在发送数据之前不需要建立连接,减少了开销和发送数据之间的延迟

2. UDP是无连接的,不能保证可靠的交付,主机不需要维持复杂的连接状态表

3. UDP是面向报文的,UDP对于应用层交付的报文,不会进行合并或者拆分,而是直接进行添加首部的处理,所以必须选择合适大小的报文,不然会降低IP层的效率。

4. UDP没有拥塞机制,当网络拥塞时不会让源主机发送速率降低,进而保证较小的延迟。

5. UDP支持一对一,多对一,一对多和多对多的交互通信。

6. UDP首部开销小,只有8个字节,而TCP有20个字节。

虽然某些实时应用需要使用没有拥塞机制的UDP协议,但是如果多个源主机多项网络发送高速率的实时视频流时,网络可能会拥塞,进而导致无法接收,因此可能会导致网络拥塞。为了解决这个问题,可以对UDP的不可靠传输进行适当的改进,以减少数据的丢失,可以采用一些增加可靠性的措施,例如采用前向纠错或重传丢失的报文。

 

TCP与UDP的区别:

1. TCP是面向连接的,UDP是无连接的

2. TCP是可靠传输,UDP是不可靠传输

3. TCP是点对点连接,UDP是一对多连接

4. TCP面向字节流,UDP面向数据报

5. TCP给HTTP, HTTPS, FTP, TELNET, SMTP使用,UDP给DNS, DHCP, NFS, IGMP, TFTP使用

6. TCP首部长度最短20字节,最长60字节,UDP首部长度8字节

 

TCP可靠传输的方法:

校验和:检测数据在传输过程汇总的变化,如果收到的数据检验和有差错,TCP就会丢弃该数据包,并且不确认收到此数据

确认应答+序列号:TCP给发送的每个数据包进行编号,接受方会根据编号进行排序,将有序的数据传送给应用层,

超时重传:当TCP发送一个数据包后,启动一个定时器,等待接受方确认接收数据包,如果没有在计时器时间范围内收到确认数据包,则会重发该数据包

流量控制:TCP连接每一方都有固定大小的缓冲空间,TCP接收端只允许发送接收端缓冲区能够接收的数据量,如果接收方来不及接收则会降低发送速率,防止丢包,方法为滑动窗口协议。

在TCP的报头信息中,有一个16位的窗口,窗口的大小实际上根据接收端数据缓冲区的剩余大小有关,数字越大,剩余空间越大,网络的的吞吐量越大,接受方在确认应答的时候,将自己的窗口大小写入,一起发送回去。发送方根据ACK报文窗口的大小改变发送速度。如果窗口大小为0,则停止发送数据,并定时探测。

拥塞控制:当网络拥塞时,减少数据的发送,发送方拥有拥塞窗口

如果发送方在开始的时候就发送大量的数据,则如果网络开始的时候就很拥堵,那么拥堵就会加剧,进而导致大量的丢包和超时重传,严重影响效率。因此TCP中引入了慢启动机制,在开始发送数据的时候,先发送少量的数据进行测试,获得当前的网络状态,再决定发送的速率,这就是拥塞窗口机制。拥塞窗口的增长是指数级别的,增长非常块,一直到某个阈值。

 

TCP的滑动窗口协议对速度的影响

TCP以段为单位进行数据的传输,没发送一个段,就会等待主机对这个段进行ACK应答,而这样就会导致往返时间的增长而降低通讯性能

而窗口可以防止网络性能的下降,应答包不再以段为单位确认,而是以更大的单位进行确认,转发时间会大幅缩短,当发送了一个段之后,不会去等待应答,而是在窗口的限制内继续发送。

窗口大小指的是不需要等待应答就可以继续发送的数据的最大值。

 

TCP中的粘包和分包

TCP以流的方式处理数据,一个数据包可能会被TCP拆分为多个数据包进行发送,也可能会将多个小的数据包合并为一个大的进行发送,当写入字节大小大于套接字发送缓冲区大小,就会发生拆包现象,而应用程序写入数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,就会发生粘包现象。

解决办法:

包尾增加特殊字符分割:行分隔符类:LineBasedFrameDecoder或自定义分隔符类 :DelimiterBasedFrameDecoder

将消息分为消息头和消息体:LengthFieldBasedFrameDecoder类。分为有头部的拆包与粘包、长度字段在前且有头部的拆包与粘包、多扩展头部的拆包与粘包。

 

TCP中的三次握手和四次挥手

三次握手:

客户端想要发送连接请求,则首先发送一个请求数据包到服务端,服务端接收到请求数据包后发送一个响应数据包给客户端,表示接收到了请求连接的数据包,然后客户端在发送一个响应数据包到服务端,表示接收到了服务端的反馈数据包,接下来进行数据传送。

使用三次握手的原因是,放置已经失效的请求报文在经过一段时间后又到达了服务端,创建了无用的新的链接。

三次握手的缺陷:如果第三个数据包欸有发送,则服务器资源会被耗尽,解决的办法是使用缓存的方法,确认收到第三个ack后再创建TCP。

四次挥手:

四次的原因:服务端的ACK与FIN必须是分开的,这时一个半连接的状态,服务端可能还会给客户端发送消息

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值