现在的位置: 首页 > 综合 > 正文

计算机网络学习三

2018年12月16日 ⁄ 综合 ⁄ 共 3075字 ⁄ 字号 评论关闭

1.TCP如何保证可靠传输

TCP数据包头有校验和,用来检验数据的正确性。TCP连接通过发送数据的SYN号以及接收方返回的ACK来判断数据是否发送成功。每次发送数据时,会启动一个定时器,如果在一定时间内没有收到ACK,发送方会重新发送数据。TCP利用校验和校验,如果校验失败就会丢弃数据包,并且不会返回ACK。TCP传送的数据可能无序,如果有需要,TCP可以将收到的数据进行排序。TCP的接收端必须丢弃重复的数据包。TCP提供流量控制,通过设置缓冲区大小来控制。

2.TCP的三次握手和四次放手

参见博文

3.Time_Wait状态的概念和意义

知道了TCP四次放手过程后,就有了概念,主动关闭的socket方(最后一个发送ACK的一方)发送ACK后,状态置为Time_Wait,等待2MSL时间,MSL是最大分节周期,这是一个IP数据包在互联网上所能存活的最长时间。为什么要存在TIme_Wait状态,一是最后的ACK是由请求方发送的,如果ACK没有发送到另一方的话,另一方会重新发送FIN,此时就需要TIme_Wait来保持请求方的信息状态,使它能够重新发送ACK。如果请求方处于关闭状态,就会响应RST,而不是ACK。RST是TCP6个标志比特之一,表示重置连接,复位连接;一是发送的ACK可能因为路由器的原因“迷路”,没有按时到达,会影响新的连接,所以经过2MSL后,上一次的连接中所有重复包都会消失。

4.滑动窗口协议与停止等待协议,后退n协议

滑动窗口协议指发送方发送数据时,在未接收到ACK之前,可以发送多个数据。由于发送方不必每发一个分组就等待ACK,因此提高了传输效率。如图:

每当收到一个ACK,窗口就向后滑动一个单位,图中窗口大小为6.

当发送窗口和接收窗口的大小都是1,就是停等协议。因为大小是1,所以每发送一个数据,就需要等待ACK,效率低,带宽利用率差,但是在网络差的情况下适用。

当发送窗口大小为n,接收窗口为1,就是后退n协议。如图:

发送方发送了10个数据,但是数据帧2返回ACK时出错,超时后发送方需要重传2-8的数据,接收方也必须将接收的3-8的数据丢弃。后退n提高了效率,但是在网络差的情况下,会导致数据重发,而且,有一个错误数据的话,后边的数据也要跟着重发。

5.TCP的流量控制和拥塞控制的实现原理

拥塞指网络资源无法满足用户的请求,包括带宽,路由等网络资源,从而使网络性能下降,丢包等。网络拥塞的原因有很多,解决的思路一个是通过端与端的拥塞控制,一个是通过网络辅助的拥塞控制。由于TCP运行在两个端,所以需要使用端到端拥塞控制,因为IP层不向端系统提供显式网络拥塞反馈。TCP采用的控制思想是让发送方根据所感知到的网络拥塞程度来限制其发送的速度。如何做到呢?TCP通过滑动窗口控制传输速度,其次TCP发送方通过丢包事件来感知网络拥塞程度,当接受到三个冗余ACK或等待一个TTL时,会丢包。当出现丢包事件后,让发送方降低发送速率,当无拥塞时,缓慢增加传输速率。核心算法是慢启动,拥塞避免,快速重传,快速回复。慢启动是在TCP建立连接时,因为不知道网络拥塞情况,所以先按cwnd大小发送,每受到一个ACK,cwnd+1;拥塞避免:当cwnd到达一个临界值,试探性发送一个数据包,如果超时,为避免拥塞,将cwnd-1.快速回复和重传是发送数据中出错后的纠错算法。

6.TCP快速重传和快速恢复算法

TCP传输中,会启动一个定时器,来判定超时重传。如果发送方收到连续3个相同的ACK,就应该意识到数据包丢失了,这是不需要等待超时重传,而是直接重新传递,这个叫快速重传。快速重传后执行快速恢复算法,而不是慢启动过程。

快速重传Reno算法:

  1. 收到连续相等的3个ACK,把ssthresh设置为cwnd的一半,然后把cwnd设置为ssthresh+3.+3是因为有3个ACK,表示3个数据包离开网络。并重新发送丢失的数据包。
  2. 再次收到重复的ACK时,cwnd+1.
  3. 当收到新的ACK时,说明新的数据已被确认,令cwnd = ssthresh。因为丢包已经重传了,恢复过程也结束了,所以需要进入拥塞避免状态。

可以看出Reno只是针对一个包而言,如果丢失多个包,则不成立。在此基础上,建立了Newreno算法,不同之处是在收到新的ACK后,不是立即进入拥塞避免状态,而是等到接受全部窗口内数据包的ACK,在进入拥塞避免状态。

SACK是TCP的新确认机制,TCP通常会确认到连续的最后一个数据包,SACK则会确认收到的每一个,并把是否乱续的信息一并通过ACK发送过去,发送方就不需要盲目的重传了,有了SACK,就不需要使用Newreno了。

7.TCTP和FTP的区别

FTP是文件传输协议,用于两台主机间传输文件,FTP允许用户操作文件目录,而TFTP是一种简化的FTP,因此操作也比较简单,只能发送和接收文件,而且必须知道想要的文件名和文件位置。也因此TFTP使用起来方便。

FTP是可靠的TCP连接,TFTP使用不可靠的UDP。

FTP可以操作文件和目录,TFTP只能传递文件。

FTP提供身份验证,TFTP没有身份验证。

FTP使用20号端口传处理数据,21号端口建立连接。TFTP使用69号端口传输。

8.HTTP基本格式

HTTP,超文本传输协议,HTTP请求由客户端发送给服务端,服务端发送响应信息给客户端。所以分为请求和响应两种格式。

HTTP请求格式由请求行,消息头,数据体。响应格式由状态行和数据正文组成。

请求行为METHOD + Request-URI + HTTP/VERSION, METHOD表示请求方法,包括GET/POST/HEAD,Request-URI是要请求的网址,HTTP/VERSION指使用的HTTP版本,如HTTP/1.1。

响应消息格式

HTTP/Version + Status-Code + Reason-Phrase. HTTP/Version表示支持的HTTP版本,Status-Code是一个3位数字,用来描述请求结果。常见的有200 请求成功,400 Bad Request, 401未授权,403 Forbidden,404 Not Found,500 Internal Server Error,503 Server Unavilible。Reason-Phrase状态描述,帮助用户理解。

通用消息头,是请求和响应两种都可以用到的消息头。

Cache-Control表示缓存的控制,Date头域,表示消息发送的时间;Progma头域,包含特定指令;Range头域用来请求数据体的子范围,如bytes=0-100。

请求头域还包括其他的头域,如Accept,Accept-Charset,Host,User-Agent等。

Host表示请求Internet的主机和端口;Referer允许用户制定请求URI的资源的源地址,这个可以时服务器生成回退连接,用来回退;User-Agent包含发出请求的用户的信息。

如:

GET /test.html HTTP/1.1
Accept:text/html, */*
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE 5.01;Windows NT 5.0;DigExt)
Host: www.baidu.com
Referer: http://www.baidu.com/index.html
Connection:Keep-Alive

抱歉!评论已关闭.