网络编程基本概念


1.网络概述

什么是网络?
计算机网络由若干的节点和连接这些节点的链路组成,计算机网络的节点可以是计算机,集线器,交换机等

网络有什么作用?
信息传递,但是我们要知道仅仅有网络是无法进行信息传递的,我们还需要在计算机上安装相应的软件才可以

什么是互联网?
如果把网络再通过路由器连在一起就形成了互联网(众多的电信运营商共同组成)。世界上最大的互联网就是因特网

信息在网络中的传输流程
常见的网络的划分形式有三种协议如下所示:
【java网络】基本概念
我们在研究的时候通常使用的是五层协议,下面我们看看这五层协议的流动过程:
【java网络】基本概念
下面我们看看每层具体做的事情:

1.2 各层介绍
每一层的工作都会借助协议完成

1.2.1 应用层
能够和用户交互,所有能够产生网络流量的程序。
它使得应用程序能够直接运行在传输层上,直接为用户提供服务。(包含的协议有HTTP等)

表示层: 信息传输前对数据进行处理;网络安全和保密管理,文件的压缩等;虚拟终端协议(VTP)

会话层: 将会话地址映射为运输地址;选择需要的传输服务质量参数;识别各个会话连接;传输有限的透明用户数据等

1.2.2 运输层
负责两个主机中进程之间的通信提供服务,由于一个主机可以运行多个进程,因此运输层有复用和分用的功能。复用就是多个应用进程可以同时使用下面的运输层的服务,分用则是运输层把收到的信息分别交给上面的应用层中的相应进程

运输层主要使用UDP和TCP两种协议,主要目的是将数据发送给指定的应用(后面详细讲)

1.2.3 网络层
选择最佳的路径和规划IP地址 路由表 通过IP协议进行地址划分,基于IP地址转发,负责把数据传送给服务器/计算机。(只有TCP协议)传输层会负责重传和顺序问题,也可以保证传给对应的进程。UDP 只负责传送给对应的进程,不保证重传和信息问题

1.2.4 数据链路层

数据链路层传送的是帧
【java网络】基本概念
数据链路层不必考虑物理层如何实现比特传输的细节。甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方
【java网络】基本概念
1.2.4.1 数据链路层的三个基本问题

封装成帧
封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧
首部和尾部的一个重要作用就是进行帧定界
【java网络】基本概念
对于定界而言,我们可以使用控制字符进行帧定界

当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符

控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT (End Of Transmission) 表示帧的结束

【java网络】基本概念
透明传输

当然了,我们有可能会想到当我们的首部和尾部在数据中就已经出现的时候,那么我们的帧怎么定界呢???
【java网络】基本概念
解决方法:字节填充 (byte stuffing) 或字符填充 (character stuffing)

  • 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC” (其十六进制编码是 1B)。

  • 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。

  • 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个
    【java网络】基本概念
    差错检测

在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER

为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施
常用: CRC 的检错技术

1.2.5 物理层
确定与传输媒体的接口的一些特性,物理层中承载的是比特流单位是比特
机械特性: 指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。
电气特性 :指明在接口电缆的各条线上出现的电压的范围。
功能特性 :指明某条线上出现的某一电平的电压表示何种意义。
过程特性:指明对于不同功能的各种可能事件的出现顺序

综合上述整个过程如下:
简洁:

【java网络】基本概念
详细:

1、某进程(也就是在应用层)准备好待传输数据,若目的地址是域名则要先通过DNS解析成IP地址
2、交付到运输层(TCP/UDP层),运输层对数据进行适当的分组等操作,后对每一个分组数组加上首部形成报文段(或用户数据报)首部包括源地址、源端口、目的地址、目的端口和一些其他的诸如校验和等数据
3、交付到网际层(IP层),对分组数据加上首部形成IP数据报,首部包括源地址、目的地址(跟运输层的目的地址不同,运输层的目的地址是数据要传送的最终地址,而该目的地址是通过路由表信息得出,是该数据下一步该转移的目的计算机)和校验和等数据
4、交付到数据链路层(mac层),先是对把数据封装成帧(也就是添加首部[SOH]和尾部[EOT]),然后进行透明传输(也就是封装的数据里面,如果出现首部SOH和尾部EOT这样的数据,对其进行转义,也就是加上ESC转义字符,这种方法称为字节/字符填充)
5、交付到物理层,根据数据链路层的mac知道要传输到目的计算机,通过特定的传输介质传送到下一个地址
6、若源主机与最终目的主机在同一个网段,则该地址是最终的目的主机,开始接收数据,进入第7步骤,若源主机和最终目的主机不在同一个网段,进入第11步骤
7、交付到数据链路层,对数据进行卸装,该层会对接收的数据进行差错检测,有差错的数据都会被丢弃 8、交付到IP层(网络层),解帧校验
9、交付到运输层,在该主机上,根据端口找到对应的应用,当使用的TCP协议时,提供一种面向连接的可靠的传输服务,可以说是建立了一个虚拟通道,源主机的数据通过该虚拟通道进行传输;若是使用的UDP协议时,提供一种面向的非连接的尽最大努力的不可靠的传输服务,数据传输快,但是无法保证数据100%传输。
10、建立了传输连接后,应用开始接收数据,发送方数据和接收方都必须满足相同的标准应用层协议,如http、ftp、smtp等,通过标准协议应用即可正确的接收源主机发送过来的数据。
11、该计算机不是最终主机,那该计算机就是路由器也就是用于转发分组数据的中转站,首先接收数据的处理同步骤7和8一样,然后接下来的流程又是如同步骤3,
12、如此循环直至找到最终主机,将数据传送到目的应用

相关文章: