协议和网络应用程序设计模式
一、协议
从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。
假设,A、B双方欲传输文件。规定:
第一次,传输文件名,接收方接收到文件名,应答OK给传输方;
第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK;
第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。
由此,无论A、B之间传递何种文件,都是通过三次数据传输来完成。A、B之间形成了一个最简单的数据传输规则。双方都按此规则发送、接收数据。A、B之间达成的这个相互遵守的规则即为协议。
这种仅在A、B之间被遵守的协议称之为原始协议。当此协议被更多的人采用,不断的增加、改进、维护、完善。最终形成一个稳定的、完整的文件传输协议,被广泛应用于各种文件传输过程中。该协议就成为一个标准协议。最早的ftp协议就是由此衍生而来。
TCP协议注重数据的传输。http协议着重于数据的解释。
二、典型协议
层次 | 常见协议 |
---|---|
传输层 | 常见协议有TCP/UDP协议 |
应用层 | 常见的协议有HTTP协议,FTP协议 |
网络层 | 常见协议有IP协议、ICMP协议、IGMP协议 |
网络接口层 | 常见协议有ARP协议、RARP协议 |
TCP传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
UDP用户数据报协议(User Datagram Protocol)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
HTTP超文本传输协议(Hyper Text Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
FTP文件传输协议(File Transfer Protocol)
IP协议是因特网互联协议(Internet Protocol)
ICMP协议是Internet控制报文协议(Internet Control Message Protocol)它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
IGMP协议是 Internet 组管理协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。
ARP协议是正向地址解析协议(Address Resolution Protocol),通过已知的
IP,寻找对应主机的MAC地址。
RARP是反向地址转换协议,通过MAC地址确定IP地址。
三、网络应用程序设计模式
C/S模式
传统的网络应用设计模式,客户机(client)/服务器(server)模式。需要在通讯两端各自部署客户机和服务器来完成数据通信。
优点:
协议选用灵活、缓存数据、
缺点:
存在安全风险、开发工作量大
B/S模式
浏览器(browser)/服务器(server)模式。只需在一端部署服务器,而另外一端使用每台PC都默认配置的浏览器即可完成数据的传输。
优点:
安全、开发工作量节省约1/3、跨平台
缺点:
协议选择不灵活(要支持所选协议全部内容)、小型(缓存数据小)
三、分层模型
OSI模型:物、数、网、传、会、表、应。
- 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
- 数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。如:串口通信中使用到的115200、8、N、1
- 网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
- 传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
- 会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。
- 表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。
- 应用层:是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。
TCP/IP四层模型
应用层,传输层,网络层,网络接口层(链路层)
四、协议格式
4.1 数据包基本格式
数据包-应用层-传输层-网络层-链路层
以太网首部 | IP首部 | TCP首部 | 应用数据 | 以太网尾部 |
---|---|---|---|---|
14B | 20B | 20B | (46-40)~(1500-40)B | 4B |
4.2 以太网帧格式
目的mac地址 | 源mac地址 | 类型 | 数据 | CRC |
---|---|---|---|---|
6B | 6B | 2B | 46~1500B | 4B |
前14字节为以太网首部,后4字节为以太网尾部
0800:IP数据报
0806:ARP请求/应答
8035:RARP请求/应答
4.3 arp数据包格式 ----arp攻击
目的mac地址 | 源mac地址 | 类型 | 应用数据 | 发送端mac | 发送端IP | 接收端mac | 接收端IP |
---|
4.4 IP段格式 — IP 32
4位版本 | 4位首部长度 | 8位服务类型(TOS) | 16位总长度(字节数) |
---|---|---|---|
16位 | 标识 | 符 | 3位标志 |
。。。。。。 | |||
32位源mac | |||
32位目的mac | |||
数据 |
ipv4: 192.168.18.1
ipv6: fe80::d6d7:60d3:3c61:c43d%6
4.5 TCP/UDP — port 16 — 65535
UDP数据报格式:
16位源端口号 | 16位目的端口号 |
---|---|
16位UDP长度 | 16位UDP检验和 |
数据(如果有) |
TCP数据报格式:
16位源端口号 | 16位目的端口号 |
---|---|
32位序号 | |
32位确认序号 | |
4位首部长度 | 保留6位 |
16位检验和 | 16位紧急指针 |
选项 | |
数据 |
五、NAT映射(能复述)
路由器具备的是公网ip。
192.168这种IP一般都是局域网IP,一般都不是公网IP;
路由器中一般还有一个NAT映射表;路由器本身IP是公网IP,像123.24.56.78
假设从北京发数据的机器IP是192.168.1.35,而上海的机器也是192.168.1.35,
192.168.1.35:8000 <---->
123.24.56.78:10000
192.168.1.15:8000 <---->
123.24.56.78:10001
192.168.1.14:8000 <---->
123.24.56.78:10002
一个路由器可以映射到多个终端电脑,这些局域网电脑对应各自的IP发出来的数据都经过NAT映射到这台路由器,只是端口都不一样。
六、打洞机制
我们假设两个扣扣A,B,他们通信需要通过腾讯的服务器。也就是A发送消息给B的话,需要通过腾讯服务器进行一次转发,才到B那里。但像视频通话这要实时性要求比较高的通信,再用这种方式就不能保证他们通信的实时性,如果能想一个办法让他们直接通信,这样实时性就会高很多。但是我们所知的路由器是有一个保护机制的(对于陌生的IP第一次发送过来的数据包,会进行屏蔽或丢弃,主要是为了防止网络的恶意攻击),A跟B想进行通信的话所携带数据包的IP就必须是熟悉的,所以说这个时候就需要在两个路由器之间打一个洞,而这件事情上腾讯就参与进来了。
简单来说在我们登入扣扣的时候,就会访问腾讯服务器,而腾讯服务器也会回一个数据包,这个数据包会携带腾讯服务器公网的IP,相对于来说服务器的公网IP在A、B那里都是熟悉的IP(就是为了防止陌生IP屏蔽),而服务器借助公网IP帮助A、B完成打洞(打洞就是实现一种通路),当它把这个洞打好以后A、B就可以实时通信。打洞是由服务器来完成的,最终的目的就是为了提高数据传输的效率。
七、套接字
- 成对出现
- bind 绑定IP和端口号port
- 一个fd,两个buf