96SEO 2026-02-20 10:41 9
1.发送方协议栈根据DNS提供的服务器ip端口确定和服务器通信使用的socket套接字

填充tcp头部信息发送接受方ip端口信息将syn设置为1,修改当前socket状态为正在连接
2.发送方委托ip模块发送给服务器的ip模块。
服务器的ip模块再给到服务器的tcp模块根据头部信息找到发送发要连接的socket并填入对应的客户端ip端口,接着创建tcp头部信息发送和接收方ip端口此时的发送方是服务器并填充syn报文值为1代表链接成功和一个ack等于1的报文代表网络包和序号都收到委托服务器ip模块发送建立连接的确认过程文末讲解
3.客户端收到后完善socket中的服务端ip地址端口信息判断服务端返回的syn是否为1来确定是否链接成功
向服务端模块在发送一个ack报文1确认网络包收到tcp头部信息还是必须要填写的
建立连接后应用就可以和服务端进行通信了应用发的数据会缓存到协议栈中但是何时发送呢有两种情况下面介绍
应用可以指定发送数据的大小如果协议栈收到发送指令就进行发送的话不可控而且效率低因此协议栈内部会指定一个长度当达到长度后在进行发送此前发送的数据保存到缓冲区中。
这个长度就是mtu包含了tcpip头部控制信息除去网络包的头部信息后叫做真实数据的最大传输单元叫做mss。
图中列出的是TCP头部同理UDP也是一样将TCP头部换为UDP头部也一样
MTU以太网中传输的一个网络包的最大数据长度一般为1500字节。
MSS除去TCP/UDP模块的头部控制信息之后一个网络包所能容纳的数据的最大长度。
报头起始分界符FCS是协议栈下层的网卡模块添加的网卡模块介绍。
我们来回顾下协议栈的TCP和UDP模块填充各自模块的头部控制信息后交给IP模块去发送数据最后一层是IP模块因此IP模块发送的数据长度也就是协议栈发出的数据长度。
TCP/UDP模块发送的数据肯定超过了以太网和通信线路的最大传输长度也就是MTU这个时候IP模块就会对来自TCP/UDP模块的数据进行分片在这篇文章中的分片重组进行了介绍。
接下来举个例子看下UDP模块可以发送的最大数据长度和协议栈最终发出去的数据长度也即IP模块发出去的数据长度
UDP模块可发送的最大传输数据长度是IP包的最大长度减去IP头部和UDP头部。
IP包的最大长度为16比特2的16次方-1也就是65535字节不考虑其他可选字段的话
IP头部最大长度为20字节UDP头部是8字节也就是UDP可传输最大长度为65507字节超过了协议栈所规定的最大传输长度MTU
1500字节因此需要使用IP模块的分片功能进行切割。
关于切割分片和重组分片请查看上面提到的文章有详细介绍。
可以看到TCP模块和UDP模块所规定的最大数据长度和协议栈最终发出的数据长度之间经过了IP模块的分片功能处理。
也很好理解越往底层传输的数据量越小总不能让上层传输的是0101或者数据长度特别小的数据吧使用者也不方便越往下每一层都进行切割最后切割到可以在网线中传输的0101信号。
应用程序发送数据的频率不高的时候如果每次都等到长度接近MSS时再发送可能会因为等待时间太长而造成发送延迟这种情况下即便缓冲区中的数据长度没有达到MSS也应该果断发送出去。
为此协议栈的内部有一个计时器当经过一定时间之后就会把网络包发送出去。
因此上层应用程序发送的数据会放到协议栈的缓冲区中当满足上面两个因素条件之一时应用程序也可以指定是否立即发送数据还是按照协议栈的规则判断时机就可以发送数据了首先切割mss为单位的数据块在每个数据库开头都加上头部控制信息
拆分示意图协议栈的TCP模块负责添加tcp头部信息接着委托协议栈的ip模块检查是否需要切片然后发送消息ip模块会再分片后的包中添加ip头部和mac头部信息
上面说过网络包会拆分那么服务器是怎么知道该怎么拼接这些网络包还原成最初的数据呢答案是通过序号
当拆分数据拼接成网络包的时候会将这块数据相对于起始数据的偏移字节算出来携带到tcp头部除此之外还会携带数据包的总长度
因为用整个网络包的长度固定的mss减去头部的长度就可以得到数据的长度所以接收方可以用这种方法来进行计算。
有了上面两个数值我们就可以知道发送的数据是从第几个字节开始长度是多少了。
接收方会将到目前为止接收到的数据长度加起来计算出一共已经收到了多少个字节然后将这个数值写入TCP头部的ACK号中发送给发送方。
序号的作用上面的偏移量是携带到tcp头部中很容易就会拿到自行还原数据破解的因此在传递过程中每个包的数据长度都要进行基于某个值偏移也就是将原来的偏移量要加上序号。
如第一个包默认的偏移量本来是0序号值是666那么现在添加序号之后第一个网络包的偏移量就是666
实现这种方式需要在开始收发数据之前将初始值告知通信对象。
同样服务端也需要告知序号值这样客户端就知道该如何拆分。
这个偏移量就是序号值
在将SYN设为1的同时还需要同时设置序号字段的值而这里的值就代表序号的初始值。
这个syn就是通过告知序号值用于后面通信步调一致知道每个网络包头部的偏移量是基于序号值当前网络包相对于数据头部的偏移量同样第二个阶段服务器返回syn1也是告知客户端之后发送包的序号值同时发送ack数值告知客户端数据是否发送完整需要利用客户端传过来的序号值偏移量减去序号就是真正的偏移量了客户端收到后同样也需要向服务端发送ack来确认服务端发过来的数据是否完整服务端发送syn1的时候将服务端的序号也发送了过来也是用的这个序号来拼接服务端发送过来的数据
自动重发机制协议栈会在收到ack号确认之前中会存放发送的数据如果某一个ack号没有发送过来就会重发这个数据。
这样一来无论网络中发生任何错误协议栈都可以发现并采取补救措施重传网络包
因此网卡、集线器、路由器都没有错误补偿机制一旦检测到错误就直接丢弃相应的包。
应用程序也是一样因为采用TCP传输即便发生一些错误对方最终也能够收到正确的数据所以应用程序只管自顾自地发送这些数据就好了。
不过如果发生网络中断、服务器宕机等问题那么无论TCP怎样重传都不管用。
这种情况下无论如何尝试都是徒劳因此TCP会在尝试几次重传无效之后强制结束通信并向应用程序报错
ack等待时间也叫超时时间如果协议栈发送数据等待ack的返回这段时间超过了超时时间就会重新发送这个网络包。
但是网络信号是可以改变的所以超时时间也应该和网络信号的好坏动态调整并且网络信号差的时候不仅仅只是重发一个包这么简单后面的所有网络包都会收到影响这个和安卓的anr排查差不多
这个等待时间是根据ACK号返回所需的时间来判断的。
具体来说TCP会在发送数据的过程中持续测量ACK号的返回时间如果ACK号返回变慢则相应延长等待时间相对地如果ACK号马上就能返回则相应缩短等待时间。
客户端服务端确认好端口ip后就开始通信了客户端每次发送数据包携带数据长度信息
就是接收方必须等到发送方返回ack才能继续传输这会增加延时降低通信效率
所谓滑动窗口就是在发送一个包之后不等待ACK号返回而是直接发送后续的一系列包。
这样一来等待ACK号的这段时间就被有效利用起来了。
发送的数据会存储在接收方的缓冲区中之后取出来处理拼接ack号如果什么都不管一直发送缓冲区的数据会溢出某些数据就会被放弃这个肯定不是想要的结果。
因此需要出一种机制能够知道对方缓冲区可以接受多少数据根据这个值来判断是否继续发送当服务器的缓冲区数据处理后也需要告知客户端通过tcp头部中的窗口字段
如果接收方可以告知发送方当前可以容纳多少数据呢发送方自己判断已发送的数据是不是到达极限从而暂停
当接收方处理数据时再通知客户端当前缓冲区容纳数据客户端在发送这样是不是完美了
并不是如何确定ack和发送缓冲区数量的包呢是分开发送吗还是合并
发送方知道后自己就可以判断是否达到缓冲区处理极限决定是否发送之后数据那分开呢又会降低效率
假如我等待发送ack数据时正好服务器处理了数据缓冲区容量更新需要通知到客户端这时候合并
等待一段时间如果ack也要发送也用合并发送并且如果需要连续发送缓冲区的数量时说明处理速度很快只要同步最后一次的缓冲区可用数量即可比如200---400--600等待一段时间发生减少包数量需要连续发送ack时也是一样
接收方这边等待一段时间之后直接把刚收到的数据总和返回给客户端就行
具体延时根据实际情况判断很多时候服务器处理速度很快几乎发送完数据就能立马处理完不需要缓冲区数量这个信息
协议栈会检查收到的数据块和TCP头部的内容判断是否有数据丢失如果没有问题则返回ACK号。
然后协议栈将数据块暂存到接收缓冲区中并将数据块按顺序连接起来还原出原始的数据最后将数据交给应用程序。
具体来说协议栈会将接收到的数据复制到应用程序指定的内存地址中然后将控制流程交回应用程序。
将数据交给应用程序之后协议栈还需要找到合适的时机向发送方发送窗口更新。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback