TCP/IP常见问题总结(二)

上一篇的传送门:TCP/IP常见问题总结(一)

6. TCP滑动窗体与回退N帧协议

TCP作为一个提供可靠服务的传输层协议,对于数据的发送必须拥有一套良好的反馈机制。让发送方得知接收方接收到了数据。而TCP下的反馈机制大部分借鉴与数据链路层的反馈机制。因此在此我们分析一下数据链路层的反馈机制。

1.停等协议

停等协议是一种很easy的协议,发送方在发送完一帧数据后就一直等待接收方的确认信号(ACK)。要是超时就重传数据。仅仅到收到ACK信号后才发送下一帧数据。停等协议效率较低(如此低效数据链路层都不适用,TCP协议当然也不用了),其示意图例如以下:

2.滑动窗体协议之GoBackN

因为发完一帧数据后发送方就挂起等待的行为很低效。因此滑动窗体协议诞生了。

滑动窗体的意思事实上就是一个缓冲区(发送方为发送窗体,接收方为接收窗体),缓冲区的内容会随着数据的发送而移动,因此称为滑动窗体。

我们先来讲讲滑动窗体协议中的GoBackN协议。

滑动窗体协议同意发送方连发数帧,每发一帧都相应 一个计时器timeout,而GoBackN协议要求发送方把丢失帧及其之后的帧所有重传(由于光凭一个ACK并不能确定哪些帧出现了丢失,ACK的含义是:期待接收序号为N的帧,之前所有的帧都已经成功收到并依此交给了上层)。其示意图例如以下:

上图因为Data2丢失,导致了Data2~Data5的重发(窗体大小为4)

3.滑动窗体协议之选择性重发

因为GoBackN中重发已经发送过的数据有点多余,因此选择性重发协议诞生了。选择性重发协议在ACK上引入了NAK的概念(否定性确认帧)。表示小于N的帧已经所有收到并交给了上层。而第N帧丢失了,要求重发第N帧。当发送方接到NAK后,仅仅要重发NAK表示的那一帧就可以。其示意图例如以下:

上图中发送方发送的Data2丢失了,因此收到了接收方的NAK2,然后发送方仅仅需又一次发送Data2就可以。

在TCP协议中使用的也是选择性重发协议。

7. Http的报文结构

Http协议(Hypertext Transfer Protocol)即超文本传输协议,它是一个应用层的基于TCP的无状态的协议,一般的通信过程为:建立连接、发送请求、响应请求、释放连接。其报文结构分为请求头与响应头两种:

请求头

请求头的第一行为请求行,其包含了三部分重要内容:

  1. 请求方法:主要为Get、Post等方法
  2. URL:即请求的地址
  3. 协议版本号:主要有Http1.0和Http1.1两种

请求头接下来是请求头部(也叫头域),头域的长度是不固定的,每个头域属性的格式为:字段名:值(如:Range:请求范围)

头域以下是一行空行。表示头域的结束。

空行下来就是请求要提交的数据。

响应头

与请求头类似,响应头的第一行为响应行,主要包括例如以下三部分内容:

  1. 版本号:使用的Http协议版本号
  2. 状态码:表示处理结果状态的数值,由三位数字组成,第一位数字表示响应的类型,主要有下面几种:
    • 1XX:表示server已接收了client请求,client可继续发送请求
    • 2XX:表示server已成功接收到请求并进行处理
    • 3XX:表示server要求client重定向
    • 4XX:表示client的请求有非法内容
    • 5XX:表示server未能正常处理client的请求而出现意外错误
  3. 原因短语:一串用于解释返回该状态码原因的字符串

响应行下来是响应头域,与请求头类似。

响应头域下来是一行空行表示响应头域的结束。

最后是响应头的响应实体内容。

8. Http的状态码含义

状态码位于响应头的响应行中。表示server处理结果的情况,由三位数字组成。第一位数字表示响应的类型。主要有下面几种:

1XX:表示server已接收了client请求。client可继续发送请求

100 (Continue/继续)

假设server收到头信息中带有100-continue的请求。这是指client询问能否够在兴许的请求中发送附件。在这样的情况下,server用100允许client继续或用417 (Expectation Failed)告诉client不允许接受附件。

这个状态码是 HTTP 1.1中新增加的。

101 (Switching Protocols/转换协议)

101 状态码是指server将依照其上的头信息变为一个不同的协议。这是 HTTP 1.1中新增加的。

2XX:表示server已成功接收到请求并进行处理

200 (OK/正常)

200 的意思是一切正常。一般用于对应GET和POST请求。

201 (Created/已创建)

201表示server在请求的响应中建立了新文档;应在定位头信息中给出它的URL。

202 (Accepted/接受)

202告诉client请求正在被运行,但还没有处理完。

203 (Non-Authoritative Information/非官方信息)

状态码203是表示文档被正常的返回,可是因为正在使用的是文档副本所以某些响应头信息可能不对。这是 HTTP 1.1中新增加的。

204 (No Content/无内容)

在并没有新文档的情况下,204确保浏览器继续显示先前的文档。这各状态码对于用户周期性的重载某一页很实用。而且你可以确定先前的页面是否已经更新。

可是,这样的方法对通过刷新响应头信息或等价的HTML标记自己主动重载的页面起作用,由于它会返回一个204状态码停止以后的重载。但基于JavaScript脚本的自己主动重载在这样的情况下仍然须要可以起作用。

205 (Reset Content/重置内容)

重置内容205的意思是尽管没有新文档但浏览器要重置文档显示。

这个状态码用于强迫浏览器清除表单域。这是 HTTP 1.1中新增加的。

206 (Partial Content/局部内容)

206是在server完毕了一个包括Range头信息的局部请求时被发送的。

这是 HTTP 1.1中新增加的。

3XX:表示server要求client重定向

300 (Multiple Choices/多重选择)

300表示被请求的文档能够在多个地方找到,并将在返回的文档中列出来。

假设server有首选设置,首选项将会被列于定位响应头信息中。

301 (Moved Permanently)

301状态是指所请求的文档在别的地方。文档新的URL会在定位响应头信息中给出。

浏览器会自己主动连接到新的URL。

302 (Found/找到)

与301有些类似,仅仅是定位头信息中所给的URL应被理解为暂时交换地址而不是永久的。

注意:在 HTTP 1.0中。消息是暂时移动(Moved Temporarily)的而不是被找到。

303 (See Other/參见其它信息)

这个状态码和 301、302 相似,仅仅是假设最初的请求是 POST。那么新文档(在定位头信息中给出)药用 GET 找回。这个状态码是新增加 HTTP 1.1中的。

304 (Not Modified/为修正)

当client有一个缓存的文档,通过提供一个 If-Modified-Since 头信息可指出client仅仅希望文档在指定日期之后有所改动时才会重载此文档,用这样的方式能够进行有条件的请求。304是指缓冲的版本号已经被更新而且client应刷新文档。另外。server将返回请求的文档及状态码 200。

305 (Use Proxy/使用代理)

305表示所请求的文档要通过定位头信息中的代理server获得。

这个状态码是新增加 HTTP 1.1中的。

307 (Temporary Redirect/暂时重定向)

浏览器处理307状态的规则与302同样。

307状态被增加到 HTTP 1.1中是因为很多浏览器在收到302响应时即使是原始消息为POST的情况下仍然运行了错误的转向。仅仅有在收到303响应时才假定浏览器会在POST请求时重定向。增加这个新的状态码的目的非常明白:在响应为303时依照GET和POST请求转向;而在307响应时则依照GET请求转向而不是POST请求。该状态码是新增加HTTP 1.1中的。

4XX:表示client的请求有非法内容

400 (Bad Request/错误请求)

400指出client请求中的语法错误。

401 (Unauthorized/未授权)

401表示client在授权头信息中没有有效的身份信息时訪问受到password保护的页面。

这个响应必须包括一个WWW-Authenticate的授权信息头。

403 (Forbidden/禁止)

403的意思是除非拥有授权否则server拒绝提供所请求的资源。这个状态常常会因为server上的损坏文件或文件夹许可而引起。

404 (Not Found/未找到)

404状态每一个网络程序猿可能都遇到过,他告诉client所给的地址无法找到不论什么资源。它是表示“没有所訪问页面”的标准方式。

405 (Method Not Allowed/方法未同意)

405指出请求方法(GET, POST, HEAD, PUT, DELETE, 等)对某些特定的资源不同意使用。该状态码是新增加 HTTP 1.1中的。

406 (Not Acceptable/无法訪问)

406表示请求资源的MIME类型与client中Accept头信息中指定的类型不一致。

406是新增加 HTTP 1.1中的。

407 (Proxy Authentication Required/代理server认证要求)

407与401状态有些相似。仅仅是这个状态用于代理server。该状态指出client必须通过代理server的认证。代理server返回一个Proxy-Authenticate响应头信息给client。这会引起client使用带有Proxy-Authorization请求的头信息又一次连接。该状态码是新增加 HTTP 1.1中的。

408 (Request Timeout/请求超时)

408是指服务端等待client发送请求的时间过长。该状态码是新增加 HTTP 1.1中的。

409 (Conflict/冲突)

该状态通常与PUT请求一同使用,409状态常被用于试图上传版本号不对的文件时。该状态码是新增加 HTTP 1.1中的。

410 (Gone/已经不存在)

410告诉client所请求的文档已经不存在而且没有更新的地址。

410状态不同于404。410是在指导文档已被移走的情况下使用。而404则用于未知原因的无法訪问。

该状态码是新增加 HTTP 1.1中的。

411 (Length Required/须要数据长度)

411表示server不能处理请求(如果为带有附件的POST请求),除非client发送Content-Length头信息指出发送给server的数据的大小。该状态是新增加 HTTP 1.1的。

412 (Precondition Failed/先决条件错误)

412状态指出请求头信息中的某些先决条件是错误的。该状态是新增加 HTTP 1.1的。

413 (Request Entity Too Large/请求实体过大)

413告诉client如今所请求的文档比server如今想要处理的要大。假设server觉得可以过一段时间处理。则会包括一个Retry-After的响应头信息。该状态是新增加 HTTP 1.1的。

414 (Request URI Too Long/请求URI过长)

414状态用于在URI过长的情况时。

这里所指的“URI”是指URL中主机、域名及port号之后的内容。该状态是新增加 HTTP 1.1的。

415 (Unsupported Media Type/不支持的媒体格式)

415意味着请求所带的附件的格式类型server不知道怎样处理。

该状态是新增加 HTTP 1.1的。

416 (Requested Range Not Satisfiable/请求范围无法满足)

416表示client包括了一个server无法满足的Range头信息的请求。该状态是新增加 HTTP 1.1的。

417 (Expectation Failed/期望失败)

假设server得到一个带有100-continue值的Expect请求头信息,这是指client正在询问能否够在后面的请求中发送附件。在这样的情况下,server也会用该状态(417)告诉浏览器server不接收该附件或用100状态告诉client能够继续发送附件。

该状态是新增加 HTTP 1.1的。

5XX:表示server未能正常处理client的请求而出现意外错误

500 (Internal Server Error/内部server错误)

500是经常使用的“server错误”状态。

501 (Not Implemented/未实现)

501状态告诉clientserver不支持请求中要求的功能。比如。client运行了如PUT这种server并不支持的命令。

502 (Bad Gateway/错误的网关)

502被用于充当代理或网关的server;该状态指出接收server接收到远端server的错误响应。

503 (Service Unavailable/服务无法获得)

状态码503表示server因为在维护或已经超载而无法响应。

504 (Gateway Timeout/网关超时)

该状态也用于充当代理或网关的server。它指出接收server没有从远端server得到及时的响应。该状态是新增加 HTTP 1.1的。

505 (HTTP Version Not Supported/不支持的 HTTP 版本号)

505状态码是说server并不支持在请求中所标明 HTTP 版本号。

该状态是新增加 HTTP 1.1的。

9. Http request的几种方法

在Http中主要包括下面请求方法:

  • GET: 请求指定的页面信息。并返回实体主体
  • HEAD: 仅仅请求页面的首部。
  • POST: 请求server接受所指定的文档作为对所标识的URI的新的从属实体
  • PUT: 从client向server传送的数据代替指定的文档的内容
  • DELETE: 请求server删除指定的页面
  • OPTIONS: 同意client查看server的性能
  • TRACE: 请求server在响应中的实体主体部分返回所得到的内容
  • PATCH: 实体中包括一个表。表中说明与该URI所表示的原内容的差别
  • MOVE: 请求server将指定的页面移至还有一个网络地址
  • COPY: 请求server将指定的页面拷贝至还有一个网络地址
  • LINK: 请求server建立链接关系
  • UNLINK: 断开链接关系
  • WRAPPED: 同意client发送经过封装的请求
  • CONNECT:用于动态切换到隧道的代理

当中Http1.0仅支持GET、HEAD和POST,其余方法均为Http1.1加入。

值的注意的是:GET方法与POST方法类似,但GET方法參数写在URL上,POST參数写在请求实体内容中,且GET方法參数不大于1024Byte,POST则没有限制。

10. Http1.1和Http1.0的差别

Http1.0与Http1.1主要有下面差别:

  1. 是否同意复用连接:Http1.0不同意,响应请求后就断开连接。Http1.1同意且默认开启连接复用
  2. Host头域:Http1.0没有,Http1.1有
  3. 状态码:Http1.1比Http1.0多了100,101,203,205等状态码,详见问题8
  4. 请求方式:Http1.0仅仅有GET、HEAD和POST方法,Http1.1新增了其它多种方法。详见问题9
时间: 2024-11-29 01:16:39

TCP/IP常见问题总结(二)的相关文章

TCP/IP协议简介(二) 之 链路层介绍

链路层介绍 一.简介 上一节已经介绍过,网络层协议的数据单元是 IP 数据报 ,而数据链路层的工作就是把网络层交下来的 IP 数据报 封装为 帧(frame)发送到链路上,以及把接收到的帧中的数据取出并上交给网络层. 为达到这一目的,数据链路必须具备一系列相应的功能,主要有: 将数据封装为帧(frame),帧是数据链路层的传送单位: 控制帧的传输,包括处理传输差错,调节发送速率与接收方相匹配: 在两个网络实体之间提供数据链路通路的建立.维持和释放的管理. 数据帧的结构是这样的: 二.控制帧的传输

OSI模型和TCP/IP协议族(二)

OSI模型中的各层 物理层 物理层(physical layer)协调通过物理媒体传送比特流时所需要的各种功能.物理层涉及到接口和传输媒体的机械和电器规约.它还定义了这些物理设备即接口为了实现传输必须完成的过程和功能. 物理层负责把逐个的比特从一跳(结点)移动到下一跳. 物理层关心的是以下一些内容: 接口和媒体的物理特性物理层定义了设备与传输媒体之间的接口特性.它还定义了传输媒体的类型(见后面分享). 比特的表示物理层的数据由一串没有任何解释的比特(bit)流(0和1的序列)组成.发送时,比特必

TCP/IP详解 笔记十四

TCP/IP协议(二)  连接的建立与终止 tcpdump -S输出TCP报文的格式 格式: 源>目的:标志 (标志就是tcp头部).标识首字符意义如下: 例如:telnet 某服务的输出(包括连接建立和终止) 标识解释:S 1415531521:1415531521(0) win 4096 <mss 1024> S(SYN):代表建立一个连接 1415531521:1415531521(0) :本次传送的首字节序号是1415531521(这里是ISN),尾字节序号是1415531521

RocEDU.阅读.写作《图解TCP/IP》

一.对本书的认识 信息通信社会这个词俨然是现代社会的一个名词.人们可以使用各种信息终端随时随地的进行交流,而这种环境正是以来网络才得以实现,使用最为广泛的协议就是TCP/IP协议. 二.读书内容 1  网络基础知识 1.1计算机网络出现的背景 计算机对我们的生活有着不可估量的影响.计算机被应用于生活中的各个角落,也许在我们刚有记忆的时候就可以看着父母操作者win95系统的计算机,记得当年父亲的办公室里还是一台拨动开关的电脑,电脑通过软盘作为移动储存设备.在课堂中得知软盘的大小只有将近20M左右,

[转载]2. TCP/IP基础知识

一.TCP/IP的标准化 TCP/IP规范——RFC 二.互联网基础知识 互联网的协议就是TCP/IP. 互联网结构: 三.TCP/IP协议分层模型 1)TCP/IP与OSI参考模型 2)硬件(物理层) 3)网络接口层(数据链路层) 4)互联网层(网络层) 5)传输层 6)应用层(会话层以上的分层) 四.TCP/IP分层模型与通信示例 1)数据包首部 2)发送数据包 3)经过数据链路的包 来自为知笔记(Wiz)

TCP/IP 网络编程的理解

一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议 对应于应用层 tcp协议 对应于传输层 ip协议 对应于网络层 三者本质上没有可比性. 何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议,主要解决数据如何在网络中传输:而HTTP是

【计算机网络】TCP/IP

一.基本概念 TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇.TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP.SMTP.TCP.UDP.IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议. 二.组成 TCP/IP协议在一定程度上参考了OSI的体系结构.OSI模型共有七层,从下到上分

TCP/IP知识总结(TCP/IP协议族读书笔记二)

接下来,总结一下网络层的协议,IP,ARP,RARP,ICMP,IGMP.当我们在网络传输的过程中,把分组交付到主机或路由器需要两级地址:物理地址和逻辑地址.而且我们需要能够把物理地址映射成为相应的逻辑地址,反过来的映射也是必要的. 这时候就涉及两个概念:静态映射与动态映射. 静态映射就是创建一个表,将逻辑地址与物理地址关联起来,这个表存储在网络的每一个机器上.可是存在于网络中的机器的物理地址是经常会发生改变的(更换网卡),这样静态映射表就得时常更新,影响网络的性能. 动态映射就是每当机器知道其

《图解tcp/ip》读书笔记(二)

<图解tcp/ip>读书笔记(二) 本周主要阅读的是本书的第三章--数据链路. 当然了,从某些角度讲,我认为这一章就是计算机网络的最基本的内容之一.整章讲述了数据链路层的作用和相关技术,主要描述了以太网.无线通信.ppp.公共网络以及其他的一些数据链路一些细节性的技术. 由于之前已经学习过相关计算机网络的课程,因此,就不再详细的记录整个阅读内容了,很多让我突破以前思维定式的一些知识,我挑一些列在下面. 其实这些知识花几分钟.几个小时,就可以得到,或者查阅互联网会得到比这本书更新的技术,但是,有