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
特殊IP
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开
发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进
程来接收这个数据呢?这就需要端口号
来标识。
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简
单说:端口号用于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数
据。
两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
一个进程启动后,系统会随机分配一个端口(启动端口)
程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。
进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能
绑定同一个端口号
有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制
0/1数据来传输,如何告诉对方发送的数据是什么样的呢?
网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如
发送一个文本字符串“你好!”:如何标识发送的数据是文本类型,及文本的编码格式呢?
基于网络数据传输,需要使用协议来规定双方的数据格式。
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从
的一组约定、规则。如怎么样建立连接、怎么样互相识别等。**只有遵守这个约定,计算机之间才能相互
通信交流。**通常由三要素组成:
协议最终体现为在网络上传输的数据包的格式
计算机之间的传输媒介是光信号和电信号。通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。
计算机生产厂商有很多;
计算机操作系统,也有很多;
计算机网络硬件设备,还是有很多;
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是 网络协议
系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使用的应用层协议,如:
22端口:预留给SSH服务器绑定SSH协议
21端口:预留给FTP服务器绑定FTP协议
23端口:预留给Telnet服务器绑定Telnet协议
80端口:预留给HTTP服务器绑定HTTP协议
443端口:预留给HTTPS服务器绑定HTTPS协议
在TCP/IP协议中,用五元组来标识一个网络通信:
对于网络协议来说,往往分成几个层次进行定义。
为什么需要网络协议的分层?
分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类使用方,使用服务):
对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。
这样能更好的扩展和维护
OSI(Open Systems Interconnection)是一种网络通信协议体系结构,将网络通信过程分为七个不同的层次,称为OSI七层模型。每个层次都负责特定的功能和任务,可以理解为一个分层的网络通信参考模型。
以下是OSI七层模型的层次及其功能:
物理层(Physical Layer):负责传输原始比特流,包括物理介质、电气信号等。
数据链路层(Data Link Layer):提供可靠的点对点数据传输,将原始比特流划分为数据帧,并处理错误检测和纠正。
网络层(Network Layer):负责在网络中寻址和路径选择,将数据包从源主机传送到目标主机,实现逻辑上的端到端通信。
传输层(Transport Layer):提供端到端的可靠数据传输,包括分段、流量控制、拥塞控制等。
会话层(Session Layer):管理通信会话的建立、维护和结束,提供会话的控制和同步。
表示层(Presentation Layer):处理数据的表示和转换,确保不同系统之间的数据格式兼容。
应用层(Application Layer):提供特定应用程序的服务,并允许用户访问网络,例如电子邮件、文件传输等。
OSI七层模型为不同的网络设备和协议提供了一个统一的参考框架,使不同的系统和设备能够进行互联和通信。每个层次负责特定的功能,通过逐层交互和协作,实现端到端的数据传输和通信。这种分层结构使得系统更加灵活、可扩展和易于管理。
OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。
实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层(或四层)模型来
实现。
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
- 应用层:负责处理特定的应用程序,如HTTP(Web浏览器和Web服务器之间的通信协议)或SMTP(用于电子邮件传输的协议)。
- 传输层:负责在源端和目的端之间传输数据,包括TCP(提供面向连接的、可靠的字节流传输)和UDP(无连接的、不可靠的数据包传输)。
- 网络层:负责将数据包从源地址发送到目的地址,包括IP(用于将数据包从一台计算机发送到另一台计算机4的协议)和其他一些协议,如ICMP(用于报告网络错误和其他信息的协议)和ARP(用于在网络中查找计算机的物理地址的协议)。
- 数据链路层:负责在相邻节点之间传输数据,包括以太网和其他一些协议,如ARP(用于将IP地址解析为物理地址)和RARP(用于将物理地址解析为IP地址)。
- 物理层:负责实际的数据传输,包括电缆连线连接器和物理媒介等。
对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四
层;
对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;
对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
对于集线器,它只实现了物理层;
注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两
层)、三层路由器(工作在TCP/IP五层模型的下三层)。
随着现在网络设备技术的不断发展,也出现了很多3层或4层交换机,4层路由器。我们以下说的网络设
备都是传统意义上的交换机和路由器。
网络数据传输时,经过不同的网络节点(主机、路由器)时,网络分层需要对应。
以下为同一个网段内的两台主机进行文件传输:
以下为跨网段的主机的文件传输:数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由
器
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装 (Encapsulation)。
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中 的 “上层协议字段” 将数据交给对应的上层协议处理
数据分用