tcp的连接释放画图题(画图说明tcp传输连接的建立过程)

      最后更新:2022-11-14 20:16:30 手机定位技术交流文章

      急急急求:《计算机网络与Internet教程》的复习题

      计算机网络练习题 一、填空题:1. 在典型的计算机网络中,信息以包为单位进行传送。其主要结构由包头、数据、包尾 构成。2. 通信使用的三种交换方式为电路交换、存储转发、分组交换。计算机通信一般不使用存储转发方式3. 数据双向传输不能同时进行的通信模式叫做半双工通信,双向传输可同时进行的通信模式叫做全双工通信。4. 计算机网络使用的传输媒体有(举例):同轴电缆、双绞线、光纤、微波、红外线、无线电波等。5. 异步传输传输单位为字节,并以起始位和停止位作为分隔。6. 标准RS-232-C采用25脚梯形插头座连接,并以-3V~-15V电压表示逻辑"1"。7. 三种数字信号调制解调方式的依据是波函数的三要素,即:振幅、频率、相位。8. 数字信号的三种调制方式为振幅调制、频率调制、相位调制。9. 计算机局域网分类按拓扑结构主要分为:星型、环型、总线型、树型。10. 使用层次化网络模型,可以把复杂的计算机网络简化,使其容易理解并容易实现。11. TCP/IP协议栈可分为四层,分别为:主机到网络层、互联网层、传输层、应用层;SMTP协议位于应用层。12. 数据链路层的主要服务功能是流量控制和差错控制。13. IEEE802.3规定一数据帧的长度应为64字节到1518字节之间。14. IEEE 802.3建议采用的介质访问控制方法的主要内容有:载波侦听多路访问(CSMA)和冲突检测(CD)。15. 局域网技术中媒体访问控制方法主要有CSMA/CD(带冲突检测的载波侦听多路介质访问控制技术)、令牌总线技术、令牌环型网技术三种。16. 在数据报服务中,网络节点要为每个数据报选择路由,在虚电路服务中,网络节点只在连接建立时选择路由。17. 通常路由选择算法分为两大类,分别为静态路由选择和自适应路由选择。18. 按IP地址分类,地址:160.201.68.108属于B类地址。19. IP地址分五类,即A、B、C、D、E类,其中D类属多址广播类地址;IP地址127.x.x.x属于本主机地址,用于本机内通信;TCP协议的80端口由因特网的HTTP协议使用。20. TCP通过调节发送窗口的大小来进行流量控制。21. TCP/IP使用地址转换协议ARP将IP地址转换为物理地址。22. 利用密集波分技术,可以提高光纤的利用率,用一根光纤来传递更多的信息。23. 使用无线接入方式,可以允许用户方便地在不同的环境里使用网络的资源。24. 有线用户的接入方式有ISDN技术、ADSL、Cable Modem和局域网接入。25. 信道复用有频分复用、时分复用、波分复用方式,调制是信道复用吗?不是。26. IP路由使得数据包到达预定目的地。27. 数据传输率是按照bps(比特/秒)计量的。28. 交换机(集线器)是星型网络的中心。29. ATM以传输53字节固定长的信元而不是可变长的数据帧来传输信息。30. 能再生信号并重新传输此信号的集线器是主动型的。31. FDDI可能达到的网络速度是100Mbps。32. ATM网络的基本传输速度是155Mbps。33. ATM是一种能高速传输数据的先进异步传输网络。34. 超文本的含意是该文本中含有链接到其他文本的链接点。35. Internet采用了目前在分布式网络中最为流行的客户/服务器模式,大大增强了网络信息服务的灵活性。36. 负责电子邮件传输的应用层协议是SMTP。37. 对于一个主机域名"hava.gxou.com.cn"来说,其中gxou.com.cn是主机所在域的域名。38. 在FTP中,提供了ASC码和二进制两种文件传输模式,一般我们都采用二进制模式进行文件传输。39. 假如在"mail.gxrtvu.edu.cn"的邮件服务器上给某一用户创建了一个名为"ywh"的帐号,那么该用户可能的E-mail地址是ywh@mail.gxrtvu.edu.cn。40. 一般HTML文件的后缀名为htm或html。41. 常用的网络操作系统,例如:UNIX、Windows NT和NetWare。42. 常见的网络协议有TCP/IP、IPX/SPX和NetBEUI。43. 常见的因特网服务有HTTP、WWW和E_mail。二、选择题1. 在OSI模型中,服务定义为; ( C )A. 各层向下层提供的一组原语操作B. 各层间对等实体间通信的功能实现C. 各层通过其SAP向上层提共的一组功能D. 和协议的的含义是一样的2. 以太网采用的发送策略是: ( C )A. 站点可随时发送,仅在发送后检测冲突B. 站点在发送前需侦听信道,只在信道空闲时发送C. 站点采用带冲突检测的CSMA协议进行发送D. 站点在获得令牌后发送3. 以下四个IP地址哪个是不合法的主机地址: ( B )A. 10011110.11100011.01100100.10010100B. 11101110.10101011.01010100.00101001C. 11011110.11100011.01101101.10001100D. 10011110.11100011.01100100.000011004. TCP采用的滑动窗口 ( D )A. 是3位的滑动窗口B. 仅用于流量控制C. 传输过程中窗口大小不调整D. 窗口大小为0是合法的5. 同步通信 ( A )A. 以比特为单位,每次可传输任意多个比特B. 是一种并行传输方式C. 采用XON/XOFF的流控制协议D. 传输速率一般比异步传输慢6. 数据链路两端的设备是 ( C )A. DTEB. DCEC. DTE或DCED. DTE和DCE7. 网络传输中对数据进行统一的标准编码在OSI体系中由哪一层实现 ( D )A. 物理层B. 网络层C. 传输层D. 表示层8. 在不同网络之间实现数据帧的存储转发,并在数据链路层进行协议转换的网络互连器称为 ( C )A. 转换器B. 路由器C. 网桥D. 中继器9. Ethernet采用的媒体访问控制方式为 ( A )A. CSMA/CDB. 令牌环C. 令牌总线D. 无竞争协议10.ICMP协议位于 ( A )A.网络层B.传输层C.应用层数D.据链路层11.综合业务数据网的特点是 ( C )A.电视通信网B.频分多路复用C.实现语音、数字与图象的一体化传输D.模拟通信12.两台计算机利用电话线路传输数据信号时,必备的设备是 ( B )A. 网卡 B. 调制解调器 C. 中继器 D. 同轴电缆13.数据在传输过程出现差错的主要原因是 ( A )A. 突发错 B. 计算错 C. CRC错 D. 随机错14.令牌总线(Token Bus)的访问方法和物理层技术规范由( C ) 描述A. IEEE802.2 B. IEEE802.3 C. IEEE802.4 D. IEEE802.515.网桥是用于哪一层的设备 ( D )A. 物理层 B. 网络层 C. 应用层 D. 数据连路层16.异步传输通常采用的校验方法为 ( C )A. 方块校验 B. CRC校验 C. 奇偶校验 D. 余数校验17.PPP协议是哪一层的协议? ( B )A. 物理层 B. 数据链路层 C. 网络层 D. 高层18.100Base-T使用哪一种传输介质 ( C )A. 同轴电缆 B. 光纤 C. 双绞线 D. 红外线19.如果网络内部使用数据报,那么 ( B )A. 仅在建立时作一次路由选择 B. 为每个到来的分组作路由选择C. 仅在网络拥塞时作新的路由选择 D. 不必作路由选择20.管理计算机通信的规则称为A协议 B介质 C服务 D网络操作系统 ( A )21 .以下哪一个选项按顺序包括了OSI模型的各个层次A物理层,数据链路层,网络层,运输层,会话层,表示层和应用层B物理层,数据链路层,网络层,运输层,系统层,表示层和应用层C物理层,数据链路层,网络层,转换层,会话后,表示层和应用层D表示层,数据链路层,网络层,运输层,会话层,物理层和应用层 ( A )22.在 OSI模型中,第 N层和其上的 N+ l层的关系是A N层为N十1层提供服务B N十1层将从N层接收的信息增加了一个头C N层利用N十1层提供的服务D N层对N+1层没有任何作用 ( A )三、判断题1.TCP/IP使用地址转换协议ARP将物理地址转换为IP地址。 ( X )2. HDLC是面向字节的异步通信协议。 ( X )4.延迟畸变(delay)是由不同频率信号传输速度不一样引起的。 ( √ )5.计算机网络中的差错控制只在数据链路层中实现。 ( X )6.低通信道的传输带宽与其数据传输速率相关。 ( √ )7.在数据传输中IP层可提供可靠的无连接传输。 ( X )8.地址10011110.11100011.01100100.00001100是C类IP地址。 ( X )9.同步传输时字符间不需要间隔 ( √ )10.利用CRC多项式可对传输差错进行纠正。 ( X )四、问答题:1. 从实现的功能看,什么叫计算机网络?答:为了方便用户,将分布在不同地理位置的计算机资源实现信息交流和资源的共享。计算机资源主要指计算机硬件、软件与数据。数据是信息的载体。2. 同步通信与异步通信有何不同?答:在同步通信传送时,发送方和接收方将整个字符组作为一个单位传送,数据传输的效率高。一般用在高速传输数据的系统中。异步通信方式实现比较容易,因为每个字符都加上了同步信息,计时的漂移不会产生大的积累,但每个字符需要多占2-3位的开销,适用于低速终端设备。由于这种方式的字符发送是独立的,所以也称为面向字符的异步传输方式。3. 什么是对等网?答:对等网与客户机/服务器系统:倘若每台计算机的地位平等,都允许使用其它计算机内部的资源,这种网就称为对等局域网,简称对等网。4. 简述分组存储转发的工作方式答:<1>传输报文被分成大小有一定限制的分组传输<2>分组按目标地址在分组交换网中以点对点方式递交<3>各交换节点对每一个到达的分组完整接受(存储)、经检查无错后选择下一站点地址往下递交(转发)<4>最终分组被递交到目的主机5. 计算机网络的三大组成部分的名字叫什么?各起什么作用?答:<1>通信子网:担负整个计算机网络的通信传输功能,连接各通信媒体,实现相邻节点间的通信控制,与不同通信网络互连,为计算机网络上层提供有服务质量保证的服务。通信子网由物理信道、通信链路控制软件组成(或传输介质、路由器以及主机组成)。<2>高层服务:实现可靠的端到端数据传输服务,对上层屏蔽通信子网的技术细节,使应用与网络通信彻底分开。<3>应用服务:建立网络应用支撑环境,使网络应用与传输细节分离。网络支撑环境包括:网络目录服务、网络域名服务、网络数据库服务。6. 包交换与电路交换相比有什么特点?答:包交换与电路交换比在以下方面不同<1>包交换不使用独占信道,而仅在需要时申请信道带宽,随后释放<2>由于包交换一般采用共享信道,传输时延较电路交换大<3>包交换传输对通信子网不透明,子网解析包地址等通信参数<4>包交换采用存储转发方式通信,对通信有差错及流量控制,而电路交换不实现类似控制<5>各包在交换时其传输路径是不定的,在电路交换中所有数据沿同一路径传输<6>包交换不需连接建立呼叫<7>包交换网有可能产生拥塞,电路交换则不会<8>包交换以通信量计费,电路交换以通信时间计费7. 请用一句话来简单概括网络模型的每一层的功能。答:<1>物理层用于传输原始比特流信息;<2>数据链路层保证相邻节点通信的正确<3>网络层(IP层)保证分组按正确路由传输<4>传输层实现端到端的无差错传输<5>应用层保证用户高效方便地使用网络资源8. 画出OSI分层网络体系的模型。(参教材P23)9. TCP传输若发生阻塞发送窗口为0,此后阻塞解除,发送窗口如何变化?答:在发生阻塞时,TCP尝试发送一个数据块报文,收到应答后发送两块加倍数据量的报文,若应答正常,则再次加倍发送,直至发送数据量为接收缓冲区的一半时维持该数据量进行通信。10. 什么是通信协议?一个通信协议应包含什么内容?答:通信协议是通信双方为完成通信而共同遵守的一组通信规则。一个通信协议应包含语法(数据格式)、语义(报文解释)、时序(事件发生顺序)三方面的规定。11. 不同的物理网络怎样才能实现互连?网络的互连有多少种连法?答:网络互连根据使用设备的不同有<1>中继器互连<2>集线器(或交换机)互连<3>网桥互连<4>路由器互连<5>网关互连12. 滑动窗口协议是怎样用于流控制的?答:滑动窗口协议通过调整发送窗口的大小来控制流量。13. 简述IEEE 802.2的主要内容。答:IEEE 802.2在局域网体系中为逻辑链路控制子层,是高层与局域网MAC子层的接口层,实现数据链路层的高级控制功能。14. ICMP是什么?答:ICMP(Internet Control Message Protocol)即因特网消息控制协议15. 简述VLAN(虚拟子网)的作用?答:简化网络设计与网络管理,降低建造成本;隔离子网通信,提高网络安全;减少网络流量;避免广播风暴16. 网络应用的支撑环境主要指那些内容?答:网络应用的支撑环境主要指:网络目录服务、网络域名服务、网络数据库服务17. 计算机网络高层应用环境应该是什么样的?18. 什么是IEEE?组织是如何影响网络的?19. 说明曼彻斯特编码及它是如何使用的。20. 什么情况下在网络中设置路由是无效的?答:在局域网和队列双总线的城域网中不需要设路由器。21. 什么是网络分段,分段能解决什么问题?答:将一个物理网划分为多个逻辑子网的技术即为网络分段;网络分段简化网络设计与网络管理,降低建造成本;隔离子网通信,提高网络安全;减少网络流量;避免广播风暴22. 在一个带宽为4000Hz并用4种电压对数据编码的传输系统上,用Nyquist定理计算其最大传输数据速率。解:Nyquist定理表述:理想信道最高数据传输速率为 2Wlog2V (bps)本题带宽为W = 4000Hz电平级为 V = 4得该信道最大数据传输速率为 2 X 4000 X log24 = 16000(bps)23. 如果一个给定路由器最多连接到K个网络,连接N个网络需要多少路由器?写一个给定N关于K的方程。答:路由器串联时可连接最多网络设需R个路由器当 R = 1 时 可连接K = K - 2(1 - 1)个网络R = 2 时 可连接 2K - 2 = 2K - 2(2 - 1)个网络R = 3 时 可连接 3K - 4 = 3K - 2(3 - 1)个网络依此类推 R为任意数时,最多可连接网络数为 RK - 2(R - 1) 或 R(K - 2) + 2N个网络所需路由器在R与R + 1间,即R(K - 2) + 2 ≤ N < (R + 1)(K - 2) + 2解不等式得R ≤ (N - 2)/(K - 2) 且 R > (N - 2)/(K - 2) - 1其中 K > 224. 写出完整的标记,使得字符串"广西电大"成为http://www.gxou.com.cn的超链接。答:广西电大复习题补充:1. 接收端发现有差错时,设法通知发送端重发,直到正确的信息码收到为止,这种差错控制方法称为自动请求重发。2. 简述下列缩略语的含义:ARP、TCP、IP、ICMP、HTTP、HTML、IEEE、SMTP、LAN、WAN3. 一个TCP连接地址应由两部分组成,分别为主机地址、端口地址。4. 一个TCP连接的过程分三步:连接建立、连接使用、连接释放。5. 把十六位制的IP地址D224AFB6转换成用点分割的十进制形式,并说明该种地址最多能包含多少子网,每子网最多能包含多少主机。(210.36.175.182 C类 网络╳主机=2097152╳254)6. 准确计算A、B、C类IP地址可有多少网络,每网络可有多少主机,子网屏蔽码是什么。7. 简述子网掩码的作用。(参与子网划分、路由寻址)8. 用速率为1200bps的调制解调器通信(无校验,一位停止位)。一分钟内最多能传输多少个汉字(双字节)?(异步传输格式:每字节=起始位(1)+数据位(8)+停止位(1)=10每汉字需两字节,1200bps╳60秒÷20=3600个汉字)9. 某CSMA/CD基带总线网长度为1000米,信号传输速度为200m/μs,假如位于总线两端的站点在发送数据时发生了冲突,问:a) 该两站间信号传播延迟时间是多少?b) 最多经过多长时间才能检测到冲突?(传播延迟τ=1000÷200=5μs 最长冲突检测时间=2τ=10μs10. 设信道速率为4kb/s,采用停止等待协议。传播延迟tp=20ms。确认帧长度和处理时间均忽略。问帧长为多少时才能使信道利用率至少为50%。(信道时间可分为:传输时间tt+2×传输延迟时间tp(即发送延迟和确认延迟)+收站处理时间tr忽略tr,则传输时间由 tt+tp 组成,传输效率为:信道占用÷(信道占用+信道空闲)= tt ÷(tt + 2tp )≥ 50% (式I) 另设帧长为λ 则tt =λ÷ 4 Kbps (式II) 连立上两式即可解出λ)11. 有两个LAN桥接器,各连接一对令牌总线局域网。第一个桥接器必须每秒钟转发1000个分组(分组长度为512字节),第二个桥接器必须每秒钟转发500个分组(分组长度为2048字节),计算出每个桥接器的转发速度,并说明哪一个桥接器需用较快的CPU?12. 若某个局域网通过路由器与X.25网互连。若路由器每秒转发200个分组,分组长度为128字节,试问:a) 路由器的转发速度为多少Mbps?b) 计算一分钟内的通信量费用(通信量按段计算,每段64字节,收费0.003元)。13. 使用FTP下载一名为flash4full.exe的文件,出现如下提示信息:ftp>get flash4full.exe200 PORT command successful.150 Opening BINARY mode data connection for flash4full.exe(10601499 bytes).226 Transfer complete.ftp: 10601499 bytes received in 14.19Seconds 747.06Kbytes/sec.ftp>从以上数据推算当前网络的线路传输速率大约是多少(Kbit/sec)?该速率未考虑传输开销,试举例说明两种传输开销,以证明实际的线路传输速率应比该速率大还是小。 (提示:以上数字均是用户数据统计,未包含TCP及IP包协议数据及更底层的协议数据,而这些协议数据是传输用户数据所必须付出的开销,因此实际的线路传输数据量比用户数据量大,实际的线路传输速率应比该速率大)
      急急急求:《计算机网络与Internet教程》的复习题

      计算机网络 tcp问题。

      这是啥时候的题…
      计算机网络 tcp问题。

      TCP协议详解及实战解析【精心整理收藏】

      TCP协议是在TCP/IP协议模型中的运输层中很重要的一个协议、负责处理主机端口层面之间的数据传输。主要有以下特点:1.TCP是面向链接的协议,在数据传输之前需要通过三次握手建立TCP链接,当数据传递完成之后,需要通过四次挥手进行连接释放。2.每一条TCP通信都是两台主机和主机之间的,是点对点传输的协议。3.TCP提供可靠的、无差错、不丢失、不重复,按序到达的服务。4.TCP的通信双方在连接建立的任何时候都可以发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。5.面向字节流。在数据传输的过程中如果报文比较长的话TCP会进行数据分段传输,每一条分段的TCP传输信息都带有分段的序号,每一段都包含一部分字节流。接收方根据每段携带的的序号信息进行数据拼接,最终拼接出来初始的传输数据。但是在整个传输的过程中每一段TCP携带的都是被切割的字节流数据。所以说TCP是面向字节流的。a.TCP和UDP在发送报文时所采用的方式完全不同。TCP并不关心应用程序一次把多长的报文发送到TCP缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用程序给出的)。b.如果应用程序传送到TCP缓存的数据块太大,TCP就可以把它划分短一些再传。TCP也可以等待积累有足够多的字节后再构建成报文段发送出去。各字段含义:源端口:发送端的端口号目的端口:接收端的端口号序号:TCP将发送报文分段传输的时候会给每一段加上序号,接收端也可以根据这个序号来判断数据拼接的顺序,主要用来解决网络报乱序的问题确认号:确认号为接收端收到数据之后进行排序确认以及发送下一次期待接收到的序号,数值 = 接收到的发送号 + 1数据偏移:占4比特,表示数据开始的地方离TCP段的起始处有多远。实际上就是TCP段首部的长度。由于首部长度不固定,因此数据偏移字段是必要的。数据偏移以32位为长度单位,因此TCP首部的最大长度是60(15*4)个字节。控制位:URG:此标志表示TCP包的紧急指针域有效,用来保证TCP连接不被中断,并且督促 中间层设备要尽快处理这些数据;ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1, 为1的时候表示应答域有效,反之为0;PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序, 而不是在缓冲区中排队;RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1, ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送 一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这 种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全 的主机将会强制要求一个连接严格的进行TCP的三次握手;FIN: 表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志 位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。窗口:TCP里很重要的一个机制,占2字节,表示报文段发送方期望接收的字节数,可接收的序号范围是从接收方的确认号开始到确认号加上窗口大小之间的数据。后面会有实例讲解。校验和:校验和包含了伪首部、TCP首部和数据,校验和是TCP强制要求的,由发送方计算,接收方验证紧急指针:URG标志为1时,紧急指针有效,表示数据需要优先处理。紧急指针指出在TCP段中的紧急数据的最后一个字节的序号,使接收方可以知道紧急数据共有多长。选项:最常用的选项是最大段大小(Maximum Segment Size,MSS),向对方通知本机可以接收的最大TCP段长度。MSS选项只在建立连接的请求中发送。放在以太网帧里看TCP的位置TCP 数据包在 IP 数据包的负载里面。它的头信息最少也需要20字节,因此 TCP 数据包的最大负载是 1480 - 20 = 1460 字节。由于 IP 和 TCP 协议往往有额外的头信息,所以 TCP 负载实际为1400字节左右。因此,一条1500字节的信息需要两个 TCP 数据包。HTTP/2 协议的一大改进, 就是压缩 HTTP 协议的头信息,使得一个 HTTP 请求可以放在一个 TCP 数据包里面,而不是分成多个,这样就提高了速度。以太网数据包的负载是1500字节,TCP 数据包的负载在1400字节左右一个包1400字节,那么一次性发送大量数据,就必须分成多个包。比如,一个 10MB 的文件,需要发送7100多个包。发送的时候,TCP 协议为每个包编号(sequence number,简称 SEQ),以便接收的一方按照顺序还原。万一发生丢包,也可以知道丢失的是哪一个包。第一个包的编号是一个随机数。为了便于理解,这里就把它称为1号包。假定这个包的负载长度是100字节,那么可以推算出下一个包的编号应该是101。这就是说,每个数据包都可以得到两个编号:自身的编号,以及下一个包的编号。接收方由此知道,应该按照什么顺序将它们还原成原始文件。收到 TCP 数据包以后,组装还原是操作系统完成的。应用程序不会直接处理 TCP 数据包。对于应用程序来说,不用关心数据通信的细节。除非线路异常,否则收到的总是完整的数据。应用程序需要的数据放在 TCP 数据包里面,有自己的格式(比如 HTTP 协议)。TCP 并没有提供任何机制,表示原始文件的大小,这由应用层的协议来规定。比如,HTTP 协议就有一个头信息Content-Length,表示信息体的大小。对于操作系统来说,就是持续地接收 TCP 数据包,将它们按照顺序组装好,一个包都不少。操作系统不会去处理 TCP 数据包里面的数据。一旦组装好 TCP 数据包,就把它们转交给应用程序。TCP 数据包里面有一个端口(port)参数,就是用来指定转交给监听该端口的应用程序。应用程序收到组装好的原始数据,以浏览器为例,就会根据 HTTP 协议的Content-Length字段正确读出一段段的数据。这也意味着,一次 TCP 通信可以包括多个 HTTP 通信。服务器发送数据包,当然越快越好,最好一次性全发出去。但是,发得太快,就有可能丢包。带宽小、路由器过热、缓存溢出等许多因素都会导致丢包。线路不好的话,发得越快,丢得越多。最理想的状态是,在线路允许的情况下,达到最高速率。但是我们怎么知道,对方线路的理想速率是多少呢?答案就是慢慢试。TCP 协议为了做到效率与可靠性的统一,设计了一个慢启动(slow start)机制。开始的时候,发送得较慢,然后根据丢包的情况,调整速率:如果不丢包,就加快发送速度;如果丢包,就降低发送速度。Linux 内核里面 设定 了(常量TCP_INIT_CWND),刚开始通信的时候,发送方一次性发送10个数据包,即"发送窗口"的大小为10。然后停下来,等待接收方的确认,再继续发送。默认情况下,接收方每收到 两个TCP 数据包,就要 发送 一个确认消息。"确认"的英语是 acknowledgement,所以这个确认消息就简称 ACK。ACK 携带两个信息。发送方有了这两个信息,再加上自己已经发出的数据包的最新编号,就会推测出接收方大概的接收速度,从而降低或增加发送速率。这被称为"发送窗口",这个窗口的大小是可变的。注意,由于 TCP 通信是双向的,所以双方都需要发送 ACK。两方的窗口大小,很可能是不一样的。而且 ACK 只是很简单的几个字段,通常与数据合并在一个数据包里面发送。即使对于带宽很大、线路很好的连接,TCP 也总是从10个数据包开始慢慢试,过了一段时间以后,才达到最高的传输速率。这就是 TCP 的慢启动。TCP 协议可以保证数据通信的完整性,这是怎么做到的?前面说过,每一个数据包都带有下一个数据包的编号。如果下一个数据包没有收到,那么 ACK 的编号就不会发生变化。举例来说,现在收到了4号包,但是没有收到5号包。ACK 就会记录,期待收到5号包。过了一段时间,5号包收到了,那么下一轮 ACK 会更新编号。如果5号包还是没收到,但是收到了6号包或7号包,那么 ACK 里面的编号不会变化,总是显示5号包。这会导致大量重复内容的 ACK。如果发送方发现收到 三个 连续的重复 ACK,或者超时了还没有收到任何 ACK,就会确认丢包,即5号包遗失了,从而再次发送这个包。通过这种机制,TCP 保证了不会有数据包丢失。TCP是一个滑动窗口协议,即一个TCP连接的发送端在某个时刻能发多少数据是由滑动窗口控制的,而滑动窗口的大小实际上是由两个窗口共同决定的,一个是接收端的通告窗口,这个窗口值在TCP协议头部信息中有,会随着数据的ACK包发送给发送端,这个值表示的是在接收端的TCP协议缓存中还有多少剩余空间,发送端必须保证发送的数据不超过这个剩余空间以免造成缓冲区溢出,这个窗口是接收端用来进行流量限制的,在传输过程中,通告窗口大小与接收端的进程取出数据的快慢有关。另一个窗口是发送端的拥塞窗口(Congestion window),由发送端维护这个值,在协议头部信息中没有,滑动窗口的大小就是通告窗口和拥塞窗口的较小值,所以拥塞窗口也看做是发送端用来进行流量控制的窗口。滑动窗口的左边沿向右移动称为窗口合拢,发生在发送的数据被确认时(此时,表明数据已被接收端收到,不会再被需要重传,可以从发送端的发送缓存中清除了),滑动窗口的右边沿向右移动称为窗口张开,发生在接收进程从接收端协议缓存中取出数据时。随着发送端不断收到的被发送数据的ACK包,根据ACK包中的确认序号和通告窗口大小使滑动窗口得以不断的合拢和张开,形成滑动窗口的向前滑动。如果接收进程一直不取数据,则会出现0窗口现象,即滑动窗口左边沿与右边沿重合,此时窗口大小为0,就无法再发送数据。在TCP里,接收端(B)会给发送端(A)报一个窗口的大小,叫Advertised window。1.在没有收到B的确认情况下,A可以连续把窗口内的数据都发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。2.发送窗口里面的序号表示允许发送的序号。显然,窗口越大,发送方就可以在收到对方确认之前连续发送更多数据,因而可能获得更高的传输效率。但接收方必须来得及处理这些收到的数据。3.发送窗口后沿的后面部分表示已发送且已收到确认。这些数据显然不需要再保留了。4.发送窗口前沿的前面部分表示不允许发送的,应为接收方都没有为这部分数据保留临时存放的缓存空间。5.发送窗口后沿的变化情况有两种:不动(没有收到新的确认)和前移(收到了新的确认)6.发送窗口前沿的变化情况有两种:不断向前移或可能不动(没收到新的确认)TCP的发送方在规定时间内没有收到确认就要重传已发送的报文段。这种重传的概念很简单,但重传时间的选择确是TCP最复杂的问题之一。TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到响应的确认的时间这两个时间之差就是报文段的往返时间RTT。TCP保留了RTT的一个加权平均往返时间。超时重传时间RTO略大于加权平均往返时间RTT:即Round Trip Time,表示从发送端到接收端的一去一回需要的时间,tcp在数据传输过程中会对RTT进行采样(即对发送的数据包及其ACK的时间差进行测量,并根据测量值更新RTT值,具体的算法TCPIP详解里面有),TCP根据得到的RTT值更新RTO值,即Retransmission TimeOut,就是重传间隔,发送端对每个发出的数据包进行计时,如果在RTO时间内没有收到所发出的数据包的对应ACK,则任务数据包丢失,将重传数据。一般RTO值都比采样得到的RTT值要大。如果收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,那么能否设法只传送缺少的数据而不重传已经正确到达接收方的数据?答案是可以的,选择确认就是一种可行的处理方法。如果要使用选项确认SACK,那么在建立TCP连接时,就要在TCP首部的选项中加上“允许SACK”的选项,而双方必须都事先商定好。如果使用选择确认,那么原来首部中的“确认号字段”的用法仍然不变。SACK文档并没有明确发送方应当怎么响应SACK.因此大多数的实现还是重传所有未被确认的数据块。一般说来,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。在计算机网络中的链路容量,交换节点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞。拥塞控制方法:1.慢开始和拥塞避免2.快重传和快恢复3.随机早期检测1.一开始,客户端和服务端都处于CLOSED状态2.先是服务端主动监听某个端口,处于LISTEN状态(比如服务端启动,开始监听)。3.客户端主动发起连接SYN,之后处于SYN-SENT状态(第一次握手,发送 SYN = 1 ACK = 0 seq = x ack = 0)。4.服务端收到发起的连接,返回SYN,并且ACK客户端的SYN,之后处于SYN-RCVD状态(第二次握手,发送 SYN = 1 ACK = 1 seq = y ack = x + 1)。5.客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,之后处于ESTABLISHED状态(第三次握手,发送 SYN = 0 ACK = 1 seq = x + 1 ack = y + 1)。6.服务端收到客户端的ACK之后,处于ESTABLISHED状态。(需要注意的是,有可能X和Y是相等的,可能都是0,因为他们代表了各自发送报文段的序号。)TCP连接释放四次挥手1.当前A和B都处于ESTAB-LISHED状态。2.A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。3.B收到连接释放报文段后即发出确认,然后B进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时应通知高层应用进程,因而从A到B这个方向的连接就释放了,这时TCP连接处于半关闭状态,即A已经没有数据发送了。从B到A这个方向的连接并未关闭,这个状态可能会持续一些时间。4.A收到来自B的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文端。5.若B已经没有向A发送的数据,B发出连接释放信号,这时B进入LAST-ACK(最后确认)状态等待A的确认。6.A再收到B的连接释放消息后,必须对此发出确认,然后进入TIME-WAIT(时间等待)状态。请注意,现在TCP连接还没有释放掉,必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入CLOSED状态。7。B收到A发出的确认消息后,进入CLOSED状态。以请求百度为例,看一下三次握手真实数据的TCP连接建立过程我们再来看四次挥手。TCP断开连接时,会有四次挥手过程,标志位是FIN,我们在封包列表中找到对应位置,理论上应该找到4个数据包,但我试了好几次,实际只抓到3个数据包。查了相关资料,说是因为服务器端在给客户端传回的过程中,将两个连续发送的包进行了合并。因此下面会按照合并后的三次挥手解释,若有错误之处请指出。第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。原因有二:一、保证TCP协议的全双工连接能够可靠关闭二、保证这次连接的重复数据段从网络中消失先说第一点,如果Client直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因,导致Server没有收到Client最后回复的ACK。那么Server就会在超时之后继续发送FIN,此时由于Client已经CLOSED了,就找不到与重发的FIN对应的连接,最后Server就会收到RST而不是ACK,Server就会以为是连接错误把问题报告给高层。这样的情况虽然不会造成数据丢失,但是却导致TCP协议不符合可靠连接的要求。所以,Client不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。再说第二点,如果Client直接CLOSED,然后又再向Server发起一个新连接,我们不能保证这个新连接与刚关闭的连接的端口号是不同的。也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,由于新连接和老连接的端口号是一样的,又因为TCP协议判断不同连接的依据是socket pair,于是,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。硬件速度网络和服务器的负载请求和响应报文的尺寸客户端和服务器之间的距离TCP 协议的技术复杂性TCP 连接建立握手;TCP 慢启动拥塞控制;数据聚集的 Nagle 算法;用于捎带确认的 TCP 延迟确认算法;TIME_WAIT 时延和端口耗尽。介绍完毕,就这?是的,就这。补充:大部分内容为网络整理,方便自己学习回顾,参考文章:TCP 协议简介TCP协议图文详解什么是TCP协议?wireshark抓包分析——TCP/IP协议TCP协议的三次握手和四次挥手TCP协议详解TCP带宽和时延的研究(1)
      TCP协议详解及实战解析【精心整理收藏】

      TCP 连接详解

      1、先提出一个问题, 可以不进行三次握手直接往服务端发送数据包吗?是不可以的,也是可以的;1)不可以是因为现在的TCP连接标准和规范要求传输数据前先确认两端的状态,有一端状态不OK的话,发数据包有什么用呢;2)说可以是站在网络连接的角度,像 UDP 协议;2、TCP三次握手1)标志位、随机序列号和确认序列号是在数据包的 TCP 首部里面;2)几个状态是指客户端和服务端连接过程中 socket 状态;3)第一次握手,客户端向服务端发送数据包,该数据包中 SYN 标志位为 1,还有随机生成的序列号c_seq,客户端状态改为 SYN-SENT;4)第二次握手,服务端接收到客户端发过来的数据包中 SYN 标志位为 1,就知道客户端想和自己建立连接,服务端会根据自身的情况决定是拒绝连接,或确定连接,还是丢弃该数据包;拒绝连接,会往客户端发一个数据包,该数据包中 RST 标志位为 1,客户端会报 Connection refused;丢弃客户端的数据包,超过一定时间后客户端会报 Connection timeout;确定连接时会往客户端发一个数据包,该数据包中 ACK 标志位为 1,确认序列号 ack=c_seq+1,SYN 标志位为 1,随机序列号 s_seq,状态由 LISTEN 改为 SYN-RCVD;5)第三次握手,客户端接收到数据包会做校验,校验ACK标志位和确认序列号 ack=c_seq+1,如果确定是服务端的确认数据包,改自己的状态为 ESTABLISHED,并给服务端发确认数据包;6)服务端接到客户端数据包,会校验ACK标志位和确认序列号 ack=s_seq+1,改自己的状态为 ESTABLISHED,之后就可以进行数据传输了;7)建立连接时的数据包是没有实际内容的,没有应用层的数据;8)建立连接之后发起的请求数据包,每个数据包都会封装各层协议的头部信息,标志位ACK为1,其他标志位变动;9)网络进程间的通信,一台服务器内部的进程间通信不用这样;3、TCP 连接三次握手抓包1)Socket 在 linux 系统中是一种特殊的文件,因为 linux 系统的理念就是【一切皆文件】,是系统内核级的功能;2)以上定义比较具体,可以抽象来理解,是一个内核级的用于通信的功能层,包含一组接口函数,这些函数实际就是操作 socket 文件句柄文件描述符;一个 TCP 连接由四要素【源IP、源Port、目标IP、目标Port】唯一标识,也即 socket 由这四要素唯一确定;一个 TCP 连接的建立也就是客户端、服务端创建了相对应的一对 socket,客户端和服务端之间的通信也就是这对 socket 间的通信(物理层面是网卡在发送/接收比特流数据);3)一个服务与另一个服务建立连接,他们的端口是什么呢?客户端发出请求端口号是随机的,服务端是进程监听的端口号;2、socket 主要函数介绍1、进程通信,一个进程只有一个监听 socket,connect socket 是针对一个客户的一个连接的,有很多个; 2、connect 函数内部在发起请求前会找系统随机一个端口号; 3、连接建立后,客户端发起请求传输数据,服务端会直接交给 connect socket 处理,不会交给监听 socket 处理;4、监听 socket 在处理客户端请求时,如果此时其他客户端发请求过来,监听 socket 是没法处理的,此时系统会维护请求队列由 backlog 参数指定;全连接队列(completed connection queue)半连接队列(incomplete connection queue)Linux 内核 2.2 版本之前,backlog 的大小等于全连接队列和半连接队列之和;Linux 内核 2.2 版本之后,backlog 的大小之和全连接队列有关系:半连接队列大小由 /proc/sys/net/ipv4/tcp_max_syn_backlog 文件指定,可以开很大;全连接队列大小由 /proc/sys/net/core/somaxconn 文件和 backlog 参数指定,取两个中的最小值;tomcat acceptCount 就是配置全连接队列大小;3、socket 函数在建立连接和数据传输的大概使用情况4、TCP首部结构1)2的16次方等于 65536,所以系统中端口号的限制个数为 65536,一般1024以下端口被系统占用;2)标志位这里是 6 个,还有其他标志位的,只是这 6 个标志位常用;3)seq 序列号,ack 确认序列号,序列号在数据传输时分包用到。三次握手时 seq 序列号是随机的,没有实际意义;4)TCP 包首部后面接着的是 IP 包首部,再紧接着的是以太网包首部,其实都是加 0101010101 二进制位;几个常用标志位,首先一个标志位占一个 bit 位,只能是二进制中的 1 或 0;1)SYN,简写 S,请求标志位,用来建立连接。在TCP三次握手中收到带有该标志位的数据包,表示对方想与己方建立连接;2)ACK,简写【.】,请求确认/应答标志位,用于对对方的请求进行应答,对方收到含该标志位的数据包,会知道己方存在且可用。也会用在连接建立之后,己方发送响应数据给对方的数据包中;3)FIN,简写 F,请求断开标志位,用于断开连接。对方收到己方的含该标志位的数据包,就知道己方想与它断开连接,不再保持连接;4)RST,简写 R,请求复位标志位,因网络或己方服务原因导致有数据包丢失,己方接收到的数据包序列号与上一个数据包的序列号不衔接,那己方会发送含该标志位的数据包告诉对方,对方接收到含该标志位的数据包就知道己方要求它重新三次握手建立连接并重新发送丢失的数据包,一般断点续传会用到该标志位;还有就是如果对方发过来的数据错了,有问题,己方也会发送含该标志位的数据包;5)PSH,简写 P,推送标志位,表示收到数据包后要立即交给应用程序去处理,不应该放在缓存中,read()/write() 都有缓存区;6)URG,简写 U,紧急标志位,该标志位表示 tcp 包首部中的紧急指针域有效,督促中间层尽快处理;7)ECE,在保留位中;8)CWR,在保留位中;5、TCP 抓包1)服务端会根据自身情况,没有要处理的数据时会把第二次和第三次挥手合并成一次挥手,此时标志位 FIN=1 / ACK=1;2)MSL 是 Maximum Segment Lifetime 缩写,指数据包在网络中最大生存时间,RFC 建议是 2分钟;详细描述:1)客户端、服务端都可以主动发起断开连接;2)第一次挥手,客户端向服务端发送含 FIN=1 标志位的数据包,随机序列号 seq=m,此时客户端状态由 ESTABLISHED 变为 FIN_WAIT_1;3)第二次挥手,服务端收到含 FIN=1 标志位的数据包,就知道客户端要断开连接,服务端会向客户端发送含 ACK=1 标志位的应答数据包,确认序列号 ack=m+1,此时服务端状态由 ESTABLISHED 变为 CLOSE_WAIT;4)客户端收到含 ACK=1 标志位的应答数据包,知道服务端的可以断开的意思,此时客户端状态由 FIN_WAIT_1 变为 FIN_WAIT_2;(第一、二次挥手也只是双方交换一下意见而已)5)第三次挥手,服务端处理完剩下的数据后再次向客户端发送含 FIN=1 标志位的数据包,随机序列号 seq=n,告诉客户端现在可以真正的断开连接了,此时服务端状态由 CLOSE_WAIT 变为 LAST_ACK;6)第四次挥手,客户端收到服务端再次发送的含 FIN=1 标志位的数据包,就知道服务端处理好了可以断开连接了,但是客户端为了慎重起见,不会立马关闭连接,而是改状态,且向服务端发送含 ACK=1 标志位的应答数据包,确认序列号 ack=n+1,此时客户端状态由 FIN_WAIT_2 变为 TIME_WAIT;等待 2 个MSL时间还是未收到服务端发过来的数据,则表明服务端已经关闭连接了,客户端也会关闭连接释放资源,此时客户端状态由 TIME_WAIT 变为 CLOSED;也就是说 TIME_WAIT 状态存在时长在 1~4分钟;7)服务端收到含 ACK=1 标志位的应答数据包,知道客户端确认可以断开了,就立即关闭连接释放资源,此时服务端状态由 LAST_ACK 变为 CLOSED;SYN 洪水攻击(SYN Flood)是一种 DoS攻击(拒绝服务攻击),大概原理是伪造大量的TCP请求,服务端收到大量的第一次握手的数据包,且都会发第二次握手数据包去回应,但是因为 IP 是伪造的,一直都不会有第三次握手数据包,导致服务端存在大量的半连接,即 SYN_RCVD 状态的连接,导致半连接队列被塞满,且服务端默认会发 5 个第二次握手数据包,耗费大量 CPU 和内存资源,使得正常的连接请求进不来;
      TCP 连接详解

      tcp/ip连接与释放问题

      你说的是tcp的半关闭,也就是说一端在结束它的的发送后还能接收来自另一端的数据的能力,但你说的好像反了吧,应该是A还能接收B传送的数据,tcp的半关闭一般用的很少。
      在双向模式通信下.A向B发送一个断开信号,B回答可以断开,那表示的是关闭了A向B的“半”连接。因为是双向通信,所以B还是可以向A发数据,所以要关闭TCP连接要4次,有分就加点分吧。穷了
      tcp/ip连接与释放问题

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/45420.html

          热门文章

          文章分类