目录
IP地址
端口号
网络协议
协议分层(TCP/IP五层模型)
应用层
传输层(也叫运输层)
网络层
数据链路层
物理层
A用户通过qq给B发送一个字符串所经历的过程
ip地址是一台主机的网络地址。
ip地址主要是用来标识网络主机。
如果一个主机想要和另一台主机进行网络通信,那么就需要知道对方的ip地址 。
本机与本机通信的ip:127.0.0.1(环回IP)
IP地址采用点分十进制方式表示(a.b.c.d)比如环回IP:127.0.0.1
端口号是用来标识一台主机当中的进程的。
在网络通信的过程中,进程通过绑定一个端口号来进行发送和接收网络数据。
比如我们常说的MySQL数据库的端口号3306,如果需要本地连接云端的MySQL数据库,就需要知道该云端的网络地址(ip地址)+端口号(3306)。
形象点说就是IP地址相当于是楼号,而端口号相当于是门号,你要找到几号楼哪个房间,就是这样找的,比如2号楼303。
所谓的网络协议就是网络通信经过的网络设备他们之间都必须遵守的一个规定,约定。怎么建立连接,怎么识别设备等等都需要在网络协议中约定
网络协议三要素:语法+语义+时序
语法:数据和控制信息的格式(比如班级中有很多地方的人,说的方言都听不懂,所以统一规定使用普通话)
语义:需要对发出的信息完成什么动作来响应(这个主要是说通信双方应该怎么做) 比如班级中按照规定老师布置了作业,学生就要去完成作业,学生完成了作业就是对该规定的一个响应
时序:对事件的实现顺序进行详细说明
时序定义了什么时候通信。通信时要先说什么,后说什么,以及通信的传输速度等等。简单来说就是对通信的顺序进行一个简单的规定。
上述模型越往上走越接近应用程序,越往下走越接近硬件。
应用层,表示层和会话层统称为应用层
应用层的作用就是为用户提供应用功能和负责应用程序之间的沟通
常见的应用层协议:HTTP、DNS、SMTP,FTP等等。
当数据需要进行传输的时候就会把数据向下层传递,也就是传输层。
应用层工作在操作系统的用户态,其他层都在内核态。
传输层的作用就是负责两台主机之间的数据传输。
传输层注重端到端的传输 ,常见的传输层协议:TCP、UDP等等
传输层协议是为不同主机上的进程通信提供逻辑通信功能。
比如A要发送消息给B上的qq,A需要知道B的IP地址,以及qq这个进程占用的端口号是哪个,这样才能成功发送消息。
需要注意的是发送方和接收方的协议需要一致,如果用UDP,就都用UDP,如果用TCP,就都用TCP.
网络层负责地址管理和路由器选择
网络层就相当于选择一个合适的通道,来进行数据的传递,怎么选择传输最快最好,也就是路线规划
比如我现在写了一封信,信上的字就是应用层的报文,也就是需要传递的信息,传输层就相当于邮政公司(这里约定发送方和接收方都需要接受该协议,也就是邮政快递),邮政公司送的时候需要选择合适的路线进行送达,这里的选择路线就是网络层要做的事情。
总结:传输层工作在端系统,传输层协议将来自应用层的数据传递给网络层,网络层就负责了主机与主机之间的数据传输
数据链路层负责设备之间的数据帧的传递和识别
数据链路层负责节点和节点之间的通信,节点就是数据链上的一个个节点,比如主机,路由器,交换机等等,将这些节点串起来就构成了链路
交换机是在数据链路层完成转发的
路由器是在网络层完成转发的
传输层和数据链路层:传输层是建立两个不同主机端口之间的联系,它不纠结端口之间的细分的链路是怎么传输的,这部分是数据链路层来进行负责的。
物理层是负责光/电信号的传递,比如说网线,网口等等,我们平时使用的都是相同的规格的,主要是为了方便网络通信而做出的统一。
网络分层这里是上层协议调用下层协议,下层协议给上层协议提供服务
总结:
应用层:
假设存在这样的一个应用层的协议格式:发送方的QQ号,接收方的QQ号,发送的时间,发送字符串的内容:
发送者 | 接收者 | 发送时间 | 聊天内容 |
1234567 | 7654321 | 2023-1-14 | "hello" |
应用层是以文件为单位进行传输的
传输层:
假如此处使用的是UPD协议。首先会在应用层需要传输的数据的基础上面构造出一个UDP报头
UDP报头(包含源端口和目的端口) | 1234567 | 7654321 | 2023-1-14 | "hello" |
除了UPD报头,往后的数据,也就是应用层传输来的数据,被称为"UDP载荷"。
包装好之后,会把UDP报头+UDP载荷封装成一个UDP数据段
不建议直接在程序当中指定范围<1024的端口号
因为,在(0,1023)这个范围的端口,被称为"知名端口",这一些端口号属于已经分配给了一些知名的、广泛使用的进程来使用
网络层 :
网络层比较知名的协议就是IP协议。
IP协议,会针对传输来UDP数据报,打包成一个IP数据报:针对UDP数据报,再次拼接了一个IP报头
IP报头,也是一个字符串。其中,包含的比较核心的信息就是源IP和目的IP
IP报头(包含源IP、目的IP) | UDP报头(包含源端口和目的端口) | 1234567 | 7654321 | 2023-1-14 | "hello" |
网络层是以包为单位进行数据传输到数据链路层的
数据链路层:
网络层的数据包准备好了,就需要交给数据链路层进行进一步地"打包"。
需要打包成一个"以太网数据帧"。以太网数据帧,会对网络层传输过来的数据据包进行进一步的"包装”,又多了两个部分:以太网帧头和以太网帧尾。
以太网帧头 | IP报头(包含源IP、目的IP) | UDP报头(包含源端口和目的端口) | 1234567 | 7654321 | 2023-1-14 | "hello" | 以太网帧尾 |
数据链路层是按照帧为单位进行传输的
物理层:
到了物理层,就会把数据帧转化为二进制信号(0100001....)这样,然后传输出去。
从应用层-------------》》》物理层的这一个过程称为封装
接收方,也需要把数据进行"分用"。 分用就是把打包的东西不断拆卸掉的过程。
接收方的物理层会接收到01000111......的电信号,然后交给接收方的数据链路层,然后去掉帧头、帧尾并且把数据传输到网络层,再由网络层解析IP等等的信息,去掉IP头之后,交给接收方的传输层,再由接收方的传输层解析端口信息等等,解析完毕之后,再去掉TCP/UP头,这个时候就只剩下应用数据了,因此就可以反馈给接收设备的应用层