一、IP地址
在进行网络通信时,实际是网络数据传输,再具体一点就是网络主机的不同进程减,基于网络传输数据。那么这就需要知道,数据是从哪台主机来,到哪台主机去,IP地址就是用来表标识不同主机的。
IP地址主要用于标识网络主机、其它网络设备(如路由器)等的网络地址,用于定位主机的网络地址
IP地址的格式还一个32位的二进制数,通常被分割成为4个“8位二进制数”,例如:01100100.00000100.00000101.00000110。通常我们记录的时候用“点分十进制”的方式来表示。例如:100.4.5.6。
二、端口号
IP地址用来确定主机的网络地址,也就是确定是哪一台主机,而端口号则是标识主机中发送数据、接收数据的进程。简单说就是用于定位主机中的进程,因为主机中会有很多进程,但数据发送或接收时需要知道是从拿个进程发出或发给哪个进程的,所以端口号就是找到相应的应用程序,进行数据的传输。
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
两个不同的进程不能绑定同一个端口号,但是一个进程可以绑定多个端口号。
三、协议
协议是网络协议的简称。是网络通信经过的所有网络设备都必须共同遵从的一组约定、规则。比如建立连接的方式、以什么样的形式进行传输,有了这个约定才能让双方理解对方的含义。
四、协议分层
对于网络协议来说,往往要分成几个层次来进行定义。好处是降低了学习和维护成本,并且灵活地针对这里的某一层协议进行替换。
关于协议分层,有OSI七层网络模型(实际没有落地)和TCP/IP五层(四层)(实际上的情况)两种:
应用层 | 应用层 常用协议:DNS,URI,HTML,HTTP,TLS/SSL,SMTP,POP,IMAP,MIME,TELNET,SSH,FTP,SNMP,MIB,SIP,RTP,LDAP | 应用程序 |
表示层 | ||
会话层 | ||
传输层 | 传输层 常用协议:TCP,UDP,UDP-Lite,SCTP,DCCP | 操作系统 |
网络层 | 互联网层 常用协议:ARP,IP,ICMP | |
数据链路层 | 网卡层 | 设备驱动程序与网络接口 |
物理层 | (硬件) | |
OSI参考模型 | TCP/IP分层模型 |
网络分层各层之间的关系:上层协议要掉用下层协议,下层协议给上层协议提供服务。物理层:约定了网络通信中基础的硬件设备是什么样的,比如通次你用的网线,网口等设备;数据链路层:主要负责相邻两个节点之间,具体怎么进行传输;网络层:从宏观上规划出传输路径,走哪条路线比较划算;传输层:只关心起点和终点,即端到端的传输;应用层:应用程序描述了传输的数据,用户要怎样来使用。物理层属于纯硬件的,有些资料算物理层就是五层,不算物理层就是四层。
五、封装和分用
不同的协议层对数据包有不同的称谓,在传输层叫做段,在网络层叫做数据报,在链路层叫做帧,但实际中不计较这么细。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装。首部信息中包含了一些类似于首部多长,载荷多长,上层协议是什么等信息。数据封装成帧发到传输介质,到达目的主机后每层协议再剥掉对应的首部,根据首部中的“上层协议字段”将数据交给上层协议处理,称为分用。
下面为数据封装过程:
(1)应用层
假设一个应用层协议的格式,用qq发送信息的时候,假设协议中包含发送方qq号,发送时间,接收方qq号,消息内容。
123456 (发送方qq号) | 2023-03-21 20:32 (发送时间) | 654321 (接收方qq号) | 吃了吗 (消息内容) |
应用层数据具体的数据格式,咱们是不清楚的,每个应用程序都不一定一样,只有开发程序的人才知道。
所谓的应用层数据报,本质上就是一个遵守了约定格式的字符串。程序要调用操作系统IP,把这个应用层的数据交给传输层。
(2)传输层
在传输层中,就是把上述应用层数据构造成传输层的数据报。传输层最知名的协议:UDP和TCP,假设使用UDP:
UDP报头 | 应用层数据(UDP的载荷) |
UDP报头是另一个特定格式的字符串(涉及源端口和目的端口),拼接时类似字符串拼接。所谓的报头就是一个标签,通过这标签表示出当前要把这个消息怎样进行传输。
传输层就把这个UDP数据报交给网络层。
(3)网络层
最知名的协议是IP协议。该协议要给予上述数据,打包成一个IP数据报。
IP报头 | UDP报头 | 应用层数据(UDP的载荷) |
传输过程需要知道:源IP、源端口、目的IP、目的端口、协议类型。网络层数据报准备好后,还需要交给数据链路层。
(4)数据链路层
最知名的协议叫做“以太网”,基于上述数据,还要打包成一个“以太网数据帧”。
以太网帧头 | IP报头 | UDP报头 | 应用层数据 | 以太网帧层 |
这个数据报继续往下传输,交给物理层。
(5)物理层
把上述二进制的数据(一串01010)转换成电信号/光信号,此时就真正的把数据发出去了。上述过程,从应用层到物理层,层层加码,这个过程就称为封装。
下面为数据分用的过程:
(1)物理层:
网卡接收到的是光信号和电信号,是在物理层,把这个光信号转换成二进制的数据。转换回的数据其实是一个以太网的数据帧。
(2)数据链路层
把上面物理层处理的数据交给数据链路层进行解析,数据链路层需要去掉帧头和帧尾,取出中间的载荷,交给上层的网络层。报头里会有记录,这个载荷是不是一个IP数据报。
(3)网络层
IP协议针对这里进行解析,解析出IP报头,取出IP协议的载荷,把这里得到的传输层数据报,交给上层传输层。
(4)传输层
UDP进行解析,取出报头,取出载荷,再把这个载荷交给对应的应用程序。UDP报头里有一个重要的字段——“目的端口”,目的端口是一个具体的应用程序,关联在一起的。因此就可以根据这个端口来把数据交给应用程序。
(5)应用层
应用程序会针对应用层协议进行解析,显示到界面上。
上述,从下到上层层解析,这个过程成为“分用”。
六、客户端和服务器
服务端:在常见的网络数据传输场景下,把提供服务的一方进程,称为服务端,可以对外提供服务。而服务器中存在着多个服务端。
客户端:获取服务的一方进程,称为客户端。
七、请求和响应
一般来说,获取一个网络资源,涉及到两次网络数据传输:第一次,请求数据的发送;第二次,响应数据的发送。
![](https://i-blog.csdnimg.cn/blog_migrate/7f246fe4c9da34f42217ab86a50f445b.png)