粉丝935获赞1.7万

两台计算机要如何通信?我们可以用网线把他们连接起来,这样就可以通信了。当然如果是老式的设备,还需要调整下网线的线序。那么多台计算机要如何通信呢?计算机之间两两连接起来吗?当然可以,但是这样的成本太高,操作也麻烦。于是我们可以把每家每户的线拧在一起, 样也可以实现多台计算机之间互相通信,而拧在一起这个线团就是极限器。但是极限器的缺点也是明显的,每次发送的消息都会发给所有人。另外多台计算机之间同时发送消息时,会造成互相干扰,导致数据紊乱,于是我们需要更好的设备,这个设备就是交换机。 交换机通过内部的 mac 地址表来决定信息流向。接入交换机的设备都必须要有自己的 mac 地址, mac 地址是设备出厂时就设定好的,全球唯一的可以理解为设备的 u u i d。 我们来看交换机是如何 和运作的。假设黑色计算机需要发送消息给橙色计算机,他需要在豹纹里写上自己的麦克地址,还有橙色的麦克地址,并发给交换机。交换机收到后发现了黑色计算机的麦克地址,并记录下来,跟接口已绑定。但是此时交换机并不知道红色麦克地址对应的是哪个接口,于是给所有人都发一遍。 这个发给所有人的做法叫泛红、紫色。绿色计算机收到消息后发现目标 mac 地址跟自己的对不上,于是会丢弃不处理。而橙色计算机的 mac 地址能匹配上,于是发送消息回应,同样的,回应的消息也要写上自己的 mac 地址。 黑色计算机的 mac 地址回应消息经过交换机后,交换机也会把橙色计算机的 mac 地址跟接口四进行绑定。由于之前已经保存了黑色计算机的 mac 地址,交换机可以直接知道黑色计算机在哪个接口,于是不再需要泛红,而是直接投 递到接口一,这样就完成了麦克地址发现到通信的过程。之后如果黑色计算机还要发送给橙色计算机,交换机同样不需要泛红,而是直接投递,这就是交换机的原理。然而,麦克地址是跟设备绑定的,假如计算机更换了网卡,麦克地址就变更了,之前一起沟通过的计算机也要跟着更改,这 很不方便。我们需要一个更抽象的地址及 ip 地址使用 ip 地址是如何通信任的?假设黑色计算机需要发送给消息给绿色计算机,那么他需要在报文上写好自己的 ip 地址以及绿色计算机的 ip 地址。 因为需要经过交换机,所以 mac 地址也要写上。但是此时黑色计算机并不知道对方的 mac 地址是多少,需要满大街去问,于是报文的目标 mac 地址写不知道,通过交换机的泛红消息发给了所有人。紫色橙色计算机比对 ip 后发现不是自己的消息,于是丢弃。而绿色 计算机匹配到 ip 地址跟自己相符,于是把黑色计算机的 mac 地址跟 ip 地址绑定起来,以被下次使用。随后回应黑色计算机告诉自己的 mac 地址是多少,黑色计算机收到回应后,也把绿色的 mac 地址记录起来,有了 mac 地址 之后就可以直接通信了。这个由 ip 地址到获得 mac 地址的过程就是 arp 协议,而计算机里头 mac 地址跟 ip 地址绑定的数据表则是 arp 记录表。由于交换机的泛红特性, 我们可以透过交换机直接将不同的网络联合起来,但是网络规模大了之后,这样联网的方式并不合理。由于交换机会把每个经过的 mac 地址都保存起来,如 果联网设备数量巨大,那么交换机的 macd 指表将会无法容纳。另外交换机的全网泛红也会导致效率问题,于是我们希望将网络隔离开来,将网络分成不同的网段,交换机只用来传输同一 网段的消息,于是有了直网野马的概念。直网野马简单理解就是告诉计算机直网的 id 是 ip 的前面多少位数,例如简单理解,直网野马前三段有值,那么直网 id 就是 ip 的前三段,其他的 ip 算法也是一样。这样我们就可以通过比对 ip 的直网 id 来判断他们是否属于同一个指望。请注意这个是初犯的理解。实际计算需要将 ip 跟指网野马转换成而静置,这样的可力度更高,但是原理是一样的,同样是按照指网野马学定,节取 ip 的前头稍微作为指望 id, 这样计算机就可以知道目的 ip 是属于当前网段还是外网。对于发网,外网的消息, 教给专门的设备帮忙转发,这个设备者是路由器。例如黑色计算机要发消息给紫色计算机,通过直网野马计算得知紫色计算机 ip 属于外网,于是把消息交给了路由器。而黑色计算机之所以知道要交给 那台路由器,是因为黑色计算机的网关配置的是路由器的 ip。 网关,顾名思义就是各个指网的关口出口,非内网的消息都经过网关出去,那路由器收到消息后, 怎么知道下一步应该交给谁呢?路由器上有个路由表,可以配置网段和吓一跳,用来决定各网段的消息下一步应该交给哪一个路由设备,于是路由器就通过这种接力的方式将消息传达到了目的。计算机 也许注意到了,路由表是手动配置的,当路由设备多起来时,靠人工维护简直就是灾难,于是有了自动互相学习、自动管理路由表的 os、 pf 等协议。当网络规模继续扩大后, ospf 也会疲软,于是也会使用 bgp 等协议。总 之,交换机路由器各协议及 ip 协议的作用下,使用者可以不用关心复杂的网络环境,计算机之间通信就相当跟网限制联一样。但此时仍有一系列 问题等着我们,例如 ip 协议只负责发消息头递到计算机,但是我们计算机是都应用的,要怎么去分呢?我们可以引入端口的概念,不同的应用使用不同的端口发送豹纹时,除了前面的 mac 地址、 ip 地址外,还有家上元端口跟墓地端口,这时间收方就可以根据端口确定交各对应的应用,处理消息响应也是同理。这种带端口的消息发送方式其实就是 udp 协议, udp 简单粗暴,但是 udp 存在很多问题,所以我们需要设计一个稳定可靠的协议。 tcp 协议首先网络是不稳定的, 我们发送的消息很有可能会在图中丢失,所以需要设置重试机制,当消息发送失败时重新发送。为了判断是否成功,还需要要求接受方收到消息后必须发送确认消息,这样就可以保证消息必达。另外,大段的内容发送很容易造成部分丢失,导致全部内容 都要重新发送。于是我们可以将数据分包分成多个包发送。如果分包失败,只需要重传分包数据就可。提高了传输效率之外,还需要给每个分包配上序号,以解决接收方数据乱序问题,并且接受方回复确认也要针对序号进行回复。不管是发送方的重传机制, 还是接受方的应答数据整理机制,都需要双方分配计算资源来处理。为了提高计算效率,需要双方约定好一起开启,一起结束,而这个约定的开启的结束就叫做连接的建立与关闭。 tcp 建立连接时,发送方线传达一个连接意愿, 接受方收到后需要响应这个消息,这是前面提到的消息必答,得保证。如果不响应,发送方可能会一直重发消息。除了响应消息外,接受方还要表达连接意愿。同样的,接受方的意愿也需要得到发送方的响应,原理都是保证消息必答。在交换完意见后, 双方就可以分配计算资源了。此时你会发现,接收方的两条消息其实可以合并为一条消息发送,最终只剩三条全部消息,这就是 tcp 协议所谓的三次握手连接建立后就可以进行数据传输。前面提到的传输例子中, 分包是全部一起发送的,但这个方式实际使用时,很有可能因为接收方处理能力不强或者带宽资源不够等因素导致溢出的数据传输失败,于是需要控制每次传输分包的个数,于是有滑动窗口、雍设控制等技术,目的都是动态调整分包个数来优化传输流程。 数据传输完成后,需要双方约定一起释放资源,也就是断开连接,同样由发送方发起断开,议员接收方响应消息之后,接收方表达断开,议员发送方也要响应。这条消息跟建立连接的过程是一样的,唯一不同的是,断开连接中,接收方的两条消息没办法和 合并为一条为,接收方需要等待数据接收完整后才能向发送方表达断开意愿,中间有时间间隔,于是断开连接。总共有四条消息,也就是所谓的四次挥手。 udp 和 tcp 是应用程协议的根据,所有的应用程协议都是在他们的基础上建立的。 随着网络的发展壮大, ip 地址已经不够用了,于是有人想出了这网供用一个 ip 地址的办法。假设黑色计算机和橙色计算机同时发送消息给紫色计算机,但是他们并没有公网 ip, 于是交给了网关路由器转发。路由器收到后,建立端口音设表及路者原端口、新端口以及对应的那网 ip 后,把报文中的来源 ip 改成公网 ip, 端口改成新端口,冒充至网计算机与外部通信。而紫色计算机响应消息时,网关路由器就可以根据端口映射表找到消息应该分派给哪台内网计算机,这便是 night 协议。 net 协议有效的解决了 ip 地址匮乏问题。这里再插个趣味问题,假设此时绿色计算机用各种手段知道了端口映射表中的端口,那么向该路由发送消息,消息能成功抵达内网计算机吗?到这,也许你会发现了演示中的 ip 地址是怎么设置的呢? ip 地址可以手动管理,更多的是动态管理, 比如使用 dhcp 协议,由 dhcp 服务器路由器给计算计分配 ip 地址、网关等。而企业供网 ip 则可以根据运营商提供的进太 ip 手动配置。家庭供网 ip 通常使用 eppo 一协议向运营商动态注用。

要正确的姿势涨知识!哈喽大家好,欢迎收看涨知识!对于 tcp 协议和 udp 协议,大家应该都有做耳闻, 我们常用的网络通讯,比如浏览网页、软件聊天,以及你现在正在收看的视频,都是通过这两种协议来进行数据传输的。到底他们是如何工作的?这两种协议又有什么区别呢?请耐心看完本期视频,一定会有所收获。 tcp 协议和 udp 协议都工作在传输层,他们的目标都是在程序之间传输数据,数据可以是文本文件可以是视频,也可以是图片, 对于 tcp 协议和 udp 协议来说,都是一对二进之处,并没有多大的区别。那 tcp 与 udp 之间的区别是什么?想必看到这里的同学也能异口同声的说出来。最大的区别 是一个机遇连接,一个机遇飞。连接具体是什么意思?我们来举一个简单的例子,如果把人与人的通信比喻为晋城与晋城的通信, 我们基本有两种方式,第一种方式是写信,第二种方式是打电话。如果不考虑速度因素,这两种方式之间最大的区别是什么?就是信寄出去之后,对方是否能收到,以及收到的信内容是否完整,先后继两封信过去,是否按照顺序接收都变成了未知数, 甚至你填写的收信地址和收信人是否存在,你都无法确认。而打电话则不同,从拨打电话到对方接通互相通话,再到结束通话后挂断,这一系列的流程都能得到及时的反馈, 并且能确认对方准确的接收到。打电话是基于连接的,也就是 tcp, 而写信就是基于非连接的,就是 udp。 tcp 是如何保证以上过程的?有三个关键的步骤,分别为三次握手、传输确认,四次挥手。 三次握手是建立连接的过程,当客户端向服务端发起连接时,会先发一包连接请求数据过去询问一下能否与你建立连接。这包数据我们称之为肾包,如果对端同意连接,则回复一包性价艾克包。客户端收到之后回复一包艾克包连接建立。 因为这个过程中互相发送了三包数据,所以称之为三次握手。为什么要三次握手而不是两次握手?服务端回复完三加艾克之后就建立连接, 这是为了防止因为已失效的请求豹纹突然又传到服务器引起错误。这是什么意思?假设采用两次握手建立连接,客户端向服务端发送了一个肾包来请求建立连接,因为某些未知的原 原因并没有到达服务器,在中间某个网络节点产生了滞留。为了建立连接,客户端会重发赠包,这次的数据包正常送达,服务端回复增加艾克之后建立起来连接, 但是第一包数据阻塞的网络节点突然恢复,第一包省包又送达到服务端,这时服务端会误认为是客户端又发起了一个新的链接, 从而在两次握手之后进入等待数据状态,服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致。如果在三次握手的情况下,服务端收不到最后的爱,可自然不会认为连接建立成功。 所以三次握手本质上来说就是为了解决网络信道不可靠的问题,为了能够在不可靠的信道上建立起可靠的连接,经过三次握手之后,客户端和服务端都进入了数据传输状态。我们 刚才说过, tcp 协议需要在不可靠的信道上保证可靠的连接。现在就有几个问题需要面对,一包数据有可能会被拆成多爆发送,如何处理丢包问题?这些数据包到达的先后顺序不同, 如何处理乱序问题?针对这些要求, tcb 协议为每一个连接建立了一个发送缓冲区,从建立连接后的第一个字节的序列号为零,后面每个字节的序列号就会增加。一 发送数据时,从发送缓冲区取一部分数据组成发送豹纹,在其 tcb 协议头中会附带序列号和长度,接收端在收到数据后需要回复确认豹纹,确认豹纹中的艾克等于接收序列号加长度, 也就是下一包数据需要发送的起始序列号。这样一问一答的发送方式能够使发送端确认发送的数据已经被对方收到, 发送端也可以一次发送连续的多包数据,接收端只需要回复一次艾克就可以了。这样发送端可以把带发送的数据分割成一系列的碎片发送到对端。对端根据序列号和长度在接收后重构出来完整的数据。 假设其中丢失了某些数据包,则接收端可以要求发送端重传。比如丢失了一百到一百九十九这一百个字节,接收端向发送端发送艾克等于一百的豹纹,发送端收到后重传这一包数据,接收端进行补齐。 以上过程不区分客户端和服务端, tcp 连接是全双工的,对于两端来说均采用上述机制。我们再来看一下什么是次次挥手。处于连接状态的客户端和服务端都可以发起关闭连接请求,此时需要次次挥手来进行连接关闭。假设客户端主动 发起连接关闭请求,他需要将服务端发起一包粪包,表示要关闭连接,自己进入中置等待一状态。这是第一次回收。服务端收到粪包,发送一包艾克包,表示自己进入了关闭等待状态。客户端进入中置等待二状态,这是第二次回收。 服务端此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数据之后,发送一包粪包进入最后确认状态,这是第三次回收。客户端收到之后回复艾克包进入超时等待状态,经过超时时间后关闭连接, 而服务端收到艾克堡后立即关闭连接,这是第四次回收。为什么客户端需要等待超时时间?这是为了保证对方已收到艾克堡。因为假设客户端发送完最后一包艾克堡后就释放了连接,一旦艾克 包在网络中丢失,服务端将一直停留在最后确认状态。如果客户端发送最后一包艾克包后等待一段时间, 这时服务端因为没有收到艾克包,会重发粪包,客户端会响应这个粪包,重发艾克包并刷新超市时间。这个机制跟三次握手一样,也是为了保证在不可靠的网络链路中进行可靠的连接断开确认。 了解了 tcp 协议,我们再来看一下 udp 协议。首先 udp 协议是基于非连接的发送数据,就是简单的把数据包封装一下,然后从网卡发出去就可以了,数据包之间并没有状态上的联系,正因为 udp 这种简单的处理方式, 导致他的性能损耗非常少,对于 cpu 内存资源的占用也远小于 tcp。 但是对于网络传输过程中产生的丢包, udp 协议并不能保证,所以 udp 在传输 稳定性上要弱于 tcp, 所以我们能总结出来 tcp 和 udp 的主要区别。 tcp 传输数据稳定可靠,适用于对网络通讯质量要求较高的场景, 需要准确无误的传输给对方,比如传输文件、发送邮件、浏览网页等。 udp 的优点是速度快,但是可能产生丢包,所以适用于对实施性要求较高,但是对少量丢包并没有太大要求的场景, 比如域名查询、语音通话、视频直播等。有 app 还有一个非常重要的应用场景就是隧道网络。什么是隧道网络?比如我们常用的 vpn 就是一种隧道网络,以及在 sdn 中用到的微叉烂也是一种隧道网络。 关于隧道网络的知识,我们在下期视频进行讲解,今天的视频就到这里了,欢迎大家点赞、留言、关注、转发,再见!

本节课我们介绍 tcp 豹纹段的手部格式。在之前的课程中,我们曾介绍过,为了实现可靠传输, tcp 采用了面向自洁流的方式, 也就是将应用进程交付的应用豹纹看作是字节流,并对每个字节进行编号,然后存入发送缓存。 但 tcp 在发送数据时,是从发送缓存中取出一部分或全部字结,并给其添加一个手部,使之成为 tcp 报文段后再进行发送。例如图中所示的这个 tcp 报文段。 一个 tcp 豹纹段由手部和数据载和两部分构成, tcp 的全部功能都体现在他的手部中的各自段 作用。下面我们就来看看 tcp 豹纹段的手部格式。 tcp 豹纹段的手部格式与 ip 数据报的手部格式类似, 都是由二十字节的固定手部和最大四十字节的扩展手部构成。我们首先来看原端口和目的端口自断 原端口字段占十六比特用来写入原端口号,而原端口号用来标识发送该 tcp 报文段的应用进程。 目的端口字段占十六比特用来写入目的端口号,而目的端口号用来标识接收该 tcp 报文段的应用竞争。 我们来举例说明原端口和木地端口的作用。假设主机中的浏览器进程要访问 外部服务器中的外部服务器进程,为了简单起见,我们仅从运输层端口号这个角度来举例,而不考虑其他细节,例如 arep 域名解析、 tcp 连接建立等。 当在浏览器地址栏中输入了外部福气的域名后,浏览器会构建一个封装有 http 请求豹纹的 tcp 豹纹段, 该豹纹段手部中的原端口字段会填写一个短暂端口号,例如,四九幺五二,用来标识发送该 tcp 豹纹段的浏览器进程, 目的端口字段会填写八零这个熟知端口,因为使用 http 协议的外部服务器进程默认监听该端口,外部服务器 收到该 tcp 豹纹段后,从中提取出 http 请求豹纹,并根据豹纹段手部中的目的端口字段的值八零,将 http 请求豹纹上交给外部服务器进程。 外部服务器进程根据 htdp 请求豹纹的内容进行相应处理,并构建 htdp 响应豹纹。 htvp 响应豹纹需要封装成 tcp 豹纹段进行发送,该 tcp 豹纹段手部中的原端口字段会填写八零这个熟知端口用来标识发送该 tcp 豹纹段的外部服务器进程, 而目的端口字段会填写四九幺五二,这是主机中需要接收该 tcp 报文段的浏览器进程所对应的端口号。 主机收到该 tcp 豹纹段后,从中提取出 http 响应豹纹,并根据豹纹段手部中的目的端口字段的值四九幺五二,将 htdp 响应豹纹上交给浏览器进程, 浏览器进程对 hddp 响应豹纹的内容进行解析并显示。接下来我们再来看看与 tcp 实现可靠传述相关的序号字段。确认号字段以及确认标志为 ack 序号字段占三十二比特,因此取决范围是零到二的三十二次减一, 当序号增加到最后一个后,下一个序号就又回到零。序号字段的值用来指出本 tcp 报文段数据载合的第一个字节的序号。 例如,这是一个 tcp 报文段,它由首部和数据载和两部分构成。 数据载合中的每个字节数据都有序号,如图所示。请注意他们是字节数据的序号,而不是内容。对于该例子,手部中的序号字段应填入的实禁制值为幺六六,用来指出数据载合的第一个字节的序号为幺六六。 确认号自断占三十二比特,因此取值范围是零到二百三十二次减一,当确认号增加到最后一个后,下一个确认号就又回到零。 确认号自断的值用来指出期望收到对方下一个 tcp 报文段的数据载和的第一个字节的序号, 同时也是对之前收到的所有数据的确认。可以这样理解,若确认号等于 n, 则表明到序号 n 减一为止的所有数据都已正确接收,期望接收序号为 n 的数据, 只有当确认标志为 ack, 取之为一时,确认号字段才有效。取之为零时,确认号字段无效。 tcp 规定在连接建立后,所有传送的 tcp 报文段都必须把 ack 制一。 下面我们来举例说明这三个字段的作用。主题 a 发送一个 tcp 豹纹段,该豹纹段手部中的序号字段的取值为二零幺,这表示该 tcp 豹纹段数据 载合的第一个字节的序号为二零一。假设数据载合的长度为一百字节,手部中的确认标志为 ack, 取之为一,这表示确认号字段有效。 确认号自断的取值为八百,这要表示主机 a 收到了主机 b 发来的序号到七九九为止的所有数据,现在期望收到序号从八百开始的数据, 主机 b 收到后,也给主机 a 发送 tcp 豹纹段,该豹纹段手部中的序号字段的取值为八百,这表示该 tcp 豹纹段数据载合的第一个字节的序号为八百, 这正好与主机 a 的确认相匹配。假设数据载合的长度为两百字结手部中的确认标志为 ack, 取之 为一,这表示确认号字段有效确认号字段的取值为三零一,这表示主机币收到了主机 a 发来的序号到三百为止的所有数据,现在期望收到序号从三零一开始的数据。 我们再来看看数据偏移字段,该字段占四比克,并以四字结为单位。 数据偏移用来指出 tcp 豹纹段的数据载和部分的起始处距离 tcp 豹纹段的起始处有多远。该自断实际上指出了 tcp 豹纹段的手部长度, 手部固定长度为二十字节,因此数据偏移字段的最小值为二经济形式的零幺零幺,加上最大四十字节扩展,手部 首部最大长度为六十字节,数据偏移字段应取最大值为二进制形式的幺幺幺幺。 我们来举例说明。假设这个 tcp 豹纹段手部中的数据偏移字段的取值为二进制的零幺零幺, 那么手部长度为二十字结,因为二进制的零幺零幺转换成十进制是五,而该字段以四字结为单位,因此五乘以四字结等于二十字结。 假设这个 tcp 豹纹段手部中的偏移字段的取之为二进制的幺幺幺幺,那么手部长度为六十字节, 因为二进制的幺幺幺幺转换成实进制是十五,而该字段以四字结为单位, 因此十五乘以四字结等于六十字结。 tcp 豹纹段手部中的保留字段占六比特,保留为今后使用,目前应至为零。 我们再来看看窗口字段,该字段占十六比特,以字结为单位。该字段指出的是发送本报文段的一方的接收窗口, 窗口值作为接收方让发送方设置其发送窗口的依据。这是以接收方的接收能力来控制发送方的发送能力,也就是所谓的流量控制。 需要注意的是,发送窗口的大小还取决于拥塞窗口的大小,也就是应该从接收窗口和拥塞窗口中取小者。 tcp 豹纹段手部中的教练盒子段占十六比特,用来检查整个 tcp 豹纹段在传输过程中是否出现了误码。 与 udp 类似,在计算教验核实,要在 tcp 豹纹段的前面加上十二字节的为首部 具体的教研算法就不再坠数了,因为它仅仅是一种教研算法,与 tcp 的其他中药功能相比,教研算法并不是重点。当然,如果您有兴趣,可以自行查阅。接下来我们来看同步标志位 syn, 该标志位在 tcp 连接建立时用来同步序号。我们来举例说明,主机 a 和主机 b 要基于 tcp 进行 数据传说,首先要建立 tcp 连接,也就是使用三豹纹握手来建立连接。假设纵坐标为时间,主机 a 发送 tcp 连接请求豹纹段, 该豹纹段不能携带数据,仅有手部,手部中的同步标志位 syn 取之为一,用来表示这是一个 tcp 连接请求豹纹段序号字段取之为 x, 这是主题 a 中的 tcp 进程为自己挑选的初始序号。 主机 b 收到 tcp 连接请求豹纹段后,给主机 a 发送 tcp 连接请求确认豹纹段, 该报文段也不能携带数据,仅有首部,首部中的同步标志为 s、 y、 n 和确 标志位 ack 都取之为一,用来表示这是一个 tcp 连接请求确认保温段, 序号字段取之为外,这是主机币中的 tcp 进程为自己挑选的初始序号确认号字段的取置为 x 加一,这是对所收到的 tcp 连接请求豹纹段的确认。 主机 a 收到 tcp 连接请求确认报文段后,还要针对该报文段给主机 b 发送一个普通的 tcp 确认报文段。普通的 tcp 确认报文段可以携带数据,也可以不携带数据,如果不携带数据,则不消耗序号。 该豹纹段手部中的确认标志位 ack 取之为一,用来表示这是一个普通的 tcp 确认豹纹段。 序号字段取之为 x 加一,这是因为这是主机 a 发送的第二个 tcp 豹纹段, 主机 a 发送的第一个 tcb, 豹纹段的序号为 x, 且不携带数据,因此本豹纹段的序号为 x 加一, 确认号字段取之为外加一,这是对所收到的 tcp 连接请求确认豹纹段的确认。再来看看中指标注为 fin, 该标志位用来释放 tcp 连接。假设主机 a 和主机 b 基于 tcp 的通信已经完成,可以使用四、豹纹挥手来释放连接 主机 a 发送 tcp 连接释放豹纹段,该豹纹段手部中的中指标志位 fin 和确认 标志为 ack, 取之都为一,用来表示这是一个 tcp 连接释放豹纹段,并对之前所收到的数据进行确认,序号字段的取之为优, 他等于之前已发送过的数据的最后一个字节的序号加一,确认号字段的取值为微,他等于之前已接收到的数据的最后一个字节的序号加一。 主机 b 收到 tcp 连接释放豹纹段后,给主机 a 发送普通的 tcp 确认豹纹段, 其手部中的确认标志位取之为一,用来表示这是一个普通的 tcp 确认豹纹段。 序号字段取值为微,确认号字段取值为 u。 加一,这是对所收到的 tcp 连接释放豹纹段 确认主机 b 如果还有数据要传说,可以继续传说主机 a 仍要接收。 当主机 b 没有数据要传输时,可以给主机 a 发送 tcp 连接释放豹纹段,该豹纹段手部中的中指标志位 fin 和确认标志位 ack 取值都为一, 用来表示这是一个 tcp 连接释放豹纹段,并对之前收到的数据进行确认。 序号字段的取值为 w, 确认号字段的取值为 u。 加一。主题 a 收到 tcp 连接释放豹纹段后, 还要针对该报文段给主机币发送一个普通的 tcp 确认报文段,其手部中的确认为为一,用来表 是,这是一个普通的 tcp 确认豹纹段,序号字段取之为 u 加一,确认号字段取之为 w。 加一,这是对所收到的 tcp 连接释放豹纹段的确认。 手部中的复位标志位 rst 用来复位 tcp 连接。 当 rst 等于一时,表明 tcp 连接出现了异常,必须释放连接,然后再重新建立连接。 rst 至一,还可以用来拒绝一个非法的爆文段或拒绝打开一个 tcp 连接 手部中的推送标志位 psh 用来实现推送操作。也就是说,当接收方的 tcp 收到该标志位 为一的 tcp 报文段,会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付 手。部中的紧急标志位 u、 r、 g 和紧急指针字段用来实现紧急操作。紧急标志位取之为一时,紧急指针字段有效,取之为零时,紧急指针字段无效。 紧急指针自断占十六比特,以字结为单位,用来指明紧急数据的长度。 当发送方有紧急数据时,可将紧急数据插对到发送缓存的最前面, 并立刻封装到一个 tcp 豹纹段中进行发送。紧急指针会指出本豹纹段数据载和部分包含了多长 到紧急数据,紧急数据之后是普通数据。接收方收到紧急标志位为一的 tcp 报文段, 会按照紧急指针自断的值,从报文段数据载和部分取出紧急数据,并直接上交应用进程,而不必在接收缓存中排队。 tcp 豹纹段首部除了二十字节的固定部分,还有最大四十字节的选项。部分 增加选项可以增加 tcp 的功能。目前有以下选项,最大豹纹段长度。 mss 选项,他用来指出 tcp 豹纹段数据载和部分的最大长度。 窗口扩大选项用来扩大窗口以提高吞吐率。时间戳选项 有以下两个功能,一个是用来计算往返时间 rtt, 另一个是用来处理序号抄范围的情况,又称为防止序号扰回。选择确认选项用来实现选择确认功能。 我们对这些 tcp 扩展功能不再深入介绍,这也超出了本课程的教学要求。 由于选项的长度可变,因此还需要使用填充来确保豹纹段手部能被四整除。 这是因为数据偏移字段,也就是手部长度字段是以四字结为单位的。 例如,如果使用了最大豹纹段长度 mss 选项,该选项占三字节,那么就需要使用一字节的 填充,使得 tcp 豹纹段手部长度为二十四字结,能背四整除。 本节课到这里就结束了,希望您已经掌握了 tcp 豹纹段手部中的这些比较重要的字段和标志位的作用,期待您的参与,下节课见!

哈喽,大家好,我是超子,那么今天呢,继续我们的物联网入门学习啊,今天呢是第八讲, 嗯,这一脚内容呢,我们主要来介绍一个小的知识点啊,那么就是这个 tcp, 呃,传输层的这个通信协议啊,那么 tcp 呢?他呢?是有一个严格他呢这个这个角色的区分啊, 那么前面的这个视频当中呢,我们给大家做了一个比喻啊,我们把 tcp 比喻成什么?比喻成电话 啊,打电话啊,那么打电话的过程当中啊,那么就会分什么呢?分主教和背教啊,那么这时候呢,我们 tcp 的客户端就是主教,而服务器呢,就是背教, 我们 tcb 的客户端呢,去主动连接啊,通过什么?通过 ip 地址,对吧?加上端口号, 我们也可以简单的认为啊,就是我们的客户端啊,去拨打这个服务器的电话啊,比如说服务器张三,对吧?我找他做点事情,那么我就打他的电话,去去去找他啊,所以 tcp 客户端呢,是连接啊,我们 tcp 服务器呢,这块才叫真听, 就把手机往这一放,我就听着谁给我打电话,打了我就接,接了说咱们就沟通,你要干什么呀?对不对?你要传数据啊,还是干什么的啊?所以说呢,他严格遇上区分啊,有了角色的区分,就会就会有这个什么过程,就是后端去连接夫妻 啊,如果说我们定好这个角色之后,对吧?那么说让我服务区去主动联系客户端吗?那么这条路径不存在啊,不存在啊,因为今后你看我们在做这个实验的过程啊,我们马上要做这个实验了,比如说我们用创口,呃,调试这个助手啊,比如说我要建立一个福气 啊,那么这时候你把咱们硬件就做客户端啊,那么肯定就说客户端去去连服务器啊,那不可能说服务器又回来联系客户端啊,除非什么?除非我们调换角色,哎,我用助手啊,做一个客户端 啊,我们硬件做服务器啊,那么这时候助手可以去连接我们硬件这个服务器啊,所以大家一定要注意,就是个列路啊,是客户端去主动连接这个服务器啊,那么大家说你 u 利 p 呢 啊,其实 udp 他本身他是一个无连接的过程,对吧?他跟发短信一样,所以他并没有就是说像 tcp 这样啊,有这么一个严格意义上的这么一个练录的这个存在啊,这样 udp 的话只要你有 ip 同款号,你就可以发出去吗? 对吧?就算他,他不在线,他关机什么的,你无所谓啊。所以今天呢,就给大家主要点一下这个服务器和客户端这个角色啊,主要 tcp 这一块。

哈喽,今天我给大家说一下如何利用 ip 地址计算相关地址。 可能会有很多人问,为什么要计算相关地址,他有什么用呢?我估计十个同行里有八个人不会算,那知道 ip 地址和纸网页码后,可以算出四要素, 第一个,网络地址,第二个,广播地址,第三个,地址范围,第四个,本网的主题数量。 下面举个例子,有个 ip 为幺九二点幺六八点幺零零点五,指网页码是二五五点二五五点二五五点零,现在要算出他的网络地址、广播地址地址范围以及组织数。 好,下面我们来分步骤来计算。首先将 ip 地址和指网页码换算为二进制,指网页码连续,前一的是网络地址,后面的是主机地址,虚线前面的为网络地址, 虚线后面的为主机地址。接下来将 ip 地址和纸网页码进行与运算,结果就是网络地址。 然后第三步,将上面的网络地址中的网络地址部分不变,主机地址变为全一,结果就是广播地址。 好,现在已知网络地址跟那个广播地址。现在我们来看一下地址范围,就是行在本网段内 的所有主机,网络地址加一即为第一个主机地址,广播地址减一即为最后一个主机地址。由此可以看出地址的范围是网络地址加一一直到广播地址减一。 好,现在剩下最后一个主机的数量,主机的数量等于二的二,金字的主机位数次方减去二,什么意思呢?减二的减二是因为主机不包括网络地址和广播地址, 像刚才我们那个例子,他的奥金字的主角位数是八位,所以他的主角的数量等于二百五十四。这里要补充一点哈,并不是每个网段的主角数量 都是二百五十四,主要是你还是要根据看他的那个纸网页码是多少, 磁网页码是取决于主机的数量。好了,这个视频在这里就结束了,有什么疑问可以给我留言,谢谢。


什么是数据包?数据包是 tcpip 协议通信传说中的数据单位。数据包主要由目的 ip 地址、原 ip 地址、竞载数据等部分构成,包括包头和包体。 包头是固定长度,包体的长度不定,各自段长度固定。双方的请求。数据包和应答数据包的包头结构是一致的,不同的是包体的定义。数据包的结构与我们平常写信非常类似。目的 ip 地址是说明这个数据包是要发给谁的,相当于收信人地址。 原 ip 地址是说明这个数据包是发自哪里的,相当于发行人地址,而竞载数据相当于境界的内。

终于来到这个最后的这个例子了,就是一个简单的网页,夫妻万夫妻, 那么我们知道这外服器浏览的是网页,网页呢是基于 hctp 的 attp 呢,是在 tcpip 基础上的一层超文本传输协议。怎么做这个东西? 从一开始我们做一个 hello hello 文件,然后呢把这个 hello 里面有个闷点 rs, 把它做出这样一个东西,在这里面呢我们引用这个 tcpleas, 那这 tcpleas 那其实已经封装好了很多东西, 那么就是可以读写,从此这么里面读写东西了就可以,那么我我们这样直接跑的话会怎么样呢?哎,会可以,可以使,对吧?可以使,可以使 指呢就是他会这块输出一行 ctrlaxsstst boys 的 啊,连接已经建立,那么呃,是不是建立呢?我们在这新建一个体,呃,二幺二七点零点零点幺,冒号八零八零,这个这个就是这个里面写的这个本机地址, 那你有这个权限之后就可以使用,他默认呢是八零端口,我们用八零八零端口呢就避免重复用, 就是用一个比较少用的这个东西呗,这样一刷之后,这边是没什么问题,但这边就是就是这边发请求就已经接到服气了,然后你就会发现重复做了三回,链接已经建立,链接已经建立,链接已经建。 原理,哎,就是,但是他没回东西,假如回东西怎么办呢?那么就得就是得读这个瑞克莱斯的,把这个瑞克莱斯的读出来,哎,这样 ctrl c 过来到这来, ctrl 围过去 把它走起来,那么这块呢是绑定这个监听器, 然后呢 steam 就是等着这块等着,然后 steam 这块呢解包,然后就调用这个函数, 这个函数呢等于是封装了相关的这个这个响应操作,读,读取请求返回,哎,响应也就是读 rendows, 返回 resplus 这么一个过程。 大家呢一开始给了一个一百五十二字结的这么一个空间,然后把这个死出夜幕读进去,读到这个八分里面,然后呢再输出这个东西, 那么跑起来之后我们如果运行他会怎么样呢?这边还是没回,但是这边已经出完了啊,这边已经出完了,也是三个啊。 redous gatep 一点一, 然后这个主机名是什么?然后他的这个呃形式是什么?然后他的这个 浏览器是什么?然后他的语言之类东西,那么这个其实就是等于是已经把这个 把这个东西请求,因为这边我当我按一下回车的时候,这浏览器他其实在发一个请求,发到这来,发到这来之后呢,他就接收到这个请求,但这请求具体是什么呢?我们就把它打印在这个位置了,打印在这个位置, 如果不是默认啊,他有这么一个东西,这个东西呢就是就是确保他是优内扣的字符的这么一个函数, 证明函数如果不是用那扣字符就把它弄成问号这么一个过程。哎,后四是这样,嗯,如果说我们这个不是这个斜杠,不是这个跟下,而是里面 又有一些东西,这个时候请求过来是什么东西呢?这个请求过来就不是跟下,而是有这么一个东西, 这个就是不同的,呃,目录底下的网页之类的意思,反正默认原来的是什么,原来的就是跟下, 后来的是什么,后来就不是根下。那么我们能够通过这个东西来找到不同的位置的网页, 在一般的网页浏览器和文件系统之间是这样关联的,那么我们在这怎么去关联这个文件呢?在这要写一个响应,把它拿过来,嗯,不是,这已经做完了,我们要要要做一个真实的 h 填码文件,在这有一个叫哈 漏的这么一个真实的文件,然后呢我们要把它写进去,写进去。如果说我们不用真实文件的话,我们可以这样,先给他强行写一个东西, 强行写一个东西是这样读过来没问题,这创词是一个字不串,没问题。然后呢这个就是一些啊,瑞特呀,回车呀,瑞特,回车瑞,瑞特,就是回车瑞特换行,瑞特换行之类东西。 那么然后呢?我 steam 瑞的,刚才不是 steam 锐的吗?哎。从这个 steam 里面 rat 一个东西写进去,然后这个我们重新编译,他这边我们回车他,我们会发现出现这样一个东西,这个东西其实就已经反 回了这个 hctp 这个 ok 的这么一个东西,但是他已经不是,不是那个,那个找不到了,对吧?哎。呃。在这基础之上,我们要读一个 atm 文件,然后把 atm 文件拿过来,拿过来, 然后再重新走一遍,走一遍,有一个包没有引入,把包引入,哎,引入了之后呢,我们再去回车胎,其实不管这块是什么东西, 他就是哈喽,对吧?他就是哈喽,就是这样一个过程,嗯,这就已经很好了呀,很好了,但是如果更好的话是什么呢? 就是判断他是不是访问跟下判断他是不是用这个盖的方法访问,那这样再跑一遍,哎,断了。为什么呢?这多一个分号,多一个分号, 然后这多少了一个大括号,哎,这样之后呢,我们看一下这个结构哈。嗯,如果说他得到的这个 rech 是这么一个东西, 是这么一个东西,就是第一行啊,瑞克莱斯的第一行,首先给他一个缓冲区,对吧?然后呢,我就读这个词,吹目里的请求读到八分 块里面,八块里面呢,看他是不是由这个东西开头的,这个就是二金制的。然后呢,这是一个字不串,如果是由他开头的,就是默认请求 啊,请求的是盖的方法,请求的,请求的是请求根下的,那么就读这个根下的。 hello 点,这是铁棉袄。然后呢进行 recouss, 否则的话就不响应, 行不行呢?默认的可以响应,如果说他不响应会怎么样?就这样了,对吧?就这样了, 这是不响应,但是如果说他也要响应出个四零四,行不行呢?好的,那我们把它复制出来,然后在 l 四 里边粘贴过来,如这个要么就是用盖的方法想不起访问跟下,要不然呢,就是其他位置其他的部分没东西,那我就写一个四零四文件,在这写四零四文件,然后再读他再响应, 现在呢,我们再把它重新编翼跑起来,然后这个就不允许,对吧?这个就允许 其他的任何的不允许的东西哈,其他的任何的不允许的东西,其实都是都是四零四,哎,这个就是做了一个网页,福气万福气,当然还可以把这个东西更 进化一把,呃,把这个和这个分别是这个放成这个等于是一个 tuple, 一个 tuple, 如果说盖他盖的是谁?盖他就是这个,如果说 巴菲尔斯达的贝斯盖,他就是默认的盖的请求,并且是请求跟下的话,那么这个和这个就是放的斯蒂特斯和这个,这个飞扬内里面状态是二百, 网页要憨漏,如果开始的不是这个,那么状态要四零四,网页是四零四,这么样一个过程,最后呢,就在这样把它直接因为他就是一个一个一个文本型的请求,文本型的 回应,所以把这个东西全都设置好了 readows, 然后在在 sirim 里面把这个 readows 写上去就 ok 了,好使不好使呢?我们试一下,至少编辑没出问题,对吧?然后呢,到这来,这肯定是四零四, 到这呢,这肯定是 hello, 对吧?得到了这么一个单县城的网页,福气啊,就用四十行的代码不到来完成了这么一个单县城的网页,福气。 嗯,但是呢,我们因为他是单建成的,所以他可能在想只能响应一一次,只能响应一个请求,那我们来看看,嗯,有多个请求的时候,或者说一些慢的请求的时候是怎么办呢?咱们下次再说。

这节课我们讲一下沃德巴士 tcp 通信,沃德巴士呢,主要分为我们的一个 icurusk 码和 tcp 三种, 阿斯卡马来和他的一个。呃, rto 主要是基于我们的一个四八五或者二三二的啊,一个通信,哎,我们的一个摩托巴士 tcp 呢,他是啊用一个一台网来通信的, 而所以我们做通信的时候呢,只需要插上他的一个网线就可以了啊,这个是无忧的一个网口, 哎,我们将他的一个呃网网线插上去。好,我们就可以做他的一个通信,不需要去接他的一个四八五的这些线了。呃,首先呢,我们来看一下 啊,第一步就是他的一个通信的一个设置。好,现在我们来看一看啊,这是一个主战,哎,我们先看重战的。 哎,这里呢,我们首先要设置他的一个 ip, 我们双击 好,这里呢,我们设成的是二零二幺九八幺幺零,就实际做的时候呢啊,这个地址就说可以随便设置。 呃,只要和服他的一个规划啊,我们都是可行的。呃,主要要求一点就是主战和重战。 呃,前面三段啊,我们要设成一样的,后面呢就是来区分他的,就不能设成一样, 把这个 ip, 哎,这个就没什么好讲的,就是,哎,将它设成不一样就可以了。 好,然后这个地方啊,是你选这个不选选不了的,我们在里面设置了以后呢,他会自动呃,生成,我们双击这个详细设置 好,这里出来以后,哎,我们就点这个以太网设备 啊,从站这个地方我们就要拉一个摩托巴士 tcp 啊这个连接出来按, 因为我们这里已经拉了一个,我只是做一个示范,就拉出来以后,哎,我们要做的呢,就是设置这个端口号, 好,理论上来说啊,这个端口上端口号的话,呃,我们设置的一个范围, 哎, prc 的话,哎就分成两种,哎, prc 我们就是一到哎五五四八, 还有就是哎,我们的一个五五七零到我们的哎六五五三四 呃偏 c 就可以设置啊,哎,这行 就是端口号,哎,如果不是我们的一个 pcc 的话,就 prc 和其他通信的话啊,其他的一个端口号就可以直接一到六五五三四 啊,这个地方,哎,我们设置好以后啊,点一下这个反应设置啊,并关闭就可以了, 哎,如果我们这里就说选择了,呃,我的巴士 tcp, 他这个地方自动会生成一个使用。 好,现在我们再来看一下橱窗的一个设置 啊,这个地方呢,主战,首先就是 是我们这个哎 ip 地址啊,这个 ip 地址呢,就是说前三段要和我们的一个重站设成一样的,然后面这个呢,哎就不能一样,就是来区分啊,区分他们的 好。然后我们这里点这个详细设置 啊,这个地方呢,我们这里连了一个触摸屏 啊,这个 somp 这种连接设备啊,我们这里是做的和充油瓶连接的。然后面呢,这个就是我们的一个主张 啊,这个地方他不是选这个摩托巴士了啊,选我们的 act i v 一这个呃连接设备,我们将它拉下来就可以了,因为这个地方已经拉了一个,我就哎做一个呃实验就好了,拉下来以后呢,然后他就会在这里生成一个连接 好,然后我们就要呃设置一下他的一个通信啊,这个地方呢我们要选择这个通信协议啊,就不能选上面那个,选这个的话,呃,他就不能通信啊,必须选这个通信协议 好,选好以后,然后这个端口号,而这里这个端口号呢?哎,我们可以随便设置,就是按刚才的一个,哎,他的一个,我们写的这个啊,这是他的一个范围。 哎,这个呢可以就是说可以和他一样的,就可以和我们的一个存在一样,这个不影响 啊,然后这里就是设置我们的一个重站的一个 ip 和他的一个端口号啊,这个一定要设置和重站就全部对应上啊,不然的话他就呃不能通信 啊,这个就是我们的重赞的一个 ip, 然后这个四千九有就是重赞的一个端口号。 好,这个设好以后呢,然后我们就点这个反应设置并关闭。 呃,如果是第一次设置的时候,我们要还要点这个应用 啊,就说点了以后才能保存的,因为我这个地方开始是设置好的,所以啊这个地方是不需要点啊,如果是你们第一次设置的话,那这个要点应用的 好,这里呢就是他的一个哎,通信啊,主要就是他的一个 ip 和他的一个端口号设置好,现在我们接下来看啊下面的一些设置。