喘息的边界:当“哈昂哈昂够了太多了”成为一种生活态度

核心内容摘要

120秒心动瞬间:非会员也能畅享的精彩世界!
插插视频

欲念深处:探索内心最隐秘的渴望

UDP报文结构UDP报头定长8字节包含源端口目的端口UDP报文总长和UDP校验和UDP特点UDP特点UDP的特点是无连接和不可靠它和TCP不一样TCP的传输需要建立连接而UDP不需要而且TCP传输有可靠性UDP不可靠。

UDP的不可靠体现在没有重传机制也没有确认机制如果没有成功发送UDP也不会返回应用层信息。

UDP的传输面向数据报所以应用层每次的recvfrom和sendto的次数都是一一对应的。

而且每次发送接收的都是完整的报文。

应用层交给UDP无论多长的报文UDP都不会拆分和合并发送而是原封不动发送。

UDP缓冲区UDP没有真正意义的发送缓存区因为UDP不需要保障可靠性不需要重传也就不需要缓冲区对数据进行存储。

UDP报文大小UDP首部字段有一个16位报文长度也就确定了UDP最大长度就是64K如果应用层发送数据大就需要在应用层手动分包分别发送在对端应用层进行合并。

基于UDP的应用层协议• NFS网络文件系统Network File System• TFTP简单文件传输协议Trivial File Transfer Protocol• DHCP动态主机配置协议Dynamic Host Configuration Protocol• BOOTP启动协议Bootstrap Protocol用于无盘设备启动• DNS域名系统Domain Name SystemTCP报文结构TCP全程传输控制协议保证对数据的传输控制TCP面向字节流有接收缓存区同时有很多保障可靠性的机制TCP报头字段包含源端口号目的端口号32位序列号32位确认序列号4位首部长度6位保留字段16位窗口大小16位紧急指针和40字节选项。

TCP大小由于4位首部长度范围

只能确定

大小所以首部长度需要乘上4KB大小所以TCP报头大小范围是

又因为报头大小最小20KB所以报头大小范围是

KB。

6位标志位URG标识紧急指针的有效性。

ACK确认号是否有效PSH提示应用层尽快从接收缓存区读取数据SYN请求建立连接把携带SYN标识的称为同步报文段FIN通知对方本段关闭连接携带FIN的叫结束报文段16位校验和发送端进行数据填充并附加CRC校验码。

接收端若校验失败则判定数据存在异常。

此处的校验范围不仅涵盖TCP首部同时包含TCP数据部分。

16位紧急指针紧急指针是当URG有效时标识紧急数据位置的偏移量紧急数据大小是1字节紧急数据会被上层提前处理TCP确认应答机制TCP每次发送到对端的数据都会收到一个ACK用来表示对方接受到了数据同时携带ACK的也是一个报文但这个报文没有携带数据所以ACK应答不需要确认也就是ACK应答不需要新的ACK应答确认应答收到了。

TCP为了效率考虑没有把每个发送的报文都每次确认而是一次性发送多个报文后对端发送一个ACK。

但是对方收到的数据未必是有序的但数据报文需要排列。

所以每个报头的序列号和确认序列号就有了作用。

例如客户端发送1000条报文那最后一条报文序列号是1000服务器收到后发送确认ACK这个ACK确认序列号就是1001代表

的报文都收到了你下一次报文从我的确认序列号1001发送。

我们会发现

未必真的全部收到了而是收到了1000后就说

的报文全部收到没错TCP允许少量的报文丢失当他收到ACK就认为报文发送成功了。

TCP超时重传机制TCP的丢包分为两种一种是真的丢包了还有一种是ACK丢了无论哪种都需要进行重传这样接收端可能会收到很多重复的报文这时报文序列号又有作用了它可以让接收端知道自己已经接受了哪些报文了如果遇到重复的就直接丢弃。

超时重传时间的规定因为网络环境的堵塞程度不同重传时间也应该有对应的变化。

• 理想情况下我们需要确定一个最小时间阈值确保确认应答必定能在该时限内返回。

• 然而这个时间阈值会因网络环境差异而有所不同。

• 若超时设置过长会降低整体重传效率 • 若设置过短则可能导致数据包重复发送。

为确保TCP在各种网络环境下都能高效通信系统会动态计算最佳超时时间。

• 在Linux系统BSD Unix和Windows同样适用中超时控制以500ms为基本单位每次超时重传的时间都是500ms的整数倍。

• 首次重传未获应答时等待时间将延长至2×500ms后再次重传。

• 若仍未收到应答则等待时间按4×500ms递增以此类推呈指数级增长。

• 当重传次数达到上限时TCP会判定网络或对端主机异常强制终止连接。

TCP连接机制一般情况TCP建立连接三次握手关闭连接四次挥手像ACKSYN类似同时拥有确认应答和报文数据的叫做携带应答。

服务端状态转换:• [CLOSED → LISTEN] 服务器调用listen后进入LISTEN状态开始监听客户端连接请求• [LISTEN → SYN_RCVD] 收到客户端的SYN报文后将该连接加入内核等待队列并向客户端发送SYNACK确认报文• [SYN_RCVD → ESTABLISHED] 收到客户端的ACK确认后连接建立完成进入可读写状态• [ESTABLISHED → CLOSE_WAIT] 收到客户端的FIN报文后发送ACK确认并进入CLOSE_WAIT状态• [CLOSE_WAIT → LAST_ACK] 处理完待发送数据后发送FIN报文并进入LAST_ACK状态等待最终ACK确认• [LAST_ACK → CLOSED] 收到对FIN的ACK确认后完全关闭连接客户端状态转换:• [CLOSED → SYN_SENT] 调用connect后发送SYN报文进入连接发起状态• [SYN_SENT → ESTABLISHED] 收到服务器的SYNACK并回复ACK后连接建立完成• [ESTABLISHED → FIN_WAIT_1] 调用close后发送FIN报文进入主动关闭第一阶段• [FIN_WAIT_1 → FIN_WAIT_2] 收到服务器对FIN的ACK确认后等待服务器FIN报文• [FIN_WAIT_2 → TIME_WAIT] 收到服务器的FIN报文后发送ACK进入等待状态• [TIME_WAIT → CLOSED] 经过2MSL等待时间后完全关闭连接

黄金网站app软件下载安装免费版苹果手机-黄金网站app软件下载安装免费版苹果手机应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123