- c/s信息传输流程
(1)客户端产生数据,存放于客户端应用的内存中,然后调用接口将自己内存中的数据发送/拷贝给操作系统内存。
(2)客户端操作系统收到数据后,按照客户端应用指定的规则(即协议),调用网卡并发送数据。
(3)网络传输数据。
(4)服务端应用调用系统接口,想要将数据从操作系统内存拷贝到自己的内存中。
(5)服务端操作系统收到指令后,使用与客户端相同的规则(即协议)从网卡读取数据,然后拷贝给服务端应用。
TCP/IP五层模型详解
计算机与计算机之间要有统一的连接标准才能够完成相互通信,这个标准被称为互联网协议,而网络就是物理链接介质+互联网协议。按照功能不同,人们将互联网协议从不同维度分为OSI七层、TCP/IP五层或TCP/IP四层,如下图所示。
每层运行的常见设备如下图所示。
物理层
物理层主要是基于电器特性发送高低电平信号,电平即“电压平台”,指的是电路中某一点电压的高低状态,在网络信号中高电平用数字“1”表示,低电平用数字“0”表示。电平的高低是个相对概念,3V对于7V是低电平,但对于1V就是高电平。
数据链路层
由于单纯的电平信号“0”和“1”没有任何意义,在实际应用中,我们会将电平信号进行分组处理,多少位一组、每组什么意思,这样数据才有具体的含义。数据链路层的功能就是定义电平信号的分组方式。
1.以太网协议
数据链路层使用以太网协议进行数据传输,基于MAC地址的广播方式实现数据传输,只能在局域网内广播。早期各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议Ethernet。
2.Ethernet以太网
由一组电平信号构成一个数据包,叫作“帧”,每一数据帧由报头Head和数Data两部分组成,如下图所示。
Head:固定18字节,其中发送者/源地址6字节,接收者/目标地址6字节,数据类型6字节。
Data:最短46字节,最长1500字节。
数据包的具体内容格式为:Head长度+Data长度=最短64字节,最长1518字节(超过最大限制就分片发送)。
3.MAC地址
Head中包含的源地址和目标地址的由来:Ethernet规定接入Internet的设备必须配有网卡,发送端和接收端的地址便是指网卡的地址,即MAC地址。
MAC地址:每块网卡出厂时都被印上一个世界唯一的MAC地址,它是一个长度为48位的二进制数,通常用12位十六进制数表示(前6位是厂商编号,后6位是流水线号)。
4.Broadcast广播
有了MAC地址,同一网络内的两台主机就可以通信了(一台主机通过ARP协议获取另外一台主机的MAC地址),下面是以太网通信数据帧的详细示意图。
其实Ethernet采用非常原始的广播方式进行通信,也就是说计算机之间的通信基本靠“吼”。例如,有多台PC组成了一个网络,并通过硬件设施链接具备了通信条件,如下图所示。
上图中,PC1按照固定协议格式以广播的方式发送以太网包给PC4,然而,PC2、PC3、PC5都会收到PC1发来的数据包,拆开后如果发现目标MAC地址不是自己就会丢弃,如果是自己就响应
网络层
有了Ethernet、MAC地址、广播的发送方式,世界上的计算机就可以彼此进行通信了,问题是世界范围的互联网是由一个个彼此隔离的小的局域网组成的(如下图所示),如果所有的通信都采用以太网的广播方式,那么一台机器发送的数据包全世界都会收到,这就不仅仅是效率低的问题了,这会是一种灾难。
全世界的大网络由一个个小的彼此隔离的局域网组成,以太网包只能在一个局域网内发送,一个局域网是一个广播域,跨广播域通信只能通过路由转发。由此得出结论:必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是。如果是就采用广播的方式发送,如果不是就采用路由的方式发送(向不同广播域/子网分发数据包),MAC地址是无法区分的,它只跟厂商有关,网络层就是用来解决这一问题的。网络层的作用就是引入一套新的地址来区分不同的广播域/子网,这套地址叫作网络地址。
1.IP
规定网络地址的协议叫作IP(Internet Protocol,网际互联协议),它定义的地址称为IP地址。广泛采用v4版本即IPv4,规定网络地址由32位二进制数表示。一个IP地址通常写成四段十进制数,例如172.16.10.1,其取值范围为:0.0.0.0~255.255.255.255。
IP地址由两部分组成:网络部分(用来标识子网)和主机部分(用来标识主机)。
2.子网掩码
所谓“子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
我们根据“子网掩码”就能判断任意两个IP地址是否处于同一个子网络。方法是将两个IP地址与子网掩码分别进行&运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果相同,就表明它们在同一个子网络中,否则就不在。
IP的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络中
3.IP数据包
IP数据包也分为Head和Data两部分,无须为IP数据包定义单独的栏位,直接放入以太网包的Data部分即可。
Head(IP头部):长度为20~60字节。
Data(IP数据):最长为65515字节。
而以太网数据包的Data部分,最长只有1500字节。因此,如果IP数据包超过1500字节,它就需要分割成几个以太网数据包,分开发送。其具体结构如下图所示。
4.ARP
我们已经知道计算机通信方式基本靠“吼”,也就是广播的方式。所有上层的数据包到最后都要封装到以太网头,然后通过以太网协议发送。在谈及以太网协议的时候,我们已经了解到,通信基于MAC地址的广播方式实现的,计算机在发送数据包时,获取自身的MAC地址是容易的,获取目标主机的MAC地址,需要通过ARP(Address Resolution Protocol,地址解析协议)来实现。
ARP用于实现从IP地址到MAC地址的映射,即询问目标IP地址对应的MAC地址,以广播的方式发送数据包,获取目标主机的MAC地址。
传输层
现在我们已经知道,网络层的IP地址帮我们区分子网,以太网层的MAC地址帮我们找到主机。大家使用的都是应用程序,你的计算机上可能同时开启QQ、微信等多个应用程序,那么我们通过IP地址和MAC地址找到了一台特定的主机,如何标识这台主机上的应用程序?答案就是端口,端口就是应用程序与网卡关联的编号。那么传输层就是用来建立端口到端口的通信机制的。
1.TCP
TCP(Transmission Control Protocol,传输控制协议)是一种可靠传输协议,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割,其数据结构如下图所示。
2.UDP
UDP(User Datagram Protocol,用户数据报协议)是一种不可靠传输协议,“报头”部分总共有8字节,总长度不超过65535字节,正好放进一个IP数据包,其数据结构如下图所示。
3.TCP报文结构
TCP报文是TCP层传输的数据单元,也叫作报文段。TCP报文结构如下图所示。
