网络通信基础
网络互连的目的是进行网络通信,就是网络数据传输,就是网络主机中的不同进程间 基于网络传输数据
那么,在组件的网络中,如何判断到底是从哪台主机,将数据传输到哪台主机呢?这就需要使用IP地址来标识
IP地址(收获地址)
IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。 格式 IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如: 01100100.00000100.00000101.00000110。
特殊IP 127.*的IP地址用于本机环回测试。通常是127.0.0.1 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于网络编程而言,常见的开发方式都是本机到本机的网络通信。
IP地址解决了网络通信时定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据?这就需要端口号来标识。
端口号(收货人)
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说,端口号用于定位主机中的进程
格式 端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
注意:两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号
一个进程启动后,系统会随机分配一个端口(启动端口)。程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号。
有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢 网络通信传输的数据类型可能有多种,同一个类型的数据格式可能也不同,如何标识发送的是图片、文本、还是文本的编码格式? 基于网络数据传输,需要使用协议来规定双方的数据格式
协议
网络协议是网络通信经过的所有网络设备都必须共同遵从的一组约定、规则。如怎样建立连接,怎样互相识别,只有遵守这个约定,计算机之间才能互相通信交流,通常由三要素决定:语法、语义、时序
协议最终体现为在网络上传输的数据包的格式
为什么需要协议 计算机之间的传输媒介是光信号和电信号。通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。 计算机生产厂商有很多; 计算机操作系统,也有很多; 计算机网络硬件设备,还是有很多; 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是 网络协议; 知名的协议默认端口
系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使用的应用层协议
注意 以上只是说明 0 ~ 1023 范围的知名端口号用于绑定知名协议,但某个服务器也可以使用其他 1024 ~65535 范围内的端口来绑定知名协议。 餐厅的VIP包房是给会员使用,但会员也可以不坐包房,坐其他普通座位。
五元组
在TCP/IP协议中,用五元组来标识一个网络通信: 1.源IP:标识源主机 2.源端口号:标识源主机中该次通信发送数据的进程 3.目的IP:标识目的主机 4.目的端口号:标识目的主机中该次通信接收数据的进程 5.协议号:标识发送进程和接收进程双方约定的数据格式
分层
协议分层——TCP/IP五层模型
应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层
网络设备分层
对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;对于集线器,它只实现了物理层;注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。
网络分层
网络数据传输时,经过不同的网络节点(主机、路由器)时,网络分层需要对应。 以下为同一个网段内的两台主机进行文件传输: 在这里插入图片描述
封装和分用
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。
在这里插入图片描述
1.网络:进程和进程间跨主机(Host)通信
2.进程发生的数据,是怎么到达网卡并发送的 OS的网络管理协议(网络协议栈)
3.让网卡去发送数据:填充数据和触发发送 4.网卡是怎么接收数据的:接受数据 通过中断把控制权给到OS OS把数据搬给进程 5.进程发送出来的数据,是原封不动给到网卡发送的吗? 数据需要经过不断的封装之后才会发送的
有不同的层次去实现网络,所以现代网络都是分层去讨论的: 理论层次:OSI七层 实际层次:TCP/IP五层
TCP/IP五层体系结构
应用层 传输层
进程to进程 ———————————————— 主机to主机 网络层 数据链路层 物理层
|