IP地址
用来标识网络上设备的位置
端口号
标识一个具体的应用程序(进程)
网络协议
网络协议是通信双方的一种"约定"
发送方按照协议发送数据,接收方按照协议解析数据.
就好比两个人进行对话,如果"协议"是用中文,那么双方就要用中文对话,如果"协议"是用英文,那么双方就要用英文对话.
在网络通信中使用的协议不是将其整合成为一个协议,而是分成多层协议,让不同的设备交流时使用不同的协议.
协议分层
协议的分层风格有两种,一种是OSI七层网络模型(理论上存在,现实不存在),一种是TCP/IP 五层(四层)网络模型(实际使用情况)
OSI分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP/IP分为:应用层、传输层、网络层、数据链路层、物理层
相当于把OSI的应用层、表示层、会话层整合成为一个层,其他都相同
物理层:约定了网络通信中基础的硬件设备
数据链路层:主要负责相邻两个节点如何传输
网络层:主要负责路径的规划
传输层:负责端与端之间的传输
应用层:描述了传输的数据用户要如何使用
举个例子:我买了一个快递,
物理层 就是约定好了商品、地址等信息;
数据链路层 就是快递公司选择的出货方式,比如:货车、火车...
网络层 就是运输时选择的行走路线,比如:上海->天津->北京 或者 上海->杭州->北京...
传输层 就是运输过程
应用层 就是该商品该如何使用
(前面写的四层和五层就是是否算上物理层,因为物理层一般不是程序员该考虑的范围)
上面这些层(以应用层为首)由上往下是上层协议要调用下层协议,下层协议给上层协议提供服务
在实际应用中,如果我使用微信给别人发了一条信息,此时应用程序就会将该消息打包成一个应用层数据报
然后,程序调用操作系统的api,将应用层的数据传给传输层
在传输层中就需要将传过来的数据打包成传输层数据报
传输层的协议中最出名的就是UDP和TCP,假如此处使用UDP,那么就会在应用层数据的基础上加上一个UDP报头
在网络层,最知名的是IP协议了,同样的,要在传输层基础上打包成一个IP数据报
数据链路层最出名的就是"以太网",要将网络层数据报打包成一个以太网数据帧
接下来就由物理层将以太网数据帧的数据(二进制数据,一串0101...)转化为电信号/光信号,然后就将信息传输出去了
上述过程,从应用层到物理层之间的"层层加码",这个过程成为"封装"(不是面向对象的封装)
此时接收方的物理层接收到信号,会将这些信号转化为01数据,转换过后接收上面的以太网数据帧
然后将此数据交给数据链路层进行解析
数据链路层需要对其去掉帧头帧尾,取出中间的载荷,然后交给网络层进行分析
网络层此时得到的是一份IP数据报
它再对其进行取出IP报头的工作(IP报头中会记录载荷是UDP还是TCP),得到了一份传输层数据报,然后会将其传送到传输层
此时传输层对UDP进行解析,取出载荷,再将载荷交给应用程序
在UDP报头中有一个重要的字段:目的端口,目的端口和是一个具体的应用程序相关的,因此可以根据这个端口将数据传送给应用程序
最后应用层会对应用层数据报进行解析,此时信息就在接收方的微信上面了
上述接收方的"解码"的过程,称为"分用"
注意:上面的层和层直接不可以跳过,只有相邻的两层之间才可以进行交互(不能跨层交互)
客户端
收获服务的一方进程称为客户端,也是用户使用的进程
服务器
提供服务的一方进程,称为服务器,可以对外进行服务
请求
由客户端向服务器发出去的请求
响应
有服务器给客户端发回来的响应