一、PLC串口通讯的基本知识

这几天弄plc都要神经了  尤其西门子的 太烦了 s7200cn s7200smart s1200 编程软件都不一样~~服 , 然后接线也很烦

好了 正题 电气作业人员在使用PLC的时候会接触到很多的通讯协议以及通讯接口

什么是串口通讯?

串口通讯的使用

串口通讯使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。

串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配:

a.波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。

这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通讯。

b.数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。

比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

c.停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。

因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

d.奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。

例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或传输和接收的数据不同步。

常用PLC基本接口

a.什么是RS-232?

RS-232 (ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。

RS-232只限于PC串口和设备间点对点的通信。RS- 232串口通信最远距离是50英尺。

b.什么是RS-422?

RS -422(EIA RS-422-A Standard)是Apple的Macintosh计算机的串口连接标准。

RS-422使用差分信号,RS-232使用非平衡参考地的信号。差分传输使用两根线发送和接收信号,对比RS-232,它能更好的抗噪声和有更远的传输距离。在工业环境中更好的抗噪性和更远的传输距离是一个很大的优点。

c.什么是RS-485?

RS -485(EIA-485标准)是RS-422的改进,因为它增加了设备的个数,从10个增加到32个,同时定义了在最大设备个数情况下的电气特性,以保证足够的信号电压。

有了多个设备的能力,你可以使用一个单个RS-422口建立设备网络。出色抗噪和多设备能力,在工业应用中建立连向PC机的分布式设备网络、其他数据收集控制器、HMI或者其他操作时,串行连接会选择RS-485。

RS-485是RS-422的超集,因此所有的RS-422设备可以被RS-485控制。RS-485可以用超过4000英尺的线进行串行通行。
 

二、0欧姆电阻

0欧姆电阻的阻值是多少?

0欧姆电阻即电阻标值为0欧姆的电阻,多用于PCB设计等方面,是一种理想电阻。

那0欧姆电阻是表示没有电阻吗?当然不是,0欧姆电阻的阻值不是0欧姆,只是接近0欧姆。如下图分别是0欧姆贴片电阻和色环电阻的样式。

1、兼容设计

我们硬件工程师在设计PCB板的时候,需要尽可能考虑到兼容性的问题。例如:芯片的某个引脚拥有两项功能,可以驱动蜂鸣器也可以驱动LED灯,但这两项功能不能同时工作。

为了在同一块电路板上实现可以选择驱动哪个模块,此时可以在连接蜂鸣器和LED的线路上加上0欧姆电阻,想驱动蜂鸣器就焊接蜂鸣器通路上的0欧姆电阻,想驱动LED灯就焊接LED灯通路上的0欧姆电阻。

如下图所示,可以选择信号的使用,用哪个就焊哪个,不用的就空置。

配置的时候,尤其是嵌入式板子,启动信号选择的时候,通过板上的配置来选择不同的启动来源,这个时候需要用到0欧姆电阻。

2、用作跳线

美观安装方便,避免用跳针造成的高频干扰。

3、跨接线路

在PCB布局布线的阶段,有时候会遇到布线走不通的情况,尤其是在电路板面积小,连线多,可能会遇到某一个连线需要绕很大一圈才能连通,这个时候可以连接一个0欧姆电阻,就可以跳过前面的导线。

例如这两个白色的焊点,如果不直接连通就需要绕很多路线才能最终连通,如果是单层的PCB板也无法从下面打孔,用0欧姆电阻连通起来,可以减少多层PCB板的采购成本。

PCB布局图

4、匹配参数

在匹配电路参数的时候参数无法确定,在实物测试的时候需要拿掉一个电阻或者需要更换不同的阻值,从而获得一个最佳的方案,这个时候通常就会用到0欧姆电阻。用0欧姆电阻代替,等实际调试后确定参数,再以具体数值的元器件代替。

比如说有两种不同的供电方案,5V和10V,但是不确定不同的电源电压是否会对整个电路造成一个未知的影响,通常会用0欧姆电阻连起来,等电路测试的时候,选择电源进行连通。


0欧姆电阻图

5、测量功耗

不太确定某一个芯片或者一个电路整体功耗的时候,在供电端串联一个0欧姆电阻,等板子打样完成后,把0欧姆电阻去掉,用万用表直接测量这两个焊点,可以测出实际工作电流的一个情况。

这样可以计算芯片或者整个电路的一个总体功耗。如果想测某部分电路的耗电流的时候,接上0欧姆电阻,接上电流表,这样方便测电流,可以用于测量大电流。

如下图所示,在供电端和被测电路之前接一个0欧姆电阻。

0欧姆电阻测量功耗图

万用表测量功耗图

6、充当容感

在高频信号下,零欧电阻与外部电路特性匹配情况下可以充当一个小的电容或者电感,可以很好地解决EMC问题,例如地与地,电源与芯片引脚之间。

7、保护过流

过流保护图

由于PCB上走线的熔断电流比较大,如果发生短路过流等故障的话,会很难熔断,可能会带来更大的事故。

但0欧姆电阻电流承受能力比较弱,过流的时候会先把0欧姆电阻熔断了,这样就可以将电路断开,防止更大事故的发生。

8、单点接地

一般在设计电路的时候,在数字电路和模拟电路等混合电路中,往往要求两个地单独分开,并且单点连接。

我们可以用一个0欧姆电阻来连接这两个地,而不是直接连接在一起,这也地线被分成了两个网络,在大面积铺铜等处理时,就会方便许多,可以防止浮地而积累电荷,造成静电。具体的可以看下图。

单点接地图

通常遇到这样的情况,也可能采用以下方法来解决此问题:

  • 用磁珠连接;

  • 用电容连接;

  • 用电感连接;

  • 用0欧姆电阻连接。

9、电流回路

当分割电地平面后,造成信号最短回流路径断裂,此时,信号回路不得不绕道,形成很大的环路面积,电场和磁场的影响就变强了,容易干扰/被干扰。

在分割区上跨接0欧姆电阻,可以提供较短的回流路径,减小干扰。

如下图:两个信号在通信的时候处于不同的地平面,因此在这两个信号之间加0欧姆电阻,信号就会走最近路径。

跨接时用于电流回路图

10、配置电路

一般产品上不要出现跳线和拨码开关。有时用户会乱动设置,易引起误会,为了减少维护费用,应用0欧电阻代替跳线等焊在板子上。空置跳线在高频时相当于天线,用贴片电阻效果好。如下图所示。

0欧姆电阻配置电路图

11、噪声抑制

由于0欧姆电阻本身的特性,能够有效抑制环路电流,从而使噪声得到抑制。实际上零欧电阻不是真的是没有阻抗,只有超导体才能够真的做到零阻抗。所以,0欧姆电阻在所有频带上其实都起到衰减的作用。

最后我来解决大家几个疑惑。

0欧姆电阻和导线有什么区别?0欧姆电阻可以用导线代替吗?

当然是有区别的,从我上面所讲述的作用来看,就可以知道,0欧姆电阻的功能十分丰富,其次在有些情况下,0欧姆电阻和导线的作用是一样的,例如跨线的时候,不用导线是因为在实际生产过程,贴片用的是贴片机,可以识别0欧姆电阻,对导线却是很难识别,所以为了生产的效率和方便,会选择用0欧姆电阻。

0欧姆电阻精度大小有区别吗?

肯定是有区别的,例如0欧姆电阻精度为±1%或者±5%时,就有0603、0805、1206、1210、1812等封装,精度不同、尺寸也会不同,形式也会不同。

0欧姆电阻能通过多少大电流? 

设计电路经常要用0欧姆电容,根据线路电流来选择电阻额定功率。

一般的0欧姆电阻的实际阻值在50毫欧左右+-5%的偏差。根据额定功率,就可以计算出来,0欧姆电阻的额定电流了。

  • 0402 1/16W:1/16=I*I*0.05 即 I=1.118A;

  • 0603 1/8W:1/8=I*I*0.05 即 I=1.58A;

  • 0805 1/4W:1/4=I*I*0.05 即 I=2.236A。

对于每种封装的0欧姆电阻具体可以通过多大的电流,还需要根据电阻在PCB板上的散热情况来决定。        whaosoft aiot  http://143ai.com

三、有了HTTP,为什么还要RPC?

RPC和HTTP的区别

HTTP和RPC最本质的区别,就是 RPC 主要是基于 TCP/IP 协议的,而 HTTP 服务主要是基于 HTTP 协议的

我们都知道 HTTP 协议是在传输层协议 TCP 之上的,所以效率来看的话,RPC 当然是要更胜一筹啦!

HTTP和RPC的相同点是,底层通讯都是基于socket,都可以实现远程调用,都可以实现服务调用服务

HTTP 的本质

首先你要明确 HTTP 是一个协议,是一个超文本传输协议。

HTTP 它是协议,不是运输通道。

它基于 TCP/IP 来传输文本、图片、视频、音频等。

重点来了。

HTTP 不提供数据包的传输功能,也就是数据包从浏览器到服务端再来回的传输和它没关系。

这是 TCP/IP 干的。

那 HTTP 有啥用?我们来分析一波。

我们上网要么就是获取一些信息来看,要么就是修改一些信息。

比如你用浏览器刷微博就是获取信息,发微博就是修改信息。

所以说浏览器需要告知服务器它需要什么,这次的请求是要获取哪些信息?发怎么样的微博。

这就涉及到浏览器和服务器之间的通信交互。

而交互就需要一种格式。

像你我之间的谈话就用中文,你要突然换成俄语我听不懂那不就 GG 了。

所以说 HTTP 它规定了一种格式,一种通信格式,大家都用这个格式来交谈。

这样不论你是什么服务器、什么浏览器都能顺利的交流,减少交互的成本。

就像全世界如果都讲中文,那我们不就不需要学英文了,那不就较少交互的成本了。

不像现在我们还得学英文,不然就看不懂文档等等。

万一之后俄语又起来了,咱还得对接俄文,这交互成本是不是就上来了。

而网络世界还好,咱们现在的 Web 交互基本上就是 HTTP 了。

其实 HTTP 协议的格式很像我们信封,有个固定的格式。

左上角写邮编,右上角贴邮票,然后地址姓名啥的依次来。

因为计算机是很死板的,不像我们人一样有一种立体扫描感,所以要规定先写头、再写尾。

你要是先写尾,再写头计算机就认不出来了。

所以 HTTP 就规定了请求先搞请求行、再搞请求报头、再搞请求体。

响应就状态行、响应报头、响应体。

所以 HTTP 的本质是什么?

就是客户端和服务端约定好的一种通信格式。

HTTP 和 RPC 的关系

HTTP 和 RPC 其实是两个维度的东西, HTTP 指的是通信协议。

而 RPC 则是远程调用,其对应的是本地调用。

RPC 的通信可以用 HTTP 协议,也可以自定义协议,是不做约束的。

像之前的单体时代,我们的 service 调用就是自己实现的方法,是本地进程内的调用。

现在都是微服务了,根据业务模块做了不同的拆分,像用户的服务不用我这个小组负责,我这小组只要写订单服务就行了。

但是我们服务需要用到用户的信息,于是我们需要调用用户小组的服务,于是代码变成了以下这种

把之前的用户实现拆分出来弄了一个用户服务,订单相关的也拆成了订单服务,都单独部署。

这样订单相关的服务要获取用户的信息就需要远程调用了。

可以看到 RPC 就是通过网络进行远程调用,订单服务其实就是客户端,而用户服务是服务端。

这又涉及到交互了,所以也需要约定一个格式,至于要不要用 HTTP 这个格式,就是大家自己看着办。

至此相信你对 HTTP 是啥也清楚了。

RPC 和 HTTP 的之间的关系也清楚了。

那为什么要有 RPC?

可能你常听到什么什么之间是 RPC 调用的,那你有没有想过为什么要 RPC, 我们直接 WebClient HTTP 调用不行么?

其实 RPC 调用是因为服务的拆分,或者本身公司内部的多个服务之间的通信。

服务的拆分独立部署,那服务间的调用就必然需要网络通信,用 WebClient 调用当然可行,但是比较麻烦。

我们想即使服务被拆分了但是使用起来还是和之前本地调用一样方便。

所以就出现了 RPC 框架,来屏蔽这些底层调用细节,使得我们编码上还是和之前本地调用相差不多。

并且 HTTP 协议比较的冗余,RPC 都是内部调用所以不需要太考虑通用性,只要公司内部保持格式统一即可。

所以可以做各种定制化的协议来使得通信更高效。

比如规定 yes 代表 yes的练级攻略,你看是不是更高效了,少传输的 5 个字。

就像特殊行动的暗号,高效简洁!

所以公司内部服务的调用一般都用 RPC,而 HTTP 的优势在于通用,大家都认可这个协议。

所以三方平台提供的接口都是通过 HTTP 协议调用的。

所以现在知道为什么我们调用第三方都是 HTTP ,公司内部用 RPC 了吧?

上面这段话看起来仿佛 HTTP 和 RPC 是对等关系,不过相信大家看了之前的解析心里应该都有数了。

下面来具体说一说 RPC 服务和 HTTP 服务的区别。

OSI 网络七层模型

在说 RPC 和 HTTP 的区别之前,我觉的有必要了解一下 OSI 的七层网络结构模型(

它可以分为以下几层:(从上到下)

  • 第一层:应用层。定义了用于在网络中进行通信和传输数据的接口。

  • 第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等。

  • 第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断。

  • 第四层:传输层。管理着网络中的端到端的数据传输。

  • 第五层:网络层。定义网络设备间如何传输数据。

  • 第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输。

  • 第七层:物理层。这一层主要就是传输这些二进制数据。

实际应用过程中,五层协议结构里面是没有表示层和会话层的。应该说它们和应用层合并了。

我们应该将重点放在应用层和传输层这两个层面。因为 HTTP 是应用层协议,而 TCP 是传输层协议。

好,知道了网络的分层模型以后我们可以更好地理解为什么 RPC 服务相比 HTTP 服务要 Nice 一些!

RPC 服务

从三个角度来介绍 RPC 服务,分别是:

  • RPC 架构

  • 同步异步调用

  • 流行的 RPC 框架

RPC 架构

先说说 RPC 服务的基本架构吧。我们可以很清楚地看到,一个完整的 RPC 架构里面包含了四个核心的组件。

分别是:

RPC 主要是用在大型企业里面,因为大型企业里面系统繁多,业务线复杂,而且效率优势非常重要的一块,这个时候 RPC 的优势就比较明显了。

  • Client

  • Server

  • Client Stub

  • Server Stub(这个Stub大家可以理解为存根)

  • 分别说说这几个组件:

  • 客户端(Client),服务的调用方。

  • 服务端(Server),真正的服务提供者。

  • 客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。

  • 服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法。

  • 另外,搜索公众号Java架构师技术后台回复“Spring”,获取一份惊喜礼包。

  • 比如我们有一个处理订单的系统服务,先声明它的所有的接口,然后将整个项目打包,服务端这边引入,然后实现相应的功能,客户端这边也只需要引入就可以调用了。

    为什么这么做?

    主要是为了减少客户端这边的包大小,因为每一次打包发布的时候,包太多总是会影响效率。

    另外也是将客户端和服务端解耦,提高代码的可移植性。

    同步调用与异步调用

    什么是同步调用?什么是异步调用?

    同步调用就是客户端等待调用执行完成并返回结果。

    异步调用就是客户端不等待调用执行完成返回结果,不过依然可以通过回调函数等接收到返回结果的通知。如果客户端并不关心结果,则可以变成一个单向的调用。

    流行的 RPC 框架

    目前流行的开源 RPC 框架还是比较多的。下面重点介绍三种:

    ①gRPC 是 Google 最近公布的开源软件,基于最新的 HTTP2.0 协议,并支持常见的众多编程语言。

    我们知道 HTTP2.0 是基于二进制的 HTTP 协议升级版本,目前各大浏览器都在快马加鞭的加以支持。

    这个 RPC 框架是基于 HTTP 协议实现的,底层使用到了 Netty 框架的支持。

    ②Thrift 是 Facebook 的一个开源项目,主要是一个跨语言的服务开发框架。它有一个代码生成器来对它所定义的 IDL 定义文件自动生成服务代码框架。

    用户只要在其之前进行二次开发就行,对于底层的 RPC 通讯等都是透明的。不过这个对于用户来说的话需要学习特定领域语言这个特性,还是有一定成本的。

    ③Dubbo 是阿里集团开源的一个极为出名的 RPC 框架,在很多互联网公司和企业应用中广泛使用。协议和序列化框架都可以插拔是及其鲜明的特色。

    HTTP 服务

    通常,我们的开发模式一直定性为 HTTP 接口开发,也就是我们常说的 RESTful 风格的服务接口。

    的确,对于在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。

    利用现成的 HTTP 协议进行传输。

    平时的工作主要就是进行接口的开发,还要写一大份接口文档,严格地标明输入输出是什么?说清楚每一个接口的请求方法,以及请求参数需要注意的事项等。

    比如下面这个例子:

    POST http://www.httpexample.com/restful/buyer/info/shar
    

    接口可能返回一个 JSON 字符串或者是 XML 文档。然后客户端再去处理这个返回的信息,从而可以比较快速地进行开发。

    但是对于大型企业来说,内部子系统较多、接口非常多的情况下,RPC 框架的好处就显示出来了,首先就是长链接,不必每次通信都要像 HTTP 一样去 3 次握手什么的,减少了网络开销。

    其次就是 RPC 框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。

    小结

    RPC 服务和 HTTP 服务还是存在很多的不同点的,一般来说,RPC 服务主要是针对大型企业的,而 HTTP 服务主要是针对小企业的,因为 RPC 效率更高,而 HTTP 服务开发迭代会更快。

    很多RPC框架包含了重试机制,路由策略,负载均衡策略,高可用策略,流量控制策略等等。如果应用进程之间只使用HTTP协议通信,显然是无法完成上述功能的。

    总之,选用什么样的框架不是按照市场上流行什么而决定的,而是要对整个项目进行完整地评估,从而在仔细比较两种开发框架对于整个项目的影响,最后再决定什么才是最适合这个项目的。

    一定不要为了使用 RPC 而每个项目都用 RPC,而是要因地制宜,具体情况具体分析。

四、TCP / UDP,流量控制,拥塞控制

一、TCP

TCP首部
流量控制
拥塞控制
三次握手,四次挥手
tcp 怎样保证数据正确性?

流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度

1、TCP首部

源端口号
目标端口号
32位序列号
32位确认号
首部长度(单位为4字节,默认为5,即20字节)
保留位(6位)

6个控制位(SYN、ACK、FIN、PUSH、URG、RST) SYN:同步序号位,TCP建立连接时要将这个值设为1 ACK:为1表示确认号 FIN:发送端完成位,提出断开连接的一方把FIN置为1表示要断开连接 PUSH:急迫位,缓存区将满,立刻传输速度 RST:重置位,连接断了重新连接 URG:紧急信号

16位窗口大小:接收窗口大小,流量控制使用,如果窗口大小为0,可以发送窗口探测

16位校验和:校验和用来做差错控制,TCP校验和的计算包括TCP首部、数据和其它填充字节。在发送TCP数据段时,由发送端计算校验和,当到达目的地时又进行一次检验和计算。如果两次校验和一致,说明数据是正确的,否则将认为数据被破坏,接收端将丢弃该数据

16位紧急指针:仅在URG控制位为 1 时有效。表示紧急数据的末尾在 TCP 数据部分中的位置。通常在暂时中断通信时使用(比如输入 Ctrl + C)

2、流量控制

流量控制,就是让发送方的发送速率不要太快,要让接收方来得及接收

利用滑动窗口机制可以很方便地在tcp连接上实现对发送方的流量控制

TCP接收方利用自己的接收窗口的大小来限制发送方发送窗口的大小

重传计时器

TCP发送方收到接收方的零窗口通知后,应启动持续计时器。持续计时器超时后,向接收方发送零窗口探测报文

即使接收窗口为0,接收方也会接收:零窗口探测报文段、确认报文段、携带紧急数据的报文段

TCP发送方的发送窗口大小 = Math.min(自身拥塞窗口大小, TCP接收方的接收窗口大小)

3、拥塞控制

什么是拥塞


 假定条件

数据是单方向发送,而另一方向只传送确认 接收方总是有足够大的缓存空间,因而发送方发送窗口的大小由网络的拥塞程度来决定 以最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位

慢开始 + 拥塞避免算法

MSS:TCP最大报文段 ssthresh:慢开始门限 cwnd:拥塞窗口 swnd:发送窗口 rtt:每次往返时间


 快重传

慢开始 + 拥塞避免算法中,发送方把拥塞窗口cwnd又设置为1,并错误地启动慢开始算法,降低了传输效率

收到3个重复确认

接收方收到失序的报文段,立即发出重复确认

发送方收到3个连续的重复确认,立即重传

快恢复


慢开始 + 拥塞避免+快重传 + 快恢复结合

4、三次握手,四次挥手

4.1 三次握手

发送端:SYN=1、seq=x
接收端:ACK=1、ack=x+1、SYN=1、seq=y
发送端:ACK=1、ack=y+1、seq=x+1

TCP规定:SYN被设置为1的报文段不能携带数据,但要消耗掉一个序号
TCP规定:普通的确认报文段如果不携带数据,则不消耗序号

4.2 四次挥手

发送端:FIN=1,ACK=1,seq=u,ack=v(u等于发送端已传送过的数据的最后一个字节序号+1,v等于发送端之前已收到的数据的最后一字节序号+1)
接收端:ACK=1,ack=u+1,seq=v
接收端:FIN=1,ACK=1,ack=u+1,seq=w(w:半关闭情况下,可能收到了数据)
发送端:ACK=1,ack=w+1,seq=u+1

TCP规定:终止位FIN等于1的报文段,即使不携带数据,也要一个消耗掉一个序号
MSL:最长报文段寿命,建议为2分钟

为什么要等待2MSL?

如果接收端发送FIN连接释放,发送端接收后发送ACK,如果丢失,会导致接收端超时重传,而无法进入CLOSED状态

4.3 保活计时器

4.4 半连接队列

服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列。

4.5 三次握手能不能改成两次握手?

不能

TCP发送连接请求,但长时间没到达,然后触发了超时重传

又发送了一次,后建立连接,数据传输,并断开了连接

但此时之前没达到的请求报文段突然又到了接收端服务器,接收端服务器变成了ESTABLISHED状态

接收端一直在等发送端发送数据,白白浪费了主机很多资源,导致了错误

4.6 四次挥手能不能改成三次挥手?

不能

接收端可能还有数据没有发送

需要等待一段时间,发送完数据,才会发送FIN

4.7 SYN攻击

服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的,所以服务器容易受到SYN洪泛攻击。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。SYN 攻击是一种典型的 DoS/DDoS 攻击。

5、tcp 怎样保证数据正确性?

差错控制 发送的数据包的二进制相加然后取反,检测数据在传输过程中的任何变化,如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。编号 + 排序 TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层 确认 + 超时重传的机制 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。流量控制

TCP 连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓存区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。

拥塞控制

当网络拥塞时,减少数据的发送。发送方有拥塞窗口,发送数据前比对接收方发过来的接收窗口,取两者的最小值---慢启动、拥塞避免、拥塞发送、快速恢复。另外,搜索公众号顶级python后台回复“进阶”,获取一份惊喜礼包。

二、UDP

三、TCP/UDP对比 

TCP/IP协议架构

对比

1、是否面向连接

UDP:无连接
TCP:面向连接(三次握手,四次挥手)

2、是否支持广播和多播

UDP:支持一对一,一对多,多对一和多对多交互通信
TCP:只能一对一通信

3、对应用层报文的处理

UDP:面向报文(对应用层交付的报文直接打包)
TCP:面向字节流(是tcp实现可靠传输,流量控制,拥塞控制的基础)

4、是否提供可靠传输

UDP:向上提供无连接不可靠服务
UDP:适用于实时应用(IP电话、视频会议等)
TCP:向上提供面向连接的可靠服务
TCP:适用于要求可靠传输的应用,例如文件传输

5、首部开销

UDP:8个字节
TCP:最小20字节,最大60字节

嵌入式分享合集108相关推荐

  1. 嵌入式分享合集115

    一.数字万用表电压.电流.电阻.电容.频率.电池.二极管等测量方法 数字万用表可用来测量直流和交流电压.直流和交流电流.电阻.电容.频率.电池.二极管等等.整机电路设计以大规模集成电路双积分A/D转换 ...

  2. 嵌入式分享合集137

    一.5大电气制图软件 一个电气人的基本从业准则就是要识图.绘图.首先要了解什么是电气图?电气图常用于建筑行业,是建筑内的线路.照明.空调及相关电气设备的平面展示.同时也是建筑工人施工的依据,因此,准确 ...

  3. 嵌入式分享合集105

    一.智能灯光控制系统(基于stm32) 带你走进物联网的世界说一个整天方案哦 这次是基于stm32的 当然你可以用esp "智能光照灯"使用STM32作为系统的MCU,由于单片机I ...

  4. 嵌入式分享合集112

    一.常用电路基础公式 1.欧姆定律计算 计算电阻电路中电流.电压.电阻和功率之间的关系. 欧姆定律解释了电压.电流和电阻之间的关系,即通过导体两点间的电流与这两点间的电势差成正比.说明两点间的电压差. ...

  5. 嵌入式分享合集109

    一.八大基础电路,模拟电路分析 在电子电路中,电源.放大.振荡和调制电路被称为模拟电子电路,因为它们加工和处理的是连续变化的模拟信号. 1 反馈 反馈是指把输出的变化通过某种方式送到输入端,作为输入的 ...

  6. 嵌入式分享合集125

    一.多层板PCB设计中电源平面相对地平面要进行内缩? 有一些人绘制的PCB,在GND层和电源层会进行一定程度的内缩设计,那么大家有没有想过为什么要内缩呢. 需要搞清楚这个问题,我们需要来先了解一个知识 ...

  7. 嵌入式分享合集122

    一.分析电容降压电路工作原理 电容降压电路,因其成本低廉.体积小而被广泛地使用,此一优点足以掩盖其它所有缺点:输出电流小(一般控制在100mA以内),与市电直通非隔离而存在安全隐患,输出电压波动大等: ...

  8. 嵌入式分享合集139

    一.视频监控系统入门专业术语 视频监控系统是弱电系统中最常见的子系统,很多监控行业的朋友,特别是刚入行,遇到一些监控问题搞不清楚而感到头疼,下面本文分享监控基本知识一问一答解读! 1.CCTV的含义是 ...

  9. 嵌入式分享合集102

    一.嵌入式开发Bug定位解决 一.问题复现 稳定复现问题才能正确的对问题进行定位.解决以及验证.一般来说,越容易复现的问题越容易解决. 1.1 模拟复现条件 有的问题存在于特定的条件下,只需要模拟出现 ...

最新文章

  1. tensorflow loss nan 解决办法
  2. Python---modules(模块)
  3. 白雪 | NLP加持知识图谱在金融事件挖掘中的应用
  4. mysql 获取年预提,【判断题】正确核算待摊费用和预提费用,有助于划分本期费用与非本期费用的界限。...
  5. 产品质量不过关怎么办?一招帮你大幅提高生产质量
  6. 【笔记】多态之Override
  7. 人脸识别门禁系统在2019年会加快应用
  8. 教你解决ssh连接慢的问题
  9. Facebook广告设定技巧经验分享
  10. 一个简单的Blob存取例子
  11. How to install innotop and percona tookit on centos
  12. awk '/#BEGIN/,/#END/{next}1' 1是什么意思?-转
  13. 一个开源的会议管理系统,适合初学者练手(老司机请忽略)
  14. Nginx下的反向代理 双层代理 负载均衡
  15. php作业批改系统源码,在线|WEB作业批改系统
  16. 计算机网络自顶向下方法华为路由器配置OSPFv3路由协议实现端到端的通信
  17. CAD—dwg格式解析库:libdxfrw和libredwg
  18. 零基础班第十五课 - Hive DDL详解
  19. 在linux系统下运行jar包的命令如下:
  20. 比越南妹划算 1元团购美女

热门文章

  1. 什么是智慧社区 智慧社区解决方案概括
  2. SimpleMind安装步骤
  3. LSM303AGR开发中遇到的问题
  4. 数据库管理与高可用----MySQL 备份与恢复
  5. 转速闭环控制直流调速系统的仿真 matlab
  6. 频次直方图、数据区间划分额分布密度——Note_6
  7. SpringCloud微服务架构标准版本拓扑图
  8. 缓存架构设计之——Redis集群搭建
  9. 好友朋友圈动态仅三天可见?点击这个按钮,不管多久都能看
  10. 用计算机程序计算兴利库容,《水利计算》课程教学大纲