TCP与UDP协议

(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即可断定有报文段丢失了,就立即重传丢失的报文段。

相关推荐
熊的猫1 小时前
如何封装一个可取消的 HTTP 请求?
前端·javascript·vue.js·网络协议·http·webpack·node.js
AI原吾1 小时前
构建灵活、高效的HTTP/1.1应用:探索h11库
网络·python·网络协议·http·ai·h11
码出钞能力1 小时前
UDP组播测试
网络·网络协议·udp
不甘平凡的蜜蜂1 小时前
第三十三篇:TCP协议如何避免/减少网络拥塞,TCP系列八
运维·网络·网络协议·tcp/ip·计算机网络·智能路由器
小龙2 小时前
【Python爬虫实战】网络爬虫完整指南:网络协议OSI模型
爬虫·python·网络协议
阿华的代码王国3 小时前
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
网络协议·http·https·非对称加密·对称加密·htttps加密传输·证书加密
Likelong~4 小时前
动态代理:面向接口编程,屏蔽RPC处理过程
网络协议·rpc
GGBondlctrl5 小时前
【JavaEE初阶】网络原理—关于TCP协议值滑动窗口与流量控制,进来看看吧!!!
网络·网络协议·tcp/ip·滑动窗口·流量控制·拥塞控制·tcp协议特性
CXDNW6 小时前
【网络面试篇】TCP与UDP类
网络·笔记·tcp/ip·面试·udp
Hi~95278 小时前
SELS-SSL/TLS
linux·运维·网络协议·ssl