网络通信基础(一)

网络通信基础

网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。

IP地址

IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址

就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110 -------- 通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信

端口号

在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程

类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。

端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。

两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。

TCP/IP五层模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。

传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。

网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。

数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。

物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。

封装与分用

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)

应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)

首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息

数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理

封装

数据从上到下,层层添加信息的过程,就称为"封装"

假设如下场景:主机A通过QQ给主机B发了一个hello

一、应用层

QQ程序内部自己约定好了一个应用层协议(具体是咋约定的,我们外人不得而知)

QQ应用程序会把用户输入的字符串构造成约定好的应用层协议报文

 

QQ应用程序就会把这个应用数据报文,交给传输层协议,来进一步处理(传输层是操作系统内核实现的,操作系统就会提供一些API给应用程序,代码里调用系统的API,就可以把应用层数据交给传输层)

二、传输层

传输层这里有很多的协议,其中最典型的就是TCP协议,此处以TCP协议来进行演示

TCP协议把之前的数据视为一个整体,作为载荷部分,加上TCP协议报头

 

传输层再把这个数据交给网络层进行处理

三、网络层

网络层这里也有很多的协议,网络层中最典型的就是IP协议

IP协议把整个TCP数据报视为一个整体,作为载荷部分,再在前面加上IP的协议报头

网络层继续把这个数据交给数据链路层进行处理

四、数据链路层

数据链路层也有很多的协议,其中最典型的就是"以太网"(以太网就是一个协议)

以太网以整个IP数据视为一个整体,作为载荷部分,在数据的前面加上帧头,在数据的后面加上帧尾,形成以太网数据帧

数据链路层再向下将数据交给物理层

五、物理层

数据已经组织好了,就通过物理层的设备(网卡)将数据的二进制比特流转换成光信号/电信号并进行传输

分用

分用就是封装的逆过程

封装就是打包快递,分用就是拆快递

一、物理层

接收方的网卡这样的硬件设备就收到光信号/电信号了,将光信号/电信号转换成二进制比特数据

接下来将数据交给数据链路层,由以太网(协议)负责解析

二、数据链路层

当前拿到了一个以太网数据帧,由以太网协议去掉帧头和帧尾,取出载荷部分

把取出的载荷交给网络层

三、网络层

IP协议针对刚才得到的IP数据报再进行解析,去掉IP包头,得到载荷部分

把取出的载荷交给传输层

四、传输层

TCP协议根据刚才得到的载荷部分再进行解析,去掉TCP报头,得到载荷部分

把取出的载荷交给应用层

五、应用层

QQ应用程序就会把应用层数据报再进行解析,取出里面的信息显示在界面上

什么是网络编程

网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)

当然,我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程

我们一定要明确,我们的目的是提供网络上不同主机,基于网络来传输数据资源:

进程A:编程来获取网络资源

进程B:编程来提供网络资源

网络编程中的基本概念

发送端和接收端

发送端:数据的发送方进程,称为发送端。发送端主机即网络通信中的源主机。

接收端:数据的接收方进程,称为接收端。接收端主机即网络通信中的目的主机。

收发端:发送端和接收端两端,也简称为收发端。

注意:发送端和接收端只是相对的,只是一次网络数据传输产生数据流向后的概念。

请求和相应

一般来说,获取一个网络资源,涉及到两次网络数据传输:

第一次:请求数据的发送

第二次:响应数据的发送

客户端和服务端

服务端:在常见的网络数据传输场景下,把提供服务的一方进程,称为服务端,可以提供对外服务。

客户端:获取服务的一方进程,称为客户端。

常见的客户端服务端模型

最常见的场景,客户端是指给用户使用的程序,服务端是提供用户服务的程序:

1、客户端先发送请求到服务端

2、服务端根据请求数据,执行相应的业务处理

3、服务端返回响应:发送业务处理结果

4、客户端根据响应数据,展示处理结果(展示获取的资源,或提示保存资源的处理结果)

客户端根据响应数据,展示处理结果(展示获取的资源,或提示保存资源的处理结果)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值