1.TCP和UDP
区别
TCP:1、有链接,可靠,2、有三次握手协议,端开链接有4次握手,有重传机制。3、TCP利用seq序列号对包排序。
4、面向字节流,虽然应用程序和TCP的交互是一次一个大小不等的数据块,但TCP把应用程序看成是一连串的无结构字节流。TCP有一个缓冲,当应用程序传送的数据块太长,会划分短,如果发送的太短,会积累足够的字节流构成报文发送出去。
5、TCP有流量控制,头部是20bytes。
UDP:1、是无连接的,不可靠,2、也没有重传机制。3、对于有序性上,udp没有。4、面向报文的传输方式,应用层交给UDP多长的报文,UDP就照样发送,一次发送一个报文。应用程序必须选择合适大小的报文。如果太长,IP层需要分片,UDP对于应用层交给的报文不合并也不拆分,保留边界。照样发送。5、UDP没有流量控制,头部8bytes。
应用场景
TCP:效率要求不高,但准确性高得场合。传输中可以对数据进行确认,重发,排序等操作。(比如邮件、文件传输)
UDP:效率要求高,但是准确性相对一般得场景。比如QQ聊天、在线视频、直播。
2.TCP三次握手
几个关键点:
(第一次握手)
PS1:SYN=1,ACK=0表示该报文段为连接请求报文。
PS2:x为本次TCP通信的字节流的初始序号。 TCP规定:SYN=1的报文段不能有数据部分,但要消耗掉一个序号。
(第二次握手)
PS1:SYN=1,ACK=1表示该报文段为连接同意的应答报文。 PS2:seq=y表示服务端作为发送者时,发送字节流的初始序号。 PS3:ack=x+1表示服务端希望下一个数据报发送序号从x+1开始的字节。
(第三次握手)
当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。 该报文段的头部为:ACK=1,seq=x+1,ack=y+1。 客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成!