OSI参考模型:
OSI(Open System Interconnect),即开放式系统互连。 一般都叫OSI参考模型,是ISO组织在1985年研究的网络互连模型。该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),即OSI开放系统互连参考模型。
大题:握手转发过程、拥塞控制过程图、拓扑图转换路由表、路由器分组转发、以太网数据帧和IP分组报头、抓包截图分析
计算机网络中各种英文术语的含义:
https://blog.csdn.net/ZripenYe/article/details/117386858
计算机网络概述和物理层:
- Bandwidth
带宽,分成物理带宽和数据带宽,物理带宽单位 hz 赫兹,表示一个信道的频率的范围(最高频率和最低频率之差)数据带宽单位 bps,表示信道的最高数据传输率,即每秒网络允许通过的最高数据量。 - ADSL
不对称数字订阅线路,用于宽带上网,使用电话线和频分复用技术,保证电话和计算机数据可以同时在电话线上传输,下载速度是上传的 8 倍。 - ISDN
ISDN 是综合数字电话网发展起来的一个网络(1 分),它提供端到端的数字连接以支持广泛的服务(1 分),包括声音和非声音的,用户的访问是通过少量用途用户网络接口标准实现的(2 分)
应用层
- FTP
ftp 称为文件传输协议,工作在应用层,用于因特网上的文件传输,其工作时使用 TCP 协议打开两条 TCP 连接,一条是控制连接,端口 21,一条数据连接端口是 20,属于维护状态的协议。 - HTML
HyperText Markup Language,超文本标记语言(1 分),是一种标记语言,一种描述了如何格式化文档的语言(2 分),它允许用户在 Web 页面中包含文本、图形和指向其他 Web 页面的指针。(2 分) - SMTP
The Simple Mail Transfer Protocol 简单邮件传输协议,(2 分)用于用户向邮件服务器发送邮件的协议和邮件服务器向邮件服务器发送的协议(2 分),只能传输 ASCII 码(1 分)。 - HTTP
HyperText Transfer Protocol 超文本传输协议(1 分),运行在应用层(1 分),网页传输使用的协议(1 分),包括 http1.0 版本,提供非流水线服务(1 分),和 http1.1 版本,提供流水线服务(1 分),默认端口号 80。 - URL
统一资源定位符(1 分),是对可以从因特网上得到的资源的位置和访问方法的一种简洁的表示(3 分)。一般形式为:<URL 的访问方式>://<主机>:<端口>/<路径>(1 分)
传输层
-
可靠数据传输
可靠的数据传输确保数据按序正确的到达对方(1 分),提供面向连接的服务(1 分),通常使用序号和确认机制(1 分),发送方超时重传机制(1 分),传输错误检验机制(1 分),TCP 是典型的可靠传输(1 分) -
GBN
回退 N 步的协议,是可靠数据传输中滑动窗口协议的一种(1 分),发送端通过发送窗口限制发送的数据数量,当收到某个数据的确认时,发送窗口向后移动一个单位,(2 分),接收端只接受按序到达的正确的数据,其它的丢弃,并发上一个正确到达的分组的序号的确认或当前分组的否认。(2 分) -
SR
选择性重传的协议,是可靠数据传输中滑动窗口协议的一种(1 分),发送端通过发送窗口限制发送的数据数量,当收到某个数据的确认时,发送窗口向后移动一个单位,某个分组只重传该分组(2 分),接收端对于接受窗口内乱序到达的分组会缓存直到按序才递交,其它的丢弃,确认针对某一个分组确认。(2 分) -
UDP
User Datagram Protocol 用户数据报协议(1 分),运行在运输层(1 分),提供无连接的服务(1分),是不可靠的数据传输(1 分)。
-
TCP
Transmission Control Protocol 传输控制协议(1 分),运行在运输层(1 分),提供面向连接的 服务(1 分),使用可靠数据传输(1 分),具有流量控制和拥塞控制(1 分)。
网络层
- VC
Virtual-Circuit 用于网络层的虚电路服务(1 分),提供面向连接的服务(1 分),通信时要有建立虚电路,通信,释放虚电路的过程(1 分),一个虚电路额所有的分组传输时都走同一条路。(1 分) - IP 分片
当路由器转发 IP 分组时发现 IP 分组超过了输出链路的 MTU 时,会将 IP 分组的数据部分进行分片(1 分)。每个分片添加新的 IP 首部形成新的 IP 数据报.(1 分),接收方会根据 IP 首部中的标识、标志、片偏移等字段重组分片还原成初始的 IP 分组(2 分) - CIDR
无类别域间路由的 IP 地址,取消了 ip 地址的分类限制,改善了 ip 地址的分配方式缓解了 ip地址危机,通过层次网络可以实现路由汇总,形成超网。 - 路由聚合
Routing aggressive 使用 CIDR 技术和无分类子网掩码,可以使用路由聚合(1 分),用一条路由 表 示 一 系 列 连 续 的 多 条 路 由 , 从 而 减 少 路 由 表 的 规 模 ( 2 分 ), 如192.168.0.0/26----192.168.192.0/26 可以聚合成 192.168.0.0/24(1 分),也成构成超网(1 分) - ICMP
因特网控制报文协议,(1 分)用于因特网的报文控制和差错报告,当路由器丢弃分组时会发送 ICMP 报文给源发送方,通知所出现的错误(2 分)。Ping 使用的是特殊的 ICMP 报文。(2 分) - NAT
Network address translation 网络地址转换,(1 分)内网 IP 地址可以通过 NAT 转换成公网 IP地址,(1 分)从而可以使得多台电脑可以使用一个 IP 上网(1 分),一般包括 NAT 池,静态NAT,端口 NAT.(1 分) - IPv6
下一代 ip 协议,增加 IP 地址范围为 128 位,尽可能的减少路由器额外的工作,提高路由器转发分组的速度,更好的实现路由汇总,更好的实现 QoS,提高协议的灵活性,增强了移动性和安全性。固定首部 40 位。 - DV 路由算法
工作原理:
路由器周期性地向所有邻居路由器通告自己的路由信息。路由器根据邻居的通告使用加法更新自己的距离向量表,选择最短路径更新路由表。当路由器的路由表改变时,继续通告给邻居。当网络所有路由器的路由表都没有改变时,算法终止。
缺点:可能出现路由环路。 - 距离向量路由算法
每个路由器将自身的路由信息发送给邻居,每个路由器将邻居发送来的信息更新自己的路由表,若路由表更新则发送信息更新信息给邻居,否则不发送。(2 分)距离向量算法具有路由自环的缺点,会导致好消息传的快,坏消息传的慢的现象,且可能会导致无穷计算的问题。(3 分)常用的距离向量算法有 RIP,BGP。 - LS 路由算法
工作原理:
每个路由器将自己的链路状态信息洪泛(flooding)到网络上的所有路由器。每个路由器最终会知道整个网络的拓扑结构。每个路由器使用 Dijkstra 最短路径算法计算本路由器到其他路由器的最短路径,更新路由表。路由器的链路状态发生变化时会继续洪泛自身的链路状态信息到其他路由器。
缺点:可能出现路由震荡,对路由器的性能要求较高。 - RIP
路由信息协议, (1 分)用于自治系统内部的基于距离向量路由算法的路由协议(1 分),最大距离为 16,(1 分)采用跳数作为距离,(1 分),具有好消息传的快,坏消息传的慢的特点. (1 分)) - OSPF
开放式最短路径优先协议,(1 分)用于自治系统内部,(1 分)属于 IGP,(1 分)属于链路状态路由算法,划分区域,支持 CIDR,支持验证。(2 分) - IPv6
internet protocol version 6,ip 地址为 128 位,,固定首部 40 位,减少了 Ipv4 首部的字段数。增加 IP 地址范围,尽可能减少路由器的额外工作,提高路由器转发分组的速度,更好的实现路由汇总,更好实现 Qos 提高协议的灵活性,增加了移动性和安全性
数据链路层
- FDM
频分复用技术,属于信道分割技术,将信道根据频率分成多个频段,不同站点的数据可以同时在不同频段发送数据,发送方通过不同频率的载波进行数据的调制,接收方解调数据分发到相应站点,当某个站点不通信时有浪费。 - CSMA/CD
Carrier Sense Multiple Access with Collision Detection,载波监听多点接入碰撞检测(2 分),用于以太网上多点接入技术(1 分),每个站检测信道是否空闲,不空闲则等待,空闲则发送数据,如果碰撞使用二进制指数退避算法等待一段时间在发送(2 分) - CDMA
码分多址复用技术(1 分),每个主站分配一个互不相同且相互正交的码元,当发送 1 时发码元,发 0 时发码元的反(2 分)。接收端根据码元可以有效地从信号中还原出信息,具有很好的抗干扰性。(1 分) - ARP
ARP 协议称为地址解析协议(1 分),用于硬件地址和 IP 地址的转换(1 分),当源主机知道目标主机的 IP 地址不知道其硬件地址时会发送一个 ARP 请求报文,目标主机会发送 ARP 响应报文,从而使得源主机知道目标主机的硬件地址(2 分)
应用层
-
HTTP相关
http两种连接类型(有状态、无状态),对应版本号及其各自特点。
(1) 短连接
短连接分为了三步:
第一步,浏览器向服务器发起一次请求来申请资源 第二步,服务器响应浏览器并返回资源 第三步,断开连接
因为一个网页的资源要获取多次,所以短连接状态下,需要重复上述操作,直至获取完一个网页的所有资源。
(2) 长连接
http/1.0版本使用的都是短连接,短连接需要频繁的跟服务端建立起连接,这样做是特别耗时的!为了减少频繁建立连接,在http/1.1版本引入了 长连接 方式,长连接建立起一次连接以后,这个连接会一直存在,不会断开。
HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。
也就是说,上一次的请求对这次的请求没有任何影响,服务端也不会对客户端上一次的请求进行任何记录处理。
这就导致服务器端无法判断登录用户,解决方案:用于保持http状态的技术Cookie、Session
cookie 机制采用的是在客户端保持状态的方案。Cookie 是服务器生成的,但是发送给客户端,并且由客户端来保存
Session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 Session 保存在服务器上。
Cookie 和 Session 的区别:
(1)Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上;
(2)Cookie 不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用 Session ;
(3)Session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
(4)单个Cookie 在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;
总结:
如果说 Cookie 机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session 相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。 Cookie 和 Session 的方案虽然分别属于客户端和服务端,但是服务端的 Session 的实现对客户端的 Cookie 有依赖关系的,上面我讲到**服务端执行 Session 机制时候会生成 Session 的 id 值,这个 id 值会发送给客户端,客户端每次请求都会把这个 id 值放到 http 请求的头部发送给服务端,而这个 id 值在客户端会保存下来,保存的容器就是 Cookie**,因此当我们完全禁掉浏览器的Cookie的时候,服务端的Session也会不能正常使用。 问:客户端浏览器将 Cookie 功能禁用,或者不支持 Cookie 怎么办? 一般这种情况下,会使用一种叫做 **URL 重写**的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户
1.HTTP协议
HTTP协议(Hyper Text Transfer Protocol,即超文本传输协议)是一个简单的请求响应协议,它通常运行在TCP之上,是互联网上应用最为广泛的一种网络协议。HTTP协议定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档穿到浏览器。从层次的角度看,HTTP协议是面向事务的应用层协议,它是万维网上能够可靠地交换文件的基础。
2.常见的HTTP协议版本
HTTP协议最为常见的的版本有四种,分别是HTTP1.0、HTTP1.1、HTTP2以及HTTP3等。不同版本的http协议有这很大的不同。
2.1 HTTP1.0
特点:
·浏览器每发一个请求都会与服务器建立一个TCP请求,当请求结束后该TCP连接就会断开。(无连接) ·服务器不会跟踪每一个客户端也不会记录过去的请求。(无状态) ·在HTTP0.9的版本时,只能支持GET方法,到了HTTP1.0版本,增加了HEAD、POST两种请求方式。 ·增加了响应状态码,标记可能的错误原因。 ·引入了协议版本号的概念。 ·引入了HTTP header的概念,让HTTP处理请求和响应更加灵活。 ·传输的数据不再局限于文本,还可以传输图片、音乐等文件。
HTTP1.0最主要的缺点还是跟HTTP0.9一样,每次浏览器发送请求就要创建一个TCP连接,请求结束后就TCP连接就会断开。频繁的TCP连接创建和断开无疑增加了服务器的开销,并且TCP连接初始的时候发送数据的速度相对较慢,有一个慢启动和拥塞避免的阶段。
2.2 HTTP1.1
特点:
·在HTTP1.0中默认使用Connection:close。在HTTP1.1中已经默认使用Connection:keep-alive,避免了连接建立和释放的开销。一个TCP默认不关闭,可以被多个请求复用。只有当设定的时间过了该连接才会断开。(长连接) ·引入了管道机制,一个TCP连接可以同时发送多个请求。 ·对一个域名的请求允许分配多个长链接(缓解了长连接中对头阻塞的问题)。 ·新增了一些缓存的字段(If-Modified-Since, If-None-Match)。 ·请求头中引入了range字段,支持断点续传。 ·强制要求Host头,让互联网主机托管成为可能。 ·增加了 PUT、DELETE、OPTIONS、PATCH 等新的方法。
HTTP管道机制是指在一个TCP连接中,多个HTTP请求可以并行,客户端不用等待上一个请求结果返回就可以发出下一个请求,但是服务器端必须按照接收到客户端请求的先后顺序依次返回响应结果。
HTTP1.1虽然通过长连接减少了大量TCP的创建过程,但如果前面的请求没有结束之前,其他的请求只能处于阻塞状态。2.3 HTTP2
特点:
·二进制协议:在HTTP1.1版本的头部信息是文本,数据部分可以是文本也可以是二进制。在HTTP2版本的头部和数据部分都是二进制,且统称为帧。 ·多路复用:废弃了HTTP1.1中的管道,同一个TCP连接里面,客户端和服务器可以同时发送多个请求和多个响应,且不用按照顺序来,这样避免了队头阻塞的问题。 ·头部信息压缩:使用专用算法压缩头部,减少数据传输量,主要是通过服务器和客户端共同维护一张头部信息表,所有的头部信息在表里面都会有对应的记录,并且会有一个索引号,这样后面只需要发送索引号即可。 ·服务器主动推送:允许服务器主动向客户推送数据。 ·数据流:HTTP2中每一个请求或者响应的所有数据包,成为一个数据流,并且每一个数据流都有一个唯一ID,请求数据流的ID为奇数,响应数据流的ID是偶数。每个数据包在发送的时候带上对应数据流的ID,这样服务器和客户端就能分区是属于哪一个数据流。
HTTP2虽然解决了许多问题,在TCP协议级别上仍然存在类似的队头问题,而TCP仍然是Web的构建基础。当TCP数据包在传输的过程中丢失时,在服务器重新发送丢失的数据包之前,接收方无法确认传入的数据包。由于 TCP 在设计上不遵循 HTTP 之类的高级协议,因此单个丢失的数据包将阻塞所有进行中的 HTTP 请求的流,直到重新发送丢失的数据为止。
2.4 HTTP3HTTP3的目的是解决HTTP2的传输问题。在所有形式的设备上提供快速、可靠和安全的Web连接。为此,它使用了一种不同的传输层网络协议,称为QUIC。
特点:
·HTTP3底层是基于UDP实现的,而UDP不需要三次握手、四次挥手的过程,所以天生比TCP快。 ·QUIC不再以四元组标识,而是以一个 64 位的随机数作为 ID 来标识,而且 UDP 是无连接的,所以当 IP 或者端口变化的时候,只要 ID 不变,就不需要重新建立连接。 ·QUIC 的流量控制也是通过 window_update,来告诉对端它可以接受的字节数。但是 QUIC 的窗口是适应自己的多路复用机制的,不但在一个连接上控制窗口,还在一个连接中的每个 stream 控制窗口。 ·集成了TLS加密功能。QUIC并不是简历在TLS之上,而是内部包含了TLS。它使用自己的帧接管了TLS里面的记录,握手消息、警报消息都不使用TLS记录,直接封装成QUIC的帧发送,省掉一次开销。 ·HTTP3 没有指定默认的端口号,也就是说不一定非要在 UDP 的 80 或者 443 上提供 HTTP/3 服务。 ·为了实现可靠性,QUIC 也有个序列号,是递增的。任何一个序列号的包只发送一次,下次就要加一了。即使丢包重传,序列号也会加一,并且QUIC 定义了一个 offset 概念。QUIC 既然是面向连接的,也就像 TCP 一样,是一个数据流,发送的数据在这个数据流里面有个偏移量 offset,可以通过 offset 查看数据发送到了哪里,这样只要这个 offset 的包没有来,就要重发;如果来了,按照 offset 拼接,还是能够拼成一个流。
3.各版本HTTP的对比
协议版本 解决的核心问题 解决方式 0.9 HTML 文件传输 确立了客户端请求、服务端响应的通信流程 1.0 不同类型文件传输 设立头部字段 1.1 创建/断开 TCP 连接开销大 建立长连接进行复用 2 并发数有限 二进制分帧 3 TCP 丢包阻塞 采用 UDP 协议 4.HTTP与HTTPS的区别
由于HTTP协议采取的是明文传输,所以安全上存在以下三个风险:
窃听风险:比如通信链路上可以获取通信内容,用户号容易没。
篡改风险:比如强制植入垃圾广告,视觉污染,用户眼睛容易瞎。
冒充风险:比如冒充淘宝网站等。如上图所示(左边为HTTP协议,右边为HTTPS协议),为了解决HTTP的安全问题,HTTPS在HTTP与TCP层之间加入了SSL/TLS协议,可以很好的解决上述的风险。
HTTPS 是如何解决上⾯的三个⻛险的?
·HTTPS采用/*对称加密和非对称加密结合的混合加密*/的方式。在通信建立前采用非对称加密的方式交换会话密钥,后续就不再使用非对称加密。在通信过程中全部使用对称加密的会话密钥的方式加密明文数据。 ·采用/*摘要算法*/来实现完整性,能够为数据生成独一无二的指纹,用于校验数据的完整性,解决了篡改的风险。 ·通过/*数字证书*/的⽅式保证服务器公钥的身份,解决冒充的⻛险。
区别:
·https协议需要到CA申请证书,一般免费整数较少,因而需要一定费用。 ·http是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL/TLS加密传输协议。 ·http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 ·http的连接很简单,是无状态的;https协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
会阅读http报文的格式(如浏览器版本、目标host、报文长度等)
https://www.cnblogs.com/huansky/p/14007810.html
请求报文格式:
1、请求行
请求行有三个字段:方法、URL、HTTP版本
(1)方法:可以取不同的值,包括GET、POST、HEAD、PUT和DELETE等。绝大部分HTTP请求报文使用GET方法。
(2)URL:请求对象的标识。示例中请求对象标识就是:/dir1/dir2/hello.html
(3)HTTP版本:略。示例中HTTP版本为1.1。
2、首部行
首部行由多组键值对(首部字段名:首部字段值)组成。下面分析示例:
Host:指明请求对象所在主机。示例中主机为www.test.com。
Connection:浏览器告知服务器是否使用持续连接。示例中close代表不使用持续连接。
User-agent:指明用户代理,即浏览器类型。示例中浏览器类型为Mozilla/5.0。
Accept-language:指明用户希望得到请求对象的语言版本。示例中zh-cn代表中文版本。
3、实体体
使用GET方法时,实体体为空;
而使用POST方法时才使用实体体,举例说明:
当用户提交表单时,HTTP使用POST方法,则实体体内包含的就是用户在表单的输入值。
响应报文格式:
1、状态行:
状态行有三个字段:HTTP版本、状态码、状态信息
(1)HTTP版本:略。
(2)状态码及状态信息:下面列出常见状态码及状态信息
- 200 OK:请求成功,信息在返回的响应报文中。
- 301 Moved Permanently:请求对象被永久转移了,新的URL定义在响应报文的首部行Location中。客户端自动获取新的URL。
- 404 Not Found:被请求的文档不在服务器上。
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本。
2、首部行
同样的,首部行由多组键值对(首部字段名:首部字段值)组成。下面分析示例:
Connection:服务器通知客户,发送完报文后是否持续该TCP连接。示例中close代表发送完报文后关闭该TCP连接。
Date:服务器产生并发送该响应报文的日期时间。
Server:指明产生响应报文的服务器类型,类似于请求报文首部行中User-agent字段。示例中为Apache Web服务器。
Last-Modified:对象创建或者最后修改的日期时间。
Content-Length:被发送对象中的字节数。
Content-Type:实体体中对象类型。示例中 text/html 代表HTML文件。
3、实体体
服务器响应客户端的数据对象,在请求示例中,请求对象为hello.html,那么该实体体内容就是hello.html。
常见的http请求报文的方法(GET、POST常见请求格式的含义)
1.GET: 请求指定的页面信息,并返回实体主体。 2.HEAD: 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 3.POST: 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 4.PUT: 从客户端向服务器传送的数据取代指定的资源。 5.DELETE: 请求服务器删除指定的资源。 6.CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 7.OPTIONS: 允许客户端查看服务器的性能。 8.TRACE: 回显服务器收到的请求,主要用于测试或诊断。
HTTP请求报文中为什么要提供浏览器类型和操作系统类型?
HTTP请求报文分为了请求行和首部行,请求行里注明了浏览器版本(version),在首部行里有浏览器类型(user-agent),因为不同的浏览器和操作系统在返回同一个网页请求时的html网页可能不一样,所以需要在报文里注明浏览器类型和操作系统类型。
(浏览器类型在请求报文"User-agent:"首部行后,通过服务器端语言提供的相关API获取客户端的浏览器信息,进而对不同的浏览器返回不同的html文档,这样就可以针对现代浏览器返回展示页面)
静态文档、动态文档、活动文档(如java)概念
万维网的文档可以分为3类:静态文档、动态文档和活动文档。
静态文档
静态文档是指内容固定的文档,它是由万维网服务器创建,并存放在其中。
- 当客户利用 浏览器访问万维网服务器里的该文档时,这个文档的副本被传送到客户,客户就可使用浏览程序显示这个文档。当然,服务器中的文档内容是可以修改的,但客户却不能修改它。
- 静态文档的最大优点是简单,文档可以由非程序设计人员来创建。它的缺点是不够灵活。因此,对于内容变化频繁的文档是不适合做成静态文档的。
动态文档
动态文档是指文档的内容是在浏览器访问服务器时才得以创建。当浏览器的请求到达时,服务器就运行一个创建动态文档的应用程序。
- 动态文档的最大优点是具有告知当前最新信息的能力。
- 该应用程序对调览器发送来的数据进行处理,服务器把该程序或脚本的输出作为对浏览器请求该文档的响应。由于浏览器每次请求的响应都是动态生成的,因此每一个请求所得到的动态文档的内容也不一样。
活动文档
活动文档是指能够提供了一种连续更新屏幕内容的技术,这种技术把创建文档的工作移到浏览器端进行。
- 当浏览器请求一个活动文档时,服务器就返回这个活动文档程序的副本或脚本,然后就在浏览器端运行,此时,活动文档程序可与用户直接交互,以便连续地更新屏幕的显示内容。
- 虽然活动文档克服了静态文档内容固定不变的不足,但活动文档一旦建立,它所包含的内容也就被固定下来而无法及时刷新。另外,活动文档也无法提供像动画那样的显示效果。
三者的区别
1、创建方式不同:
(1)静态文档是指内容固定的文档,它是由万维网服务器创建,并存放在其中。(2)动态文档是指文档的内容是在浏览器访问服务器时才得以创建。
(3)活动文档是指能够提供了一种连续更新屏幕内容的技术,这种技术把创建文档的工作移到浏览器端进行。
2、生成方式不同:
(1)静态文档的内容是提前编写到文档里的,浏览器每次访问时,里面的内容都不改变。(2)动态文档是通过服务器上运行自己编写的应用程序动态的产生的,文档里的内容是每次访问一更新的。
(3)当浏览器请求一个活动文档时,服务器就返回这个活动文档程序的副本或脚本,然后就在浏览器端运行。
3、内容变化不同:
(1)静态文档每次访问时里面的内容都不改变。(2)动态文档每次访问时里面的内容也不一样。
(3)活动文档克服了静态文档内容固定不变的不足,但活动文档一旦建立,它所包含的内容也就被固定下来而无法及时刷新
4、对创建者要求不同:
(1)静态文档的最大优点是简单,文档可以由非程序设计人员来创建。(2)动态文档的创建难度比静态文档要高,因为开发人员必须具有一定的编程能力,编写出用于生成动态文档的应用程序。
(3)活动文档程序可与用户直接交互,以便连续地更新屏幕的显示内容。
用Java 技术创建活动文档
由美国Sun公司开发的Java语言是一项用于创建和运行活动文档的技术。 在Java 技术中使用“小应用程序”(applet) 来描述 活动文档程序。
Java 是一种面向对象的高级语言,从C++派生出来 的,它省略了C++很多复杂的、很少用的语言特点。 Java 的每一个数据项都有一个确定的类型。对数据的操作严格按照该数据的类型来进行。
Java 的编译程序将源程序转换成Java字节码 (bytecode),这是一种与机器无关的二进制代码。 计算机程序调用解释程序读取字节码,并解释执行。
用户从万维网服务器下载嵌入了Java小应用程序 的HTML文档后,可在浏览器的屏幕上点击某个图像,就可看到动画效果,或在下拉式菜单中点击某个项目,就可看到计算结果。 Java 技术是活动文档技术的一部分。
Java 技术有三个主要组成部分:
(1) 程序设计语言。Java包含一个新的程序设计语言, 用来编写传统的计算机程序和Java 小应用程序。
(2) 运行(runtime)环境。这是运行Java程序所必须的运行环境,其中包括Java 虚拟机(简称为JVM), 该软件定义了Java 二进制代码的执行模型。
(3) 类库(class library)。为了更容易编写Java 小应用程序,Java 提供了强大的类库支持。
运行Java的浏览器需要有HTML解释程序和Java小应用程序解释程序。 解释程序的核心是一个模仿计算机的简单循环。解释程序维持一个指令指针,在初始化时指在小应用程序的开始处。
在每一次循环操作时,解释程序在指令指针指向的地址读取字节码。然后解释程序对字节码进行解码, 并完成指明的操作。
-
DHCP、DNS协议实现的主要过程
DHCP(动态主机配置协议)和DNS(域名系统)的出现是为了让我们能够轻松使用网络或互联网,在实际应用中DHCP和DNS是两种完全不同的技术。DHCP是一种能够帮助我们将IP地址和相关IP信息分配给网络中计算机的协议,许多网络交换机会使用DHCP提供有价值的TCP/IP网络服务,如,帮助自动升级客户端系统上的软件。而DNS是用于将网络名称(如feisu.com)转换成其IP地址,反之亦然。这是为了确保我们的计算机可以找到正确的站点,因为计算机只能通过其IP地址(而非域名)来查找站点。
DHCP服务器分配动态IP地址时会经历请求、响应、选择、确认等阶段,详细过程如下:
- 客户端请求IP地址阶段——当客户端接入网络时,即启用DHCP Client后,客户端发送广播数据包DHCP Discover(包括计算机的名称和MAC地址),便于DHCP服务器能响应它。
- 服务器响应请求阶段——当DHCP服务器接收DHCP Discover时,会根据地址池内剩下的IP地址,以广播方式分配给客户端一个IP地址,分配的DHCP Offer报文中还包含了一些其他字段,如DNS地址、网关、掩码等。
- 客户端选择IP地址阶段——当客户端收到DHCP Offer报文时,会决定选用哪个服务器提供DHCP地址,然后根据DHCP Offer提供的地址信息,发送DHCP Request报文请求。
- 服务器确认阶段——当服务器收到DHCP Request报文后,将确认地址池中这个地址是否被分配。如果没有被分配,DHCP服务器将发送DHCP ACK报文给DHCP客户端,告知DHCP客户端现在可以使用分给它的IP地址。如果被分配,就会回复DHCP NAK报文,告知客户端该地址已被分配。
DNS
当在浏览器中输入域名时,例如feisu.com,浏览器通常不知道feisu.com在哪里。因此,它将向本地DNS服务器(LDNS)发送查询,询问一些关于“feisu.com的IP地址是什么”之类的问 题。如果LDNS没有feisu.com的记录,它将在互联网中搜索查找出谁拥有www.feisu.com。 详细工作过程如下:
- 首先,LDNS进入其中一个根服务器,将其定向到.com DNS服务器。
- 其次,.com DNS服务器找到www.feisu.com的所有者,并通知LDNS feisu.com的名称服务器(NS)记录。
- 然后,LDNS通过请求包含feisu.com的IP地址的地址记录(A记录)来响应。
- 最后,当LDNS收到A记录后,会将IP地址发送给浏览器,并缓存IP地址信息,以备将来参考
DHCP与DNS之间有什么区别?
从上述介绍中可看出,虽然DHCP和DNS都与IP地址相关,但它们扮演着完全不同的角色。为了能让您更加清楚了解DHCP和DNS的区别在哪里,请看下列图表:
参数 | DHCP | DNS |
---|---|---|
作用 | 用于为静态或动态主机分配IP地址的协议。 | 地址解析机制。 |
相关协议 | UDP | UDP和TCP |
服务器 | DHCP服务器负责将临时地址分配给客户端计算机一段时间,然后根据需要扩展租约。 | DNS服务器负责通过客户端接受查询并回复结果。 |
工作方法 | 集中 | 分散 |
特点 | 1.提供其他信息,例如主机的IP地址和计算机的子网掩码。 2.为特定租约时间分配IP到主机。 | 1.将名称转换为IP地址。 2.用于查找活动目录域服务器。 |
优点 | 具备可靠的IP地址配置,且能减少网络管理。 | 不需要记住IP地址,域名用于网址。 |
总结:
总而言之,DHCP服务器将IP地址分配给客户端计算机,而DNS服务器则是解析它们。DHCP和DNS是为了让我们能更加方便使用网络或互联网而研发的两种必不可少的技术,同时也是 网络管理员用来管理公司网络上所有IP设备的必不可少的“工具”。
DHCP让你的内部客户端可以快速的得到自己的IP地址,NAT可以让这些IP来访问internet.
传输层
两个主要协议:UDP和TCP的区别(如:UDP面向报文段、TCP面向字节流)、各自特点
TCP(Transmission Control Protocol,传输控制协议)和UDP(User Data Protocol ,用户数据报协议)都属于TCP/IP协议簇。TCP/IP协议集包括了超文本传输协议(HTTP)、文本传输协议(FTP)、远程登录协议(Telnet)、internet协议(IP)、internet控制信息协议(IMCP)等,而今天要讲的传输控制协议(TCP)和用户数据报协议(UDP)正是运行在协议簇的传输层。
TCP协议的主要特点
(1)TCP是面向连接的运输层协议;
(2)每一条TCP连接只能有两个端点(即两个套接字),只能是点对点的;
(3)TCP提供可靠的传输服务。传送的数据无差错、不丢失、不重复、按序到达;
(4)TCP提供全双工通信。允许通信双方的应用进程在任何时候都可以发送数据,因为两端都设有发送缓存和接受缓存;
(5)面向字节流。虽然应用程序与TCP交互是一次一个大小不等的数据块,但TCP把这些数据看成一连串无结构的字节流,它不保证接收方收到的数据块和发送方发送的数据块具有对应大小关系,例如,发送方应用程序交给发送方的TCP10个数据块,但就受访的TCP可能只用了4个数据块久保收到的字节流交付给上层的应用程序,但字节流完全一样。
TCP的可靠性原理
可靠传输有如下两个特点:
a.传输信道无差错,保证传输数据正确;
b.不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据;
(1)首先,采用三次握手来建立TCP连接,四次握手来释放TCP连接,从而保证建立的传输信道是可靠的。
(2)其次,TCP采用了连续ARQ协议(回退N,Go-back-N;超时自动重传)来保证数据传输的正确性,使用滑动窗口协议来保证接方能够及时处理所接收到的数据,进行流量控制。
(3)最后,TCP使用慢开始、拥塞避免、快重传和快恢复来进行拥塞控制,避免网络拥塞。
UDP协议特点
(1)UDP是无连接的传输层协议;
(2)UDP使用尽最大努力交付,不保证可靠交付;
(3)UDP是面向报文的,对应用层交下来的报文,不合并,不拆分,保留原报文的边界;
(4)UDP没有拥塞控制,因此即使网络出现拥塞也不会降低发送速率;
(5)UDP支持一对一 一对多 多对多的交互通信;
(6)UDP的首部开销小,只有8字节.
TCP 和 UDP 的区别
TCP(重量级协议) | UDP(轻量级协议) | |
---|---|---|
是否面向连接 | 面向连接 | 无连接 |
传输可靠性 | 可靠 | 不可靠 |
传输形式 | 字节流 | 数据报文段 |
传输效率 | 慢 | 快 |
所需资源 | 多 | 少 |
应用场景 | 要求通信数据可靠,如:文件传输、邮件传输 | 要求通信速度高,如:域名转换、直播 |
首部字节 | 20-60 | 8 |
双工性 | 全双工 | 一对一、一对多、多对一、多对多 |
流量控制 | 滑动窗口 | 无 |
拥塞控制 | 慢开始、拥塞避免、快重传、快恢复 | 无 |
是否保证传输数据有序 | 有序 | 不保证 |
是否保存数据边界 | 不保存数据边界 | 保留数据边界 |
TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的运输服务(TCP 的可靠体现在 TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。
UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如:QQ 语音、 QQ 视频 、直播等等。
TCP 和 UDP 分别对应的常见应用层协议
- TCP 对应的应用层协议
FTP:定义了文件传输协议,使用 21 端口。常说某某计算机开了 FTP 服务便是启动了文件传输服务。下载文件,上传主页,都要用到 FTP 服务。
Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于 DOS 模式下的通信服务。如以前的 BBS 是-纯字符界面的,支持 BBS 的服务器将 23 端口打开,对外提供服务。
SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置-中常看到有这么 SMTP 端口设置这个栏,服务器开放的是 25 号端口。
POP3:它是和 SMTP 对应,POP3 用于接收邮件。通常情况下,POP3 协议所用的是 110 端口。也是说,只要你有相应的使用 POP3 协议的程序(例如 Fo-xmail 或 Outlook),就可以不以 Web 方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163 邮箱就没有必要先进入网易网站,再进入自己的邮-箱来收信)。
HTTP:从 Web 服务器传输超文本到本地浏览器的传送协议。
- UDP 对应的应用层协议
DNS:用于域名解析服务,将域名地址转换为 IP 地址。DNS 用的是 53 号端口。
SNMP:简单网络管理协议,使用 161 号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
TFTP(Trival File Transfer Protocal):简单文件传输协议,该协议在熟知端口 69 上使用 UDP 服务。
常见协议的端口号
FTP的20、21端口,21端口用来侦听用户的连接请求,而20端口用来传送用户的文件数据。
TELNET 23
SMTP 25
DNS 53
TFTP 69
HTTP 80
SNMP的161、162端口。SNMP的161端口用于SNMP管理进程获取SNMP代理的数据,而162端口用于SNMP代理主动向SNMP管理进程发送数据
端口的作用:三种类型的端口
1.计算机进程通信遇到的问题
运行在计算机中的进程是用进程标识符来标志的。但运行在应用层的各种应用进程却不应当让计算机操作系统指派它的进程标识符。这是因为在因特网上使用的计算机的操作系统种类很多,而不同的操作系统又使用不同格式的进程标识符,因此发送方非常可能无法识别其他机器上的进程。为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对 TCP/IP体系的应用进程进行标志。而且由于进程的创建和撤销都是动态的,有时我们会改换接收报文的进程,但并不需要通知所有发送方。还有在实际应用中我们往往需要利用目的主机提供的功能来识别终点,而不需要知道实现这个功能的进程。
2.解决办法:端口的提出
解决这个问题的方法就是在运输层使用协议端口号(protocolport number),或通常简称为端口(port),端口用一个16位端口号进行标志。端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。虽然通信的终点是应用进程,但我们可以把端口想象是通信的终点,因为我们只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由TCP来完成。
3.端口的分类
· 端口号的范围是从1~65535,一般分为3类端口:熟知端口号,登记端口号,客户端口号或短暂端口号。
· 熟知端口号,数值一般为0~1023,每个端口号应用于特定熟知的应用协议。
· 登记端口号,数值为1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在IANA(The Internet Assigned NumbersAuthority,互联网数字分配机构)登记,以防止重复。
· 客户端口号或短暂端口号,数值为49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
一些常见的端口号及其用途如下:
TCP21端口:FTP文件传输服务
TCP23端口:TELNET终端仿真服务
TCP25端口:SMTP简单邮件传输服务
UDP53端口:DNS域名解析服务
TCP80端口:HTTP超文本传输服务
TCP110端口:POP3“邮局协议版本3”使用的端口
TCP443端口:HTTPS加密的超文本传输服务
TCP1521端口:Oracle数据库服务
TCP1863端口:MSNMessenger的文件传输功能所使用的端口
TCP3389端口:MicrosoftRDP 微软远程桌面使用的端
TCP5631端口:SymantecpcAnywhere 远程控制数据传输时使用的端口
UDP5632端口:SymantecpcAnywhere 主控端扫描被控端时使用的端口
TCP5000端口:MSSQL Server使用的端口
UDP8000端口:腾讯QQ
套接字概念
套接字是一种软件抽象,用于表示两台机器之间的连接终端,套接字(Socket)大致位于OSI模型的会话层、TCP/IP模型的应用层,每一台机器都有一个套接字,可以想象成套接字是机器的端口,他们之间都有一条虚拟的电缆,电缆的每一段都插入到套接字中,也就是说一台机器上的套接字可以和另一台机器上的套接字组成一条通信通道,我们可以用这个通道在两台机器之间发送数据。
停止等待协议、自动重传请求ARQ、连续ARQ协议、累计确认的概念
停止等待ARQ协议(数据链路层和传输层):
工作原理:发送方每发送一帧就暂停,等待应答(ACK)到来。收方收到数据帧后发送应答(ACK)帧给发送方,发送方再发送下一个数据帧。
问题解决:
-
Data帧出错:收方用NAK应答。
-
Data帧丢失:使用定时器,一定时间未收到ACK帧就重发。
-
收方收到重复的data帧:进行帧编号。
缺点:数据每次发送都要等待应答帧的到来,效率较低。尤其是利用卫星进行通信的时候,卫星的传播延迟是270毫秒,每发一帧要用540毫秒。
连续ARQ协议(Continuous ARQ)
为了克服停等ARQ协议长时间等待ACK的缺点,这个协议会连续发送一组数据包,然后再等待这些数据包的ACK
ARQ称为Automatic Repeat Request,叫做自动重传。
ARQ是TCP实现可靠传输的重要协议。
自动重传的两个触发条件
1、定时器倒计时结束还未收到ack包。
2、连续收到三个相同的ack包。
ARQ分类
ARQ有以下三种实现,分别对于滑动窗口的三种状态:
方法 | 窗口大小 | 是否有序接收 | 做法 |
---|---|---|---|
停止-等待协议 | 发送:接收=1:1 | 有序 | 发送窗口每次只能发送一个数据包,然后就停止等待ack包。接收窗口有序的接收数据包,接收成功后发送ack包给发送窗口,如果收到的数据包是无序的,就直接丢弃 |
后退N步协议 | 发送:接收=N:1 | 有序 | 发送窗口每次最多一次性发送n个数据包,接收窗口有序的接收数据包,当接收到有序的数据包后,发送ack包给发送窗口,如果收到的数据包时无序的,就直接丢弃。当数据包丢失的时候,会将发送窗口中的后面的所有数据包都重新发送 |
选择重传协议 | 发送:接收=N:N | 无序 | 发送窗口每次最多一次性发送n个数据包,接收窗口无序的接收数据包,当接收到数据包后,发送ack包给发送窗口,ack中会携带SACK信息,也就是接收窗口中的缓存信息。发送端会根据SACK信息来只重传丢失的数据包 |
累积确认:
- 无论丢失了多少接收方返回的确认,对于发送发方来说,只要是在发送方超时时间之内成功接到了接收方返回的一串应答中的最后一个,则包含了前面全部的确认信息
- 通过累积确认我们就可以判断出来传输过程中是否存在 乱序 或者 丢包 的情况,从而决定是否进行 超时重传 或者 快速重传
- 累积确认依靠的是 TCP head 中的 确认号 Acknowledgement 以及 ACK 标志位
UDP和TCP报文格式,首部关键字段的含义(如SYN、FIN、PUSH、序号、ACK号、数据偏移、窗口、检验和等);
https://blog.csdn.net/qq_40459977/article/details/123121369
一、TCP报文段的首部格式
TCP是面向字节流的,但是它传输的数据单元却是报文段。
TCP在发送数据时,从发送缓存中取出一部分或全部字节并给其加上一个TCP首部,使其成为TCP报文段然后交给网络层(TCP是运输层,其下层是网络层)
一个TCP报文段由TCP首部和数据载荷部分组成
TCP的全部功能都体现在其首部中各个字段的作用
tcp报文首部的前20个字节是固定的,后面有4n字节是需要根据需要增加的选项,因此tcp首部的最小长度是20字节。
(5+6+4)各个字段的详细讲解:
-
源端口、目标端口:
计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个。 -
序号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0 开始。
序号增加到最大值的时候,下一个序号又回到了 0.
也就是说 TCP 协议可对 4GB 的数据进行编号,在一般情况下可保证当序号重复使用时,旧序号的数据早已经通过网络到达终点或者丢失了。 -
确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送发:我希望你(指发送方)下次发送的数据的第一个字节数据的编号是这个确认号。也就是告诉发送方:我希望你(指发送方)下次发送给我的TCP报文段的序列号字段的值是这个确认号。
-
数据偏移
占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。
但应注意,“数据偏移”的单位是32位字(即以4字节的字为计算单位)。由于4位二进制数能表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大字节(即选项长度不能超过40字节)。 -
保留 Reserved
占 0.75 个字节 (6 位)。
保留为今后使用,但目前应置为 0。
有6个控制位,用来说明本报文段的性质。
- 紧急URG(URGent)
当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快发送(相当于高优先级的数据),而不要按原来的排队顺序来传送。
例如,已经发送了很长的一个程序要在远地的主机上运行。但后来发现了一些问题,需要取消该程序的运行,因此用户从键盘发出中断命令。如果不使用紧急数据,那么这两个字符将存储在接收TCP的缓存末尾。只有在所有的数据被处理完毕后这两个字符才被交付接收方的应用进程。这样做就浪费了很多时间。
当URG置为1时,发送应用进程就告诉发送方的TCP有紧急数据要传送。于是发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍然是普通数据。这时要与首部中紧急指针(Urgent Pointer)字段配合使用。
-
确认ACK(ACKnowledgment)
仅当ACK = 1时确认号字段才有效,当ACK = 0时确认号无效。TCP规定,在连接建立后所有的传送的报文段都必须把ACK置为1 -
推送 PSH(PuSH)
当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应。在这种情况下,TCP就可以使用推送(push)操作。这时,发送方TCP把PSH置为1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快地(即“推送”向前)交付接收应用进程。而不用再等到整个缓存都填满了后再向上交付。 -
复位RST(ReSeT)
当RST=1时,表名TCP连接中出现了严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。RST置为1还用来拒绝一个非法的报文段或拒绝打开一个连接。 -
同步SYN(SYNchronization)
在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1,因此SYN置为1就表示这是一个连接请求或连接接受报文。 -
终止FIN(FINis,意思是“完”“终”) 用来释放一个连接。当FIN=1时,表明此报文段的发送发的数据已发送完毕,并要求释放运输连接。
其余4个字段
-
窗口
占2字节。窗口值是(0,2^16-1)之间的整数。窗口指的是发送本报文段的一方的接受窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据。
例如,发送了一个报文段,其确认号是701,窗口字段是1000.这就是告诉对方:“从701算起,我(即发送方报文段的一方)的接收缓存空间还可接受1000个字节数据(字节序号是701~1700),你在给我发数据时,必须考虑到这一点。”窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化
-
检验和
占2字节。检验和字段检验的范围包括首部和数据这两部分。和UDP用户数据报一样,在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。伪首部的格式和UDP用户数据报的伪首部一样。但应把伪首部第4个字段中的17改为6(TCP的协议号是6)。
把第5字段中的UDP中的长度改为TCP长度。接收方收到此报文段后,仍要加上这个伪首部来计算检验和。若使用TPv6,则相应的伪首部也要改变。伪首部共有12字节,包含IP首部的一些字段,有如下信息:32位源IP地址、32位目的IP地址、8位保留字节(置0)、8位传输层协议号(TCP是6,UDP是17)、16位TCP报文长度(TCP首部+数据)。 伪首部是为了增加TCP校验和的检错能力:通过伪首部的目的IP地址来检查TCP报文是否收错了、通过伪首部的传输层协议号来检查传输层协议是否选对了。 //检验和计算过程 TCP首部校验和计算三部分:TCP首部+TCP数据+TCP伪首部。 //发送端: 首先,把伪首部、TCP报头、TCP数据分为16位的字,如果总长度为奇数个字节,则在最后增添一个位都为0的字节。 把TCP报头中的校验和字段置为0。 其次,用反码相加法(对每16bit进行二进制反码求和)累加所有的16位字(进位也要累加,进位则将高位叠加到低位)。 最后,将上述结果作为TCP的校验和,存在检验和字段中。 //接收端: 将所有原码相加,高位叠加到低位, 如计算结果的16位中每一位都为1,则正确,否则说明发生错误。
-
紧急指针
占2字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据) 。因此,在紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。值得注意的是,即使窗口为0时也可以发送紧急数据。
-
选项
长度可变,最长可达4字节。当没有使用“选项”时,TCP的首部长度是20字节。
TCP最初只规定了一种选项,即最大报文段长度MSS(Maximum Segment Szie)。注意MSS这个名词含义。MSS是每一个TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。所以MSS并不是整个TCP报文段的最大长度,而是“TCP报文段长度减去TCP首部长度”。
为什么要规定一个最大报文长度MSS呢?
这并不是考虑接受方的接收缓存可能存放不下TCP报文段中的数据。实际上,MSS与接收窗口值没有关系。我们知道,TCP报文段的数据部分,至少要加上40字节的首部(TCP首部20字节和IP首部20字节,这里还没有考虑首部中的可选部分)才能组装成一个IP数据报。若选择较小的MSS长度,网络的利用率就降低。设想在极端情况下,当TCP报文段只含有1字节的数据时,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。这样,对网络的利用率就不会超过1/41。到了数据链路层还要加上一些开销。但反过来,若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片组成成原来的TCP报文段,当传输出错时还要进行重传,这些也都会使开销增大。
因此,MSS应尽可能大些,只要在IP层传输时不需要分片就行。由于IP数据报所经历的路径是动态变化的,因此在这条路径上确定的不需要的分片的MSS,如果改走另一条路径就可能需要进行分片。因此最佳的MSS是很难确定的。在连接过程中,双方都把自己能够支持的MSS写入这一字段,以后就按照这个数值传输数据,两个传送方向可以有不同的MSS值。若主机未填写这一项,则MSS的默认值是536字节长。因此,所有在互联网上的主机都应该接受的报文段长度是536+20(固定首部长度)=556字节。
UDP报文段的首部

1.源端口号:表示发送端端口号,字段长16位。该字段是可选项,有时可能不会设置源端口号。没有源端口号的时候该字段的设置为0。可用于不需要返回的通信中。
2.目标端口号:表示接收端端口,字段长度16位。
3.包长度:该字段保存了UDP首部的长度跟数据的长度之和。单位为字节。
4.校验和:校验和是为了提供可靠的UDP首部和数据而设计的。
原文链接:https://blog.csdn.net/weixin_45649763/article/details/104082660
TCP三次握手、四次握手的具体过程
1、三次握手
(1)三次握手的详述
首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。
最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接。(A、B关闭状态CLOSED——B收听状态LISTEN——A同步已发送状态SYN-SENT——B同步收到状态SYN-RCVD——A、B连接已建立状态ESTABLISHED)
- B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。若有,则作出响应。
- 1)第一次握手:A的TCP客户进程也是首先创建传输控制块TCB,然后向B发出连接请求报文段,(首部的同步位SYN=1,初始序号seq=x),(SYN=1的报文段不能携带数据)但要消耗掉一个序号,此时TCP客户进程进入SYN-SENT(同步已发送)状态。
- 2)**第二次握手:**B收到连接请求报文段后,如同意建立连接,则向A发送确认,在确认报文段中(SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y),测试TCP服务器进程进入SYN-RCVD(同步收到)状态;
- 3)**第三次握手:**TCP客户进程收到B的确认后,要向B给出确认报文段(ACK=1,确认号ack=y+1,序号seq=x+1)(初始为seq=x,第二个报文段所以要+1),ACK报文段可以携带数据,不携带数据则不消耗序号。TCP连接已经建立,A进入ESTABLISHED(已建立连接)。
- 当B收到A的确认后,也进入ESTABLISHED状态。
(2)总结三次握手过程:(seq看自己,ack看对方)
- 第一次握手:起初两端都处于CLOSED关闭状态,Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN-SENT状态,等待Server确认;
- 第二次握手:Server收到数据包后由标志位SYN=1得知Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN-RCVD状态,此时操作系统为该TCP连接分配TCP缓存和变量;
- 第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并且此时操作系统为该TCP连接分配TCP缓存和变量,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client和Server就可以开始传输数据。
起初A和B都处于CLOSED状态——B创建TCB,处于LISTEN状态,等待A请求——A创建TCB,发送连接请求(SYN=1,seq=x),进入SYN-SENT状态——B收到连接请求,向A发送确认(SYN=ACK=1,确认号ack=x+1,初始序号seq=y),进入SYN-RCVD状态——A收到B的确认后,给B发出确认(ACK=1,ack=y+1,seq=x+1),A进入ESTABLISHED状态——B收到A的确认后,进入ESTABLISHED状态。
TCB传输控制块Transmission Control Block,存储每一个连接中的重要信息,如TCP连接表,到发送和接收缓存的指针,到重传队列的指针,当前的发送和接收序号。
(3)为什么A还要发送一次确认呢?可以二次握手吗?
答:主要为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误。如A发出连接请求,但因连接请求报文丢失而未收到确认,于是A再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,A工发出了两个连接请求报文段,其中第一个丢失,第二个到达了B,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达B,此时B误认为A又发出一次新的连接请求,于是就向A发出确认报文段,同意建立连接,不采用三次握手,只要B发出确认,就建立新的连接了,此时A不理睬B的确认且不发送数据,则B一致等待A发送数据,浪费资源。
(4)Server端易受到SYN攻击?
服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的,所以服务器容易受到SYN洪泛攻击,SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。
防范SYN攻击措施:降低主机的等待时间使主机尽快的释放半连接的占用,短时间受到某IP的重复SYN则丢弃后续请求。
2、四次挥手
(1)四次挥手的详述
假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,“告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,“告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,“就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
数据传输结束后,通信的双方都可释放连接,A和B都处于ESTABLISHED状态。(A、B连接建立状态ESTABLISHED——A终止等待1状态FIN-WAIT-1——B关闭等待状态CLOSE-WAIT——A终止等待2状态FIN-WAIT-2——B最后确认状态LAST-ACK——A时间等待状态TIME-WAIT——B、A关闭状态CLOSED)
- 1)A的应用进程先向其TCP发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1(终止等待1)状态,等待B的确认。
- 2)B收到连接释放报文段后即发出确认报文段,(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,A到B的连接释放。
- 3)A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
- 4)B没有要向A发出的数据,B发出连接释放报文段(**FIN=1,ACK=1,序号seq=w,确认号ack=u+1),**B进入LAST-ACK(最后确认)状态,等待A的确认。
- 5)A收到B的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态。
(2)总结四次挥手过程:
起初A和B处于ESTABLISHED状态——A发出连接释放报文段并处于FIN-WAIT-1状态——B发出确认报文段且进入CLOSE-WAIT状态——A收到确认后,进入FIN-WAIT-2状态,等待B的连接释放报文段——B没有要向A发出的数据,B发出连接释放报文段且进入LAST-ACK状态——A发出确认报文段且进入TIME-WAIT状态——B收到确认报文段后进入CLOSED状态——A经过等待计时器时间2MSL后,进入CLOSED状态。
(3)为什么A在TIME-WAIT状态必须等待2MSL的时间?
MSL最长报文段寿命Maximum Segment Lifetime,MSL=2
答:两个理由:1)保证A发送的最后一个ACK报文段能够到达B。2)防止“已失效的连接请求报文段”出现在本连接中。
- 1)这个ACK报文段有可能丢失,使得处于LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认,B超时重传FIN+ACK报文段,而A能在2MSL时间内收到这个重传的FIN+ACK报文段,接着A重传一次确认,重新启动2MSL计时器,最后A和B都进入到CLOSED状态,若A在TIME-WAIT状态不等待一段时间,而是发送完ACK报文段后立即释放连接,则无法收到B重传的FIN+ACK报文段,所以不会再发送一次确认报文段,则B无法正常进入到CLOSED状态。
- 2)A在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。
(4)为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
(5)为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
TCP可靠传输实现:发送窗口、接收窗口如何变化;超时重传;选择确认
TCP如何实现可靠传输:
可靠传输就是通过TCP连接传送的数据是没有差错、不会丢失、不重复并且按序到达的。TCP是通过序列号、检验和、确认应答信号、重发机制、连接管理、窗口控制、流量控制、拥塞控制一起保证TCP传输的可靠性的。 加分回答 可靠传输的具体实现是: - 应用层的数据会被分割成TCP认为最适合发送的数据块。 - 序列号:TCP给发送的每一个包都进行编号,接收方对数据包进行排序,把有序数据传送给应用层,TCP的接收端会丢弃重复的数据。 - 检验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。 - 确认应答:如果收到的数据报报文段的检验和没有差错,就确认收到,如果有差错,TCP就丢弃这个报文段和不确认收到此报文段。 - 流量控制:TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 - 拥塞控制:当网络拥塞时,减少数据的发送。 - 停止等待协议:它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。 - 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
滑动窗口概述
滑动窗口实现了TCP流控制。首先明确滑动窗口的范畴:TCP是双工的协议,会话的双方都可以同时接收和发送数据。TCP会话的双方都各自维护一个发送窗口和一个接收窗口。各自的接收窗口大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。各自的发送窗口则要求取决于对端通告的接收窗口。
滑动窗口解决的是流量控制的的问题,就是如果接收端和发送端对数据包的处理速度不同,如何让双方达成一致。接收端的缓存传输数据给应用层,但这个过程不一定是即时的,如果发送速度太快,会出现接收端数据overflow,流量控制解决的是这个问题。
接收端会建立一个滑动窗口,由接收方向发送方通告,TCP 首部里的 window 字段就是用来表示窗口大小的,窗口表示的就是接收方目前能接收的缓冲区的剩余大小。
但是发送方也会根据这个通告窗口的大小建立自己的滑动窗口。为了兼顾效率和可靠性,在发送方,所有未收到 ACK 的消息虽然可以发送,但是在收到 ACK 之前是一定要在缓冲区中保存的。
发送方滑动窗口
发送方的发送缓存内的数据都可以被分为4类:
- 已发送,已收到ACK
- 已发送,未收到ACK
- 未发送,但允许发送
- 未发送,但不允许发送
其中类型2和3都属于发送窗口。
- 第一部分就是已经发送且收到 ACK 的部分,已经成功发送,所以不需要在缓冲区保留了。
- 第二部分是已发送但尚未收到 ACK 的部分,该部分需要保留在缓冲区。
- 第三部分是还没有发送,但是还在接收方通告窗口也就是处理范围内的数据,这块我们也可以称为可用窗口;第二、第三部分一起构成了整个发送窗口。
- 最后一部分则是需要发送,但已经超过接收方通告窗口范围的部分,这一部分在没有收到新的 ACK 之前,发送方是不会发送这些数据的。通过这个限制,发送的数据就一定不会超过接收方的缓冲区了。
零窗口
但如果发送方一直没有收到 ACK,随着数据不断被发送,很快可用窗口就会被耗尽。在这种情况下,发送方也就不会继续发送数据了,这种发送端可用窗口为零的情况称为零窗口。
正常来说,等接收端处理了一部分数据,又有了新的可用窗口之后,就会再次发送 ACK 报文通告发送端自己有新的可用窗口(因为发送端的可用窗口是受接收端控制的)。
但是,万一要是 ACK 消息在网络传输中正好丢包了,那发送端还能感知到接收端窗口的变化吗?其实是不会的,在这个情况下,接收端就会一直等着发送端发送数据,而发送端也还会以为接收端仍然处于零窗口的状态,这样一直互相等待,就好像进入了死锁状态。
解决办法也很简单,我们可以再引入一个零窗口定时器,如果发送端陷入零窗口的状态,就会启动这个定时器,去定时地询问接收端窗口是否可用了,这也是在分布式系统中常见的处理丢包的方式之一。
接收方滑动窗口
接收方的缓存数据分为3类:
- 已接收
- 未接收但准备接收
- 未接收而且不准备接收
其中类型2属于接收窗口。
- 已经接收并确认的数据;
- 未收到但可以接收的数据,这一部分也就是接收窗口;
- 剩下的就是缓冲区放不下的区域,也就是不可接收的区域。
如果进程读取缓冲区速度有所变化,接收端可能也会改变接收窗口的大小,每次通告给发送端,就可以控制发送端的发送速度了。这就是所谓的滑动窗口,也就是流量控制机制。
https://zhuanlan.zhihu.com/p/580698289
信道利用率的定义
设整个发送周期为T。发送总的数据量为L。传输速率为P。
则信道利用率就是(L/P)/T
信道的吞吐率=信道的利用率*传输速率
分析:由于确认帧的开销忽略不计,考虑发送周期即为1000B/128kbps +250ms=562.5ms
为是信道利用率大于80%,即假设发送x个帧,解得x>7.2
再加上一帧区别新旧,故应该比特数至少为4,选择B
分析:本题的关键纠结在到底是用128字节还是用512字节计算呢?
错误的理解思路,为了使帧序列的比特数少,所以应该用512字节,好吧,你的头脑太简单了。
正确的思考:分别考察在128 和512下一个发送周期传输的比特数;
128字节 (64+540+64)/64=10.4帧+1帧区分新旧帧
512字节 (256+540+256)/256=4.1帧+1帧区分新旧帧
为了使信道传输率最大,帧序号比特数应该看10.4帧的标准。因为如果以4.1帧为标准,也就是帧比特数为三,那么在发送数据字节为128的情况下就达不到最大的信道利用率。故本题结果选择B。
分析:同样的计算手法,发送一帧用时:1000B/100Mbps=0.08ms
发送周期为100.08ms
受发送窗口的限制,在一个发送周期内可以发送1000个数据帧,此时达到的数据传输率约为1000*1000B/0.1s=80Mbps.
2018年(36) 主机甲采用停-等协议向主机乙发送数据,数据传输速率是 3 kbps,单向传播延时是 200
ms,忽略确认帧的传输延时。当信道利用率等于 40%时,数据帧的长度为 :
令t= x/3kbps
则t/(t+2*200)=0.4 解得x=800b
几道题做下来的感觉:(1)确定一个发送周期大小
(2)帧比特数的计算是针对一个发送周期而言的,别漏了1
流量控制和拥塞控制的概念、区别,几种拥塞控制方法;
利用滑动窗口进行流量控制
一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。所谓流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。
利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制,通过接收方主机调节接收窗口的大小可以进行流量控制,但当接收端口rwnd被减小到0时,即不允许发送方再发送数据了,这种使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。注意,一般大写的ACK表示首部中的确认位ACK,小写ack表示确认字段的值。接收方向发送方发送的三个报文段都设置了ACK=1,只有在ACK= 1时确认号字段才有意义。.
现在我们考虑一种情况。接收方(B)向发送方(A)发送了零窗口的报文段后不久,B的接收缓存又有了一些存储空间。于是B向A发送了rwnd = 400的报文段。然而这个报文段在传送过程中丢失了。A一直等待收到B发送的非零窗口的通知,而B也一直等待A发送的数据。如果没有其他措施,这种互相等待的死锁局面将一直延续下去。
为了解决这个问题,TCP为每一个连接设有一个持续计时器(persistence timer)。 只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。如果窗口仍然是零,那么收到这个报文段的一方就重新设置持续计时器。如果窗口不是零,那么死锁的僵局就可以打破了。
TCP的拥塞控制
在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过 了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞(congestion)。
拥塞控制和流量控制的区别:
拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
相反,流量控制往往是指点对点通信量的控制,是个端到端的问题(接收端控制发送端)。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
拥塞控制和流量控制之所以常常被弄混,是因为某些拥塞控制算法是向发送端发送控制报文,并告诉发送端,网络已出现麻烦,必须放慢发送速率。这点又和流量控制是很相似的。
TCP进行拥塞控制的算法有四种:慢开始、拥塞避免、快重传和快恢复。
在阐述4种拥塞控制的算法前,首先,我们要明确发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多的分组发送出去,这样就可以提高网络的利用率。但是只要网络出现拥塞或者有可能出现拥塞,就必须把拥塞窗口调小一些,以减少注入到网络中的分组数,以便缓解网络中出现的拥塞。
其次,发送方又是如何知道网络发生了拥塞呢?我们知道,当网络发生拥塞时,路由器就要丢弃分组。因此只要发送方没有按时收到应当到达的确认报文,也就是说,只要出现了超时,就可以猜想网络可能出现了拥塞。现在通信线路的传输质量一般都很好,因传输出差错而丢弃分组的概率是很小的(远小于1 %)。因此,判断网络拥塞的依据就是出现了超时。
1.慢开始和拥塞避免
慢开始算法的思路是这样的:当主机开始发送数据时,由于并不清楚网络的负荷情况,所以如果立即把大量数据字节注入到网络,那么就有可能引起网络发生拥塞。经验证明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。
新的RFC 5681把初始拥塞窗口cwnd设置为不超过2至4个SMSS(最大报文段Sender Maximum Segment Size)的数值。具体的规定如下:
若SMSS> 2190字节,
则设置初始拥塞窗口cwnd=2x SMSS字节,且不得超过2个报文段。
若(SMSS> 1095字节)且(SMSS≤2190字节),
则设置初始拥塞窗口cwnd=3x SMSS字节,且不得超过3个报文段。
若SMSS≤1095字节,
则设置初始拥塞窗口cwnd =4x SMSS字节,且不得超过4个报文段。
可见这个规定就是限制初始拥塞窗口的字节数。
慢开始规定,在每收到一个对新的报文段的确认后,可以把拥塞窗口增加最多一个SMSS的数值。更具体些,就是
拥塞窗口cwnd每次的增加量=min(N,SMSS)
其中N是原先未被确认的、但现在被刚收到的确认报文段所确认的字节数。不难看出,当N< SMSS时,拥塞窗口每次的增加量要小于SMSS。
用这样的方法逐步增大发送方的拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。因此使用慢开始算法后每经过一个传输轮次,拥塞窗口cwnd就加倍
这里涉及到两个词,传输轮次和往返时间(RTT):从图5-24 可以看出,一个传输轮次所经历的时间其实就是往返时间RTT (请注意,RTT并非是恒定的数值)。使用“传输轮次”是更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。例如,拥塞窗口cwnd的大小是4个报文段,那么这时的往返时间RTT就是发送方连续发送4个报文段,并收到这4个报文段的确认,总共经历的时间。
另外上图只是为了说明慢开始的原理,在TCP的实际运行中,发送方只要收到一个对新报文段的确认,其拥塞窗口cwnd 就立即加1,并可以立即发送新的报文段,而不需要等这个轮次中所有的确认都收到后(如图5-24所示的那样)再发送新的报文段。
为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量。
慢开始门限ssthresh的用法如下:
当cwnd < ssthresh时,使用上述的慢开始算法。
当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法。
当cwnd = ssthresh时,既可使用慢开始算法,也可使用拥塞避免算法。
拥塞避免算法的思路是让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是像慢开始阶段那样加倍增长。因此在拥塞避免阶段就有“加法增大”AI (Additive Increase)的特点。这表明在拥塞避免阶段,拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。
以一个具体的例子说明在拥塞控制过程中,TCP的拥塞窗口是怎样变化的。现假定TCP的发送窗口等于拥塞窗口
当TCP连接进行初始化时,把拥塞窗口cwnd置为1。为了便于理解,图中的窗口单位不使用字节而使用报文段的个数。在本例中,慢开始门限的初始值设置为16个报文段,即ssthresh = 16,在执行慢开始算法时,发送方每收到一个对新报文段的确认ACK,就把拥塞窗口值加1,然后开始下一轮的传输(请注意,图5-25的横坐标是传输轮次,不是时间)。因此拥塞窗口cwnd随着传输轮次按指数规律增长。当拥塞窗口cwnd增长到慢开始门限值ssthresh时( 图中的点➊,此时拥塞窗口cwnd = 16),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。但请注意,“拥塞避免”并非完全能够避免了拥塞。“ 拥塞避免”是说把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
当拥塞窗口cwnd = 24时,网络出现了超时(图中的点2),发送方判断为网络拥塞。于是调整门限值ssthresh = cwnd/2= 12,同时设置拥塞窗口cwnd=1,进入慢开始阶段。
按照慢开始算法,发送方每收到一个对新报文段的确认ACK,就把拥塞窗口值加1。当拥塞窗口cwnd = ssthresh = 12时(图中的点❸,这是新的ssthresh值),改为执行拥塞避免算法,拥塞窗口按线性规律增大。
当拥塞窗口cwnd= 16时(图中的点❹),出现了一个新的情况,就是发送方一连收到3个对同一个报文段的重复确认(图中记为3-ACK)。关于这个问题要解释如下。
有时,个别报文段会在网络中丢失,但实际上网络并未发生拥塞。如果发送方迟迟收不到确认,就会产生超时,就会误认为网络发生了拥塞。这就导致发送方错误地启动慢开始,把拥塞窗口cwnd又设置为1,因而降低了传输效率。这时就要用到快重传算法了。
3.快重传和快恢复
采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。如图5-26所示,接收方收到了M1和M2后都分别及时发出了确认。现假定接收方没有收到M3但却收到了M4。本来接收方可以什么都不做。但按照快重传算法,接收方必须立即发送对M2的重复确认,以便让发送方及早知道接收方没有收到报文段M3。发送方接着发送Ms和M6。接收方收到后也仍要再次分别发出对M2的重复确认。这样,发送方共收到了接收方的4个对M2的确认,其中后3个都是重复确认。快重传算法规定,发送方只要一连收到3个重复确认,(就认定有报文段丢失)就知道接收方确实没有收到报文段M3,因而应当立即进行重传(即“快重传”),这样就不会出现超时,发送方也不就会误认为出现了网络拥塞。使用快重传可以使整个网络的吞吐量提高约20%。
因此,在图5-25 中的点❹,发送方知道现在只是丢失了个别的报文段。于是不启动慢开始,而是执行快恢复算法。这时,发送方调整门限值ssthresh= cwnd/ 2= 8,同时设置拥塞窗口cwnd = ssthresh=8 (见图5-25中的点❺),并开始执行拥塞避免算法。
请注意,也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些(增大3个报文段的长度),即等于新的ssthresh + 3 x MSS。这样做的理由是:既然发送方收到3个重复的确认,就表明有3个分组已经离开了网络。这3个分组不再消耗网络的资源而是停留在接收方的缓存中(接收方发送出3个重复的确认就证明了这个事实)。可见现在网络中并不是堆积了分组而是减少了3个分组。因此可以适当把拥塞窗口扩大些。
从图5-25 可以看出,在拥塞避免阶段,拥塞窗口是按照线性规律增大的,这常称为加法增大AI (Additive Increase)。 而一旦出现超时或3个重复的确认,就要把门限值设置为当前拥塞窗口值的一半,并大大减小拥塞窗口的数值。这常称为“乘法减小Multiplicative Decrease)。二者合在一就是所谓的AIMD算法。
传输轮次的概念:慢开始(ss、slow、start)算法的含义及过程;慢开始门限(sstresh)用法
传输轮次:
- 发送方给接收方发送数据报文段后,接收方给发送方发回相应的确认报文段。
- 一个传输轮次所经历的时间其实就是往返时间,往返时间并非是恒定的数值。
- 使用传输轮次是为了强调把拥塞窗口所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个报文段的确认。
慢开始:慢开始算法的主要原理就是,一开始先不发送大量的数据,先探测一下网络的拥塞程度,也就是从小到大(指数级)逐渐增加拥塞窗口(cwnd)的大小。为防止拥塞窗口的增长引起网络拥塞,需要设置一个慢开始门限(ssthresh),当cwnd>ssthresh时,改用拥塞避免算法。
拥塞避免算法的含义及过程。网络出现拥塞的标志。加性增乘性减(AIMD)含义及过程
拥塞避免算法:主要作用是让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1(按线性规律增长),而不是加倍。当网络发送拥塞时,ssthresh值会更新为拥塞前ssthresh值的一半,cwnd重新设置为1(再指数增长,直到cwnd = ssthress时,开始执行拥塞避免算法,cwnd按线性规律增长)。
拥塞的标志:1.重传计时器超时 2.接收到三个重复确认
当网络发生拥塞时,一般会出现数据丢失,时延增加,吞吐量下降,严重时甚至会导致拥塞崩溃。通常情况下,当网络中负载过度增加致使网络性能下降时,就会发生网络拥塞
加性增——乘性减:AIMD
原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss
方法:AIMD
- additive increase(增性加): 每个RTT将CongWin增大一个MSS——拥塞避免
MSS最大段长度 - Multiplicative Decrease(乘性减):发生loss后将CongWin减半
快速重传的触发条件及其过程
快重传算法:当发送端连续收到三个重复的ack时,表示该数据段已经丢失,需要重发。此时慢启动阈值ssth变为原来一半,拥塞窗口cwnd变为ssth+3,然后+1+1的发(每一轮rtt+1)。
快恢复含义及其过程。快恢复的两个版本TCP Rneo、TCP Tahoe
快恢复算法:当超过设定的时间没有收到某个报文段的ack时,表示网络拥塞,慢启动阈值ssth变为原来一半,拥塞窗口cwnd=1,进入慢启动阶段
一旦出现超时重传,TCP 就会把慢启动门限 ssthresh 的值设置为 cwnd 值的一半,同时cwnd 设置成 1. 但是快恢复算法不这样做。一旦出现超时重传,或者收到第三个重复的 ack 时(快重传),TCP 会把慢启动门限 ssthresh 的值设置为 cwnd 值的一半,同时 cwnd = ssthresh (在有些版本中,会让 cwnd = ssthresh + 3)。之前的旧版本的算法是在 TCP 的 Tahoe 版本中,而改进的版本算法是在 TCP Reno 版本中。图 2 中演示了他们之间的区别。蓝色曲线是旧版本,而红色是新版本。
图2 TCP Reno 版本与 Tahoe 版本
图 2 中,连续收到三个重复确认后,TCP Reno(红色)版本转入了拥塞阶段,而 TCP Tahoe 版本(蓝色)转入了慢启动阶段。
实际上,现代的 Linux 内核版本早已都不采用上面这些 TCP 版本了,而是使用使用的 TCP Cubic 版本。
发送窗口与接收窗口rwnd、拥塞窗口cwnd的关系
TCP中,发送窗口旳上限值、接受窗口值(rwnd)及拥塞窗口值(cwnd)之间旳关系是:发送窗口旳上限值=Min[rwnd,cwnd]
当rwnd < cwnd 时,是接收方的接收能力限制发送方窗口的最大值。
当cwnd < rwnd 时,则是网络的拥塞限制发送方窗口的最大值。
TCP段的序号和确认序号的计算;GBN协议(Go-back-N)中帧序号比特数的计算
第一次握手序列号是x;
第二次握手序列号y,确认号x+1;
第三次握手序列号x+1,确认号y+1
两台主机之间的数据链路层采用后退N帧协议(GBN)传输数据,数据传输速率为16kbps,单向传播时延为270ms,数据帧长度范围是128~512字节,接收方总是以与数据帧等长的帧进行确认。为使信道利用率达到最高,帧序号的比特数至少为 :4
本题考查GBN协议的信道利用率计算。我们选取128B①进行计算:
发送一帧的时间为128×8bit/(16kbps)=64ms;
发送一帧到收到确认为止的总时间:64+270×2+64=668ms;
显然该时间内总共可以发送668/64=10.4(帧),因此:
至少需要用4位比特进行编号。
注释:之所以选择短帧,是因为要使信道利用率最高,信道则必须不停的发送数据,因此要想多发数据应尽量使帧序号比特数(n)大一些。例如,当发送大小相同的一组数据时(如1000B时),数据帧为512B的最大帧序号数小于数据帧为128B的最大帧序号数(因为总长度一定,但是每一部分长度大,那么分组数量就小了),即分组为512B的发送窗口小于128B的发送窗口,故要选择数据帧较小的。
TCP连接建立和释放的过程
三次握手建立
四次挥手释放
课后题:5-37、5-38、5-39、5-4
网络层
分类IP地址;
无分类IP地址(CIDR),CIDR地址块;子网掩码
二进制(或16进制)到点分十进制转换
IP报文的格式(看图阅读)
版本:IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6。
首部长度:IP报头的长度。固定部分的长度(20字节)和可变部分的长度之和。共占4位。最大为1111,即10 进制的15,代表IP报头的最大长度可以为15个32bits(4字节),也就是最长可为15*4=60字节,除去固定 部分的长度20字节,可变部分的长度最大为40字节。
服务类型:Type Of Service。
总长度:IP报文的总长度。报头的长度和数据部分的长度之和。
标识:唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络 的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片 在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。
标志:共3位。R、DF、MF三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示 “更多的片”,为0表示这是最后一片。
片位移:本分片在原先数据报文中相对首位的偏移位。(需要再乘以8) 生存时间:IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据 报丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64。发送 ICMP 回显应答时经常把 TTL 设为最大值 255。
协议:指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不 同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。 ICMP的协议号为1,IGMP的协议号为2。
首部校验和:计算IP头部的校验和,检查IP报头的完整性。
源IP地址:标识IP数据报的源端设备。
目的IP地址:标识IP数据报的目的地址。
路由聚合概念;最大前缀匹配;网络前缀;子网掩码;地址数和可指派地址数;IP分组转发的过程
路由聚合:路由聚合(也叫汇总)是让路由选择协议能够用一个地址通告众多网络,旨在缩小路由 器中路由选择表的规模,以节省内存,并缩短IP对路由选择表进行分析以找出前往远程网络的路径所需 的时间。
最大前缀匹配: 如果路由表查表转发分组时发现有多条路由可选择时,则选择网络前缀最长的那条进行 转发。原因:这样的路由更加具体
网络前缀: 用来唯一地标识着连入Internet的一个网络的网络号
地址数和可指派地址数
IP分组转发的过程:https://blog.csdn.net/qq_51453356/article/details/125577300
路由器分组转发的过程:
-
判断目的主机是否连接在本网络上,如果在,就直接交付,如果不在就执行第2步,把分组发送到路由器R,由路由器R完成后续的任务。
-
检查转发表中是否有目的IP地址的特定主机路由,如果有,按特定主机路由转发,如果没有,就执行第3步
-
把要发送的分组的目的地址和转发表中网络的子网掩码逐行相与,结果和转发表中的某行前缀相匹配,按该行指出的接口进行转发,如果结果都不匹配,就执行第4步
-
看转发表中是否设置有默认路由,有的话就按照默认路由表转发,没有的话就执行第5步
-
向源主机报错
判断目的主机是否连接在本网络上的方法:把发送的分组的目的地址和本网络的子网掩码按位进行AND运算,得出运算结果。如果运算结果等于本网络的前缀,就表明目的主机连接在本网络上
大题:
根据网络拓扑图,建立路由转发表
https://blog.csdn.net/weixin_40163242/article/details/109946651
表的介绍:https://cloud.tencent.com/developer/article/1173761
802.11协议又俗称什么协议?
802.11协议为什么不能支持移动IP?
无线局域网用的是802.11协议,局域网是由固定基础设施的,有一定地理范围的,超出这个范围就不能使用这个无线网。而移动IP允许计算机移动到外地时,仍然保留其原来的 IP 地址
802.11协议又俗称IEEE 802协议簇,
网络地址转换NAT作用是?
ARP协议的工作步骤;使用ARP的四种典型情况
https://blog.csdn.net/hemeinvyiqiluoben/article/details/55670568
习题4-45、4-46、4-48、4-49、52、53、54、55
由首地址和末地址可以看出是个B类地址,且前面两个字节的地址相等,从29到32可以数出有4个字段,从0到255有256个地址,可以计算出地址数为N=(32-29+1)*(255-0+1)=1024。
子网掩码:前18个1,后14个0;和目的地址按位和,得到145.13.128.0,故选择m2
前缀最长匹配
-
源IP地址为IP分组头的第13-16字节,在表中,1、3、4号分组均为192.168.0.8,所以1、3、4分组 是由H发送的。
-
1号分组封装的TCP段的SYN=1,ACK-0: 2号分组封装的TCP段的SYN=ACK=1;
3号分组封装的ACK=1,加上seq no和ack no.的数值是顺序数值,所以1、2、3号分组完成了TCP 的建立过程。
每个IP分组的第2528字节为TCP段头中的序号字段;第2932字节为TCP段头中的确认号字段;第34字节的低6位为6个控制位(URG,ACK,PSH,RST,SYN,FIN)
题47-a表中与TCP建立连接相关的IP分组所封装的TCP段的相关字段取值如下:
1号分组:TCP段的6个控制位的取值为02H,即00000010b,因此可知SYN=1,ACK=0;序号字段的取值为846b41c5H,确认号字段的取值为00000000H(由于ACK=0,此字段无效);
2号分组:TCP段的6个控制位的取值为12H,即00010010b,因此可知SYN=1,ACK=1;序号字段的取值为e0599fefH,确认号字段的取值为846b41c6H;
3号分组:TCP段的6个控制位的取值为10H(注意:题47-a表中错印为f0H),即11110000b,因此可知SYN=0,ACK=1;序号字段的取值为846b41c6H,确认号字段的取值为e0599ff0H。
分析出上述信息后,还需要熟悉TCP采用“三报文握手”建立连接的过程,如下所示
很显然,本题中1号分组所封装的TCP段是TCP连接请求;2号分组所封装的TCP段是TCP连接确认;3号分组所封装的TCP段是针对TCP连接确认段的确认。因此,本题中与TCP建立连接过程相关的三个分为为1号、2号以及3号分组。
-
由于快速以太网中的帧有效载荷最小程度为46B,3、5号分组的总长度为40B,所以需要填充。
由于以太网的最短帧长为64字节,除去首部(6字节目的MAC地址,6字节源MAC地址,2字节类型)和尾部(4字节帧校验序列FCS)共18字节,要求最小数据载荷为46字节。上述5个IP分组中,3号和5号的长度都小于46字节,因此在将3号和5号IP分组各自封装成以太网帧时需要分别进行填充。
IP分组头中的TTL字段的值每经过一个路由器就减1。
大题:
重点:考研真题:https://www.bilibili.com/read/cv2483785/
https://blog.csdn.net/qq_35812205/article/details/107235809
链路层
数据链路层三个基本问题(封装成帧、透明传输、差错控制)
封装成帧
在进行数据链路层传输的时候存在一个问题,我们需要对饮数据链路层的协议对应将有效的数据封 装成一个帧,封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成一个帧。这个时候 我们就需要考虑,我们如何来识别一个帧,所以这里提出了一个帧定界的概念,使用两个控制字 符,一个控制字符SOH放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT标识帧的结束。
所以简单的说第一步就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。首部和尾 部就是起到帧定界的作用。
透明传输
关于透明传输,我们主要目的是因为,在帧的有效数据当中,可能出现和帧定界的控制字符一样的 字符,为了防止将这些字符当中帧定界的字符,错误的处理帧,所以我们采方法使得数据当中可能 出现的控制字符“SOH”和“EOT”在接收端不被解释为控制字符。
方法是: 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符” ESC”。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。我们把这种 方法叫做字节填充法。当然如果转义字符”ESC“也出现在数据当中,那么解决的方法仍然是在转义 字符的前面插入一个转义字符,所以,当接受到连续的两个转义字符的时候,就去删除其中前面的一个。
**差错控制:**https://www.cnblogs.com/PBDragon/p/14912252.html
数据链路层的差错控制主要针对在链路上传输的比特位出错,主要有两种控制方法,分别是检错编 码和纠错编码,上面提过相关的概念。检错编码包含奇偶校验码和循环冗余码CRC(除法,余数不 得零则有错),而纠错编码包含海明码(校验位)。
透明传输的实现方法(字节填充、零比特填充)
字节填充
当PPP使用异步传输时,我们使用0x7D(01111101)作为转义符,转义的规则如下:
-
把信息字段中出现的每一个0x7E字节转变为2字节序列(0x7D,0x5E)。
-
若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把转义字符0x7D 转变为2字节序列(0x7D,0x5D)。
-
若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个 0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是“传输结束”ETX)就要 把它转变为2字节序列的(0x7D,0x31)。
零比特填充
当PPP使用同步传输时(这种情况在SONET/SDH链路上使用PPP时出现),使用零比特填充来实 现透明传输。
零比特填充相较字节填充要简单得多,0x7E的二进制表示是01111110,因此只要在每出现5个1时 插入一个0就可以避免在数据中出现0x7E.
数据链路层协议:点对点协议(代表协议:PPP、HDLC)、多点访问协议三大类型及各自特点
HDLC
1. 什么是HDLC
HDLC是高级数据链路控制协议,是一种数据链路层的协议。HDLC是一个ISO标准的面向位的数据链路协议,其在同步串行数据链路上封装数据,最常用于点对点链接。HDLC主要有以下几个特性:
① 协议不依赖于任何一种字符编码集。
② 数据报文可透明传输,用于透明传输的“0比特插入法”易于硬件实现。
③ 全双工通信,不必等待确认可连续发送数据报文,有较高的数据链路传输效率。
④ 所有帧采用CRC校验,并对信息帧进行编号,可防止漏收或重收,传输可靠性高。
⑤ 传输控制功能与处理功能分离,具有较大的灵活性和较完善的控制功能。
⑥ HDLC的主要缺点在于,没有指定字段来标识已封装的第三层协议。因此,已经基于HDLC定义了其他几种协议。
2. HDLC支持两种类型的传输模式:同步传输模式和异步传输模式。
异步传输模式:是以字节为单位来传输数据,并且需要采用额外的起始位和停止位来标记每个字节的开始和结束。因此,每个字节的发送都需要额外的开销。可以面向点对点或点对多点的传输。
同步传输模式:是以帧为单位来传输数据,在通信时需要使用时钟来同步本端和对端设备的通信。只能用于面向点对点的传输。DCE(数据通信设备),提供了一个用于同步DCE设备和DTE设备之间数据传输的时钟信号,通常情况下使用DCE产生的时钟信号。
3. HDLC帧结构
一个完整的HDLC帧最多由六个字段组成:标志字段(Flag)、地址字段(Address)、控制字段(Control)、信息字段(Information)、帧校验序列字段(FCS)构成。
① 标志字段:这是一个8位序列,标记帧的开始和结束。 标志的位模式是01111110。也可以作为帧与帧之间的填充字符。
② 地址字段:包含接收者的地址。 如果该帧是由主站发送的,则它包含从站的地址。 如果它是从站发送的,则包含主站的地址。 地址字段可以从1个字节到几个字节。
③ 控制字段:用于构成各种命令及响应,以便对链路进行监控。长度1或2字节。
④ 信息字段:承载来自网络层的数据。它的长度有FCS字段或通讯节点的缓存容量来决定。使用较多的上限是1000-2000比特;下限是0(S帧)。
⑤ 帧校验字段:这是一个2字节或4字节的帧检查序列,用于对两个标志字段之间的内容进行错误检测。使用的是标准代码CRC(循环冗余代码)。
4. 根据不同的控制字段分为不同类型的帧
5. HDLC接口地址租用
接口没有IP地址,就无法生产路由,也就无法转发数据报文。IP地址借用允许一个没有IP地址的接口从其他的接口上借用IP地址,这样可以避免一个接口独占IP地址,从而造成IP地址的浪费。一般是借用loopback接口的IP地址。因为这类接口总是处于活跃(active)状态,因而能提供稳定可用的IP地址。
PPP
1. 什么是PPP
PPP协议是一种点到点链路层协议,主要用于在全双工的同异步链路上进行点到点的数据传输。
2. PPP协议的优点
①PPP协议既支持同步传输也支持异步传输。而X.25、FR等链路层协议仅支持同步传输;SLIP仅支持异步传输。
②PPP协议具有很好的扩展性,在以太网中时,可以扩展为PPPoE。
③PPP协议提供了LCP(链路控制协议)用于链路层参数的协商;提供了NCP(网络控制协议)用于网络层参数的协商。
④PPP协议提供了CHAP(质询握手认证协议)、PAP(密码身份验证协议),更好的保证了网络的安全性。
⑤无重传机制,网络开销小,速度快。
3. PPP连接的建立过程
① Dead阶段:此阶段表示物理层不可用。当通信双方检测到物理线路激活时,会从Dead阶段变为Establish阶段(链路建立阶段)。
② Estblish阶段:此阶段进行LCP参数协商。内容包括最大接收单元MRU、认证方式等选项。当协商成功后,会进入Opened状态,表示底层链路已经建立;反之,则返回到Dead阶段。
③ Authenticate阶段:此阶段可有可无(多数情况下是有的)。如果需要认证,则在底层链路建立过程中必须进行认证。认证通过或无认证,则进入Network阶段;反之,则进入终止阶段,再返回到Dead阶段。
④ Network阶段:此阶段进行NCP协商。通过NCP协商来选择和配置一个网络层协议并进行网络参数的协商。只有相应的网络参数协商成功后,才会建立网络层通信。反之,则会进入终止阶段,在进入Dead阶段。
⑤ 当NCP协商成功后,PPP链路将保持通信状态。
⑥ Terminate阶段:此阶段所有资源都被释放,通信双方将回到Dead阶段。
- PPP帧格式
PPP帧格式与HDLC协议的帧格式相类似。
①Flag域标识一个物理帧的起始与结束,该字节为二进制序列01111110(0X7E)。
②PPP帧的地址域根HDLC的地址域有差异。PPP帧的地址域为固定的11111111(0XFF)。是一个广播地址。
③PPP帧的默认控制域为00000011(0X03),表示无序号帧。
④FCS是个16位的校验和,用于检测PPP帧的完整性。
⑤协议字段用于表示PPP帧封装的协议报文类型:0XC021代表LCP报文;0XC023表PAP报文;0XC223代表CHAP报文。
⑥信息字段包含协议中指定协议的数据包。数据字段的默认最大长度(不包含协议字段)称为最大接收单元MRU(MRU缺省值为1500字节)。
⑦Code字段。主要用于标识LCP数据报文的类型。
⑧Identifier域为1字节,用于匹配和响应请求
⑨Length字段表示该LCP报文的总长度。
⑩数据字段承载各种TLV(Type/Length/Value)参数用于协商配置选项。(包括最大接收单元,认证协议等等)
网络基础篇之HDLC、PPP(原理):
https://blog.51cto.com/u_13506095/5412110

多路访问协议
大致分为三种:信道划分协议、随机接入协议和轮流协议
网络链路有两种类型:点对点链路和广播链路。点对点链路由链路一端的单个发送方和链路另一端的单个接收方组成,如点对点协议(PPP)和高级数据链路控制(HDLC)。广播链路能够让多个发送和接收结点都连接到相同的、单一的、共享的广播信道上。
对于广播链路而言,因为所有结点都能传输帧,所以多个结点同时传输帧时,传输的帧在所有的接收方处发生碰撞,导致没有一个接收结点能够有效地获得任何传输的帧。解决这个问题则需要多路访问协议,结点通过这些协议来规范它们在共享的广播信道上的传输行为,从而协调多个发送和接收结点对一个共享广播信道的访问。
多路访问协议分为3种类型:信道划分协议、随机接入协议、轮流协议。
信道划分协议:
时分多路复用(TDM):TDM将时间划分为时间帧,并进一步划分每个时间帧为N个时隙,然后把每个时隙分配各N个结点中的一个,无论何时有结点在有分组要发送时,他在循环的TDM帧中指派给他的时隙内传输分组比特。
TDM消除了碰撞个且非常公平:每个结点在每个帧时间内得到了专用的传输速率R/Nbps的平均速率,然而它有两个主要缺陷:首先,结点被限制于R/Nbps的平均速率,即使当它是唯一有分组要发送的结点时。其次,结点必须总是等待他在传输序列中的轮次 ,即使他是唯一一个有帧要发送的结点。
频分多路复用(FDM):FDM将R bps信道划分为不同的频段(每个频道具有R/N带宽)并把每个频率分配给N个结点中的一个。

FDM具有和TDM同样的优点和缺点:它避免了碰撞,在N个结点之间公平地划分了带宽。但是他也限制了一个结点只能使用R/N的带宽,即使当他是唯一一个有分组要发送的结点时。
码分多址(CDMA):CDMA对每一个结点分配一种不同的编码,然后每个结点用它唯一的编码来对它发送的数据进行编码。如果精心选择这些编码,就能做到使不同的结点同时传输,并且他们各自相应的接收方仍能正确接收发送方编码的数据,而不在乎其他结点的干扰传输。
随机接入协议:
在随机接入协议中,一个传输结点总是以信道的全部速率(即R bps)进行发送。当有碰撞时,涉及碰撞的每个结点反复地重发它的帧,到该帧无碰撞地通过为止。但是当一个结点经历一次碰撞时,他不必立刻重发该帧。相反,它在重发该帧前等待一个随机时延。涉及碰撞的每个结点独立地选择随机时延。
比较常见的随机接入协议有:ALOH协议和载波侦听多路访问协议(CSMA)
时隙ALOHA
p为概率,在每个结点中,时隙ALOHA的操作如下所示:
其中,以概率p重传,是指某结点有效地投掷一个有偏倚的硬币,硬币正面时间对应着重传,而重传出现的概率为p。 硬币反面事件对应着“跳过这个时隙,在下个时隙再掷硬币”
ALOHA
时隙ALOHA协议要求所有的结点同步他们的传输,以在每个时隙开始时开始传输。而ALOHA协议是非时隙、完全分散的协议。在纯ALOHA中,当一帧首次到达,结点立刻将该帧完整的传输进广播信道。如果一个传输的帧在一个或多个传输经历了碰撞,这个结点将立即(在完全传输完它的碰撞帧后)以概率p传输该帧,或者以概率1-p在另一个帧时间等待。
纯ALOHA协议的最大效率时隙ALOHA的一半。这就是完全分散的ALOHA协议所要付出的代价。
载波侦听多路访问协议(CSMA)
载波侦听:一个结点在传输前先听信道,如果来自另一个结点的帧正向信道上发送,结点则等待直到检测到一小段时间没有传输,然后开始传输
具有碰撞检测的载波侦听多路访问(CSMA/CD)
碰撞检测:当一个传输结点在传输时一直在侦听此信道,如果它检测到另一个结点正在传输干扰帧,它就停止传输,在重复“侦听-当空闲时传输”循环之前等待一段随机时间。
发生碰撞时使用二进制指数后退算法可使碰撞结点数量较少时,时间间隔较短,当碰撞结点数量较大时,时间间隔较长。二进制指数后退算法是指当传输一个给定帧时,在该帧经历了一连串的n次碰撞后,结点随机地从中选择一个K值。因此,一个帧经历的碰撞越多,K的时间间隔越大。
CSMA/CD效率:当有大量结点,且每个结点有大量的帧要发送时,帧在信道中无碰撞地传输的那部分时间在长期运行时间中所占的份额。其中dprop表示信号能量在任意两个适配器之间传播所需的最大时间。dtrans表示传输一个最大长度的以太网帧的时间
轮流协议:
多路访问协议的两个理想特性是:1.当只有一个结点活跃时,该结点具有R bps的吞吐量 2.当有M个结点活跃时,每个活跃结点的吞吐量接近R/M bps。ALOHA和CSMA只满足第一个特性。而轮流协议能够满足两个特性。轮流协议中比较重要的两个协议是轮询协议和令牌传递协议
轮询协议:要求这些结点之一要被指定为主结点。主结点以循环的方式轮询每个结点。特别是,主结点告诉每个结点能够传输的帧的最多数量。
轮询协议消除了困扰随机接入协议的碰撞和空时隙,这使得轮询取得的效率高得多。但是他也有一些缺点,第一个缺点是引入了轮询时延,即同时一个结点“它可以传输”所需的时间(只有一个结点时使得速率小于R bps)。第二个缺点是如果主结点故障,整个信道都变得不可操作。
令牌传递协议:一个称为令牌的小的特殊帧在结点之间以某种固定的次序传递。当一个结点收到令牌时,仅当它有一些帧要发送时,他才持有这个令牌。否则,他立即向下一个结点转发该令牌。
令牌传递是分散的,并有很高的效率,但是他也有一些问题。如果一个结点故障,则会导致整个信道崩溃。或者如果一个结点偶然网际了释放令牌,则必须调用某些恢复步骤使令牌返回到循环中来。
协议详细介绍:https://blog.csdn.net/qq_39583450/article/details/113859215
2种随机接入的多点访问协议(CSMA/CD、CSMA/CA)
重点:CSMA/CD https://blog.csdn.net/qq_46331050/article/details/120406217
CSMA/CD协议的实施理念
解决碰撞冲突问题:提供寻址和媒体存取的控制方式,使得不同设备或网络上的节点可以在多点的网络上通信而不相互冲突
所有节点都共享网络传输信道,节点在发送数据之前,首先检测信道是否空闲,如果信道空闲则发 送,否则就等待;在发送出信息后,再对冲突进行检测,当发现冲突时,则取消发送。
CSMA/CA
是一种数据传输时避免各站点之间数据传输冲突的算法,其特点是发送包的同时不能检测到信道上 有无冲突,只能尽量“避免”。例如,如果计算机A和计算机C同时给计算机B发送一个控制消息,它 们将同时到达计算机B,导致冲突的发生。当这种冲突发生时,发送者可以随机等待一段时间,然 后重发控制消息。因为控制消息比数据敏要短得多,所以发生第二次冲突的可能性也要比传统以太 网要小很多。最终将有一个控制消息正确到达,然后计算机B发送一个响应消息。通常CSMA/CA利 用ACK信号来避免冲突的发生,也就是说,只有当客户端收到网络上返回的ACK信号后才确认送出 的数据已经正确到达目的
单程传播时延tao;最长经过多长时间才能知道自己发送的数据没有发生碰撞?2tao
什么是比特时间?
比特时间是发送一比特多需的时间,它是传信率的倒数,便于建立信息长度与发送延迟的关系“比特时间”换算成“微秒”必须先知道数据率是多少,如数据率是10Mb/s,则100比特时间等于10微秒。
检测到信道空闲能立即发送信号吗?帧间最小间隔的概念
能;(9.6微秒/96比特时间)
以太网规定帧间最小间隔为9.6微秒,相当于96比特时间,其目的是为了使刚刚收到数据帧的站的接受缓存来得及清理,做好接受下一帧的准备。
强化碰撞是什么?(别称冲突强化)
当发送数据的站一旦发现发生了碰撞时,需要完成以下 2 步:
1.立即停止发送数据;
2.再继续发送若干比特的人为干扰信号(jamming signal)(指对有用信号的接收造成损伤的信号), 以便让所有用户都知道现在已经发生了碰撞。
发送人为干扰信号(又叫jamming信号)的概念
以太网扩展(物理层扩展、链路层扩展)
物理层扩展
-
以太网上的主机之间的距离不能太远(例如,10BASE-T以太网的两主机之间的距离不超过200 米),否则主机发送的信号经过铜线的传输就会衰减到使CSMA/CD协议无法正常使用。
-
过去,广泛使用粗缆或细缆以太网时,常使用工作在物理层的转发器来扩展以太网的地理覆盖范 围。
-
现在,双绞线以太网成为以太网的主流类型,扩展主机和集线器之间的距离的一种简单方法就是 使用光纤(通常是一对光纤)和一对光纤调制解调器。
-
光纤调制解调器的作用,是进行电信号和光信号的转换。
链路层扩展
-
在数据链路层扩展以太网要使用网桥。
-
网桥(https://blog.csdn.net/qq_42248536/article/details/118927515)工作在数据链路层,它根据MAC帧的目的地址对收到的帧进行转发或过滤。当网桥收到一 个帧时,并不是向所有的接口转发这个帧,而是检查此帧的目的MAC地址,然后再确定将该帧转 发到哪一个接口,或者是把它丢弃(即过滤)。
交换机如何自学习来建立交换表
-
交换机表初始为空。
-
对于在某接口接收到的每个入帧,该交换机在其表中存储:
1)在该帧源地址字段中的MAC地址;
2)该帧到达的接口;
3)当前的时间;交换机以这种方式在它的表中记录发送节点所在LAN网段。若在LAN上的每个节点最终都发送了一个帧,则每个节点将在这张表中被记录下来。
-
如果在一段时间(称为老化期(aging time)后,交换机没有接收到发该址作为源地址的帧,就在表中 删除这个地址。
习题:3-24、3-25、3-10、3-33
24.https://blog.csdn.net/sumisu666/article/details/105120471
https://blog.csdn.net/qq_30033537/article/details/105283011?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-105283011-blog-104840944.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-105283011-blog-104840944.pc_relevant_default&utm_relevant_index=5
物理层
网络性能指标的定义:https://blog.csdn.net/a15028596338/article/details/79735926
1、速率
计算机发送出的信号都是数字形式的。比特(bit)来源于binary digit,意思是一个”二进制数字“,因此一个比特就是二进制数字中的一个1或0。比特也是信息论中使用的信息量的单位。网络技术中的速率指的是数据的传送速率,它也称为数据率或比特率。速率的单位是bit/s(比特每秒)(或b/s,有时也写作bps,即bit per second)。
当提到网络的速率时,往往指的是额定速率或标称速率,而并非网络实际上运行的速率。
2、带宽
”带宽“有以下两种不同的意义:
(带宽本来指某个**信号具有的频带宽度。**信号的带宽是指该信号所包含的各种不同频率成分所占据的频率范围。这种意义的带宽的单位是赫兹(或千赫、兆赫、吉赫等),在过去很长的一段时间,通信的主干线路传送的是模拟信号(即连续变化的信号)。因此表示某信道允许通过的信号频带范围就称为该信道的带宽。)
- 电子学上就提出了“带宽”的概念,它指的是电路可以保持稳定工作的频率范围。而属于该体系的有显示器带宽、通讯/网络中的带宽等等。
- 而第二种带宽的概念大家也许会更熟悉,它所指的其实是数据传输率,譬如内存带宽、总线带宽、网络带宽等等,都是以“字节/秒”为单位。
3、吞吐量
吞吐量表示在单位时间内通过某个网络的实际数据量。
4、时延
时延是指数据从网络的一端传送到另一端所需的时间。时延是个很重要的性能指标,它有时也称为延迟或者迟延。
网络中的时延是由以下几个不同的部分组成的:
(1)发送时延
发送时延是主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。因此发送时延也叫做传输时延。发送时延的计算公式是:
发送时延=数据帧长度(bit)/发送速率(bit/s)
(2)传播时延
传播时延是电磁波在信道中传播一定的距离需要花费的时间。传播时延的计算公式是:
传播时延=信道长度(m)/电磁波在信道上大的传播速率(m/s)
电磁波在自由空间的传播速率是光速。即3.0*10^5km/s。
发送时延发生在机器内部的发送器中,与传输信道的长度没有任何关系。传播时延发生在机器外部的传输信道媒体上,而与信道的发送速率无关。信号传送的距离越远,传播时延就越大。
(3)处理时延
主机或路由器在收到分组时需要花费一定时间进行处理,例如分析分组的首部,从分组中提取数据部分、进行差错检验或查找合适的路由等,这就产生了处理时延。
(4)排队时延
分组在进行网络传输时,要经过许多路由器。但分组在进入路由器后要先在输入队列中排队等待,在路由器确定了转发接口后,还要在输出队列中排队等待转发。这就产生了排队时延。排队时延的长短取决于网络当时的通信量。当网络的通信量很大时会发生队列溢出,使分组丢失,这相当于排队时延无穷大。
这样数据在网络中经历的总时延就是以上四种时延之和:总时延=发送时延+传播时延+处理时延+排队时延。
一般来说,小时延的网络要优于大时延的网络。
5、时延带宽积
把传播时延和带宽相乘,就可以得到:传播时延带宽积,即:
时延带宽积=传播时延*带宽
6、往返时间RTT
在计算机网络中,往返时间RTT是一个重要的性能指标。这是因为在许多情况下,互联网上的信息不仅仅单方向传输而是双向交互的。因此,我们有时很需要知道双向交互一次所需的时间。
7、利用率
利用率有信道利用率和网络利用率等。信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道利用率是零。网络利用率则是全网络的信道利用率的加权平均值。信道利用率并非越高越好。这是因为,根据排队论的理论,当某信道的利用率增大时,该信道引起的时延也就迅速增加。
信道或网络的利用率过高会产生非常大的时延。
传输时延、传播时延、排队时延的概念及计算
传输时延:
发送时延是主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该 帧的最后一个比特发送完毕所需的时间。因此发送时延也叫做传输时延。发送时延的计算公式是: 发送时延=数据帧长度(bit)/发送速率(bit/s)
传播时延:
传播时延是电磁波在信道中传播一定的距离需要花费的时间。传播时延的计算公式是: 传播时延=信道长度(m)/电磁波在信道上大的传播速率(m/s) 电磁波在自由空间的传播速率是光速。即3.0*10^5km/s。 发送时延发生在机器内部的发送器中,与传输信道的长度没有任何关系。传播时延发生在机器外部 的传输信道媒体上,而与信道的发送速率无关。信号传送的距离越远,传播时延就越大
排队时延:
分组在进行网络传输时,要经过许多路由器。但分组在进入路由器后要先在输入队列中排队等待, 在路由器确定了转发接口后,还要在输出队列中排队等待转发。这就产生了排队时延。**排队时延的 长短取决于网络当时的通信量。**当网络的通信量很大时会发生队列溢出,使分组丢失,这相当于排 队时延无穷大。 这样数据在网络中经历的总时延就是以上四种时延之和:总时延=发送时延+传播时延+处理时延 +排队时延。 一般来说,小时延的网络要优于大时延的网络。
通信和计算机利用中,“千”,“兆”,“吉”英文缩写代表的数值不同。2MB和2Mb的M大小有什么不同,B和b的区别?做题要有单位
MB的含义是“兆字节”,一般用作文件大小;
Mb的含义是“兆比特”,一般用作网络传输速度
Byte的含义是“字节数”
bit的含义是“位数”
在计算机中每8位为一字节,也就是1Byte=8bit,是1:8的对应关系。
K,M,G 千,兆,吉 的英文单词分别是什么Kbps,Mbps,Gbps kilo million
分别表示10e+3、10e+6、10e+9
曼彻斯特编码
https://blog.csdn.net/IT_luosong/article/details/125573506
也叫做相位编码(PE),是一个同步时钟编码技术,在以太网媒介系统中,被物理层使用来编码一个 同步位流的时钟和数据。它的每一个数据比特都是由至少一次电压转换的形式所表示的。曼彻斯特 编码因此被认为是一种自定时码。自定时意味着数据流的精确同步是可行的。每一个比特都准确的 在一个预先定义时间时期的时间中被传送。这样的编码方式可以在长时间没有电平跳变的情况下, 仍然对任意的二进制数据进行编码,并且防止在这种情况下同步时钟信号的丢失以及防止低通模拟 电路中低频直流飘移所引起的比特错误。同时,如果保证传送的编码交流信号的直流分量为零并且 能够防止中继信号的基线漂移,那么就很容易实现信号的恢复和防止能量的浪费。另外,曼彻斯特 码还具有丰富的位定时信息。
信噪比公式、香农公式;
香农公式与极限传输速率的关系;香农公式的伟大意义;
香农公式的伟大意义:
只要信息传输速率低于信道的极限信息传输速率,就一定存在某种办法来实现无差错的传输。
**奈氏准则的意义,其和香农公式意义的区别;**https://blog.csdn.net/weixin_42193813/article/details/105420733
奈氏准则与香农公式的区别:
奈氏准则:
奈氏准则是在理想状态下提出的
奈氏准则指出了码元传输的速率是受限的(但没有对传输速率给出限制),不能任意提高,否则在接收端就无法正确识别
香农公式:
带宽受限且有高斯白噪声干扰的信道极限、无差错的信息传输速率
香农公式给出了信息的传输速率的极限,对于一定的传输带宽和一定的信噪比,信息传输速率的上限就确定了
信号状态数的计算
若信道在无噪声情况下的极限数据传输速率不小于信噪比为30 dB条件下的极限数据传输速率,则信号状态数至少是( D )。
A. 4 B. 8 C. 16 D. 32
解析: 可用奈奎斯特采样定理计算无噪声情况下的极限数据传输速率,用香农第二定理计算有噪声信道极限数据传输速率。 2Wlog2N≥Wlog2 (1 +S/N),W是信道带宽,N是信号状态数, S/N是信噪比,其中噪声分贝30dB=10log10(S/N),将数据代入计算可得N≥32,答案选D。
2009统考真题】在无噪声的情况下, 若某通信链路的带宽为3kHz, 采用4个相位, 每个相位具有4种振幅的QAM调制技术, 则该通信链路的最大数据传输率是( B ) 。
A. 12kb/s B . 24kb/s C. 48kb/s D. 96kb/s
解析:依题意,某通信链路的带宽W= 3KHz, 采用4个相位,每个相 位具有4种振幅的QAM调制技术,则信号状态个数共有4X 4=16种。
在无噪声情况下,根据奈李斯特准则可得该通信链路的最大数据传 输速率,即
CDMA共享链路中码片序列的计算;
https://blog.csdn.net/Nimrod__/article/details/113448050
习题1-18、1-35、2-07、2-16、1-28、6-12、6-14、6-47、8-03、8-05
注意MB是指2的20次方B
8-3 目前有哪几种方案改造互联网,使互联网能够适合于传送音频/频数据
8-5流式存储音频/视频,流式实况音频/视频和交互式音频/视频都有何区别
csma/cd:载波监听多点接入/碰撞检测
总线的特点:当一台计算机
wireshark抓包ip地址,源地址、目的地址要区分好,点分十进制的转换要掌握
ip地址:网络号+主机号
无分类编址CIDR:/方式表示
可指派地址:要 -2
全0全1: 直连网络不涉及协议,没有全〇全一
路由表,最长前缀匹配算法
在物联网应用中,通信技术包括Wi-Fi、RFID、NFC、ZigBee、Bluetooth、LoRa、NB-IoT、GSM、GPRS、3/4/5G网络、Ethernet、RS232、RS485、USB等。
相关的通信协议(协议栈、技术标准)包括Wi-Fi(IEEE 802.11b)、RFID、NFC、ZigBee、Bluetooth、LoRa、NB-IoT、CDMA/TDMA、TCP/IP、WCDMA、TD-SCDMA、TD-LTE、FDD-LTE、TCP/IP、HTTP等。注:3GPP将5G技术标准制定分为两个阶段,原计划中第一阶段的标准将在2018年底作为R15的一部分公布,将仅针对NR。第二阶段的标准将在2019年底作为R16的一部分,包括整个5G架构(包括核心网络)。
手机网络技术:
https://www.likecs.com/show-205165729.html
- ARP 协议
- ICMP 协议
- TCP 协议
- UDP 协议
- DNS 协议
- HTTP 协议
- FTP 协议