计算机网络

OSI与TCP/IP各层的结构与功能,都有哪些协议

五层协议的体系结构

应用层

应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用,应用层协议定义的是应用进程间的通信和交互的规则,对于不同的网路应用需要不同的应用层协议,在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等等,我们把应用层交互的数据单元称为报文。

  • 域名系统: 域名系统(Domain Name System 缩写DNS)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的 一个分布式数据库,能够使用更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串,例如: 一个公司的Web网站可看作是它在网上的门户,而域名就相当于其门牌地址,通常域名都使用该公司的名称或简称,例如 百度域名: www.baiducom
  • HTTP写协议: 超文本传输协议(HTTP,HyperText Transfer Protocol) 是互联网上应用最为广泛的一种网络协议,所有的WWW(万维网)文件都必须遵守这个标准,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
运输层

运输层(ransport layer) 的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务,应用进程利用该服务传送应用层报文,通用的是指并不针对某一个特定的网路应用,而是多种应用可以使用同一个运输层服务,由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能,所谓复用就是指多个应用进程可同时使用下面运输层的服务,分用和复用相反。

运输层主要使用以下两种协议:

  • 传输控制协议TCP(Transmission Control Protocol) 提供面向连接的,可靠的数据传输服务。
  • 用户数据协议UDP(User Datagram Protocol) 提供无连接的,尽力最大努力的数据传输服务(不保证数据传输的可靠性)

UDP的主要特点

  • UDP是无连接的
  • UDP使用尽最大努力交付,即不保证可靠交互,因此主机不需要维持复杂的链接状态
  • UDP是面向报文的
  • UDP没用拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如直播,实时视频会议等)
  • UDP支持一对一,一对多,多对一的多对多的交互通信
  • UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

TCP的主要特点

  • TCP是面向连接的
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)
  • TCP提供可靠交付的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,并且按序到达。
  • TCP提供全双工通信,TCP允许通信双方的应用进程在任何时候都能发送数据,TCP的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;
  • 面向字节流,TCP中的流(Stream) 指的是流入进程或从进程流出的字节序列,面向字节流的含义是: 虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来额数据仅仅看成是一连串的无结构的字节流
网络层

在计算机网络中进行通信的两个计算机之间可能会经过很多数据链路,也可能还要经过很多通信子网,网络层的任务就是选择合适的网间路由和交换节点,确保数据及时传送,在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送,在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报,简称数据报。

互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Intert Prococol)和许多路由选择协议,因此互联网的网络层也叫做网际层IP层

数据链路层

数据链路层(data link layer) 通常简称为链路层,两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层协议,在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧,每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)

在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始到哪个比特结束,这样,数据链路层在收到一个帧后,就可从中提取数据部分,上交网络层,控制信息还使接收端能够检测到所收到的帧中有无差错,如果发现差错,数据链路层就简单的丢弃这个出错的帧,以避免继续在网络中传送下去白白浪费网络资源,如果需要改正数据在链路层传输时出现差错,那么就要采用可靠传输协议来纠正出现的差错,这种方法会使链路层的协议复杂些。

物理层

在物理层上所传送的数据单位是比特,物理层(physical layer) 的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽具体传输介质和物理设备的差异,使其上面的数据链路层不必考虑网络的具体传输介质是什么,透明传送比特流表示经过实际电路传送后的比特流没有发送变化,对传送的比特流来说,这个电路是看不见的。

TCP 三次握手和四次挥手

为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。

简单示意图

  • 客户端–发送带有 SYN 标志的数据包–一次握手–服务端
  • 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
  • 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端

为什么要三次握手

三次握手的目的是建立可靠的通信信道,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认值机与对方的发送与接收是否正常。

第一次握手: Client什么都不能确认;Server确认了对方发送正常

第二次握手: Client确认了: 自己发送正常、接收正常,对方发送正常、接收正常;Server确认了: 自己接收正常,对方发送正常;

第三次握手:Client确认了:自己发送正常、接收正常,对方发送正常、接收正常;Server确认了,自己发送正常,接收正常,对方发送接收正常。

为什么要传回SYN

接收端传回发送端所发送的SYN是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。

SYN是TCP/IP建立连接时使用的握手信号,在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN-ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应,这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

传了SYN,为啥还要传ACK

双方通信无误必须是两者相互发送信息都无误,传了SYN,证明发送发到接收发的通道没有问题,但是接收方到发送发的通道还需要ACK信号来进行验证。

断开一个TCP连接要四次挥手

  • 客户端: 发送一个FIN,用来关闭客户端到服务器的数据传送
  • 服务器: 收到这个FIN,它发回一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号
  • 服务器: 关闭与客户端的连接,发送一个FIN给客户端
  • 客户端: 发回ACK报文确认,并将确认序号设置为收到序号加1

为什么要四次挥手

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态,当另一方也没有数据再发送的时候则发出释放通知,对方确认后就完全关闭了TCP连接。

举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。


  转载请注明: Hi 高虎 计算机网络

 上一篇
Java内存区域简介 Java内存区域简介
运行时数据区域 本节介绍Java虚拟机内存的各个区域、讲解这些区域的作用、服务对象以及其中可能产生的问题。 程序计数器程序计数器时一块较小的内存空间,它可以看作是当前线程所指向的字节码的行号指示器 当多线程运行时,每个线程切换后
2018-01-20
下一篇 
Map的基本用法 Map的基本用法
Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的。下面就以K和V来代表键和值,来说明一下java中关于Map的九大问题。 将Map转换为List在java中Map接口提供了三种集合获取方式:Key set,,value s
2017-11-08
  目录