Linux网络编程基础(网络应用程序设计模式,socket编程,inet_pton,inet_ntop,服务端创建连接的过程,客户端创建连接的过程,socket函数封装)
1. 网络应用程序设计模式
1. C/S - client/server(客户端/服务端)
传统的网络应用设计模式,客户机(client)/服务器(server)模式。需要在通讯两端各自部署客户机和服务器来完成数据通信。
优点: 1. 协议选用灵活 2. 可以缓存数据
缺点: 1. 对用户安全构成威胁 2. 开发工作量大, 调试困难
2. B/S - browser/server(浏览器/服务端)
浏览器()/服务器(server)模式。只需在一端部署服务器,而另外一端使用每台PC都默认配置的浏览器即可完成数据的传输。
优点: 跨平台
缺点: 只能使用http
2. 分层模型
2.1 七层模型 - OSI
物 – 双绞线, 光纤
数 – 数据的传输和错误检测
网 – 为数据包选择路由
传 – 提供端对端的接口 tcp/udp
会 – 解除或建立与别的节点的联系
表 – 数据格式化,代码转换,数据加密
应 – 文件传输,电子邮件,文件服务,虚拟终端
物理层:
主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
数据链路层:
定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。如:串口通信中使用到的115200、8、N、1
网络层:
在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
传输层:
定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
会话层:
通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。
表示层:
可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。
应用层:
是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。
2.2 TCP/IP 四层模型
网络接口层 网络层(IP层) 传输层 应用层
与七层模型的对应关系:
3. 协议
3.1 协议的概念
从应用的角度出发,协议可理解为“规则”——数据传输和数据解释的规则
原始协议 ------>(改进、完善)------> 标准协议
典型协议:
传输层 常见协议有TCP/UDP协议。
TCP
传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
UDP
用户数据报协议(User Datagram Protocol)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
应用层 常见的协议有HTTP协议,FTP协议。
HTTP
超文本传输协议(Hyper Text Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
FTP
文件传输协议(File Transfer Protocol)
网络层 常见协议有IP协议、ICMP协议、IGMP协议。
IP
协议是因特网互联协议(Internet Protocol)
ICMP
协议是Internet控制报文协议(Internet Control Message Protocol)它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
IGMP
协议是 Internet 组管理协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。
网络接口层 常见协议有ARP协议、RARP协议。
ARP
协议是正向地址解析协议(Address Resolution Protocol),通过已知的IP,寻找对应主机的MAC地址。
RARP
是反向地址转换协议,通过MAC地址确定IP地址。
3.2 协议格式
协议其实就是数据包的封装。
协议格式的建立本质上是一种对数据包封装的思想。
最初的ftp工作原理如上图,A主机发送文件名给B主机,B主机接收到文件名之后返回给A确认的信号,之后A主机发送文件大小信息给B主机,B主机接收到信息之后又返回给A主机…这种工作模式效率比较低,而且如果丢失了其中任何一个步骤,需要重新从头再来,后来人们就采用了如下协议,也就是数据包的格式:
A主机发送数据包给B,B根据协议规定解析数据包,这样就省去了多次发送和多次接受的过程,提高了通讯的效率。
类似的协议格式,还有很多,下面列举五种:
3.2.1 以太网帧格式 – 借助mac地址完成数据报传递
arp数据报 – 根据IP获取mac地址
3.2.2 IP段格式
4位版本: ipv4 ipv6
8位生存时间(TTL): 最多能经过多少跳
32位源IP地址: 数据发送端地址
32位目的IP地址: 数据接收端地址
3.2.3 UDP数据包格式
16位源端口:
16位目的端口:
3.2.4 TCP数据报格式
16位源端口
16位目的端口
32位序号
32位确认序号
6个标志位
16位滑动窗口
存储空间:
4. 数据的发送和接收
跟2中分层模型中的图一样
如果我们用QQ发送hello给另外的人,首先腾讯开发的QQ软件在应用层上对我们发送的“hello”数据打个包(加上首部封装成数据包)传送给传输层,传输层再打包发送给网络层,网络层再打包发送给数据链路层,数据链路层传送到目的之后开始逐层解包,最后“hello”到达目的。
5. TCP/UDP简要
tcp
, udp
是传输层协议
tcp
: 面向连接的安全的流式传输协议
连接的时候, 进行三次握手
数据发送的时候, 会进行数据确认
数据丢失之后, 会进行数据重传
tcp连接的时候详解:
TCP三次握手和四次挥手详解
udp
: 面向无连接的不安全的报式传输
连接的时候不会握手
数据发送出去 之后就不管了