udp和tcp
- Tcp
- Tcp协议的断开与连接
- Tcp的状态转移
- 复位报文段
- 交互数据流与成块数据流
- 流式服务特点
- 应答确认与超时重传
- 滑动窗口
- 拥塞控制
- Udp协议特点
Tcp
Tcp协议的断开与连接
Tcp协议提供的是:面向连接,可靠的,字节流服务。
使用Tcp协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。Tcp连接是全双工的,双方的数据可以通过一个连接进行读写。完成数据从交换之后,通信双方都必须断开连接以释放系统资源。
使用 tcpdump 可以抓包观察 TCP 连接的建立与关闭。该命令需要管理员权限,格式如下(假设两个测试用的主机 IP 地址为 192.168.43.214 和 192.168.43.160 ) :
tcpdump -i eth0 -nt ‘(src 192.168.43.214 and dst 192.168.1.160 ) or ( src 192.168.43.160 and dst 192.168.43.214 )
三次握手发生在客户端建立连接(connect)的时候,返回成功就表示三次握手已经建立。
四次挥手发生在服务器或客户端断开连接(close)的时候。
Tcp的状态转移
Tcp连接的任意一端在任一时刻都处于某种状态,当前状态可以通过netstat命令查看。
在服务器与客户端连接的时候,主动关闭的一端会出现一种TIME_WAIT状态,该状态出现后会维持2MSL的时间,才会完全关闭。MSL是Tcp报文段在网络中的最大生存时间,标准文档RFC1122的建议是2min。
这种状态存在的原因有两点如下:
- 可靠的终止TCP连接。
- 保证让迟来的TCP报文有足够的时间被世界并被丢弃。
在linux系统上,一个TCP 端口不能被同时打开多次。当一个Tcp连接处于TIME_WAIT状态时,我们将无法立即使用该连接占用着端口来建立一个新连接。如果确实需要强制进程立即使用处于TIME_WAIT状态的连接所占用的端口,setsockopt()方法设置socket选项SO_REUSEADDR来完成。
复位报文段
在某些特殊条件下,Tcp连接的一端会向另一端发送携带RST标志的报文段,即复位报文段,已通知对方关闭连接或者重新建立连接。
发送复位报文段的可能举例:
- 当客户端程序访问一个不存在的端口时,目标主机给他发送一个复位报文段,
- 异常终止连接。正常状况下,数据交换完成之后,一方给另一方发送FIN结束报文段。TCP提供了异常终止一个连接的方法,即给对方发送一个复位报文段。一旦发送了复位报文段,发送端所有排队等待发送的数据都将被丢弃。。应用程序可以使用socket选项SO_LINNGER来设置发送复位报文段,以异常终止连接。
- 处理半打开连接。例如Tcp一端关闭了连接,由于网络故障对方没有收到结束报文,对方误以为连接正常。处于这种状态的连接称为半打开连接。此时如果对端向连接写入数据,则会收到本段回复的复位报文段。
交互数据流与成块数据流
Tcp按照携带应用程序数据长度可以分为两种:交互数据和成块数据。交互数据仅包含很少的字节。受用交互数据的应用程序对实时性要求极高,比如telnet,ssh等。成块数据从的长度则是通过为Tcp报文段允许的最大数据从长度;使成块数据从的应用程序对传输效率要求高,比如FTP。
流式服务特点
Tcp字节流的特点,发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系,应用程序对数据从的发送和接收时没有边界限制的。
应答确认与超时重传
TCP 发送的报文段是交给 IP 层传送的。但 IP 层只能提供尽最大努力的服务,也就是说,TCP 下面的网络所提供的是不可靠的传输。因此,TCP 必须采用适当的措施才能使两个运输层之间的通信变得可靠。TCP 的可靠传输是通过使用应答确认和超时重传来完成。
滑动窗口
TCp是通过滑动窗口来实现流量控制的。流量控制就是控制发送方发送数据的速度,让接收方来得及接收。
是接收端告
诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。所以发送端就会有一个发送窗口,这个发送窗口的大小是由接收端填充的接收通告窗口的大小决定的,并且窗口的位置会随着发送端数据的发送和接收到接收端对数据的确认而不断的向右滑动,将之称为滑动窗口。
拥塞控制
在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞。所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,涉及到所有主机,所有路由器,以及与降低网络传输性能有关的所有因素。
几种拥塞控制的方法:
- 慢开始
- 拥塞避免
- 快速重传
- 快速恢复
Udp协议特点
Udp数据包服务特点:发送端应用程序每执行一次写操作,UDp魔魁啊就将其封装成一个UDP数据报发送。接收端必须及时针对每一个UDP数据报执行读写操作,否则就会丢包。并且,如果没有指定足够的应用程序缓冲区来读取UDP数据,则UDP数据将被截断。
Udp连接:
服务器:
客户端: