网络协议TCP、IPTCP
网络通信协议规定了数据传输格式、传输速率和传输步骤,通信双方遵守协议才能完成数据的交换。
因特网核心协议:TCP和IP
一. TCP,传输控制协议
- 20字节固定头部长度
- 连接建立方一定是客户端
- 连接主动释放方可以是客户端,也可以是服务器端
- TCP的标志位:SYN,ACK,FIN
SYN:同步标志位,为1表示正在建立连接;
ACK:确认标志位;
FIN:完成标志位
- 三次握手
客户端向服务器发送连接请求,SYN=1,seq=J;
服务器回复连接确认给客户端SYN=1,ACK=1,ack=J+1,seq=K;
客户端再次向服务器端发送确认,建立连接ACK=1,ack=K+1。
- 为什么三次握手?
如果客户端发送的连接请求在网络较长时延后到达服务器,此时的连接请求已经无效了,如果服务器接收后建立了连接,那客户端根本就不知道这次连接的存在,会造成服务器资源的浪费。
- 四次挥手
客户端数据发送完毕,发送FIN报文,设置序列号u;
服务器端收到后向客户端回复确认报文,ack=u+1;
服务器端向客户端发送FIN=N报文段,请求关闭连接,seq=w, ack=u+1;
客户端收到服务器端的关闭连接请求,回复服务器确认字段ack=w+1,等待 2MSL时间后再断开服务器端连接。
- 为什么四次挥手?
因为TCP协议是全双工的,每一个方向连接都需要单独释放。 - 为什么要等待2MSL?
MSL是报文最长生存时间。一是为了连接能可靠的关闭。主动关闭发出ACK包后,等待对方接收到,如果对方超时未收到确认包会重发FIN报文,那主动关闭端会再发一个应答包。二保证这次连接的报文在网络消失。如果主动断开端接收到对方FIN报文后直接关闭连接,然后又向服务器提出了连接请求,如果之前滞留在网络中的数据到达了客户端,客户端会认为是新连接的数据,新连接会收到脏数据,导致混乱。 - 为什么握手只有三次,挥手有四次?
握手时SYN与ACK可以同时发送,而挥手时,当一方断开后,另一方可能还有数据要发送,因此,不能将对上一个连接的断开的确认与己方的FIN同时发送。 - 适用场景:安全的数据传输需求,如下载文件,浏览网页。
- 特点:提供安全无差错的数据传输;
- 缺点:但是收发双方需要建立连接
- UDP
- 无发送缓冲区,以数据报为单位进行发送,udp原样发送数据,不进行拆分和合并
- 具有接收缓冲区,但是顺序与发送的udp报文顺序不一定相同,缓冲区满后会丢弃新到来的报文。
- 能传输数据长度为2^16,超长的数据要在应用层手动分包,多次发送
基于UDP的应用层协议:NFS、TFTP、DHCP、BOOTP、DNS - 应用场景:语音、视频或者流媒体
- 优点:传输速度快,头部长度仅有8B,有校验
- 缺点:不可靠,不建立连接,没有确认和重传机制