如何拥有一个自己的网站中信建设责任有限公司

当前位置: 首页 > news >正文

如何拥有一个自己的网站,中信建设责任有限公司,建站助手,网站的技术建设目录 一、TCP报头 二、三次握手 三、数据传输 四、四次挥手 本文通过一次TCP通信过程的分析来学习TCP协议 一、TCP报头 如图是一份TCP报文的报头#xff0c;标准报头是20个字节#xff0c;还可带有选项报头#xff0c;也就是TCP报头的最小长度是20字节。以下是对报头的各…目录 一、TCP报头 二、三次握手 三、数据传输 四、四次挥手 本文通过一次TCP通信过程的分析来学习TCP协议 一、TCP报头 如图是一份TCP报文的报头标准报头是20个字节还可带有选项报头也就是TCP报头的最小长度是20字节。以下是对报头的各个字段的分析 端口号向上层交付时交付给哪一个进程。序列号为发送的报文的编号实际上是发送缓冲区的字节序号旨在让接收方收到多个报文时可以通过序列号排序后向上层交付还可以在收到重复报文时根据序列号去重。确认序号对发送端报文的应答若确认序号为N则表明N-1为止所有数据均已到达。4位首部长度表明报文的报头长度单位是4字节因为只有4位-最大值为15意味着选项部分报头最大为40字节。六个标记位用于区分不同报文的类型不同类型报文对应了不同的处理逻辑所以需要用标记为进行区分。以下是具体解释 URG紧急数据标记位当URG被置为1时报头的另一个字段16位紧急指针中会指向对应的紧急数据十六位紧急指针是有效载荷的偏移量紧急数据只有一个字节。ACK表明对以往收到的报文的确认一般除了第一个请求报文没有设置ACK以外其余报文基本都会设置ACK因为发送出去的数据本身就对对方以往发送的报文具有一定的确认能力因此双方在进行数据通信时可以顺便对对方上一次发送的数据进行响应。PSH报文当中的PSH被设置为1是在告诉对方尽快将接收缓冲区当中的数据交付给上层。因为内核中的接收缓冲区都会有一个水位线正常情况下只有数据大小超过了水位线才会允许上层读取数据以减少内核态和用户态来回切换的成本但当收到的报文带有PSH标记即使缓冲区的数据没有超过水位线也会向上层交付数据。RST当通信时一端发现了异常就会发送带有RST标记的报文要求重新建立连接SYNSYN标记为1表明是一个连接请求的报文只有请求建立连接时才会有标记为1正常通信时SYN不会被设置。FINFIN标记为1表明是一个断开连接的报文正常通信的报文不会设置FIN标记位。 16位窗口大小每次发送报文时都会向对方更新当前本机的接收缓冲区的接收能力以达到动态控制双方报文的发送量窗口最大也就是64KB。但选项报头中可以设置窗口因子以设置更大的窗口大小。校验和检测在数据传输过程中是否出现了错误或被篡改保证数据完整性和准确性。 二、三次握手 为了确保TCP通信时的可靠性TCP协议要求TCP双方在通信前建立一条可靠的通信连接通过这条连接通信双方可以确认对方的存在和可用性并且数据能够正确的传输和接收三次握手就是为了建立一条可靠连接 第一次握手A主机向B主机发送标记了SYN的报文表明请求建立连接第二次握手B主机向A主机发送SYN和ACK标记的报文表明接受建立连接的请求并等待A确认连接B开始时处于listen状态A的连接请求会放在主机B的accept队列中等到B的处理第三次握手A发送ACK报文表示确认连接 需要注意的是A主机在第三次发送ACK报文时就已经建立好了连接处于ESTABLISHED状态而B是在收到了A的ACK报文时才会建立连接处于ESTABLISHED状态。 三次握手确保了双发都有收发数据的能力当A收到第二次握手的报文时A就确定了自己发送的报文对方能收到但此时B并不清楚自己发出去的报文A是否能收到只有当B收到第三次握手的报文时B也确定了自己发送的报文对方能收到此时就确保了双向信道的可靠性。 所以一次、两次握手是不可行的三次握手是确保全双工可靠通信的最小成本当然了三次握手都可以四次握手当然也能确保建立一条可靠连接了其实三次握手中的第二次握手的报文是捎带应答了不然确实就是四次握手了。 三次握手期间顺便进行了序号协商和窗口更新的操作在后续正常通信中确保数据的按序交付和实现流量控制。 这是后续TCP协议高效、可靠传输数据的关键环节。 三、数据传输 TCP经过三次握手建立连接后就可以正常的收发数据了 发送数据TCP在发送缓冲区的滑动窗口中选择还未发送的数据对数据分包并添加报头交给下层的IP层去发送接收数据TCP收到数据后会根据报头中的序号给多个报文中的数据排序去掉报头放在接收缓冲区中并根据收到的数据的字节序设置确认序号向发送方发送应答报文。 超时重传当发送方以往发送的报文在一定时间后没有收到应答报文会触发超时重传机制 在主机A发送一个报文后会启动一个计时器计时到期还没收到应答报文就会再次重发数据包 滑动窗口机制 滑动窗口内的数据可以直接封装报头发送暂时不需要对方应答从而实现并发的发送大量报文。 双方都维护一个窗口大小并在报文中更新窗口中的数据可以直接发送待收到应答后在移除窗口已发送未确认的数据后来要么因为收到应答报文被移除要么因为触发超时重传或快速重传被再次发送双方通过报文中对方的窗口大小和网络负载情况动态的调整自己的窗口大小。 win_stat 最新收到的确认序号 win_end min(对方窗口拥塞窗口 以此实现流量控制在网络环境良好的情况下根据对方的接收能力来决定发送报文的多少与此同时拥塞窗口一直在探测网络环境当出现网络拥塞时以网络环境为主少量的发送报文继续下一轮网络环境的探测。 拥塞控制算法Reno慢启动、拥塞避免、快速重传、快速恢复 TCP引入 慢启动 机制, 先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据;像上面这样的拥塞窗口增长速度, 是指数级别的. 慢启动 只是指初使时慢, 但是增长速度非常快。 TCP会预设一个慢启动阈值当拥塞窗口窗口这一值时会从指数增长变为线性增长进入拥塞避免阶段如图就是发送端每收到8个应答拥塞窗口就增加1以此继续线性增长以探测网络环境当网络环境拥塞时会根据严重程度处理拥塞窗口的变化逻辑。一般而言超时丢包是比较严重的说明网络拥塞比较严重TCP会更新为慢启动模式将慢启动阈值设为当前拥塞窗口的一半 如果是收到三次同样的ACK报文则说明是某一个数据包丢失此时网络是轻微拥塞没必要大幅调整拥塞窗口会使用快速重传和快速恢复算法 四、四次挥手 TCP是全双工的两个方向可以同时传输数据因此两个方向都需要单独关闭。 A主机在数据发送结束后发送一个FIN的报文来终止A—B方向的传输待B主机应答后进入半关闭状态不能再主动发数据B主机检查自己的数据是否发送完毕若未完成则继续发送直到完成后发送一个FIN来终止传输在收到A的应答后关闭整个连接。 需要注意的是主动关闭的一方响应最后一个ACK报文后会进入TIME_WAIT状态而被动关闭的一方在收到应答报文后会直接关闭。 这是因为 确保最后一个 ACK 能被对方收到 假设主动关闭方发送的最后一个 ACK 丢失了被动关闭方会因为没有收到 ACK 而重传 FIN 报文。如果主动关闭方没有处于 TIME_WAIT 状态而是直接关闭就无法响应重传的 FIN 报文导致被动关闭方不能正常关闭连接。 允许老的重复分节在网络中消逝 TCP 连接可能会因为网络延迟等原因出现数据包延迟到达的情况。如果新的连接使用了与刚刚关闭的连接相同的端口和 IP 地址而延迟的旧数据包到达可能会造成数据混乱。通过在 TIME_WAIT 状态等待一段时间可以确保这些延迟的数据包在新连接建立之前已经消失避免对新连接产生影响。 以下是从连接建立到正常通信再到连接关闭的状态示意图