做画找图网站,wordpress 3.8.2,wordpress whatnew,如何在网站源码做授权文章目录 运输层UDPTCPTCP连接管理TCP三次握手TCP四次挥手 可靠机制流量控制拥塞控制 QUIC 运输层 网络层提供了主机之间的逻辑通信
运输层为运行在不同主机上的进程之间提供了逻辑通信 UDP(用户数据报协议)提供一种不可靠、无连接的服务#xff0c;数据报 TCP(传输控制协议)… 文章目录 运输层UDPTCPTCP连接管理TCP三次握手TCP四次挥手 可靠机制流量控制拥塞控制 QUIC 运输层 网络层提供了主机之间的逻辑通信
运输层为运行在不同主机上的进程之间提供了逻辑通信 UDP(用户数据报协议)提供一种不可靠、无连接的服务数据报 TCP(传输控制协议)提供一种可靠的、面向连接的服务报文段 UDP和TCP的基本职责将两个端系统间IP的交付服务扩展为运行在端系统上的两个进程之间的交付服务 UDP和TCP可通过在其报文段首部中包括差错检查字段而提供完整性检查 进程间的数据交付和差错检查是两种最低限度的运输层服务也是UDP所能提供的 多路分解将运输层报文段中的数据交付到正确的套接字多路复用在源主机从不同套接字中收集数据块并为每个数据块封装上首部信息从而生成报文段然后将报文段传递到网络层
nmap端口扫描器
sudo apt install nmap
umap hostNameApplicationApplication-Layer ProtocolUnderlying Transport ProtocolElectronic mailSMTPTCPRemote terminal accessTelnetTCPSecure remote terminal accessSSHTCPWebHTTPHTTP/3TCP(for HTTP)UDP(for HTTP3)File transferFTPTCPRemote file serverNFSTypically UDPStreaming multimediaDASHTCPInternet telephonytypically proprietaryUDP or TCPNetwork managementSNMPTypically UDPName translationDNSTypically UDP
UDP
UDP只是做了运输协议能够做的最少工作多路复用/分解功能少量差错检测。UDP优点
无拥塞控制关于发送什么数据以及何时发送的应用层控制更为精细无需建立连接无连接状态分组首部开销小 长度UDP报文段中的字节数首部数据
UDP检验和提供了差错检测功能检验和用于确定当UDP报文段从源到达目的地移动时其中的比特是否发生了变化对差错恢复无能为力。丢弃受损的报文段、或将受损的报文段交给应用程序并给出警告。
TCP
TCP的“连接”是一条逻辑链接其共同状态仅保留在两个通信端系统的TCP程序中是全双工的 TCP可以从缓存中取出并放入报文段中的数据数量受限于最大报文段长度(Maximum Segment SizeMSS)MSS通常根据最初确定的由本地发送主机发送的最大链路层帧长度(最大传输单元Maximum Transmission UnitMTU)来设置。MSS指在TCP报文段里应用层数据的最大长度而不是指包括首部的TCP报文段的最大长度
TCP报文段首部字段数据字段 32比特的序号字段和32比特的确认号字段实现可靠数据传输服务 对数据流中的每一个字节编号TCP把数据看成一个无结构的、有序的字节流TCP存在序号字段报文段需要填入某个序号(即使该报文段里没有数据仍有序号)累计确认确认可被捎带在数据报文段中一条TCP连接双方均可随机地选择初始序列(可减少将那些仍在网络中存在的来自两台主机之间先前已终止的连接的报文段误认为是后来这两台主机之间新建连接所产生的有效报文段的可能性新连接与旧连接碰巧使用了相同的端口号) 16比特的接收窗口字段用于流量控制指示接收方愿意接收的字节数量4比特的首部长度字段以32比特的字为单位的TCP首部长度可选与变长的选项字段用于发送方与接收方协商最大报文段长度MSS或在高速网络环境下用作窗口调节因子时使用6比特的标志字段 ACK用于指示确认字段中的值是有效的即该报文段包括一个对已被成功接收报文段的确认PSH指示接收方应立即将数据交给上层URG指示报文段里存在着被发送端的上层实体置为“紧急”的数据紧急数据的最后一个字节由16比特的紧急数据指针字段指出。当紧急数据存在并给出指向紧急数据尾指针的时候TCP必须通知接收端的上层实体RST服务端向客户端发送RST报文段告诉客户端不要再发送了服务端没有客户端想要的端口RSTSYNFIN用于建立连接和拆除CWRECE在明确拥塞通过中使用 16bit的紧急数据指针字段指出紧急数据的最后一个字节
TCP连接管理
TCP三次握手
需要确定双方的发送和接收能力SYN报文没有建立连接时处理应用层数据耗时耗空间
客户端向服务端发送不包含应用层数据的SYN报文段(SYN1)随机初始序号(client_isn)TCP规定SYN1时不能携带数据但要消耗一个序号确认客户端的发送能力服务端为该TCP连接分配TCP缓存和变量并向客户TCP发送不包含应用层数据的SYNACK报文段(SYN1ACK1确认号client_isn1)随机初始序号(server_isn)确认服务端的接收和发送能力客户端为该TCP连接分配TCP缓存和变量并向服务TCP发送可包含应用层数据的ACK报文段(SYN0ACK1确认号server_isn1)确定客户端的接收能力。如果客户端不发送ACK最终服务端将终止该半开连接并回收资源
不能两次握手原因 如客户端发出连接请求但因连接请求报文丢失而未收到确认于是客户端再重传一次连接请求。后来收到了确认建立了连接。数据传输完毕后就释放了连接客户端共发出了两个连接请求报文段其中第一个丢失第二个到达了服务端但是第一个丢失的报文段只是在某些网络结点长时间滞留了延误到连接释放以后的某个时间才到达服务端此时服务端误认为客户端又发出一次新的连接请求于是就向客户端发出确认报文段同意建立连接不采用三次握手只要服务端发出确认就建立新的连接了此时客户端忽略服务端发来的确认也不发送数据则服务端一致等待客户端发送数据浪费资源。 如果只是两次握手 至多只有连接发起方的起始序列号能被确认 另一方选择的起始序列号则得不到确认 TCP四次挥手
客户端发出连接释放报文并且停止发送数据。释放数据报文首部FIN1其序列号为sequ等于前面已经传送过来的数据的最后一个字节的序号加1此时客户端进入FIN_WAIT_1终止等待1状态服务器端接收到连接释放报文后发出确认报文ACK1acku1并且带上自己的序列号seqv此时服务端就进入了CLOSE_WAIT 关闭等待状态此时TCP处于半关闭状态客户端到服务器的连接释放客户端接收到服务器端的确认请求后客户端就会进入FIN_WAIT_2终止等待2状态等待服务器发送连接释放报文服务器将最后的数据发送完毕后就向客户端发送连接释放报文FIN1seqw服务器就进入了LAST_ACK最后确认状态等待客户端的确认客户端收到服务器的连接释放报文后必须发出确认ACK1ackw1而自己的序列号是sequ1此时客户端就进入了TIME_WAIT时间等待状态但此时TCP连接还未终止必须要经过2MSL后最长报文寿命当客户端撤销相应的TCP后客户端才会进入CLOSED关闭状态服务器端接收到确认报文后会立即进入CLOSED关闭状态到这里TCP连接就断开了四次挥手完成 四次挥手的原因TCP双向通道相互独立 半关闭TCP提供了连接的一方在结束它的发送后还能接受来自另一端数据的能力。通俗来说就是不能发送数据但是还可以接收数据。 TCP不允许连接处于半打开状态时就单向传输数据因此完成三次握手后才可以传输数据(第三握手可以携带数据)。当连接处于半关闭状态时TCP是允许单向传输数据的也就是说服务器此时仍然可以向客户端发送数据等服务器不再发送数据时才会发送FIN报文段同意现在关闭连接。 为什么中间的ACK和FIN不可以像三次握手那样合为一个报文段呢 在socket网络编程中执行close()方法会触发内核发送FIN报文。什么时候调用close()方法这是由用户态决定的假如服务器仍有大量数据等待处理那么服务器会等数据处理完后才调用close()方法这个时间可能会很久而ACK报文则是由系统内核来完成的这个过程会很快。所以中间的ACK和FIN不能合为一个包。 2MSL MSL(Maximum Segment LifeTime)是报文最大生成时间它是任何报文在网络上存在的最长时间超过这个时间的报文将被丢弃。MSL时间TTL跳数确保报文已被丢弃。 TIME_WAIT等待的2MSL时间可以理解为数据报一来一回所需要的最大时间。TIME_WAIT状态占用系统资源端口号……最好让客户端主动断开连接。 2MSL时间是从客户端接收到FIN后发送ACK开始计时的。如果在这个时间段内服务器没有收到ACK应答报文段会重发FIN报文段如果客户端收到了FIN报文段那么2MSL的时间将会被重置。如果在2MSL时间段内没有收到任何数据报客户端则会进入CLOSE状态。 保证客户端最后发送的ACK能够到达服务器帮助其正常关闭。 由于这个ACK报文段可能会丢失使得处于LAST_ACK状态的服务器得不到对已发送FIN报文段的确认从而会触发超时重传。服务器会重发FIN报文段客户端能保证在2MSL时间内收到来自服务器的重传FIN报文段从而客户端重新发送ACK应答报文段并重置2MSL计数。假如客户端不等待2MSL就之间进入CLOSE状态那么服务器会一直处于LAST_ACK状态。当客户端发起建立SYN报文段请求建立新的连接时服务端会发送RST报文段给客户端连接建立的过程就会被终止。 防止已失效的连接请求报文段出现在本连接中 TIME_WAIT等待的2MSL时间确保本连接内所产生的所有报文段都从网络中消失使下一个新的连接中不会出现这种旧的连接请求报文段。 可靠机制
回退N步(GBN)协议/滑动窗口协议允许发送方发送多个分组而不需等待确认接收方丢弃所有失序分组(不缓存)一个定时器 选择重传(SR)协议让发送方仅重传那些它怀疑在接收方出错(即丢失或受损)的分组而避免了不必要的重传一个分组一个定时器
SR接收方窗口太大是一个新分组or一次重传窗口长度必须小于或等于序号空间大小的一半 可靠数据传输机制及其用途的总结
机制用途和说明检验和用于检测在一个传输分组中的比特错误定时器用于超时/重传一个分组可能因为该分组(或其ACK)在通信中丢失了。由于当一个分组延时但未丢失(过早超时)或当一个分组已被接收方收到但从接收方到发送方的ACK丢失时可能产生超时时间所以接收方可能会收到一个分组的多个冗余副本 ARQ(自动重传请求协议Automatic Repeat reQuest)序号用于为从发送方流向接收方的数据分组按顺序编号。所接收分组的序号间的空隙可使接收方检测出丢失的分组。具有相同序号的分组可使接收方检测出一个分组的冗余副本确认接收方用于告诉发送方一个分组或一组分组已被正确地接收到了。确认报文通常携带着被确认的分组或多个分组的序号。确认可以是逐个的或累积的这取决于协议否定确认接收方用于告诉发送方某个分组未被正确地接收。否定确认报文通常携带着未被正确接收的分组的序号窗口、流水线发送方也许被限制仅发送那些序号落在一个指定范围内的分组。通过一次允许发送多个分组但未被确认发送方的利用率可在停等操作模式的基础上得到增加。窗口长度可根据接收方接收和缓存报文的能力、网络中的拥塞程度或两者情况来进行设置
往返时间
在任意时刻TCP仅为一个已发送的但目前尚未被确认的报文段估计SampleRTT。TCP绝不为已被重传的报文段计算SampleRTT它仅为传输一次的报文段测量SampleRTT
重传超时间隔
超时间隔在每次重传后会呈指数型增长每当定时器收到上层应用的数据和收到ACK中的任意一个启动时TimeoutInterval由最近的EstimatedRTT值与DevRTT值推算得到
使用单一的重传定时器即使有多个已发送但还未被确认的报文段定时器超时时重传快速重传
产生TCP ACK的建议
事件TCP接收方操作具有所期望序号的按序报文段到达。所有在期望序号及以前的数据都已经被确认延迟的ACK。对另一个按序报文段的到达最多等待500ms。如果下一个按序报文段在这个时间间隔内没有到达则发送一个ACK具有所期望序号的按序报文段到达。另一个按序报文段等待ACK传输立即发送单个累积ACK以确认两个按序报文段比期望序号大的失序报文段到达。检测出间隔立即发送冗余ACK指示下一个期待字节的序号(其为间隔的低端的序号)能部分或完全填充接收数据间隔的报文段到达倘若该报文段起始于间隔的低端则立即发送ACK
一旦收到3个冗余ACKTCP就执行快速重传即在该报文段的定时器过期之前重传丢失的报文段
流量控制
消除发送方使接收方缓存溢出的可能性匹配发送速率与接收速率
TCP 通过让发送方维护一个称为接收窗口receive window的变量来提供流量控制接收窗口用于给发送方一个指示——该接收方还有多少可用的缓存空间。
接收窗口rwnd 接收缓存RcvBuffer - [应用进程从缓存读出的数据流的最后一个字节的编号LastByteRead - 从网络中到达的并且存放在接收缓存中的数据流的最后一个字节的编号LastByteRcvd]。开始时rwnd RcvBuffer
发送方的未被确认的数据量LastByteSent - LastByteAcked rwnd
接收方将rwnd放入接收窗口字段中来告知发送方还有多少可用空间通过将发送但未确认的数据量控制在值rwnd以内就可保证发送方不会使接收方的接收缓存溢出。TCP仅当在它有数据或有确认要发出时才会发送报文段当接收方的接收窗口为0时发送方继续发送只有一个字节数据的报文段这些报文段将会被接收方确认最终缓存开始清空并且确认报文里将包含一个非0的rwnd值
拥塞控制
防止过多的数据注入到网络导致网络崩溃和超负荷问题
拥塞控制方法根据网络层是否为运输层拥塞控制提供了显式帮助分类
端到端拥塞控制TCP采用没有帮助端系统通过对网络行为的观察判断网络辅助的拥塞控制有帮助路由器向发送发提供关于网络中拥塞状态的显式反馈信息
TCP采用让发送方根据所感知到的网络拥塞程度来限制其发送速率。ACK——不拥塞信号丢包时间(超时、冗余ACK)——拥塞信号。
通过调节拥塞窗口congestion windowcwnd的大小可以限制TCP发送方能向网络中发送流量的速率。发送方的未被确认的数据量LastByteSent - LastByteAcked {cwndrwnd}。
当发送方出现丢包事件就说明拥塞了应当降低TCP发送速率路由器缓存满了会引起一个数据报被丢弃。
TCP是自计时的TCP使用确认来触发增大拥塞窗口长度当对先前未确认报文段的确认到达时应当增加发送速率。
TCP拥塞控制算法(TCP congestion control algorithm)慢启动和快速重传是TCP的强制部分两者的差异在于对收到的ACK做出反应时增加cwnd长度的方式慢启动比拥塞避免能更快地增加cwnd的长度快速恢复是推荐部分对TCP发送方并非必需的。 慢启动 TCP连接开始时cwnd MSScwnd以1个MSS开始并且每当传输的报文段首次被确认就增加1个MSS。 结束方式 超时TCP发送方置cwnd1并重新开启慢启动过程并设置慢启动阈值(ssthreshcwnd/2)为拥塞窗口值的一半。当cwndssthresh时结束慢启动并且TCP转移到拥塞避免模式。3个冗余ACKTCP快速重传并进入快速恢复状态。 拥塞避免 每个RTT只将cwnd的值增加1个MSS对于TCP发送方无论何时到达一个新的确认就将cwnd增加一个 MSS*(MSS/cwnd) 字节。 结束方式 超时cwnd 1ssthresh cwnd / 23个冗余ACKcwnd / 2ssthresh cwnd / 2并进入快速恢复状态 快速恢复 对于引起TCP进入快速恢复状态的缺失报文段每当收到冗余的ACKcwnd的值增加一个MSS。当对丢失报文段的一个ACK到达时TCP在降低cwnd后进入拥塞避免状态。 结束方式 超时cwnd 1ssthresh cwnd / 2并进入慢启动状态丢包cwndMSSssthresh cwnd/ 2
QUIC
QUIC快速UDP互联网连接是应用层协议旨在提高安全HTTP的运输层服务的性能使用UDP专门为简化的HTTP/2版本而设计的。主要特征
面向连接和安全数据流可靠的、TCP友好的拥塞控制数据传输 参考
计算机网络自顶向下方法