网站开发个人简介范文如何以目录形式访问网站
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:36
当前位置: 首页 > news >正文
网站开发个人简介范文,如何以目录形式访问网站,泰州百度公司代理商,个人网站前置审批项UDP协议 UDP协议端的格式 16位UDP长度,表示整个数据报(UDP首部UDP数据)的最大长度;如果校验和出错,就会直接丢弃; UDP的特点 UDP传输过程类似寄信 无连接 知道对端的IP和端口号就直接进行传输#xff0c;不需要建立连接#xff1b; 不可靠 没有任何安全机制#xff0c…UDP协议 UDP协议端的格式 16位UDP长度,表示整个数据报(UDP首部UDP数据)的最大长度;如果校验和出错,就会直接丢弃; UDP的特点 UDP传输过程类似寄信 无连接 知道对端的IP和端口号就直接进行传输不需要建立连接 不可靠 没有任何安全机制发送端发送数据报以后如果因为网络故障该段无法发到对方UDP协议层也不会给应用层返回任何错误信息 面向数据报 应用层交给UDP多长的报文UDP原样发送既不会拆分也不会合并 用UDP传输100个字节的数据 如果发送端一次发送100个字节那么接收端也必须一次接收100个字节而不能循环接收10次每次接收10个字节。 缓冲区 UDP只有接收缓冲区,没有发送缓冲区: UDP没有真正意义上的 发送缓冲区。发送的数据会直接交给内核由内核将数据传给网络层协议进行后续的传输动作 UDP具有接收缓冲区但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致如果缓冲区满了再到达的UDP数据就会被丢弃 UDP的socket既能读也能写,这个概念叫全双工 大小受限 UDP协议首部中有一个16位的最大长度,也就是说一个UDP能传输最大长度是64K(包含UDP首部) 基于UDP的应用层协议 NFS:网络文件系统TFTP:简单文件传输协议DHCP:动态主机协议BOOTP:启动协议(用于无盘设备启动)DNS:域名解析协议 当然也包括你自己写UDP程序时自定义的应用层协议 扩展问提 经典面试题 1. UDP本身是无连接不可靠面向数据报的协议如果要基于传输层UDP协议来实现一个可靠传输应该如何设计 2. UDP大小是受限的如果要基于传输层UDP协议传输超过64K的数据应该如何设计 以上两个问题答案类似都可以参考TCP的可靠性机制在应用层实现类似的逻辑 例如 引入序列号保证数据顺序引入确认应答确保对端收到了数据引入超时重传如果隔一段时间没有应答就重发数据…… TCP协议 TCP即Transmission Control Protocol传输控制协议。人如其名要对数据的传输进行一个详细的控制。 TCP协议段格式 源/目的端口号表示数据是从哪个进程来到哪个进程去32位序号/32位确认号后面详细讲4位TCP报头长度表示该TCP头部有多少个32位bit有多少个4字节所以TCP头部最大长度是15 * 4 606位标志位:1.URG:紧急指针是否有效 2.ACK:确认号是否有效 3.PSH:提示接收端应用程序立即从TCP缓冲区把数据读走 4.PST:对方要求重新建立连接;我们把携带RST标识的称为复位报文段 5.SYN:请求建立连接:我们把携带SYN标识的称为同步报文段 6.FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段16位窗口大小后面再说16位校验和发送端填充CRC校验。接收端校验不通过则认为数据有问题。此处的检验和不光包含TCP首部也包含TCP数据部分16位紧急指针标识哪部分数据是紧急数据40字节头部选项暂时忽略 TCP原理 TCP对数据传输提供的管控机制主要体现在两个方面安全和效率。 这些机制和多线程的设计原则类似保证数据传输安全的前提下尽可能的提高传输效率 确认应答机制安全机制 TCP将每个数据都进行了编号,即为序列号. 每一个ACK都带有对应的确认序号,意思是告诉发送者我已经收到了哪些数据下一次你从哪里开始发。 超时重传机制(安全机制) 主机A发送数据给B之后可能因为网络拥堵等原因数据无法到达主机B如果主机A在一个特定时间间隔内没有收到B发来的确认应答就会进行重发 但是主机A未收到B发来的确认应答也可能是因为ACK丢失了 因此主机B会收到很多重复数据。那么TCP协议需要能够识别出那些包是重复的包并且把重复的丢弃掉。 这时候我们可以利用前面提到的序列号就可以很容易做到去重的效果 那么如果超时的时间如何确定 最理想的情况下找到一个最小的时间保证 确认应答一定能在这个时间内返回。但是这个时间的长短随着网络环境的不同是有差异的。如果超时时间设的太长会影响整体的重传效率如果超时时间设的太短有可能会频繁发送重复的包 TCP为了保证无论在任何环境下都能比较高性能的通信因此会动态计算这个最大超时时间 Linux中BSD Unix和Windows也是如此超时以500ms为一个单位进行控制每次判定超时重发的超时时间都是500ms的整数倍。如果重发一次之后仍然得不到应答等待 2*500ms 后再进行重传。如果仍然得不到应答等待 4*500ms 进行重传。依次类推以指数形式递增。累计到一定的重传次数TCP认为网络或者对端主机出现异常强制关闭连接。 连接管理机制(安全机制) 服务端状态转化 [CLOSED - LISTEN] 服务器端调用listen后进入LISTEN状态等待客户端连接[LISTEN - SYN_RCVD] 一旦监听到连接请求同步报文段就将该连接放入内核等待队列中并向客户端发送SYN确认报文。[SYN_RCVD - ESTABLISHED] 服务端一旦收到客户端的确认报文就进入ESTABLISHED状态可以进行读写数据了。[ESTABLISHED - CLOSE_WAIT] 当客户端主动关闭连接调用close服务器会收到结束报文段服务器返回确认报文段并进入CLOSE_WAIT[CLOSE_WAIT - LAST_ACK] 进入CLOSE_WAIT后说明服务器准备关闭连接需要处理完之前的数据当服务器真正调用close关闭连接时会向客户端发送FIN此时服务器进入LAST_ACK状态等待最后一个ACK到来这个ACK是客户端确认收到了FIN[LAST_ACK - CLOSED] 服务器收到了对FIN的ACK彻底关闭连接。 客户端状态转化 [CLOSED - SYN_SENT] 客户端调用connect发送同步报文段[SYN_SENT - ESTABLISHED] connect调用成功则进入ESTABLISHED状态开始读写数据[ESTABLISHED - FIN_WAIT_1] 客户端主动调用close时向服务器发送结束报文段同时进入FIN_WAIT_1[FIN_WAIT_1 - FIN_WAIT_2] 客户端收到服务器对结束报文段的确认则进入FIN_WAIT_2开始等待服务器的结束报文段[FIN_WAIT_2 - TIME_WAIT] 客户端收到服务器发来的结束报文段进入TIME_WAIT并发出LAST_ACK[TIME_WAIT - CLOSED] 客户端要等待一个2MSLMax Segment Life报文最大生存时间的时间才会进入CLOSED状态。 同三次握手中接收端把中间两次交互合二为一不同,四次挥手中间的ACK和FIN触发时机是不同的 ACK是内核响应的,接收端收到FIN,就会立即返回ACK;第二个FIN是应用程序的代码触发,接收端调用close方法,才会触发 为甚要TIME_WAIT 为了防止最后一个ACK丢失 如果最后一个ACK丢了,B就会触发超时重传,重新把FIN给传一遍,如果A没有TIME_WAIT,就意味着A这个时候就已经释放连接了,此时重传的FIN就不可能被A处理,返回不离骚ACK TIME_WAIT等待多久 TIME_WAIT的时间是2MSL 滑动窗口(效率机制) 刚才我们讨论了确认应答策略对每一个发送的数据段都要给一个ACK确认应答。收到ACK后再发送下一个数据段。这样做有一个比较大的缺点就是性能较差。尤其是数据往返的时间较长的时候。 既然这样一发一收的方式性能较低那么我们一次发送多条数据就可以大大的提高性能其实是将多个段的等待时间重叠在一起了 窗口大小指的是无需等待确认应答而可以继续发送数据的最大值。上图的窗口大小就是4000个字节四个段。发送前四个段的时候不需要等待任何ACK直接发送收到第一个ACK后滑动窗口向后移动继续发送第五个段的数据依次类推操作系统内核为了维护这个滑动窗口需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答只有确认应答过的数据才能从缓冲区删掉窗口越大则网络的吞吐率就越高 那么如果出现了丢包如何进行重传这里分两种情况讨论. 情况一数据包已经抵达ACK被丢了 这种情况下部分ACK丢了并不要紧因为可以通过后续的ACK进行确认 当前序列号确认传输成功,涵盖了前一个序列号数据传输 情况二:数据包就直接丢了 快重传(效率机制) 当某一段报文段丢失之后发送端会一直收到 1001 这样的ACK就像是在提醒发送端 我想要的是 1001 一样如果发送端主机连续三次收到了同样一个 1001 这样的应答就会将对应的数据 1001 - 2000 重新发送这个时候接收端收到了 1001 之后再次返回的ACK就是7001了因为2001 - 7000接收端其实之前就已经收到了被放到了接收端操作系统内核的接收缓冲区中 这种机制被称为 高速重发控制也叫 快重传 流量控制(安全机制) 接收端处理数据的速度是有限的。如果发送端发的太快导致接收端的缓冲区被打满这个时候如果发送端继续发送就会造成丢包继而引起丢包重传等等一系列连锁反应。 因此TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制就叫做流量控制Flow Control 接收端将自己可以接收的缓冲区大小放入TCP首部中的窗口大小字段,通过ACK通知发送端;窗口越大字段越大,说明网络吞吐量越高;接收端一旦发现自己的缓冲区快满了就会将窗口大小设置成一个更小的值通知给发送端发送端接受到这个窗口之后就会减慢自己的发送速度如果接收端缓冲区满了就会将窗口置为0这时发送方不再发送数据但是需要定期发送一个窗口探测数据段使接收端把窗口大小告诉发送端。 接收端如何把窗口大小告诉发送端呢?回忆我们的TCP首部中,有一个窗口字段,就是存放窗口大小信息; 那么问题来了16位数字最大表示65535那么TCP窗口最大就是65535字节么 实际上TCP首部40字节选项中还包含了一个窗口扩大因子M实际窗口大小是 窗口字段的值左移 M位 拥塞控制(安全机制) 在开始阶段就发送大量数据,可能会引发问题 原因是不清楚当前的网络状态是否比较拥堵,。在不清楚当前网络状态下贸然发送大量的数据是很有可能引起雪上加霜的。 TCP引入 慢启动 机制先发少量的数据探探路摸清当前的网络拥堵状态再决定按照多大的速度传输数据 此处引入一个概念为拥塞窗口发送开始的时候,定义拥塞窗口大小为1每次收到一个ACK应答拥塞窗口加1每次发送数据包的时候将拥塞窗口和接收端主机反馈的窗口大小做比较取较小的值作为实际发送的窗口 像上面这样的拥塞窗口增长速度是指数级别的。慢启动 只是指初使时慢但是增长速度非常快。 为了不增长的那么快因此不能使拥塞窗口单纯的加倍此处引入一个叫做慢启动的阈值当拥塞窗口超过这个阈值的时候不再按照指数方式增长而是按照线性方式增长 当TCP开始启动的时候慢启动阈值等于窗口最大值在每次超时重发的时候慢启动阈值会变成原来的一半同时拥塞窗口置回1 少量的丢包我们仅仅是触发超时重传大量的丢包我们就认为网络拥塞 当TCP通信开始后网络吞吐量会逐渐上升随着网络发生拥堵吞吐量会立刻下降 拥塞控制归根结底是TCP协议想尽可能快的把数据传输给对方但是又要避免给网络造成太大压力的折中方案 流量控制和拥塞控制都是在限制发送窗口的大小 最终时机发送窗口的大小,是取 流量控制 和 拥塞控制 中窗口的较小值 延时应答(效率机制) 如果接收数据的主机立刻返回ACK应答这时候返回的窗口可能比较小。 假设接收端缓冲区为1M。一次收到了500K的数据如果立刻应答返回的窗口就500K但实际上可能处理端处理的速度很快10ms之内就把500K数据从缓冲区消费掉了在这种情况下接收端处理还远没有达到自己的极限即使窗口再放大一些也能处理过来如果接收端稍微等一会再应答比如等待200ms再应答那么这个时候返回的窗口大小就是1M 一定要记得窗口越大网络吞吐量就越大传输效率就越高。我们的目标是在保证网络不拥塞的情况下尽量提高传输效率 那么所有的包都可以延迟应答么肯定也不是 数量限制每隔N个包就应答一次时间限制超过最大延迟时间就应答一次 具体的数量和超时时间依操作系统不同也有差异一般N取2超时时间取200ms 捎带应答(效率机制) 在延迟应答的基础上我们发现很多情况下客户端服务器在应用层也是 一发一收 的。意味着客户端给服务器说了 How are you服务器也会给客户端回一个 Fine, thank you 那么这个时候ACK就可以搭顺风车和服务器回应的 Finethank you 一起回给客户端 其他特性:面向字节流 粘包问题 首先要明确粘包问题中的 包 是指的应用层的数据包。在TCP的协议头中没有如同UDP一样的 报文长度 这样的字段但是有一个序号这样的字段。站在传输层的角度TCP是一个一个报文过来的。按照序号排好序放在缓冲区中站在应用层的角度看到的只是一串连续的字节数据那么应用程序看到了这么一连串的字节数据就不知道从哪个部分开始到哪个部分是一个完整的应用层数据包。 那么如何避免粘包问题呢归根结底就是一句话明确两个包之间的边界。 对于定长的包保证每次都按固定大小读取即可例如上面的Request结构是固定大小的那么就从缓冲区从头开始按sizeofRequest依次读取即可对于变长的包可以在包头的位置约定一个包总长度的字段从而就知道了包的结束位置对于变长的包还可以在包和包之间使用明确的分隔符应用层协议是程序猿自己来定的只要保证分隔符不和正文冲突即可 思考对于UDP协议来说是否也存在 粘包问题 呢 对于UDP如果还没有上层交付数据UDP的报文长度仍然在。同时UDP是一个一个把数据交付给应用层。就有很明确的数据边界。站在应用层的站在应用层的角度使用UDP的时候要么收到完整的UDP报文要么不收。不会出现半个的情况。 其他特性:缓冲区 创建一个TCP的socket同时在内核中创建一个 发送缓冲区 和一个 接收缓冲区 调用write时数据会先写入发送缓冲区中如果发送的字节数太长会被拆分成多个TCP的数据包发出如果发送的字节数太短就会先在缓冲区里等待等到缓冲区长度差不多了或者其他合适的时机发送出去然后应用程序可以调用read从接收缓冲区拿数据另一方面TCP的一个连接既有发送缓冲区也有接收缓冲区那么对于这一个连接既可以读数据也可以写数据。这个概念叫做 全双工 由于缓冲区的存在TCP程序的读和写不需要一一匹配例如 写100个字节数据时可以调用一次write写100个字节也可以调用100次write每次写一个字节读100个字节数据时也完全不需要考虑写的时候是怎么写的既可以一次read 100个字 节也可以一次read一个字节重复100次 TCP异常状况 如果使用TCP过程中出现意外,会如何处理? 1)进程终止: 进程终止会释放文件,相当于调用socket.close(),此时仍可以发送FIN,和正常关闭没什区别.(TCP的连接,可以独立于进程存在,进程没了,TCP连接不一定没) 2)主机关机(正常流程): 在进行关机的时候,就会触发强制终止进程操作(相当于进程终止) 如果在系统关闭之前,对端返回的ACK和FIN到了,此时系统还是可以返回ACK,进行正常的四次挥手;如果系统已经关闭,ACK和FIN迟到了,无法进行后续的ACK响应,站在对端的角度,对端一位FIN丢包了,重传几次FIN,还是没响应,就会自动放弃连接 3)主机掉电(非正常) 此时,是一瞬间的事情,来不及结束进程,也来不及发送FIN,主机直接停机了,站在对端的角度,对端不清楚 1.如果对端在发送数据(接收方掉电),发送的数据就会一直等待ACK,触发超时重传,触发TCP连续重置功能,发起复位报文段.如果复位报文段发过去也没有效果,此时就会释放连接了 2.如果是对端在接收数据(发送方掉电),对端还在等待数据到达,没等到,是无法区分对端是没法消息,还是对端挂了 TCP中提供了心跳包机制,接收方会周期性的发给对方一个特殊的,不携带业务数据的数据包,并且期望对方返回一个应答. 如果对方没有应答,并且重复了多次之后仍然没有,就视为对方挂了,此时就可以单方面释放连接了 4)网线断开 与主句掉电相似 TCP/UDP对比 我们说了TCP是可靠连接那么是不是TCP一定就优于UDP呢TCP和UDP之间的优点和缺点不能简单绝对的进行比较 TCP用于可靠传输的情况应用于文件传输重要状态更新等场景UDP用于对高速传输和实时性要求较高的通信领域例如早期的QQ视频传输等。另外UDP可以用于广播
- 上一篇: 网站开发高级工程师专业如何建设网站兴田德润在那里
- 下一篇: 网站开发工程师6网站网址ip查询
相关文章
-
网站开发高级工程师专业如何建设网站兴田德润在那里
网站开发高级工程师专业如何建设网站兴田德润在那里
- 技术栈
- 2026年03月21日
-
网站开发负责人是什么职位不同的网站 做301
网站开发负责人是什么职位不同的网站 做301
- 技术栈
- 2026年03月21日
-
网站开发付款方式和比例手机网站制作推荐
网站开发付款方式和比例手机网站制作推荐
- 技术栈
- 2026年03月21日
-
网站开发工程师6网站网址ip查询
网站开发工程师6网站网址ip查询
- 技术栈
- 2026年03月21日
-
网站开发工程师岗位概要河南网站建站系统平台
网站开发工程师岗位概要河南网站建站系统平台
- 技术栈
- 2026年03月21日
-
网站开发工程师岗位概要做家旅游的视频网站
网站开发工程师岗位概要做家旅游的视频网站
- 技术栈
- 2026年03月21日
