网络通信协议

发布于:2024-03-02 ⋅ 阅读:(71) ⋅ 点赞:(0)

▶1.通信过程中的计算思维方法

例:人类通信是一个充满了智能化的过程。如图7-3所示,以一个企业技术讨论会为例,说明通信的计算思维方法。首先,参加会议的人员必须知道在哪里开会(目的地址);如何走到会议室(路由),会议什么时候开始(通信确认);会议主讲者通过声音(传输介质为声波)和视频(传输介质为光波)表达自己的意见(传送信息),主讲者必须关注与会人员的反应(监听),其他人员必须关注主讲者发言(同步);有时主讲者会受到会议室外的干扰(环境噪声)、会议室内其他人员说话的干扰(信道干扰);如果与会者同时说话,就会造成谁也听不清对方在说什么(信号冲突);主讲人保持恒定语速(通信速率)等。

计算机之间的数据传输是一个复杂的通信过程,需要解决的问题很多。例如,本机与哪台计算机通信(本机地址与目的地址);通过哪条路径将信息传送到对方(路由);对方开机了吗(通信确认);信号传输采用什么介质(微波或光纤);通信双方如何在时间上保持一致(同步);信号接收端怎样判断和消除信号传输过程中的干扰(检错与纠错);通信双方发生信号冲突时如何处理(通信协议);如何提高数据传输效率(包交换);如何降低通信成本(复用);网络通信虽然有以上许多工作要做,但是网络设备处理速度以毫秒计,这些工作计算机如何瞬间就可以完成(一般为毫秒级,与网络带宽有关)。
人类通信与计算机通信的共同点在于都需要遵循通信规则。不同点在于人类在通信时,可以随时灵活地改变通信规则,并且智能地对通信方式和内容进行判断;而计算机在通信时不能随意改变通信规则,计算机以高速处理与高速传输来弥补机器智能的不足。

▶2.网络协议的三要素

计算机网络中,用于规定信息格式、发送和接收信息的一系列规则称为网络协议。通俗地说,协议就是机器之间交谈的语言。网络协议的三个组成要素是语法、语义和时序。
(1)语法规定了进行网络通信时,数据传输方式和存储格式,以及通信中需要哪些控制信息,它解决“怎么讲”的问题。
(2)语义规定了网络通信中控制信息的具体内容,以及发送主机或接收主机所要完成的工作,它主要解决“讲什么”的问题。

(3)时序规定了网络操作的执行顺序,以及通信过程中的速度匹配,主要解决“顺序和速度”问题。

▶3.两军通信问题

网络通信协议能不能做到100%可靠?特南鲍姆(Andrew.S.Tanenbaum)教授在《计算机网络》一书中提出了一个经典的“两军通信”问题。
例:一支红军在山谷里扎营,在两边山坡上各驻扎着一支蓝军。红军比两支蓝军中的任意一支都要强大,但两支蓝军加在一起就比红军强大。如果一支蓝军单独与红军作战,它就会被红军击败;如果两支蓝军协同作战,他们能够把红军击败。两支蓝军要协商一同发起进攻,他们唯一的通信方法是派通信员步行穿过山谷,而通过山谷的通信员可能躲过红军的监视,将发起进攻信息传送到对方的蓝军;但是通信员也可能被山谷中的红军俘虏,从而将信息丢失(信道不可靠)。问题:是否存在一个方法(协议)能实现蓝军之间的可靠通信,使两军协同作战而取胜?这就是两军通信问题。

特南鲍姆指出,实际上并不存在这样的通信协议。因为最后一条消息的发送方永远无法确认它是否正确送到了。因此,仅有方法能以较高的概率保证两军同时进攻,但无法确保精确通信。可见,网络通信是在不可靠的网络中尽可能实现可靠的数据传输。

▶4.通信中的“三次握手”

网络协议TCP的通信过程为:建立连接→数据传送→关闭连接三个步骤。“三次握手”是指网络通信过程中信号的三次交换过程,这个过程发生在TCP的建立连接阶段,它与两军通信问题非常相似,三次握手的目的是希望在不可靠的信道中实现可靠的信息传输。
通信双方需要就某个问题达成一致时,三次握手是理论上的最小值。如图7-5所示,一个完整的三次握手过程是:请求→应答→确认。
第一次握手:连接请求。建立连接时,客户端发送SYN(同步)请求数据包到服务器,然后客户端进入等待计时状态,等待服务器确认请求,这一过程称为“会话”。
第二次握手:授予连接。服务器收到SYN数据包并确认后,服务器发送SYN+ACK(同步+确认)数据包作为应答,然后服务器进入计时等待状态(SYN RECV)。
第三次握手:确认连接。客户端收到服务器的SYN+ACK数据包后,向服务器发送ACK(确认)数据包,此数据包发送完后,客户端和服务器进入连接状态,完成三次握手过程。这时客户端与服务器就可以开始传送数据了。

在以上过程中,服务器发送完SYN+ACK数据包后,如果未收到客户端的确认数据句,服务器进行首次重传;等待一段时间仍未收到客户端确认数据包,进行第二次重传;如果重传次数超过系统规定的最大重传次数,服务器将该连接信息从半连接队列中删除。

▶5.通信协议的安全性

与两军通信问题相似,TCP同样存在安全隐患。例如在“三次握手”过程中,如果攻击者向服务器发送大量伪造源地址的TCP数据包(SYN包,第1次握手)→服务器收到SYN包后,将返回大量的SYN+ACK包(第2次握手)→由于SYN包源地址是伪造的,因此服务器无法收到客户端的ACK包(无法建立第3次握手)。这种情况下,服务器一般会重试发送SYN+ACK包,并且等待一段时间后,再丢弃这些没有完成的半连接(时间大约为10s~1min)。如果是普通的客户端死机或网络掉线,导致产生少量的无效链接,这对服务器没有太大的影响。如果攻击者发送巨量(数百Gbps)伪造源地址的数据包,服务器就需要维护一个非常巨大的半连接列表,而且服务器需要不断进行巨量的第3次握手重试。这将消耗服务器大量CPU和内存资源,服务器最终会因为资源耗尽而崩溃。


网站公告

今日签到

点亮在社区的每一天
去签到