手机公众平台网站开发,注册个网站怎么注册,深圳市住房和建设局官网房源,潍坊做网站价格物理层、数据链路层以及网络层共同解决了将主机通过异构网络互联起来所面临的问题#xff0c;实现了主机与主机之间的通信。
实际上在计算机网络中进行通信的真正实体事位于通信两端主机中的进程。
运输层的任务就会是提供运行在不同主机上的应用进程提供直接的通信服务实现了主机与主机之间的通信。
实际上在计算机网络中进行通信的真正实体事位于通信两端主机中的进程。
运输层的任务就会是提供运行在不同主机上的应用进程提供直接的通信服务又称端到端协议。
根据应用的需求不同因特网的运输层为应用层提供了两种不同的运输协议即面向连接的TCP和无连接的UDP。 运输层端口号、复用、分用
TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程。
端口号用16比特表示取值范围065535
端口号只具有本地意义即端口号只是为了标识本计算机应用层中的各进程在因特网中不同计算机中的相同的端口号是没有联系的。
复用和分用发送方的某些应用进程所发送的不同应用报文在运输层使用UDP协议进行封装称为UDP复用。使用TCP协议进行封装称为TCP复用。 TCP/IP体系的应用层常用协议所使用的运输层熟知端口号 UDP和TCP的区别 UDPUser Datagram Protocol用户数据报协议
·UDP是无连接的
·UDP支持单播、多播以及广播
·UDP是面向应用报文的
·UDP向上层提供无连接不可靠传输服务适用于IP电话、视频会议等实时应用
·UDP用户数据报首部仅8字节 TCPTransmission Control Protocol
·TCP是面向连接的三次握手连接四次挥手释放连接
·TCP仅支持单播
·TCP是面向字节流的
·向上层提供面向连接的可靠传输服务例如文件传输
·TCP报文首部最小20字节最大60字节 TCP流量控制
流量控制flow control让发送方的发送速率不要太快让接收方来得及接收利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
·TCP接收方利用自己的几首窗口的大小来限制发送方发送窗口的大小
·TCP发送发收到接收方的零窗口通知后应启动持续计时器。持续计时器超时后向接收方发送零窗口探测报文。 TCP拥塞控制
在某段时间若对网络中某一资源的需求超过了该资源所能提供的可用部分网络性能就要变坏这种情况叫拥塞congestion。如果对于拥塞不进行控制整个网络的吞吐量将随输入负荷的增大而下降。TCP四种拥塞算法慢开始slow-start拥塞避免songestion avoidance快重传fast retransmit快恢复fast recovery
·判断拥塞窗口cwnd的维护原则只要没有网络拥塞拥塞窗口就尽量大些出现拥塞窗口就小一些。
·判断出现拥塞的依据没有按时收到确认报文
·发送方将拥塞窗口作为发送窗口swndswndcwnd
维护一个慢开始门限ssthresh状态变量
1当cwndssthresh时使用慢开始算法
2当cwndssthtesh时停止使用慢开始算法而改用拥塞避免算法
相等时都可以使用。
一开始使用慢开始算法拥塞窗口指数比列增大增大到慢开始门阀值时停止使用慢开始算法该规律加1当传输报文出现问题时重传计时器超时时网络很可能出现了拥塞
1将ssthresh值更新为发生拥塞时cwnd值的一半
2将cwnd值减少为1并重新开始执行慢开始算法 有时个别报文段会在网络中丢失但实际上网络并没有拥塞会导致发送方超时重传并误认为网络发生了拥塞。降低了传输效率。
采用快重传可以让发送方尽早知道发生了个别报文段的丢失。快重传就是使发送方尽快重传而不是等超时计时器超时再重传。
·要求接收方不要等待自己发送数据时才进行捎带确认而是要立即发送确认。
·即使收到失序的报文段也要立即发出对已收到的报文段的重复确认。
·发送方一旦收到三个连续的重复确认就将相应的报文段立即重传而不是等该报文段的超时重传计时器超时再重传。 发送方一旦收到3个重复确认就知道现在只是丢失了个别的报文段。于是不启动慢开始算法而执行快恢复算法。 整体流程 超时重传时间的选择 针对出现超时重传时无法测准往返时间RTT的问题Karn提出了一个算法在计算加权平均往返时间RTTs时只要报文段重传了就不采用其往返时间RTT样本。也就是出现重传时不计算RTTs进而超时重传时间RTO也不会重新计算。报文段每重传一次就把超时重传时间RTO增大一些。 TCP可靠传输的实现
TCP基于以字节为单位的滑动窗口来实现可靠传输 可以使用三个指针来描述发送窗口的状态。 虽然发送方的发送窗口是根据接收方的就诶和搜窗口设置的但在同一时刻发送方的发送窗口并不总是和接收方的窗口一样大。网络传送窗口值需要经历一定的时间滞后并且这个时间是不确定的发送方还可以根据网络拥塞状况是大哥减小自己的发送窗口
TCP通常对不按序到达的数据是先临时存放在接收窗口中等到字节流中多缺少的字节收到后再按序交付上层的应用进程。
TCP要求接收方必须有累积确认和捎带确认机制这样可以减小传输开销。接收方可以在何时的时候发送确认也可以在自己有数据要发送时把确认信息顺便带上。接收方不应过分推迟发送确认否则会导致发送方不必要的超时重传会浪费网络资源。
TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此。每一方都有自己的发送窗口和接收窗口。
TCP的运输连接管理
TCP连接的建立
TCP的连接建立主要解决以下三个问题
1使TCP双方能够确知对方的存在。
2使TCP双方能够协商一些参数如最大窗口值、是否使用窗口扩大选项和时间戳选项
3使TCP双方能够对运输实体资源如缓存大小、连接表中的项目等进行分配。
使用“三报文握手”建立连接。
TCP的序号和确认号32位序号 seqSequence number 缩写seq TCP通信过程中某一个传输方向上的字节流的每个字节的序号通过这个来确认发送的数据有序比如现在序列号为1000发送了1000下一个序列号就是2000。32位确认号 ackAcknowledge number 缩写ackTCP对上一次seq序号做出的确认号用来响应TCP报文段给收到的TCP报文段的序号seq加1。
TCP的标志位 每个TCP段都有一个目的这是借助于TCP标志位选项来确定的允许发送方或接收方指定哪些标志应该被使用以便段被另一端正确处理。 用的最广泛的标志是 SYNACK 和 FIN用于建立连接确认成功的段传输最后终止连接。 ·SYN简写为S同步标志位用于建立会话连接同步序列号 ACK 简写为.确认标志位对已接收的数据包进行确认 FIN 简写为F完成标志位表示我已经没有数据要发送了即将关闭连接PSH简写为P推送标志位表示该数据包被对方接收后应立即交给上层应用而不在缓冲区排队RST简写为R重置标志位用于连接复位、拒绝错误和非法的数据包URG简写为U紧急标志位表示数据包的紧急指针域有效用来保证连接不被阻断并督促中间设备尽快处理
第一次握手
客户端将TCP报文标志位SYN置为1随机产生一个序号值seqJ保存在TCP首部的序列号(Sequence Number)字段里指明客户端打算连接的服务器的端口并将该数据包发送给服务器端发送完毕后客户端进入SYN_SENT状态等待服务器端确认。
第二次握手 服务器端收到数据包后由标志位SYN1知道客户端请求建立连接服务器端将TCP报文标志位SYN和ACK都置为1ackJ1随机产生一个序号值seqK并将该数据包发送给客户端以确认连接请求服务器端进入SYN_RCVD状态。
第三次握手 客户端收到确认后检查ack是否为J1ACK是否为1如果正确则将标志位ACK置为1ackK1并将该数据包发送给服务器端服务器端检查ack是否为K1ACK是否为1如果正确则连接建立成功客户端和服务器端进入ESTABLISHED状态完成三次握手随后客户端与服务器端之间可以开始传输数据了。
假设不采用“三次握手”那么只要server发出确认新的连接就建立了。由于现在client并没有发出建立连接的请求因此不会理睬server的确认也不会向server发送数据。但server却以为新的运输连接已经建立并一直等待client发来数据。这样server的很多资源就白白浪费掉了。采用三报文握手而不是二报文握手为了防止已经失效的连接请求报文突然又传送到TCP服务器因为导致错误。 小写的ack代表的是头部的确认号Acknowledge number 缩写ack是对上一个包的序号进行确认的号ackseq1。大写的ACK则是我们上面说的TCP首部的标志位用于标志的TCP包是否对上一个包进行了确认操作如果确认了则把ACK标志位设置成1。
TCP的连接释放
第一次挥手 Client端发起挥手请求向Server端发送标志位是FIN报文段设置序列号seq此时Client端进入FIN_WAIT_1状态这表示Client端没有数据要发送给Server端了。第二次挥手Server端收到了Client端发送的FIN报文段向Client端返回一个标志位是ACK的报文段ack设为seq加1Client端进入FIN_WAIT_2状态Server端告诉Client端我确认并同意你的关闭请求。第三次挥手 Server端向Client端发送标志位是FIN的报文段请求关闭连接同时Server端进入LAST_ACK状态。第四次挥手 Client端收到Server端发送的FIN报文段向Server端发送标志位是ACK的报文段然后Client端进入TIME_WAIT状态。Server端收到Client端的ACK报文段以后就关闭连接。此时Client端等待2MSL的时间后依然没有收到回复则证明Server端已正常关闭那好Client端也可以关闭连接了。 为什么连接的时候是三次握手关闭的时候却是四次握手
建立连接时因为当Server端收到Client端的SYN连接请求报文后可以直接发送SYNACK报文。其中ACK报文是用来应答的SYN报文是用来同步的。所以建立连接只需要三次握手。
由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议TCP是全双工模式。 这就意味着关闭连接时当Client端发出FIN报文段时只是表示Client端告诉Server端数据已经发送完毕了。当Server端收到FIN报文并返回ACK报文段表示它已经知道Client端没有数据发送了但是Server端还是可以发送数据到Client端的所以Server很可能并不会立即关闭SOCKET直到Server端把数据也发送完毕。 当Server端也发送了FIN报文段时这个时候就表示Server端也没有数据要发送了就会告诉Client端我也没有数据要发送了之后彼此就会愉快的中断这次TCP连接。
TCP报文段的首部格式 源端口占16比特写入源端口号用来标识发送该TCP报文段的应用进程。
目的端口占16比特写入目的端口号用来标识接收该TCP报文段的应用进程。
序号字段占32比特序号增加到最后一个后下一个序号就又回到了0.指出本TCP报文段数据载荷的第一个字节的序号。
确认号字段占32比特确认号增加到最后一个后下一个确认号就又回到0。指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号同时也是对之前收到的所有数据的确认。
确认标志位置ACK取值为1时确认号字段才有效取值为0时确认号字段无效。TCP规定在连接建立后所有传送的TCP报文段都必须把ACK置1
数据偏移字段占4比特并以字节为单位指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远实际上指出了TCP报文段的首部长度
窗口字段占16比特以字节为单位。指出发送本报文段的一方的接收窗口窗口值作为接收方让发送方设置其发送窗口的依据以接收方的接收能力来控制发送方的发送能力称为流量控制
校验和占16比特检查范围包括TCP报文段的首部数据载荷两部分。
同步标志位SYN在TCP连接建立时用来同步序号
终止标志位FIN用来释放TCP连接
复位标志位RST用来复位TCP连接当RST1时表明TCP连接出现了异常必须释放连接然后再重新建立连接
推送标志位PSH接收方的TCP收到该标志位为1的报文段会尽快上交应用进程。
·最大报文段长度MSS选项TCP报文段数据载荷部分的最大长度。
·窗口扩大选项为了扩大窗口
·时间戳选项
1用来计算往返时间RTT
2用来处理序号超范围的情况又称为防止序号绕回PAWS。