目录
互联网的本质就是一系列的网络协议,按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层,这里介绍七层。
OSI七层模型
OSI(Open System Interconnection,开放系统互联)七层网络模型是ISO(International Organization for Standardization,国际标准化组织)提出的一个参考模型,是一个把网络通信在逻辑上的定义,也可以理解成为定义了通用的网络通信规范。而我们的数据在网络中传输的过程,实际上就是如下图的封装和解封装的过程,发送方通过各种封装处理,把数据转换成比特流的形式,比特流在信号传输的硬件媒介中传输,接收方再把比特流进行解封装处理。
1.物理层
建立、维护、断开物理连接。(由底层网络定义协议)
2.数据链路层
建立逻辑连接、进行硬件地址寻址、差错校验 等功能。(由底层网络定义协议)将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。规定了如何进行物理地址寻址、如何在物理线路上进行数据(帧frame)的可靠传递以及流量控制。
3.网络层
规定了通过哪些网络节点、什么样的网络路径来将数据(数据包)从发送方发送到接收方。在网络层中,确定了从节点A发数据到节点B的网络路径,经过哪些节点。网络层既可以建立LAN通信系统,更主要的是可以在WAN网络系统中建立通信,这是因为它有自己的路由地址结构,通过路由协议(又称可路由协议)进行网络通信的路由工作。进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6)
4.传输层
负责总体的数据传输和数据控制,提供端到端的交换数据的机制。传输层对数据(段)进行分割和重组,并且进行流量控制和根据接收方的接收数据能力确定适当的传输速率。
传输层协议有TCP协议、UDP协议等。
5.会话层
在网络中的两个节点之间建立、维持和终止通信。
6.表示层
数据的表示、安全、压缩。在应用程序和网络之间对数据进行格式化,使之能够被另一方理解。即发送方的表示层将应用程序数据的抽象语法转换成网
络适用于OSI网络传输的传送语法,接收方则相反。除此之外,表示层还可对数据进行加密与解密。
7.应用层
最顶层的OSI层,为应用程序提供网络服务。如为电子邮件、文件传输功能提供协议支持。
应用层协议有HTTP协议、FTP协议、SMTP协议等。
TCP/IP协议
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。。对于TCP/IP 协议族按层次分别分为以下 4 层:应用层、传输层、网络层和数据链路层。
TCP/IP——网络接口层(数据链路层)
主要作用一:数据封装/解封装成帧(frame)。为了保证可靠传输,网络层传过来的数据在这里被加工成了可被物理层传输的结构包——帧。帧中除了包括需要传输的数据外,还包括发送方和接收方的物理地址以及检错和控制信息。其中的物理地址确定了帧将发送到何处,检错和控制信息则是用来保证数据的无差错到达。
主要作用二:控制帧传输。控制帧的传输主要体现在反馈重发、计时器、帧序号方面。接收方通过对帧的差错编码(奇偶校验码或 CRC 码)的检查,来判断帧在传输过程中是否出错,并向发送发进行反馈,如果传输发生差错,则需要重发纠正。作为发送发,如果在发送帧后,会同时启动定时器,如果帧发送后在一定时间内没有收到反馈,为了避免传输停滞不前,则在计时器
Timeou后认为帧传输出错,自动重发。为了避免多次收到同一帧并将其递交给网络层的情况发生,则需要对每个发送的帧进行编号,接收方以此来判断该帧是否重复接受了。
主要作用三:流量控制。由于收发双方各自使用的设备工作速率和缓冲存储空间的差异,可能出现发送方的发送能力大于接收方接收能力的现象,此时若不对发送方的发送速率做适当的限制,前面来不及接收的帧将被后面不断发送来的帧“淹没”,从而造成帧的丢失而出错。由此可见,流量控制实际上是对发送方数据流量的控制,使其发送速率不超过接收方的速率。所以需要一些规则使得发送方知道在什么情况下可以接着发送下一帧,而在什么情况下必须暂停发送,以等待收到某种反馈信息后再继续发送。
TCP/IP——网络层
说到网络层不得不提的就是IP协议,它是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP、IGMP协议数据都以IP数据报格式传输。IP协议提供的是不可靠的、无连接的数据报传输服务。不可靠是指IP协议不会保证数据报能否成功到达目的地,仅提供传输服务,传输出错,则会丢弃出错的数据报。无连接是指IP协议对数据报的处理是独立的,这也意味着接收方不一定会按照发送顺序接收数据报。
IP地址分类:
TCP/IP——传输层
无论参考OSI还是TCP/IP的网络模型,我们从传输层向更底层看,各层的协议都是在直接或间接的服务于主机与主机之间的通信,而传输层则是在进程与进程通信层面上的。传输层有两个重要的协议——TCP(Transmission ControlProtocol,传输控制协议)和UDP(User Data Protocol,用户数据报协议)。
UDP协议:
UDP(User Datagram Protocol)即用户数据报协议,其传输机制决定了它的最大优点——快,同时也决定了它最大的缺点——不可靠、不稳定。
UDP是无连接的,发送数据之前不需要建立连接(TCP需要)。减少了开销和延时。
UDP是面向报文的,对IP数据报只做简单封装(8字节UDP报头)。减少报头开销。
UDP没有阻塞机制,宁愿阻塞时丢弃数据不传,也不阻塞造成延时。
UDP支持一对一、一对多、多对一、多对多通信。
UDP报文结构:
TCP协议:
◆TCP(Transmission Control Protocol)传输控制协议,相对于UDP,TCP是面向连接的、提供可靠的数据传输服务。同时也是较UDP开销较大的、传输速度较慢的。
◆TCP提供可靠的、面向连接的数据传输服务。使用TCP通信之前,需要进行“三次握手”建立连接,通信结束后还要使用“四次挥手”断开连接。
◆TCP是点对点的连接。一条TCP连接只能连接两个端点。
◆TCP 提供可靠传输,无差错、不丢失、不重复、按顺序。
◆TCP 提供全双工通信,允许通信双方任何时候都能发送数据,发送方设有发送缓存,接收方设有接收缓存。
◆TCP 面向字节流 。TCP 并不知道所传输的数据的含义,仅把数据看作一连串的字节序列,它也不保证接收方收到的数据块和发送方发出的数据块具有大小对应关系。
TCP报文结构:
◆端口号,用于区分发送消息或者接收消息的进程。
◆序号,首字节在整个数据流中的位置。初始***随机产生,并在连接建立阶段予以同步。
◆确认序号,表示序号为确认号减去1的数据包及其以前的所有数据包已经正确接收,也就是说他相当于下一个准备接收的字节的序号
注意到中间还有几个标志位:
◆URG—为1表示高优先级数据包,紧急指针字段有效。
◆ACK—为1表示确认号字段有效
◆PSH—为1表示是带有PUSH标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。
◆RST—为1表示出现严重差错。可能需要重现创建TCP连接。还可以用于拒绝非法的报文段和拒绝连接请求。
◆SYN—为1表示这是连接请求或是连接接受请求,用于创建连接和使顺序号同步
◆FIN—为1表示发送方没有数据要传输了,要求释放连接。
数据包格式当中,最重要的是理解序号和确认序号。TCP为什么是稳定可靠的,与序号与确认序号这套机制紧密相关,这也是TCP的精髓。
TCP建立连接的三次握手:
- Client首先向Server发送连接请求报文段,同步自己的seq(x),Client进入SYN_SENT状态。
- Server收到Client的连接请求报文段,返回给Client自己的seq(y)以及ack(x+1),Server进入SYN_REVD状态。
- Client收到Server的返回确认,再次向服务器发送确认报文段ack(y+1),这个报文段已经可以携带数据了。Client进
入ESTABLISHED状态。 - Server再次收到Client的确认信息后,进入ESTABLISHED状态。
TCP断开连接的四次握手:
(1)Client向Server发送断开连接请求的报文段,seq=m(m为Client最后一次向Server发送报文段的最后一个字节序号加1),Client进入FIN-WAIT-1状态。
(2)Server收到断开报文段后,向Client发送确认报文段,seq=n(n为Server最后一次向Client发送报文段的最后一个字节序号加1),ack=m+1,Server进入CLOSE-WAIT状态。此时这个TCP连接处于半开半闭状态,Server发送数据的话,Client仍然可以接收到。
(3)Server向Client发送断开确认报文段,seq=u(u为半开半闭状态下Server最后一次向Client发送报文段的最后一个字节序号加1),ack=m+1,Server进入LAST-ACK状态。
(4)Client收到Server的断开确认报文段后,向Server发送确认断开报文,seq=m+1,ack=u+1,Client进入TIME-WAIT状态。
(5)Server收到Client的确认断开报文,进入CLOSED状态,断开了TCP连接。
6)Client在TIME-WAIT状态等待一段时间(时间为2*MSL((Maximum Segment Life)),确认Client向Server发送的最后一次断开确认到达(如果没有到达,Server会重发步骤(3)中的断开确认报文段给Client,告诉Client你的最后一次确认断开没有收到)。如果Client在TIME-WAIT过程中没有再次收到Server的报文段,就进入CLOSES状态。TCP连接至此断开。