(1)TCP协议
面向连接、可靠、基于字节的传输,IP报头中协议号为6。一般用于对可靠性要求较高的应用。
(2)UDP协议
无连接、不可靠、基于报文的传输,IP报头中协议号为17。主机不需维持连接状态具有较高的传输效率,可靠性由应用层来提供。
TCP报头结构
① 源端口和目的端口:传输层与应用层的服务接口。
② 序号:TCP连接传送的数据流中的每一个字节都有一个序号。序号字段是本报文段发送的数据的第一个字节的序号。
③ 确认号:期望收到对方下一个报文段的数据的第一个字节的序号。
④)数据偏移:指出报文段的数据起始处距离TCP报文段的起始处有多远。实际上就是TCP报文段首部的长度。范围20-60字节,默认为20字节。
⑤ 控制位:
URG(紧急指针):URG=1时,系统报文段中有紧急数据应尽快传送,
ACK(确认序号):ACK=1时确认号字段才有效,ACK=0时确认号字段无效。
PSH(推送):接收方收到PSH=1的报文段时不等待缓冲填满就提交到应用进程
RST(重置连接):RST=1时,表明TCP连接中出现严重差错,必须释放连接。
SYN(同步序列编号):SYN=1时,表明请求建立连接。
FIN(结束标志):当FIN=1时,发送端的数据已发送完毕并要求释放传输连接
⑥ 窗口:滑动窗口大小,用来控制对方发送的数据量,单位是字节,指明对方发送窗口的上限。窗口大小是一个16bit字段,因而窗口大小最大为65535。
⑦ 校验和:奇偶校验,校验的范围包括首部和数据两个部分,计算校验和时需要在报文段前加上伪首部(包括源目IP地址,IP协议号)。必选字段。
⑧紧急指针:指出本报文段中紧急数据最后一个字节的序号。只有当紧急比特URG=1时才有效。
UDP报头结构
①源端口和目的端口:是传输层与应用层的服务接口。
②长度:UDP的数据报长度(包含报头和数据),最小值为8字节(只有报头)
③ 校验和:覆盖UDP首部和UDP数据,计算校验和时需要在报文段前加上伪首部(包括源目IP地址,IP协议号,UDP长度)。必选字段。
TCP三次握手
TCP四次挥手
TCP连接状态
① CLOSED:关闭状态,没有连接
② LISTEN:侦听并等待对端的TCP连接请求
③ SYN-SENT:发送SYN连接请求后,等待对端回复SYN请求
④ SYN-RECEIVED:回复SYN请求后,等待对端响应ACK消息
⑤ ESTABLISHED:代表连接建立,双方在这个状态下进行TCP数据交互
⑥ CLOSE-WAIT:等待本地用户(进程)发送FIN关闭请求给对端
⑦ CLOSING:双方同时发送FIN时,进入CLOSING,等待对端发送响应ACK消息
⑧ TIME-WAIT:该状态是为了确保对端收到了FIN请求的ACK响应。
TCP协议四大机制
TCP字节编号确认机制
TCP是面向字节传输。需要将多个字节组成报文段传输,每个字节都有序号。在连接建立时,双方商定初始序号。TCP头部中的序号数值表示发送的报文段中的第1个字节的序号。TCP的确认号表示接收端期望下次收到的报文段中的第1个字节的序号,同时表示对之前接收到的报文段进行了确认。
TCP流量控制机制
TCP的流量控制使用滑动窗口机制实现,窗口最大为65535字节
① 发送窗口(swnd):发送方维护发送窗口,窗口大小取决于网络拥塞情况和接收方的能力。
② 接收窗口(rwnd):接收方维护接收窗口,窗口大小取决于接收方的缓冲区大小和处理能力。
③ 拥塞窗口(cwnd):拥塞窗口取决于网络的拥塞程度,动态变化。网络没有出现拥塞,则cwnd放大;出现拥塞,则cwnd减小。
当接收方成功接收到数据后,会将窗口向前滑动,并通知发送方继续发送更多的数据发送方收到对发送数据的确认后,也会将发送窗口向前滑动。如果发送方收到rwnd=0的TCP数据,则停止发送数据,直到接收到rwnd≠0。
TCP拥塞控制机制
在TCP拥塞控制机制包括慢启动和拥塞避免。TCP刚建立连接时,cwnd设为1,发送1个报文,如果收到接收方ACK报文,就继续以2方式放大拥塞窗口,直到cwnd>慢启动初始阈值ssthresh,进入拥塞避免阶段,TCP采用线性方式放大cwnd,即发送方每收到一个ACK确认报文,cwnd增加1,直到发送超时,ssthresh会减半到超时时刻cwnd大小的一半,然后cwnd会从1开始重复慢启动和拥塞避免步骤。
(1)快速重传:当接收方收到一个失序的报文段后会立即发出重复确认,以便让发送方及早知道有报文段没有发送到达。发送方只要连续收到三个重复确认,就立即重传对方没有收到的报文段。
(2)快速恢复:当发送方连续收到三个重复确认,立即把ssthresh减半,然后直接执行拥塞避免算法。
TCP重传机制
(1)停等ARQ:每发送一个报文段需要等待对方ACK确认。
(2)连续ARQ:连续发送多个报文段,等待这些报文段的ACK。
(3)回退n帧ARQ:当发送方接收到接收方的状态报告指示第n个报文段出错后,回退到这个n编号的报文段,从n编号以及之后的报文段全部重新发送。
(4)选择重传ARQ:当发送方接收到接收方的状态报告指示第n个报文段出错后,回退到这个n编号的报文并重传这一个报文段,然后从刚刚截至发送的编号的报文段继续发送后续报文段。
(5)快重传:发送端只要连续收到三个重复的ACK即可断定有报文段丢失了,就立即重传丢失的报文段。