网络协议概述

来源:互联网 发布:罗马 拜占庭 知乎 编辑:程序博客网 时间:2024/06/10 20:01

网络协议概述

何为网络协议?

网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

为何需要网络协议?

在不同的计算机中,各机器使用的字符集千差万别,如果直接将信息转换为二进制,然后传输到其他电脑中,用户所看到的信息或许会因为字符集的不同而有巨大的差异。因此,数据传输时,必须要标准化,才能使信息正确地传达。标准化,便是网络协议说做的事。因此,在网络中传输数据时,必要网络协议。

网络协议的组成

结构性

由于网络通讯的复杂性,在制定协议时,通常把复杂成分分解成一些简单成分,然后再将它们组装起来。(简化网络设计的复杂性)。各层协议之间既相互独立又相互高效的协调工作。对于复杂的通信协议,其结构应该是采用层次的。

  1. 层次结构基本要求:
    (1)每一层都需要将自己的功能和对应的接口说明
    (2)最高层必须为用户操作
    (3)中间层必须为上下层提供服务。
    (4)把物理通信线路作为最低层,它能将从上层传来的信息用0101表示并传给其他终端。
  2. 分层的协议可以带来很多便利:
    一,灵活性好:当任何一层发生变化时,只要层间接口关系保持不变,则在这层以上或以下各层均不受影响。此外,对某一层提供的服务还可以进行修改。当某层提供的服务不再需要时,甚至可以将这一层取消,更容易管理。
    二,各层之间是独立的:在各层间标准化接口,允许不同的
    产品只提供各层功能的一部分,某一层不需要知道它的下一层是如何实现的,而仅仅需要知道该层通过层间的接口所提供的服务。由于每一层只实现一种相对独立的功能,所以比较容易实现。
  3. 层次划分:
结构(从上到下) 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

七层模型的作用

物理层(physical layer):
所谓的物理层,是指光纤、电缆或者电磁波等真实存在的物理媒介。这些媒介可以传送物理信号,比如亮度、电压或者振幅。这些物理信号可以被解释为0或1。

连接层(数据链路层)(link layer):
在连接层,信息以帧(frame)为单位传输。所谓的帧,是一段有限的0/1序列。连接层协议的功能就是识别0/1序列中所包含的帧。帧就像是一个信封,把数据包裹起来。
以太网(Ethernet)和WiFi是现在最常见的连接层协议。通过连接层协议,我们可以建立局域的以太网或者WiFi局域网,并让位于同一局域网络中的两台计算机通信。连接层就像是一个社区的邮差,他认识社区中的每一户人。社区中的每个人都可以将一封信(帧)交给他,让他送给同一社区的另一户人家。

网络层(network layer):
不同的社区之间该如何通信呢? 换句话说,如何让WiFi上的一台计算机和以太网上的另一台计算机通信呢?我们需要一个“中间人”。这个“中间人”必须有以下功能: 1. 能从物理层上在两个网络的接收和发送0/1序列,2. 能同时理解两种网络的帧格式。路由器(router)就是为此而产生的“翻译”。一个路由器有多个网卡(NIC,Network Interface Controller),每个NIC可以接入多个网络,并理解相应的连接层协议。在帧经过路由到达另一个网络的时候,路由会读取帧的信息,并改写以发送到另一个网络。所以路由器就像是在两个社区都有分支的邮局。一个社区的邮差将信送到本社区的邮局分支,而邮局会通过自己在另一个地区的分支将信转交给另一个社区的邮差手中,并由另一个社区的邮差最终送到目的地。

传输层(transport layer):
上面的三层协议让不同的计算机之间可以通信。但计算机中实际上有许多个进程,每个进程都可能有通信的需求。这就好像一所房子里住了好几个人(进程),如何让信精确的送到某个人手里呢?遵照之前相同的逻辑,我们需要在信纸上写上新的信息,比如收信人的姓名,才可能让信送到。所以,传输层就是在信纸的空白上写上新的“收信人”信息。每一所房子会配备一个管理员(传输层协议)。管理员从邮差手中接过信,会根据“收信人”,将信送给房子中的某个人。

应用层(application layer):
通过上面的几层协议,我们已经可以在任意两个人(进程)之间进行通信。然而每个人实际上从事的是不同的行业。有的人是律师,有的人外交官。比如说律师之间的通信,会用严格的律师术语,以免产生纠纷。再比如外交官之间的通信,必须符合一定的外交格式,以免发生外交误会。再比如间谍通过暗号来传递加密信息。应用层协议是对信件内容进一步的用语规范。应用层的协议包括用于Web浏览的HTTP协议,用于传输文件的FTP协议,用于Email的IMAP等等。
总结
通过网络分层,我们从原始的0/1序列抽象出
本地地址(邮差)、邮编(邮局)、收信人(管理员)、收信人行业(用语规范)
这些概念。这些概念最终允许互联网上的分布于两台计算机的两个进程相互通信。
写信人必须按照各层的协议,封装好整个信封 (encapsulation);而收信人则按照相反的顺序,来拆开这个信封。整个过程是可读信息 -> 二进制 -> 可读信息。计算机只能理解和传输0/1序列,而计算机的用户则总是输入和输出可读信息。网络协议保证了可读信息在整个转换和传输过程中的完整性。

TCP/IP协议

TCP/IP,Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。

作为互联网最基本的协议,可以说,没有TCP/IP协议,就无法上网。

主要特点

  • TCP/IP协议不依赖于任何特定的计算机硬件或操作系统,兼容性极强。所以TCP/IP协议成为一种联合各种硬件和软件的实用系统。
  • TCP/IP协议并不依赖于特定的网络传输硬件,所以TCP/IP协议能够集成各种各样的网络。用户能够使用以太网(Ethernet)、令牌环网(Token Ring Network)、拨号线路(Dial-up line)、X.25网以及所有的网络传输硬件。
  • 统一的网络地址分配方案,使得整个TCP/IP设备在网中都具有惟一的地址(安全性)
  • 标准化的高层协议,可以提供多种可靠的用户服务。

协议模型

TCP/IP采用了4层的层级结构,每一层都呼叫下一层所提供的网络来完成自己的需求。
- 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
- 传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等。这一层主要负责传输数据。
- 网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、SerialLine等)来传送数据。

TCP/IP结构对应OSI(基本网络协议)

TCP/IP OSI 应用层 应用层/表示层/会话层 主机到主机层(TCP)(又称传输层) 传输层 网络层(IP)(又称互联层) 网络层 网络接口层(又称链路层) 数据链路层/物理层

TCP/IP中重要的组件

ip

IPV4和IPV6
IPV4:IPv4,是互联网协议(Internet Protocol,IP)的第四版,也是第一个被广泛使用,构成现今互联网技术的基石的协议。在中国,IPV4在现在也是主流的协议
缺点:
它的最大问题是网络地址资源有限,从理论上讲,编址1600万个网络、40亿台主机。无法满足现在日益增长的ip需求。

IPV6:Pv6是Internet Protocol Version 6的缩写,其中Internet Protocol译为“互联网协议”。IPv6是IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议。
与IPV4相比,IPV6有更大的地址空间,使用更小的路由器,增加了一些新功能,提高了安全性能。所以,IPV6是未来发展的趋势。

TCP协议

TCP是面向连接的通信协议,通过三次握手1建立连接

对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。
这种三次握手的传输方式,保证了传输数据过程中的可靠性和安全性。

但这种安全性也成为TCP的”软肋”,常见的DDOS攻击之一的SYN flood2,便是利用了TCP协议的三次握手,使得服务器崩溃。

UDP

UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。
UDP与TCP位于同一层,但用于不同的环境。例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。
欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。


  1. 标准过程:
    首先,请求端(客户端)发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号;
    第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgment)。
    第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。
  2. 假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源—-数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃—即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。 ↩
1 0
原创粉丝点击