网络编程 协议和网络应用程序设计模式
协议和网络应用程序设计模式
一、协议
从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。
假设,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
网络编程 协议和网络应用程序设计模式相关推荐
- 【网络编程】TCP 网络应用程序开发
[网络编程]TCP 网络应用程序开发 TCP 网络应用程序开发流程 1. TCP 网络应用程序开发流程的介绍 2. TCP 客户端程序开发流程的介绍 3. TCP 服务端程序开发流程的介绍 4. 小结 ...
- linux的基础知识——协议和网络应用程序设计模式
1.什么是协议? 协议,即规则.网络通信中的协议,即数据传输和数据解释的规则. 2.一些典型的协议 传输层:常见的有TCP/UDP协议 应用层:HTTP协议,FTP协议 网络层:IP协议,ICMP协议 ...
- Linux网络编程基础1(网络应用程序设计模式,分层模型,协议格式)
Linux网络编程基础(网络应用程序设计模式,socket编程,inet_pton,inet_ntop,服务端创建连接的过程,客户端创建连接的过程,socket函数封装) 1. 网络应用程序设计模式 ...
- 网络基础一(协议的概念,网络应用程序设计模式)
协议的概念 什么是协议? 从应用的角度出发,协议可理解为"规则",是数据传输和数据的解释的规则. 假设,A.B双方欲传输文件.规定: 第一次,传输文件名,接收方接收到文件名,应答O ...
- 网络应用程序设计模式:浅谈CS架构与BS架构
CS架构与BS架构的区别 应用程序 单机程序 网络应用程序 网络应用程序设计模式 CS架构 CS架构优缺点 BS架构 BS架构优缺点 应用程序 应用程序是指为了完成特定任务而被开发运行于操作系统之上的 ...
- Socket网络编程--小小网盘程序(5)
http://www.cnblogs.com/wunaozai/p/3893469.html 各位好呀!这一小节应该就是这个小小网盘程序的最后一小节了,这一节将实现最后的三个功能,即列出用户在服务器中 ...
- Linux网络编程—Day11 高性能服务器程序框架
按照服务器程序的一般原理,讲服务器结构为如下三个主要模块: I/O处理单元 逻辑单元 存储单元 服务器模型 第一种:C/S模型 TCP/IP协议在设计和实现上并没有客户端和服务器的概念,在通信 过程中 ...
- 嵌入式linux网络编程之——5年程序员给你深度讲解socket套接字
以下内容转载自 https://www.toutiao.com/i6827837032622981636/ 本文主要给大家分享网络七层概念之网络编程socket,前边的章节已经给大家讲述了链路层.物理 ...
- Java笔记整理七(网络编程,TCP通信程序,函数式接口,方法引用)
网络编程入门 1.软件结构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构.常见程序有QQ.迅雷等软件. B/S结构 :全称为Browser/Server结构,是指浏览器和 ...
最新文章
- 硬盘满了 mysql启不来_MySQL数据库之磁盘已满造成的mysql启动失败问题分享
- js获取iframe中的元素_在 HTML 中包含资源的新思路
- 全球十大AI领军人物
- 关于雅可比迭代的Python实现
- wstring与string相互转换
- 单链表之头插法的理解!
- C++使用链表实现queue之二(附完整源码)
- ActiveMQ入门-ActiveMQ环境搭建
- 【glibc源码分析】--strcpy.c 字符串复制
- python函数与方法的区别_python中函数和方法有哪些区别
- (转)全文检索技术学习(三)——Lucene支持中文分词
- 微课|《Python编程基础与案例集锦(中学版)》第5章例题讲解(1)
- Spring 三层架构
- ig 焊接机器人_发那科机器人焊接应用的IO配置(总线型)
- C++开发的应用方向有哪些?
- 设计模式-------建造者模式(生成器模式)
- activiti 工作流_JAVA-工作流引擎-activiti-Tasks-userTask动态绑定用户或用户组
- UAT测试和SIT测试
- 非常赞的文章!告诉你一个你知其然却不知其所以然的硅谷
- Nuxt.js mini聊天室开发 (mini-chatroom)
热门文章
- Xposed 与您的 ROM 似乎存在已知的问题 (Resources subclass)
- YouTube是如何吸粉
- idea vim 配置
- gdp 栅格数据_AE 栅格数据使用总结
- Unity航海寻宝计划-插件资源篇-战斗坦克套件项目
- vue 前端需将用户所选的素材(图片)压缩到zip包中形成单个文件提供下载(附加单张图片/素材直接下载)
- Python + Go-cqhttp + Pyqt5 —— 搭建QQ机器人
- can总线不加末端电阻_小电阻之大作用——CAN终端电阻
- 阿里云云计算ACP学习(五)---云数据库RDS
- 大话设计模式笔记(二)——商品促销 策略模式