UDP特点:
1.UDP是无连接的,直接进行连接传输数据,不需要建立三次握手。
2.UDP是面向报文的
3.UDP没有拥塞控制
TCP特点:
1.面向连接,传输通信之前需要建立连接。
2.每一条tcp连接只能是点对点
3.tcp提供全双工通信,双方可以同时发送和接收数据。
4.tcp提供可靠交付,可靠有序,不丢不重
5.tcp面向字节流
TCP如何实现可靠传输:
1.流量控制:控制发送方的发送速率,让接收方能来得及接收。
实现方法:利用滑动窗口机制,接收方根据接收数据的大小,动态调整发送方的发送窗口的大小,通过设置ack中窗口大小来通知发送方。
2.拥塞控制:防止过多的数据注入到网络中造成拥塞情况。
TCP三次握手与四次挥手:
三次握手:
第一次握手:客户端发送syn以及seq数据包,表示想建立连接。客户端进入syn_sent状态。
第二次握手:服务端收到syn包后,发送ack确认包(syn+1),表示收到连接请求信息,服务端进入syn_rcvd状态。
第三次握手:客户端收到ack确认信息后,发送数据,两边进入establelish状态。
四次挥手:
客户端发送FIN包,表示断开连接,客户端进入time_wait_1状态。
服务端收到FIN包后,发送ack确认包,表示收到断开连接请求,服务端进入close_wait状态。客户端接收到进入time_wait_2状态
过一会后
服务端发送FIN包,表示断开连接,服务端进入last_ack状态。
客户端发送ack确认包,表示收到断开信息,进入time_wait状态。服务端收到ack确认包后,就会关闭连接。客户端需要等待2MSL之后,没有收到任何信息,则说明服务端已经关闭连接。就会关闭连接。
为什要三次握手?
如果客户端发送的连接请求在网络中延迟了,知道连接建立后才到服务端,服务端会认为是一个新的请求,会发送应答信息到客户端,但是客户端此时并没有发送信息,因此不会应答,服务端收不到则会一直发送,造成浪费。三次握手,则服务端没有收到确认信息的话,就认为客户端没有发送请求。
为什么四次握手?
服务端发送确认断开请求后,会继续发送没有发送完的数据到客户端,发送完成后会发送FIN断开请求信息,因此需要四次握手。
为什么等待2SML时间?
1.保证全双工通信的连接能够可靠关闭。当server端没有收到客户端发送的ack确认断开连接信息,会在超时之后重新发送FIN包,那么如果不等待2MSL时间,关闭连接的话,会收不到server端发送的数据。造成server端一直重传,不能关闭的状态。因此要等待2MSL时间,这个时间内,如果server端发送数据的话,client端会响应。