“流量控制的死锁”
物理层
首先解决两台物理机之间的通信需求。具体来说,机器A向机器B发送比特流,机器B可以接收比特流。
物理层主要定义物理器件的标准,如网络线类型、光纤接口类型、各种传输介质传输速率等。
主要作用是传输比特流,将比特流转换成电流强弱传输,达到目的后再转换成比特流,即常说的数模转换和模数转换。
这个数据被称为比特。“网卡在这里工作”。
物理层是OSI7层模型的物理基础,没有它就不能称为数据传输
因为物理层是由实物运送的,所以例如,运送汽车、飞机等货物的交通工具是物理层的象征
数据链路层
在传输比特流的过程中,数据传输可能不完整。
数据链路层定义了如何格式化和传输数据,以及如何控制对物理介质的访问。通常提供错误检测和更正以确保数据传输的准确性。
该层对位数据进行帧化,交换机在此层上运行,对帧进行解码,并根据帧中包含的信息将数据发送给正确的收件人。
该层负责物理互连节点之间的通信传输。例如,连接到一个以太网的两个节点之间的通信。
一般协议包括:。
数据链路层将序列分割成有意义的数据帧并成对地发送
网络层
随着网络节点的增加,点对点通信最重要的要求是如何通过多个节点找到目标节点,如何选择最佳路径。
网络层的主要功能是将网络地址转换为相应的物理地址,并确定如何将数据从发送者路由到接收方。
网络层通过综合考虑优先网络拥塞的传输服务质量和可选路由的成本,确定从一个网络中的节点A到另一个网络中的节点B的最佳路径。
网络层处理数据传输,智能指导,路由器联网,因此路由器属于网络层。
网络层负责将数据传输到目标地址。目标地址可以是多个网络通过路由器连接的一个地址。因此,该层主要负责“寻址和路由”。它主要由两个协议组成
传输层
随着网络通信需求的进一步扩大,通信过程中需要发送大量的数据,例如大量的文件传输,可能需要较长的时间,网络在通信过程中会多次中断,在这种情况下,为了保证传输大量文件时的准确性传输层必须考虑将发送的数据分割成一个段落,一个段落是否丢失,段落是否按顺序到达。
传输层解决了主机间的数据传输,数据间的传输可以是不同的网络,传输层解决了“传输质量”问题。
对话层
自动收发包,自动寻址。
会话层的作用是“负责建立和断开通信连接”,何时建立、断开连接、保持多久的连接。一般协议包括:。
显示层
解决了“不同系统间通信语法问题”,显示层数据按照网络可理解的方案格式化,格式因使用的网络而异。
主要负责数据格式的转换。具体来说,就是将设备特定的数据格式转换为网络标准格式。一般协议包括:。
应用程序层
发送者和接收者必须使用固定长度消息头,消息头必须使用一定的结构,在消息头中必须记录消息主体的长度等信息规定了接收者便于正确解析发送者发送的数据。
2层数据链路层情况下的数据被称为“帧”
对于一个物理层,数据被称为“比特流”。
OSI模型注重通信协议所需的功能,TCP/IP更强调应该开发哪些程序来在计算机上实现协议
“TCP/IP划分了四层网络模型。”
第一层:应用层,主要负责网页浏览器的HTTP协议,负责文件传输的FTP协议,负责电子邮件的SMTP协议,负责域名系统的DNS等第二层:传输层,主要是具有“可靠传输”的TCP协议,特别是“高效”的UDP协议。主要负责应用层的数据包传输。第3层:网络层,主要是IP协议。主要负责到第4层寻址:数据链路层,主要负责数字信号和物理二进制信号的转换。
“四层网络协议的角色”
发送侧自上而下,将来自上层的数据添加到报头中,将各层协议的数据发送到下层。接收端自下而上,对从下层接收到的数据进行解码,去除头部的部首后发送到上层。在分层加密和解密之后,应用层最终获得了所需的数据。
“举个例子,”
您需要发送“index.html”。
两台计算机在应用层使用HTTP协议。
在传输层中,TCP协议将HTTP协议发送的数据视为分组,在该分组之前追加TCP分组的信息的一部分
在网络层中,IP协议将TCP协议发送的数据视为分组,同样在该分组的开头加入IP协议的部首
在数据链路层,相应的协议可能会在IP分组的前端添加以太网部首。
源设备和目标设备通过网络线连接,可以通过物理层二进制传输数据。
数据链路层使用相应的协议找到物理层的二进制数据,解码以太网的部首信息和相应的IP分组,并将IP分组传递给上层网络层。
数据链路层>网络层>传输层>应用层,一层解码,最后在浏览器中获得从目标设备传输的“index.html”。
“TCP/IP协议家族”
TCP/IP顾名思义是指“传输层”的TCP协议和“网络层”的IP协议。
实际上,TCP/IP是使用IP进行通信所需的协议组的总称。
具体而言,在网络层为IP/ICMP协议,在传输层为TCP/UDP协议,在应用层为SMTPFTP及HTTP等。他们都属于TCP/IP协议。
交换机可以连接到多台计算机
各计算机网卡的“MAC地址”不同,在计算机发送数据的情况下,数据头具有网卡的MAC地址,用MAC地址ID识别不同的计算机
交换机可以识别数据头的MAC地址来区分不同的计算机
交换机不仅要识别不同的计算机,还要找到计算机连接的“交换机端口”,并从适当的端口顺利发送数据
交换机需要记录的MAC地址表也在增加,需要的交换机也在增加
但是交换机的“容量和性能有限”,MAC地址表无法记录全球计算机的MAC地址和相应的端口号,MAC地址表太大也无法快速找到相应的MAC地址表项目
在那里有3层网络设备“路由器”,路由器可以连接世界各地的网络
局域网中的网络连接可以通过交换机如内部网络或校园中的网络连接。
在不同区域的LAN互连中使用“路由器”
路由器有多个端口,分别连接到不同的网络区域,不同的网络区域的IP地址“网络号码不同”
开单方法
HTTP 1.0定义三种请求方法:GET、开机自检和HEAD。
“获取和开机自检请求之间的差异”
GET请求的请求参数被添加到head中,可以在url中看到。开机自检请求的请求参数被添加到body中,在url中看不到。请求的url具有长度限制,该限制由浏览器和web服务器确定并设置。例如,IE浏览器对URL的最大限制为2083个字符,如果超过该数字,则GET请求的参数被追加到URL中,因此请求的URL的长度限制还需要考虑请求参数的长度,因此提交按钮没有任何反应。另一方面,开机自检请求不需要考虑请求参数的长度。GET请求生成包,开机自检请求生成两个包,Firefox浏览器生成一个包。这种差异是浏览器的请求机制,首先发送请求头,然后发送请求体。由于GET中没有请求体,所以发送一个包,但由于在开机自检中包含请求体,所以发送两次包,但由于Firefox机制不同,所以发送一个包。获取请求由浏览器主动缓存并保留历史记录,但开机自检不是默认设置。GET是必需的等等,开机自检获取数据而不是GET,开机自检修改数据
“状态代码由三位数字组成,第一位定义响应类别。”
1XX:表示接收到请求的指示信息、继续处理
2XX:成功表示已成功接收并接受请求
200OK是最常见的成功状态代码,表示一切正常。对于非HEAD请求,服务器返回的响应标头包含body数据。
3XX:状态代码表示客户端请求的资源传输已更改,客户端需要通过新的URL重发请求获取资源,即“重定向”。
4XX:状态代码表示客户端发送的“消息有误”,服务器不能处理,即错误代码的意思。
404Not Found表示无法向客户端提供请求的资源,因为服务器上不存在或找不到请求的资源。
5XX:状态代码表示客户端的请求消息正确,但“服务器处理时内部发生错误”,属于服务器端的错误代码。
“301和302的区别”
301重定向是指页面永久性传输,指示资源或页面已永久传输到其他位置。
301是HTTP协议的状态代码之一,当用户或搜索引擎向服务器发出浏览请求时,服务器返回的HTTP数据流的头部信息中包含状态代码301,表示该资源永久地变更了位置。
302重定向是页面的临时传输,搜索引擎捕获新内容并保存旧URL,新URL是临时的。
长链接
HTTP1.1支持长连接
HTTP1.0规定浏览器与服务器只保持短连接,需要按浏览器的每个请求与服务器建立TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不按每个客户跟踪,也不记录过去的请求。
管网传输
HTTP/1.1采用了长连接方式,这使得管线网络传输成为可能。
对于相同的TCP连接,客户端可以发起多个请求,如果不需要等待第一个请求被发送并返回,则可以发送第二个请求,“减少总体响应时间”。
例如,客户端需要请求两个资源。在以前的方法中,相同的TCP连接首先发送A请求,然后等待服务器响应,接收后发出B请求,管道机制允许浏览器同时发出A请求和B请求。
但是服务器按照“顺序”,先响应A请求,完成后响应B请求,如果之前的响应特别慢,后面就会有很多请求排队等候。
主机字段
在HTTP1.0中,由于各服务器被认为绑定了唯一的IP地址,所以请求消息的URL没有转发主机名,但是随着虚拟主机技术的发展,在一个物理服务器上存在多个虚拟主机,可以共享一个IP地址。
此外,服务器必须接受用绝对路径标记的资源请求。
HTTP/1.1添加了新的状态代码100。
如果服务器接收到该请求并回复响应代码100,则客户端可以继续发送带有实体的完整请求。
HTTP/1.1发送者将消息分割成几个任意大小的数据块,各数据块在发送时附加块的长度,最后将零长度的块作为消息结束的标志。
此方法允许发送者仅缓冲消息的一个片段,以免缓冲整个消息的过载。
「Cache」
HTTP/1.1在1.0中加入了一些Cache的新特性,当缓存对象的Age超过Expire时就变成了Stable对象,Cache不需要直接抛弃Stable对象,而是需要与源服务器重新激活。
“比较HTTP2.0和HTTP1.X的新功能”
新的二进制格式,分析基于文本
服务端推送
HTTP/2也在一定程度上改善了传统的请求-响应操作模式,服务可以“主动”地向客户端发送消息,而不是被动地响应。
例如,在浏览器请求HTML后,请将可能使用的静态资源例如JSCSS文件提前主动发送给客户机,以“减少延迟等待”,即服务器推送。
数据流
HTTP/2的包不是按顺序发送的,与同一连接相连的包可能属于不同的响应。
因此,必须标记包,以指示属于哪个响应。
每个请求或响应的所有包称为一个数据流。
每个数据流具有唯一的编号,由客户端发出的数据流编号为奇数,由服务器发出的数据流编号为偶数
客户端还可以指定数据流的优先级。高优先级请求将由服务器响应请求。
“HTTP2.0的复用和HTTP1.X的长连接复用有什么不同 ”
“使用UDP协议”
HTTP/2的主要问题是多个HTTP请求复用了一个TCP连接,底层TCP协议不知道有多个HTTP请求。
因此,当发生分组丢失时,启动TCP的重发机制,一个TCP连接中的“所有HTTP请求都必须等待该丢失的分组被重发”。
如果在HTTP/1.1期间传输管线时请求被阻止,则队列后请求也全部被阻止的HTTP/2多请求将复用一个TCP连接,当发生丢包时,将阻止所有HTTP请求。
这都是基于TCP传输层的问题,“HTTP/3把HTTP底层的TCP协议改为UDP!
[行业资讯]
”“HTTP和HTTPS的区别”
HTTP是明文传输协议,HTTPS协议是由SSL+HTTP协议构建的可加密传输身份认证的网络协议,比HTTP协议安全
HTTPS比HTTP更安全,对搜索引擎更友好,更有利于SEO,谷歌百度优先索引HTTPS页面
HTTPS必须使用SSL证书,但不使用HTTP
HTTPS标准端口443、HTTP标准端口80
HTTPS基于传输层,HTTP基于应用层
HTTPS在浏览器中显示绿色安全锁,不显示HTTP
“工作原理”
HTTPS协议对发送的数据进行加密,但加密过程使用非对称加密来实现
HTTPS的整个过程分为证书验证和数据传输阶段,具体交互过程如下:
客户端启动服务器,服务器请求HTTPS将预先设置的公钥证书返回给客户端。客户端验证公钥证书:例如是否在有效期内,证书的用途是否匹配客户端请求的站点,是否在CRL销毁列表中,其高层证书是否有效,这是一个递归过程验证根证书位于操作系统中的根证书或客户端中的内置根证书,如果验证成功,则继续验证,否则显示警告信息。客户端使用伪随机数生成器生成用于加密的对称密钥,并用证书的公钥加密该对称密钥并发送给服务器。服务器使用自己的私钥对该消息进行解码,得到对称密钥。现在,客户端和服务器都具有相同的对称密钥。服务器使用对称密钥加密明文内容A并将其发送给客户端。客户端使用对称密钥解密响应的密文以获得明文内容A。客户端再次发起HTTPS请求,使用对称密钥加密所请求的明文内容B,然后服务器使用对称密钥解密密文,得到明文内容B。
客户端首先向服务器端请求公钥,然后用公钥加密信息,服务器在接收到密文后,用自己的私钥解密。
这有几个问题,但如何确保公钥不被篡改和信任。
因此,在这里,只要证书被信任,就必须利用公钥被信任的第三方权威机构CA,将服务器公钥放置在数字证书中。
以数字证书的方式保证服务器公钥的身份,解决冒充风险。
帐单地址
HTTP请求消息由三部分构成
“常规HTTP标头属性”
完成当前事务后,确定是否停止网络连接。
永久连接,事务处理完成后不关闭网络连接:非永久连接,事务处理完成后关闭网络连接:
响应消息与请求消息类似地由三个部分组成
“HTTP响应消息属性”
TCP是传输层协议,提供可靠的传输,支持全双工,是连接指南的协议。
“双工/单曲”
在任何时间点,如果数据只能单向发送,则为单信。
在某一时刻数据可以单向传输,也可以反向传输,而且可以交替进行,称为半双工,半双工至少需要一条线路。
如果数据随时可以双向收发,则这是全双工的,全双工必须大于一条线路。
TCP是一种双工协议,数据随时可以双向传输。
这意味着客户端和服务端可以相等地发送接收信息。
“TCP协议的主要特点”
TCP是一个面向连接的运输层协议,所谓连接导向,就是双方在传输数据之前,需要建立一个通道,比如三次握手是推荐通道的进程,四次挥手是结束破坏通道的进程。
每个TCP连接只有两个端点,只有点对点。
TCP提供可靠的传输服务。传输的数据肯定不会丢失,不会按重复顺序到达
TCP提供全双工通信。因为两端都设置了发送缓存和接收缓存,所以通信双方的应用程序进程可以随时发送数据。
面对字节流。应用程序与TCP的交互一次是一个大小不同的数据块,但TCP将这些数据视为一系列没有结构的字节流,不保证接收者接收到的数据块与发送者发送的数据块具有对应的大小关系。例如,发送者应用依次传递给发送者TCP10个数据块,接收方TCP仅将接收到的4个数据块的字节流传递给上层应用
“TCP可靠性原理”
可靠传输有两个特点:。
传输通道无误,保证传输数据正确,无论发送者以多快的速度发送数据,接收方都可以处理接收到的数据。
首先,使用三次握手建立TCP连接,使用四次握手释放TCP连接,从而保证所建立的传输信道是可靠的。
其次,TCP通过采用连续ARQ协议的超时自动重发保证数据传输的准确性,保证使用滑动窗口协议及时处理接收到的数据,进行流量控制。
最后,TCP为了避免网络的拥塞,为了避免高速重发和高速恢复,使用低速拥塞开始进行拥塞控制。
TCP面向字节流,但是传输的数据单元是消息段
消息段=标题+数据2节
TCP的所有功能在其标题中的每个字段中体现的作用
在头的最初的20个字符固定后面有4n个字节,是因为根据需要增加了选项,所以TCP头的最小长度=20字节
端口:
源端口号和目标端口分别为16位2字节,即端口范围为
另外,1024以下由系统保持,从1024-65535开始用户使用的端口范围
“seq序号”:占据4字节,按顺序对TCP连接中传送的字节流的各字节进行编号。
例如,某条消息的序号字段值为107,携带的数据为100字段,下一条消息编号从107+100=207开始。
“ack确认号”:4字节,是希望接收对方的下一个消息段的最初的数据字节的序号。
例如,B接收从A发送的消息,其序号字段为301,数据长度为200字节,B表示正确接收从A发送到序号500为止的数据,B期待从A接收下一个数据序号501B将发送给A的确认消息字段中的ack确认编号设定为501。
“数据偏移”:在报头中有可选字段,长度不固定,表示TCP消息段的数据起点离消息段的起点有多远。
“保留”:保留今后使用的物品,标记为1。
“控制位”:由8个标志位构成。每个标志位表示控制功能。
主要6个:
“URG紧急指针标志”表示在1处紧急指针有效,在0处忽略紧急指针。
“ACK确认序号标志”在1中表示确认序号有效,表示为0,表示消息中不包含确认信息,忽略确认序号字段,通过该识别控制上述确认序号是否有效。
PSH标志用1表示带有push标志的数据,并指示收件人在接收到消息段后尽快将消息段传递给应用程序,而不是将其排队到缓冲区。
RST重置连接标志用于重置因主机崩溃或其他原因而出现错误的连接,或拒绝错误的消息段或连接。
用于建立连接过程的“SYN同步号”SYN=1和ACK=0是表示在连接请求中未使用该数据段的确认字段,确认连接应答序列为SYN=1和ACK=1。
用于释放连接的“FIN结束标记”表示1时发送者未发送。
窗口—滑动窗口的大小用于通知发送方接收方高速缓存的大小,用于控制发送方接收方数据的速率并实现流量控制。
校验和—通过16位计算整个TCP消息段的奇偶校验。发送方计算并存储,接收方验证。
“紧急指针”:仅在控制位中的URG为1时有效,指出本报文节中的紧急数据字节数。
可选:长度可变,可定义其他可选参数。
TCP是面向字节流的协议,将上层应用层的数据视为字节流,因此TCP协议也不是固定大小的包,也没有说明发送包大小的字段。
另外,TCP不保证接收侧应用接收到数据块与发送应用发送的数据块具有对应的大小关系
例如,发送方应用向发送方传递10个数据块,接收方TCP可能仅通过4个数据块将完全接收到的字节流传递给上层应用。
由于TCP底层不理解上层业务数据具体含义,根据TCP缓冲器的实际情况进行分组的划分,因此在业务上,一个完整的分组有可能被TCP分割成多个分组发送认为有可能将多个小分组打包成一个大分组并发送。这是所谓TCP分组和分组解除的问题
“TCP粘包/解包解决方案”
由于TCP不能理解前段业务数据的特点,TCP不能保证发送的数据分组不发生粘包和解包。这个问题只能通过上层协议栈设计来解决,解决的思路有几个:
消息固定长度:所发送的各数据包的大小被固定,例如100字节、不足100字节用空间补充,接收侧在取得数据时根据该长度读入数据
在消息末尾添加换行符以表示完整消息。收件人在导入时,根据换行符确定是否为完整消息。如果消息内容也包含换行符,则此方法不适用。
将消息分为消息头和消息尾两部分,消息头指定数据长度,根据消息长度读入完整的消息。例如,UDP协议是这样设计的,并且以2字节表示消息长度,因此UDP不存在粘性分组和解包问题。
“第一次握手”:
客户端将TCP消息标志的位置设为1,随机生成序列号值,保存在TCP报头的序列号字段中,指定客户端要连接的服务器的端口,将该分组发送到服务器端,发送完成后,客户端进入状态等待服务器方面的确认。
“第二次握手”:
服务器端在接收到数据包后,从标志位得知客户端侧的请求而建立连接,服务器端将TCP消息标志位SYN和ACK都设定为1,随机生成序列值,将该数据包发送到客户端侧确认连接请求,服务器端进入状态。
“第三次握手”:
客户机收到确认后,检查ack是否为,检查ACK是否为1,如果正确,将标志位ACK设置为1,将该分组发送到服务器端,服务器端检查ack是否为,检查ACK是否为1,如果正确,连接建立成功客户端和服务器端进入状态,完成3次握手,然后在客户端和服务器端之间开始数据的传送。
“上述ack和ACK不是一个概念:”
大写ACK是我们上面所述的TCP报头的标志位,如果确认了标志中使用的TCP分组是否对前一个分组进行了确认操作,则将ACK标志位设定为1。
“TCP为什么要握手三次而不是两次 ”
为了实现可靠的数据传输,TCP协议的通信双方必须维持序列号,以识别发送的分组中对方接收到的分组。三次握手过程是通信双方相互通知序列号的开始值,确认对方接收到序列号的开始值的必要步骤
仅通过两次握手,只确认连接源的起始序列号,不确认另一方选择的序列号
“在《计算机网络》中是这样说的。”
发生错误以防止过期的连接请求消息段突然转发给服务端。
书中列举了以下例子。
假设最初发出的连接请求消息段没有丢失,并且在网络节点上停留了很长时间,因此在释放连接后延迟到某个时间到达。本来是失效的消息段,但如果接收到该失效的连接请求消息段,则会误认为是client再次发出的新连接请求。
因此,如果向client发送确认消息,同意建立连接,假设不采用“三次握手”,则只要server发出确认,就会建立新的连接,目前client没有提出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。
但是,server认为已经建立了新的连接,等待数据被发送,所以server的很多资源都浪费了。
采用“三次握手”的方法,可以防止上述现象。例如,在刚才这样的情况下,client不会发出确认。因为server不能接受确认,所以知道client没有请求连接。
什么是半连接队列
当服务器第一次接收到客户端SYN时,它将处于状态。此时,双方还没有完全建立连接。服务器在此状态下请求连接并排队。此队列称为“半连接队列”。
当然还有一个“全连接队列”,已经完成了三次握手,建立连接的都放在全连接队列中。队列满了可能会导致数据包丢失。
补充“SYN-ACK重发次数”问题:
服务器是SYN 发送完ACK包,如果没有收到客户确认包,服务器进行第一重发,等待一段时间也没有收到客户确认包,进行第二重发,如果重发次数超过系统规定的最大重发次数系统从半连接队列中删除该连接信息。
“三次握手的时候可以带数据吗 ”
其实第三次握手的时候,可以携带数据。也就是说,第一次第二次握手不能携带数据,但第三次握手可以携带数据。
如果第一次握手可以携带数据,如果有人恶意攻击服务器,他每次都会在第一次握手中的SYN消息中放入大量数据,攻击者忽略服务器的接收发送能力是否正常然后疯狂地重复SYN消息,服务器将花费大量时间来接收这些消息。也就是说,如果第一次握手并放入数据,服务器就容易受到攻击,这是一个简单的理由。
挥手请求既可以是客户端,也可以是服务器,假定客户端开始。
第一次挥手:客户端开始挥手请求,服务器端标志位发送FIN消息段,设置序列号seq,此时客户端进入状态,表示客户端没有数据发送到服务器端。
第二次挥手:服务器接收从客户端发送的FIN消息段,并向客户端返回一个消息段,指示标志位为ACK。ack设置为seq+1,客户端进入状态,服务器端告诉客户端,我确认并同意您的关闭请求。
第三次挥手:服务器端向客户端发送标志位是FIN的消息段,客户端请求进入状态的同时关闭连接。
第四次挥手:客户端接收服务器端发送的FIN消息段,向服务器端发送标志位为ACK的消息段,然后客户端进入状态,服务器端接收到客户端侧的ACK消息段后,关闭连接,此时如果客户端等待2MSL的时间未收到回复,则它将证明服务器端已成功关闭,那么客户端也可以关闭连接。
“为什么连接的时候握手3次,关闭的时候握手4次 ”
因为在建立连接时,服务器可以在接收到客户端SYN连接请求消息时直接发送SYN+ACK消息。这里,ACK消息用于响应,SYN消息用于同步。所以建立连接只需要三次握手。
由于TCP协议是连接方向的可靠性高的基于字节流的传输层通信协议,所以TCP是全双工模式。
这意味着,如果断开连接,则当客户端发出FIN消息段时,客户端只向服务器通知数据已发送完毕。服务器端接收FIN消息并确认ACK消息 返回到段,表示您知道数据未发送到客户端,但服务器端可以将数据发送到客户端,因此在服务器端发送数据之前,可能无法立即关闭SOCKET。
如果服务器端也发送了FIN消息段,则表示此时服务器端也没有发送数据,并告诉客户端。我也没有发数据。然后,双方将愉快地中断此TCP连接。
“为什么TIME_WAIT要等2MSL ”
S L:消息段的最大生存时间。在销毁消息段之前网络中的最长时间。
有两个原因:。
第一点:保证TCP协议的全双工连接可靠关闭:如果由于IP协议的不可靠性或其他网络原因,服务器端没有接收到客户端侧的ACK消息,则服务器端在超时后重新发送FIN,此时如果客户端侧的连接处于关闭状态因为重新发送的FIN找不到相应的连接,导致连接错乱,所以客户端在发送最后一个ACK后不能直接进入状态,但如果再次接收FIN,则可以保证对方接收到ACK,最后正确关闭连接。第二,确保这次连接的重复段从网络中消失
如果客户端发送最后一个ACK并直接进入状态,然后在服务器端启动新连接,则不能保证新连接的端口号与刚关闭的连接的端口号不同。也就是说,如果新连接和旧连接的端口号可能相同,则可能会出现问题。在上一次连接的一部分数据滞留在网络中,这些延迟数据在建立新连接后到达客户端侧的情况下,由于新旧连接的端口号和IP相同,因此TCP协议认为延迟数据属于新连接,新连接接收脏数据由于数据包将出现混乱,TCP连接必须在状态下等待MSL两倍,才能保证本次连接的所有数据在网络中消失。
RTT和RTO
RTT:在接收到相应ACK之前发送分组所需的时间
RTO:重发间隔TCP是发送分组时的重发计时器,RTO是计时器的重发时间
回复ACK后,重发计时器将自动禁用,即无需重发。如果不回复ACK,则RTO计时器时间将到来并重发。
RTO是这次为了发送当前的分组而估计的超时时间,RTO不是固定的写死的结构,而是经过RTT计算的。
幻灯片窗口
TCP的幻灯片窗口主要有两个角色。
保证TCP的可靠性
保证TCP的流量控制特性
TCP标头中有一个名为Window的字段,收件人根据收件人的处理能力发送数据,收件人不会无法处理。这是流量控制。
发件人保持连续可发送帧的序列号,称为“发送窗口”。同时,接收方也保持可接收帧的连续序列号,称为接收窗口。
“发送”窗口和“接收”窗口序列号的上下界不一定相同,大小也可以不同。
这通常取决于滑动窗口协议窗口的大小。
“发件人”窗口中的序列号表示已发送但未确认的帧或可发送的帧
滑动窗口由四部分组成,每个字节的数据按唯一顺序编码,随着时间的推移,未确认部分和可发送分组编码部分向右移动,形式滑动窗口
:发送ACK确认成功的数据:发送ACK确认成功的数据:可在滑动窗口的剩余大小发送的字节数:后续数据编码
接收窗口的大小是幻灯片窗口的最大值,在数据传输过程中,幻灯片窗口的可用大小会动态变化。
但是,滑动窗的设计只是考虑了处理方的处理能力,在道路的畅通上也有没有考虑的地方
服务方好像可以处理100M数据了,但是转发的数据99M堵在路上了,是不是堵车了。这需要另一种设计“避免拥挤”
“流量控制的目的”
如果发送者发送数据太快而接收者来不及接收,则会发生数据包丢失。
为了避免分组丢失,控制发送者的发送速度,使得接收方能够赶上接收。这就是流量控制。
业务控制的根本目的是防止分组丢失,并且是构成TCP可靠性的一个方面。
《流量控制的实现方法》
由滑动窗口协议实现。滑动窗口协议不仅保证分组的无误有序接收,而且还实现业务控制。
主要的方法是,收件人返回的ACK包含自己的接收窗口的大小,利用大小控制发送者的数据发送。
“流量控制的死锁”
当发送者接收到窗口0的响应时,发送者停止发送并等待接收方的下一个响应。
但是,如果该窗口不是0的响应在传输过程中丢失,则发送者继续等待,接收方认为发送者接收到该响应,等待接收新数据,从而双方互相等待,产生死锁。
为了避免流量控制造成的死锁,TCP使用“持续计时器”。每当发送者接收到零窗口响应时启动计时器。时间一到,它就会自动发送一条消息,询问收件人的窗口大小。如果接收者仍返回到零窗口,则复位计时器并继续等待,如果窗口不是0,则表示响应消息丢失,此时通过复位发送窗口并开始发送,可以避免死锁的发生。
“为什么要进行拥挤控制 ”
假设网络发生拥塞,如果不处理拥塞,则延迟增加,产生更多的分组丢失,使发送者触发数据重发,加剧拥塞状况,持续恶性循环直至网络瘫痪。
拥塞控制和流量控制的自适应场景和目的不同。
在出现拥塞之前,它可以避免由于流量的快速增长而导致网络崩溃。在出现拥挤的情况下,唯一的选择是降低流量。
主要使用四种算法完成拥塞控制:
低速启动拥塞避免快速重发算法快速恢复算法
算法12在拥塞发生前应用,算法3在拥塞发生时应用,算法4在拥塞解决后应用。
“rwnd和cwnd”
rwnd是用于业务控制的窗口大小,主要根据接收者的处理速度,接收者通知发送者被动调整。
cwnd是用于拥塞处理的窗口大小,根据网络的状况,发送者探测并主动调整网络。
同时考虑流量控制和拥塞处理,则不超过发送者窗口的大小。
“慢启动算法”
慢启动算法的思路是,从一开始就不发送大量数据,先探测网络拥塞的程度,也就是从小到大逐渐增加拥塞窗口的大小。
这里,将消息段的数目作为拥塞窗口的大小,并且实际拥塞窗口的大小以字节为单位的示例性慢启动算法。
一个传输 轮子经历的时间其实是往返时间RTT,一个传输 每经过一个轮子,拥塞窗口cwnd就增加一倍。
这里的延迟并不意味着cwnd的增长率慢,而是意味着在TCP开始发送消息段时设定cwnd=1之后逐渐变大。这当然比根据大的cwnd将许多消息段一口气注入网络慢得多。
“拥塞避免算法”
逐渐增加拥塞窗口cwnd,即,在每次往返RTT一次时添加一个发送者的拥塞窗口cwnd而不是两倍。
这样,拥塞窗口cwnd按照线性规则缓慢地成长,比缓慢开始算法的拥塞窗口的成长速度慢得多
然后将拥塞窗口cwnd重置为1,并执行慢启动算法。
这一目的是快速减少主机发送到网络的数据包数量,以便发生拥塞的路由器有足够的时间处理队列中存储的数据包。
“拥塞控制整体流程:”
注意:避免拥塞并不能完全避免拥塞,使网络不易发生拥塞。
“快速重传算法”
在高速重发中,接收者在接收到失去顺序的消息段后,立即发出重复确认通过使发送者提前知道消息段没有到达对方,能够使网络吞吐量提高约20%自己发送数据时不要进行确认。
在高速重发算法中,规定了发送者不等待设定重发计时器时间的到期,而必须在接收到3个重复确认后立即重发对方未接收到的消息段
快速恢复算法
组合使用快速重传的还有快速恢复算法,有以下两个要点。
但是下一步我们不运行慢启动算法
考虑到网络拥塞时不会多次确认,发送者认为当前网络可能没有拥塞。
即,套接字是应用层与协议族通信中间软件抽象层,表现为封装TCP/IP协议族的编程接口
属于传输层而非协议的程序调用接口
对于用户来说,只要调用Socket以符合指定的协议就可以进行通信
“UDP协议的特点”
UDP是未连接传输层协议
UDP使用尽最大努力交付,不保证可靠交付
UDP面向消息,对于应用层传递消息,不合并、不分割,保持原始消息的边界
由于UDP中没有拥塞控制,所以即使在网络中发生拥塞,发送速度也不会降低
UDP支持一对一对多对多的相互通信
UDP的标头开销仅为8字节
“TCP和UDP的区别”
TCP是可靠传输,UDP是不可靠传输
TCP面向连接,UDP未连接。
TCP传输数据有序,UDP不保证数据有序性
TCP不保存数据边界,UDP保持数据边界
TCP传输速度UDP相对较慢
TCP具有流量控制和拥塞控制,UDP中没有
TCP是重量级协议,UDP是轻量级协议
TCP报头长20字节,UDP报头短8字节
“基于TCP和UDP的通用协议”
HTTPHTTPSFTPTELNETSTMTP协议基于可靠的TCP协议。
基于TFFTPDNSDHCPTFTSNMPRIP不可靠UDP协议
UDP消息字段包含两个字段:数据字段+标题字段
“UDP消息中每个字段的含义如下:”
源端口:该字段占UDP报头的前16位,通常包括发送数据报的应用程序使用的UDP端口,接收端的应用程序利用该字段的值作为发送响应的目的地地址,由于该字段是可选的发送方应用程序不一定要将自己的端口号写入此字段,如果不写入端口号,则将此字段设置为0,这样接收方应用程序就不能发送响应。目标端口:接收方计算机上UDP软件使用的端口,占16位。长度:该字段占16位,表示UDP数据报长度,包括UDP消息报头和UDP数据长度。UDP消息报头长度为8字节,因此该值最小为8。检查值:此字段占16位,允许您检查数据在传输过程中是否损坏。
AC也称为物理地址,也称为硬件地址,用于定义网络设备位置,MAC地址在网卡出厂时设定固定的但是,可以通过设备管理器或注册表等方法进行修改,同一网络段内的MAC地址必须是唯一的。
AC地址用十六进制表示,长度为6字节,分为上位24比特和下位24比特。
一般IP地址分为IPv4和IPv6两大类,目前广泛应用的是IPv4,目前IPv4已基本耗尽,下一阶段必然升级为IPv6;
IP地址用网络号码和主机号码表示网络上的主机,网络号码相同的主机称为本地网络,网络号码不同的主机称为远程网络主机
“IP地址格式和显示”
IP地址由32位二进制数构成,分为4段,各段为8位二进制数
每8位二进制,用英文标点符号分隔
由于二进制数太长,为了便于存储和识别,请将每个段8位的二进制数转换为0到255的十进制数。
IP地址的这种显示法称为“点位十进制显示法”。
IP地址为
栗子:显示IP地址。
计算机的IP地址由两部分构成,一部分是网络ID,一部分是主机ID,同一网络段内的计算机网络部分相同,主机部分不能同时重复。
通过设定网络地址和主机地址,在相互连接的整个网络中,确保各主机的IP地址相互不重复,即IP地址具有唯一性。
“IP地址分类详细信息”
IP地址分为ABCDE五类,其中ABC这三类是比较常用的IP地址,DE类是特殊地址。
“子网掩码的概念和作用”
通过使用子网掩码,可以显示主机所在的子网与其他子网的关系,使网络正常运行。
计算子网掩码和IP地址,分离IP地址中的网络地址和主机地址,用于判断该IP地址是在本地网络上还是在远程网络上。
子网掩码还用于将网络进一步划分为多个子网,以避免主机过多而造成拥塞或IP浪费。
子网掩码配置
与IP地址相同,子网掩码是由长度32位的二进制数构成的地址。
子网掩码32比特对应于IP地址32比特,如果IP地址是网络地址,则子网掩码为1,否则为0。
举栗子:
左边的连续1个数表示网络编号的长度,右边的连续0个数表示主机编号的长度。
“为什么要使用子网掩码 ”
要使两台主机通信,首先确定它们是否位于同一网络段,即它们的网络地址是否相同。
A主机要与B主机通信,可以将A主机和B各自的IP地址和A主机的子网掩码运算为And,然后查看结果。
如果1的结果相同,则表示两台主机位于同一段,由此A可以通过ARP广播发现B的MAC地址,B也可以发现A的MAC地址来实现正常的通信。
路由器接口使用IP地址可以是本网络段内的任意地址,但通常为了尽量避免与本网络段内的主机地址的冲突使用网络段的第一个可用地址或最后一个可用地址。
在下面的拓扑图的例子中,A和B、C和D都可以直接相互通信
“子网掩码与IP地址的关系”
子网掩码是判断任意两个主机的IP地址是否属于同一网络的依据
使用双方主机的IP地址和自己主机的子网掩码进行运算,如果结果是相同的网络,则可以直接通信
“基于IP地址和子网掩码计算网络地址的方法:”
将IP地址和子网掩码转换为二进制数。
运算二进制形式的IP地址和子网掩码。
将得到的结果转换为十进制数,得到网络地址。
网关实质上是从一个网络到另一个网络的IP地址。
例如,有网络A和网络B,网络A IP地址范围是子网掩码
网络B的IP地址范围是子网掩码。
如果没有路由器,则两个网络之间不能进行TCP/IP通信。即使两个网络连接到同一个交换机,TCP/IP协议也会基于子网掩码来确定两个网络的主机位于不同的网络中。
要实现两个网络之间的通信,必须通过网关。
“所以,只有设置网关的IP地址,TCP/IP协议才能实现不同网络之间的互通。”
那么这个IP地址是哪台机器的IP地址
网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备具有路由器使路由协议有效的服务器代理服务器。
Ping是测试网络连接的常用命令。
使用ICMP消息检测网络连接。
“假设A ping B”
ping通知系统建立固定格式的ICMP请求分组。
ICMP协议将该分组和B的IP地址打包并传递给IP协议层
IP层协议以机器B的IP地址为目的地址,以本机的IP地址为源地址,在几个报头中加入必要的控制信息,构筑IP分组
取得B的MAC地址,进行该操作后,首先机器A判断B是否在同一网段内,当IP层协议通过B的IP地址和自己的子网掩码,发现它与自己属于同一网络时直接在本网络上搜索该机的MAC,否则通过路由器进行类似搜索。
接下来是ARP协议基于IP地址搜索MAC地址的过程。
如果两台机器之前有通信,机器A的ARP缓存表单应该存储着B的IP和MAC地址的映射关系。
如果没有,则通过发送ARP请求广播,得到响应的B机MAC地址,并传递给数据链路层
数据链路层是从IP层发送来的MAC地址,源地址是本地MAC地址,附加必要的控制信息,根据以太网的媒体访问规则构筑发送的数据帧
机器B接收到该数据帧后,首先检查目的地地址,并与本机MAC地址进行比较:
在符合、受理、接收后检查该数据帧,从帧中提取IP分组,交给本机的IP地址协议层协议,在IP协议层检查后,将有用的信息提取到ICMP协议中,后者进行处理,立即构建ICMP响应分组,发送给A这一过程类似于主机A向B发送ICMP请求分组的过程,但不需要在ARP广播中接收A的信息,因为请求分组中已经有足够的B响应A的信息。
如果不适用,就废弃。
您可以看到,发送消息和接收确认消息的过程PING过程可以在前后直接计算延迟。
DNS通过主机名最终获得与该主机名对应的IP地址的过程称为域名解析。
“工作原理”
将主机域名转换为IP地址,属于应用层协议,使用UDP传输。
在第一步骤中,客户端向本地DNS服务器发送分析请求
在步骤2中,本地DNS如果有相应记录,则直接向客户端返回结果,如果没有,则向DNS根服务器发送请求
在步骤3中,DSN根服务器接收请求并返回本地服务器查询域的主域名服务器地址
步骤4,本地dns服务器向返回的主域名服务器地址发送查询请求
步骤5,主域名服务器如果有记录则返回结果,如果没有则返回相关的下级域名服务器地址
步骤6,本地DNS服务器继续对接收到的地址的查询请求
步骤7,有与下位域名服务器对应的记录,返回结果
在步骤8中,本地dns服务器将收到的回复地址发送给客户机,并为下一个查询写入自己的高速缓存
DNS域名查询实际上是一个持续递归查询直到找到合适的结果的过程,如果需要注意,如果找不到合适的记录,则返回空结果而不是超时信息
A记录
上面的是DNS记录,只要文本就可以了。
是要分析的域名。
A是记录的类型,A记录表示用于解析IPv4地址的记录。
从这个记录可以看出,IP地址是139.18.28.5。
CNAME
CNAME用于定义域名的别名,如以下DNS记录:。
此DNS记录定义了别名“是”。
用户在浏览器中输入时,DNS查询显示是别名,因此在需要实际IP时去取的A记录。
如果您希望将站点迁移到新域名并保留旧域名,CNAME还可以帮助您将自己的静态资源放在CDN上。
AAAAA记录
A记录是域名和IPv4地址的映射关系。与A记录类似,AAAA记录是域名和IPv6地址的映射关系。
X记录
X记录是用于记述邮件服务器的域名的邮件记录。
例如,如果发送邮件,如何知道哪个IP地址是邮件服务器呢。
此时,可以使用以下MX记录:。
的IP地址可以从查询的A记录和AAAA记录获得。
NS记录
NS记录描述DNS服务器的web地址。在DNS存储结构中,Name Server包含权威DNS服务目录。
也就是说,NS记录指定服务器,该服务器是回答DNS查询的权威域名服务器。
当DNS查询显示NS记录时,NS记录配置中的DNS服务器查询将再次删除并获得最终记录。例如:。
在解析地址时,您看到了两条NS记录,以确保最终记录为和。
例如,当北京用户尝试访问时,ns1会看到这是北京的IP,并返回离北京最近的机房IP。
上述代码包含两个NS记录。
通常NS不止一个。这是为了保证高可用性,一个是可以挂上另一个继续服务。
通常,具有较小数字的NS记录具有更高的优先级,即ns1优先于ns2响应。
放置上述NS记录后,如果也放置放置的A记录,则该A记录将覆盖NS记录。
ARP是用于实现从IP地址到MAC地址的映射、即与询问地址IP对应的MAC地址的地址解析协议。
“ARP协议的运行过程”
首先,每个主机具有自己的ARP缓存区域,该区域创建表示IP地址和MAC地址的对应关系的ARP列表
源主机发送数据时,首先在ARP列表中检测IP地址的目标主机的MAC地址是否对应,如果有则直接发送数据,如果没有则向本网络段的所有主机发送ARP分组
当本网所有主机接收到ARP分组时,首先检查分组中的IP地址是否为自己的IP地址,否则忽略分组,否则首先从分组中取出源主机的IP和MAC地址写入ARP列表如果存在的话,覆盖之后在ARP响应包中写入自己的MAC地址,向源主机传达自己正在寻找的MAC地址
源主机接收到ARP响应包后,将目标主机的IP和MAC地址写入ARP列表,并利用该信息发送数据。如果源主机未接收ARP响应包,则表示ARP查询失败。
在网络传输期间需要通过许多中间节点,数据不能解码,但可能被篡改
数字签名验证数据完整性
“数字签名有两种效果”:
您可以确保消息是由发件人签名并发的。因为其他人不能伪造发送者的签名。
数字签名确定证明数据未被篡改的消息的完整性。
用Hash函数对文本段生成消息摘要,用发送者的私钥加密生成数字签名,并与原文一起发送给接收方
发表评论