OSI网络七层模型
分成七层的目的就是为了让每一层的开发人员或者说系统设计硬件也好软件也好不需要去关心整个网络层次
各层的主要功能
物理层:物理设备之间如何传递数据,比较原始的数据电信号或者光信号怎么在电线或者光纤进行通信。
数据链路层:通过检验、确认和反馈重发等手段,形成稳定的数据链路。
物理层和数据链路层是通过软硬结合地解决两个端点间的通信,而网络是多节点形成的,网络层提供了互联网多节点之间数据传输的逻辑链路,通过IP协议定位到具体的数据目的地,从而通过网络层的技术,把一个节点的数据准确传输到另一个节点。
低三层的目的是为了让我们屏蔽底层网络的复杂性,我们作为一个开发人员是不需要过多的关注低三层的。
传输层:提供可靠的端口到端口的数据传输服务(TCP/UDP协议)
一个IP可以定位到一个具体的机器,但没法提供到定位具体的端口,传输层保证了跨进程跨机器的数据传输,TCP/UDP协议就是为了对具体传输层的定义,了解具体的传输层对开发网络应用是很有帮助的。
会话层:负责建立、管理和终止进程之间的会话和数据交换。
表示层:负责数据格式转换、数据加密与解密、压缩与解压缩等。
应用层:为用户的应用进程提供了网络服务。
一般我们在开发的过程中把高三层都整个看为一个应用层。http服务器就是实现了这高三层的功能。
传输控制协议TCP
TCP握手机制
三次握手
所谓的TCP三次握手建立连接,本质上来说不是为了打通网络关系,而是说在发送数据之前,在传输数据之前,最大限制的确保检测网络是否通畅。
第一次握手:客户端向服务端发送一条信息问你可以建立连接吗。
第二次握手:服务器端响应客户端的询问回答我可以建立连接。
第三次握手:客户端和服务端都认为两方的网络很好没有问题可以发送数据了。
四次挥手
挥手就是断开连接的流程,我们不能随随便便的断开,可能导致数据传输没有结束,你就中断了,这个时候我们网络会报错,这个时候我们的传输就不对了。
第一次:客户端发送一个请求说我已经准备结束了,服务器收到信息后把该通信标志为半关闭的状态。
第二次:服务端发送一条信息说可以啊我能够释放,但是我还有一些善后事项,客户端标志为等待释放。
第三次:过一段时间服务端解决完后向服务器发一条信息明确表示可以关闭了。
第四次:客户端收到该消息后响应服务器说我已经收到该消息了你关闭吧,服务器收到回应后关闭连接。
这个时候客户端是延迟关闭,发完消息后过一段时间后自己关闭连接。
连接的目的是为了让数据传输更加的可靠,而不是说网络不通,是一些逻辑上的校验。
用户数据报协议UDP
UDP和TCP比较
TCP | UDP |
---|---|
面向连接 | 无连接 |
提供可靠性保证 | 不可靠 |
慢 | 快 |
资源占用多 | 资源占用少 |
Socket编程
Internet中应用最广泛的网络应用编程接口,实现与3种底层协议接口:
数据报类型套接字SOCK_DGRAM(面向UDP接口)
流式套接字SOCK_STREAM(面向TCP接口)
原始套接字SOCK_RAW(面向网络层协议接口IP、ICMP等)
主要socket API及其调用过程
创建套接字 ---> 端点绑定 ---> 发送数据 ---> 接受数据 ---> 释放套接字
Socket API 函数定义
listen()
、accept()
函数只能用于服务器端;
connect()
函数只能用于客户端;
socket()
、bind()
、send()
、recv()
、sendto()
、recvfrom()
、close()