可以访问我的个人博客
你如何收到好友的QQ消息?
你有没有想过这个问题,当你和朋友使用QQ进行聊天的时候,你的消息是如何发送到好友的手机或者电脑上去的呢? 在解决这个问题之前不妨先思考一下另一个问题。有一天远方的朋友给你写了一封信,快递员收到信件之后要把信件送到你的手中。首先他要做的是根据信件上的地址信息找到你家所在的那一栋楼 ,找到你家所在的那一栋楼之后,快递员会再根据你家的门牌号才能把信件送到你的手中。 同理,QQ上的消息要从好友哪里发送到你这里。第一步是要做的是要找到你的手机或者电脑在网络中的地址(IP地址),找到你的设备在网络中的地址之后,你的设备中同时开启了许多其他的网络应用,消息仍然不知道发送到你的手机的哪个位置,为了把信息准确的送到QQ上而不是其他的应用上,必须使用端口号来区别设备上各种不同的网络的应用,至此消息就可以从好友QQ上准确的发送到你的QQ上了。什么是网络协议?
首先让我们看一段解释:> 一个协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及报文发送和/或接收一条报文或其他事件所采取的动作。
咋看这个解释,可能是一头雾水。我们通过一个类比来解释一下。假如你忘记带手表了,这时你想向一个陌生人询问现在的时间,首先你要的做的是和陌生人打招呼(发送报文)。如果陌生人回应了你(接收一条报文后采取的动作),你才能继续向她问时间。如果陌生人不会说中文,那么你们就不能进行后继的交流了。这是一个简单的人类之间进行交流的协议。同理在计算机网络中,两个进行通信的设备也应该遵循相同的网络通信协议才能进行通信。
因特网运输层概述
运输层位于网络层之上应用层之下,该层为运行在不同主机上的<font color = orange>应用进程提供直接的通信服务起着至关重要的作用。如果不同主机之间的应用进程要进行直接通信的话,唯一的方法是使用应用层的协议。 运输层上使用的协议主要有两种:UDP、TCP。下表展示处了两种协议分别会在什么应用中会被使用到。可以看出TCP协议通常被使用到对数据丢失不能忍受的应用上,如电子邮件、即时通信,因为TCP协议在传输数据的过程中不会造成数据的丢失。而UDP协议在传输的过程中会有些许的数据丢失,所以它通常会被应用到语音电话、视频电话等对数据丢失可以忍受的应用上。应用 | 应用层协议 | 下面的运输协议 |
电子邮件 | SMTP | TCP |
远程终端访问 | Telnet | TCP |
Web | HTTP | TCP |
文件运输 | FTP | TCP |
远程文件服务器 | NFS | 通常UDP |
流式多媒体 | 通常专用2 | UDP或TCP |
因特网电话 | 通常专用 | UDP或TCP |
面向连接的运输:TCP TCP之所以是被称为面向连接的,是因为两台主机上下应用进程在进行通信之前,必须先"握手"即它们必须相互发送某些预备报文段,以建立连接,这是保证TCP协议用来传输数据可靠的手段之一。## 三次握手 前面谈到,TCP协议在进行通信之前会进行三次握手,三次握手之后,两台主机上的应用进程之间才会建立连接,那么三次握手是如何进行的呢? 第一步:客户端的TCP首先向服务器的TCP发送一个特殊的SYN报文段(该报文段中不包括应用层数据),报文首部的标识位SYN会被置为1,同时报文中会加上客户端随机生成的一个初始序号(client_isn),将此编号放置于该起始的TCP SYN报文段的序号字段中。最后该报文段会被封装在一个IP数据报中,发送给服务器。 第二步:一旦包含TCP SYN报文段的IP数据报到达服务器主机,服务器会向客户端发送允许连接报文(SYNACK报文段),该报文首部的标识位SYN会被置为0,同时报文中会加上服务器选择的初始序号(server_isn),将此编号放置到TCP报文段首部的序号字段中,同时TCP报文段的确认号字段被置为client_isn + 1。 第三步:在收到SYNACK报文段后,客户端也要给该连接分配缓存和变量。客户主机则向服务器发送另外一个报文段;这最后一个报文段对服务器的允许连接的报文段就像了确认(该客户通过将值server_isn + 1放置到TCP报文段首部的确认段中来完成此项工作)。因为连接邮件建立了,所以该SYN比特被置为0。 一旦这三个步骤顺利完成,客户端和服务器之间就可以相互通信了。无连接运输:UDP 顾名思义,UDP在应用进程间传输数据之前不需要像TCP那么麻烦的要与服务器进行三次握手,采用UDP时,只要应用进程将数据传输给UDP,UDP就会将此数据打包进报文段并立即将其传递给网络层,发送给远程主机。所以它就无法保证数据是否会被准确的交付到远程主机应用进程。UDP和TCP比较 UDP传输数据时不需要建立连接,但会丢失数据。TCP传输数据可靠。两个协议的不同特点导致他们使用的场合不同,在实际的开发中需要视工程的要求来决定使用哪一个协议。
UDP | TCP | |
是否需要与远程主机建立连接 | 否 | 是 |
报文首部开销 | 8byte | 20byte |
数据传输可靠性 | 不可靠 | 可靠 |