1、模型
什么是模型,这是个抽象概念。它给我们定义了某种事物的轮廓。在实现某个事物时可以参考该事物的模型。比如说:设计图、工程蓝图。在计算机中,为了让计算机能够通信,定义了一个模型----- OSI
七层模型。知道有这么个东西就行了,这不是重点。
1-1、OSI七层模型
Open System Interconnection
,适用于所有的网络。
看看这七层分别是什么:
- 应用层(Application) 提供网络与用户应用软件之间的接口服务
- 表示层(Presentation) 提供格式化的表示和转换数据服务,如加密和压缩
- 会话层(Session) 提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制
- 传输层(Transimission) 提供建立、维护和取消传输连接功能,负责可靠地传输数据(PC)
- 网络层(Network) 处理网络间路由,确保数据及时传送(路由器)
- 数据链路层(DataLink) 负责无错传输数据,确认帧、发错重传等(交换机)
- 物理层(Physics) 提供机械、电气、功能和过程特性(网卡、网线、双绞线、同轴电缆、中继器)
看看上面这一坨,这么多,怎么记,很简单。一句话:物 链 网 传 会 表 应。
来,先读它6遍,下班了,在读3遍,睡觉前,在看一眼,第二天上班前再看一眼,OK,你绝对记住了。我就是这样记住的。
1-2、TCP/IP参考模型
为啥又来了个模型,TCP/IP
是OSI
七层模型的一种实现,只不过它没有完全按照七层模型去实现,这很正常。 来看看这5层:
- 应用层
- 传输层
- 网络层
- 数据链路层
- 物理层
记住了OSI
七层模型,这个都不用记。
2、简介各层作用
应用层最常见的就是http
协议了,当然还有ftp
、smtp
等等。这一层的作用就是接受用户(也就是程序员)的原始数据,把各式各样的数据如字母、数字、汉字、图片等转换成二进制,然后按照某个协议,将数据包装起来,然后扔给下一层。
2-1、传输层
传输层的作用就是提供了一种端到端的链接,可以将收发数据,并且保证数据的完整性和顺序性。
传输层的代表协议就是tcp
了,tcp
有以下几个功能:
- 将数据进行分段打包传输
- 对每个数据包编号控制顺序
- 运输中丢失、重发和丢弃处理
- 流量控制避免拥塞
2-2、网络层
网络层位于传输层和网络接口层之间,用于把数据从源主机经过若干个中间节点传送到目标主机,并向传输层提供最基础的数据传输服务,它要提供路由和选址的工作。
这一层会涉及到几个概念,我们来看一下:
选址:交换机是靠MAC来寻址的,而因为MAC地址是无层次的,所以要靠IP地址来确认计算机的位置,这就是选址
路由:在能够选择的多条道路之间选择一条最短的路径就是路由的工作
IP:在网络中,每台计算机都有一个唯一的地址,方便别人找到它,这个地址称为IP地址。
2-3、数据链路层
数据链路层们于物理层和互联网层之间,用来向网络层提供数据,就是把源计算机网络层传过来的信息传递给目标主机。
MAC地址:
- 在通信过程中是用内置在网卡内的地址来标识计算机身份的
- 每个网卡都有一个全球唯一的地址来标识自己,不会重复
- MAC地址48位的二进制组成,通常分为6段,用16进制表示
2-4、物理层
物理层计算机在传递数据的时候传递的都是0和1的数字,而物理层关心的是用什么信号来表示0和1,是否可以双向通信,最初的连接如何建立以及完成连接如何终止,物理层是为数据传输提供可靠的环境。
物理层的主要作用是:
- 为数据端设备提供传送数据的通路
- 传输数据
- 激活物理连接,在连接的设备之间连接起来形成通路
- 传输数据,关心如何打包数据和控制传输速度
- 关闭物理连接
3、三次握手、四次挥手
来看看这三次握手分别是什么:
- 第一次握手主机A通过一个标识为SYN标识位的数据段发送给主机B请求连接,通过该数据段告诉主机B希望建立连接,需要B应答,并告诉主机B传输的起始序列号
- 第二次握手是主机B用一个确认应答ACK和同步序列号SYNC标志位的数据段来响应主机A,一是发送ACK告诉主机A收到了数据段,二是通知主机A从哪个序列号做标记。
- 第三次握手是主机A确认收到了主机B的数据段并可以开始传输实际数据。
上张图看看:
仔细看看图就明白了,始终想着,我要和对方建立连接,必须要做到,第一,对方能收到我的消息,第二,我能收到对方的消息。就像打电话一样,很少有人电话号码刚拨打出去,就开始叨叨的说话了。
再来看看四次挥手是什么:
- 主机A发送FIN控制位发出断开连接的请求
- 主机B进行响应,确认收到断开连接请求 -主机B提出反方向的关闭要求
- 主机A确认收到的主机B的关闭连接请求
看看图:
4、其他
4-1、不同层中的称谓:
- 数据帧(Frame):是一种信息单位,它的起始点和目的点都是数据链路层。
- 数据包(Packet):也是一种信息单位,它的起始和目的地是网络层。
- 段(Segment):通常是指起始点和目的地都是传输层的信息单元。
- 消息(message):是指起始点和目的地都在网络层以上(经常在应用层)的信息单元。
4-2、问与答
1、问:为什么需要三次握手?
答:确保双方收发都是正常的
2、问:为什么需要四次挥手?
答: 双方数据发送完毕,都认为可以断开
3、问:为什么需要等待?
答:A向B发的FIN可能丢失
4、问:为什么握手是三次,但挥手却是四次?
答:当Server端收到FIN报文时,很可能并不会立即关闭SOCKET