UDP: 无连接通信 所以数据不安全 用于实时应用比如视屏通讯
支持一对一 一对多 多对多 多对一的通信
面向报文 开销小 首部只需要八个字节 一般用于视屏等
TCP: 面向连接通信 数据通信安全的
支持一对一通信 面向字节流
首部最小20字节最大60字节
TCP的三次握手四次挥手:
三次握手确定通信双方进行安全通信
序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
ACK:确认序号有效。
FIN:释放一个连接。
PSH:接收方应该尽快将这个报文交给应用层。
RST:重置连接。
SYN:发起一个新连接。
URG:紧急指针(urgent pointer)有效。
三次握手:创建连接
第一次:首先发起方生成一个起始的序列号 ISN例如为100 那客户端发送链接的话会发送标志位SYN=1(表示发起一个链接请求) sqe=100
第二次:服务端接受SYN=1 知道这是个请求链接 保存客户端的请求序列号100 并且服务端生成序列号 比如300 然后发送给客户端SYN=1 ACK=1(确认链接有效) seq=300 确认号ack=101
第三次:客户端接受到服务度的信息ACK=1知道服务端已经接收到上次发送的序号为100的那段报文 保存服务端的300序列号 并且发送请求SYN=1 ACK=1 seq=101 确认号ack=301 当服务端接受到后就知道客户端
收到了报文 那么服务端和客户端就确认了连接
四次挥手:关闭连接
第一次:假设客户端发送1000字节数据 服务端发送了2000字段的数据 当开始释放连接的时候 FIN=1 seq=1101
第二次:服务端接受到客户端的释放连接的报文那么会把ACK=1 ack=1102 seq=2300 表示确认收到客户端的释放连接的请求 但不是立即释放连接 而是等服务端还在发送的请求发送完后释放
第三次:当最后的50字节发送完成后 服务端会再向客户端发送释放连接的报文 ACk=1 ack=1102 sqe=2350 同时释放服务端的连接
第四次:客户端收到服务端发的FIN报文后,向服务端发出确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=2351、序列号seq=1102。注意客户端发出确认报文后不是立马释放TCP连接,
而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接,所以服务端结束TCP连接的时间要比客户端早一些