网络编程以七层协议
目录
网络编程
网络编程(WINSOCK\LINUX)
网络编程
1.概念
网络编程从大的方面说就是对信息的发送到接收,中间传输为为物理线路的作用
百度解析:网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理、代码、开发工具、数据库、服务器架设和网页设计这5部分。
2.代码分类
1.静态代码
静态代码:服务器不解析直接发送给客户端的部分,用做布局效果,一般不用于数据库操作
静态代码分HTML,Javescript,css.
要学网络编程就先学html语言,javascript用于实现某些特效,css是样式语言,这3个语言组合起来,可以设计出美妙的网页效果。
2.动态代码
动态代码:服务器需要解析的部分,用作数据库连接操作等,
动态代码有PHP,JSP,ASP
开发工具有很多种,我推荐一种,网络3剑客,其中dw是开发代码的,fw是做图的,flash是做动画的。数据库要结合你学的动态语言来选择,asp系列的,你可以使用access,大型点使用mySQL。php和mySQL是很好的搭档。
3.网络编程语言(汇编语言和高级语言)
网络编程语言主要包括了PHP、ASP、NET、JSP
1.PHP 即Hypertext Preprocessor(超文本预处理器),它是当今Internet上最为火热的脚本语言,其语法借鉴了C、Java、PERL等语言,但只需要很少的编程知识你就能使用PHP建立一个真正交互的Web站点。它与HTML语言具有非常好的兼容性,使用者可以直接在脚本代码中加入HTML标签,或者在HTML标签中加入脚本代码从而更好地实现页面控制。PHP提供了标准的数据库接口,数据库连接方便,兼容性强;扩展性强;可以进行面向对象编程。
2.ASP 即Active Server Pages,它是微软开发的一种类似HTML(超文本标识语言)、Script(脚本)与CGI(公用网关接口)的结合体,它没有提供自己专门的编程语言,而是允许用户使用许多已有的脚本语言编写ASP的应用程序。ASP的程序编制比HTML更方便且更有灵活性。它是在Web服务器端运行,运行后再将运行结果以HTML格式传送至客户端的浏览器。ASP程序语言最大的不足就是安全性不够好。 ASP的最大好处是可以包含HTML标签,也可以直接存取数据库及使用无限扩充的ActiveX控件,因此在程序编制上要比HTML方便而且更富有灵活性。通过使用ASP的组件和对象技术,用户可以直接使用ActiveX控件,调用对象方法和属性,以简单的方式实现强大的交互功能。 但ASP技术也非完美无缺,由于它基本上是局限于微软的操作系统平台之上,主要工作环境是微软的IIS应用程序结构,又因ActiveX对象具有平台特性,所以ASP技术不能很容易地实现在跨平台Web服务器上工作。
3.JSP即Java Server Pages,它是由Sun Microsystem公司于1999年6月推出的新技术,是基于Java Servlet以及整个Java体系的Web开发技术。 JSP和ASP在技术方面有许多相似之处,不过两者来源于不同的技术规范组织,以至 ASP一般只应用于Windows NT/2000平台,而JSP则可以在85%以上的服务器上运行,而且基于JSP技术的应用程序比基于ASP的应用程序易于维护和管理,所以被许多人认为是未来最有发展前途的动态网站技术。
4.NET是ASP的升级版,也是由微软开发,但是和ASP却有天壤之别。NET的版本有1.1、2.0、3.0、3.5、4.0。是网站动态编程语言里最好用的语言,不过易学难精。NET2.0开始,NET把前台代码和后台程序分为两个文件管理,使得NET表现和逻辑相分离。NET网站开发跟软件开发差不多。NET的网站是编译执行的,效率比ASP高很多。NET在功能性、安全性和面向对象方面都做的非常优秀,是非常不错的网站编程语言。
4.网络模型
网络模型:描述网络的结构原理和工作原理
OSI参考模型:七层
Internet网络模型:四层
网络协议:指定层上进行数据交换的规则。
Internet的网络层协议:IP协议;DNS协议(辅助协议)
Internet的传输层协议:TCP协议;UDP协议。
https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B?fromModule=lemma_search-box
软件开发架构
规定了程序的请求逻辑、功能分块
1.C/S架构
Client:客户端
Server:服务端
"""
我们使用计算机下载下来的一个个app本质是各大互联网公司的客户端软件
通过这些客户端软件我们就可以体验到各个互联网公司给我们提供的服务
eg:
下载淘宝客户端 打开 体验淘宝服务端提供的购物服务
下载抖音客户端 打开 体验抖音服务端提供的视频服务
ps:一般情况下客户端与服务端交互需要互联网 但是有些不需要(因为客户端和服务端都在一台计算机上)
客户端:即将要去消费的客人
服务端:给客人提供服务的店
作为服务端必备的多个条件
1.24小时不间断提供服务
2.有固定的地址
3.能够服务多个客人(高并发)
"""
C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的

2.B/S架构
Browser:浏览器
Server:服务器/端
B/S即:Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。
"""
浏览器可以充当所有服务端的客户端
ps:B/S架构本质还是C/S架构
"""

3.两者差异
C/S架构
优势:不同的公司的客户端由不同公司独立开发,可以高度定制化客户端功能
劣势:需要下载才能使用
B/S架构
优势:不用下载直接访问
劣势:无法高度定制化,并且需要遵守很多规则
架构总结
ATM:三层架构
选课系统:三层架构
本质也属于软件开发架构的范畴
软件设计的大方向>>>:统一接口
微信小程序
支付宝小程序
网络编程前言
1.什么是网络编程
基于网络编写代码,能够实现数据的远程交互
2.学习网络编程的目的
能够开发CS架构的软件
3.网络编程的起源
最早起源于美国军事领域
想实现计算机之间数据的交互
最早的时候只能用硬盘拷贝,之后发明了网络编程
4.网络编程必备条件
是实现数据的远程交互
1.早期的滚筒电话 电话线
2.早期的大屁股电脑 网线
3.笔记本电脑、移动电话 网卡
计算机之间要想实现数据交互必须有物理链接介质(前提)
ps:实现数据的远程交互的必备基本条件:物理连接介质
计算机网络的相关专业名词
计算机之间要想实现数据交互必须要‘连接’到一起
早期:联机

以太网:局域网与交换机

1.交换机
能够将所有的接入交换机的计算机彼此互联起来
2.广播
首次查找接入同一个交换机的其他计算机,需要朝交换机里面喊它
广播:交换机与其他服务器以‘一对多’的通讯模式,网络对每一台主机发出的信号都无条件复制并转发,所以的主机都可以接收到信息(无论需不需要)。典型的广播型网络就是有线电视网,通过接收所有的频道的信号,但只将一个频道的信号还原成画面,在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
3.单播
首次被查找的计算机回应查找它的计算机,并附带自己的mac地址
4.广播风暴
接入同一台交换机的多台计算机同时发广播
5.局域网
简单理解为有单个交换机组成的网络,在局域网内可以直接使用mac地址通信
局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。
6.广域网
简单理解范围更大的局域网
7.互联网
由所有的局域网、广域网连接到一起形成的网络
8.路由器
不同的局域网计算机之间是无法直接实现数据交互的,需要路由器连接。
路由器(Router),是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。
路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以说两者实现各自功能的方式是不同的。

OSI七层协议
OSI七层协议
规定了所有的计算机在远程数据交互的时候必须经过相同的处理流程、在制造过程中必须拥有相同的功能硬件
互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层
1.osi七层协议
应用层
表示层
会话层
传输层
网络层
数据链路层
物理连接层

2.五层协议及每层常见的协议
常见的是整合之后五层
应用层
传输层
网络层
数据链路层
物理连接层

3.四层及常见物理设备
四层结构
应用层
传输层
网络层
网络接口层
""" 接收网络消息 数据由下往上传递
发送网络消息 数据由上往下传递"""

物理连接层
主要用于确保计算机之间的物理连接介质,接收数据(bytes类型、二进制)
数据链路层
1.规定了电信号的分组方式
2.以太网
规定了计算机在出厂的时候都必须有一块网卡,网卡上有一串数字
该数字相当于是计算机的身份证号码是独一无二的
该数字的特征:12位16进制数据
前六位是产商编号 后6位流水线号
该数字也称:以太网地址/MAC地址
注意:以太网地址只能在局域网里面
网络层
IP协议和IP地址
IP协议:规定网络地址的协议,它定义的地址称为IP地址,网络地址规范由32位2进制表示
IP地址:规定了所有的接入互联网的计算机都必须有一个IP地址,类似于身份证号,IP地址是动态分配,不同的场所IP是不同的
IP地址特征:
IPV4:点分十进制
0.0.0.0
255.255.255.255
ip地址一般写成,四段十进制 eg:172.168.1.1
IPV6:能够给地球上的每一粒沙分一个IP地址
IP地址可以跨局域网传输
IPV6:fe80::1af9:8e90:6767:fd15%12(首选)
IP协议的作用:
1.每一台计算机分配IP地址
2.是确定哪些地址在同一个子网络
ps:IP地址可以用来标识全世界独一无二的一台计算机
**补充一下ARP协议**
ARP协议:能够根据IP地址动态解析到一个MAC地址
谁在使用某个IP地址,我们就可以根据IP地址动态解析到使用者的MAC地址
mac地址
1.mac地址
是电脑的物理地址,是由12位16进制数数字组成,电脑在出厂就固定了,而且每块网络适配器的mac地址是唯一的,一般是不会手动去修改mac地址的,可以看成永远无法修改,如果是用户修改只是修改虚拟号,不是真实的mac地址
2.获取mac
windos+r >>>输入cmd >>> ipconfig -all
arp协议 ——查询IP地址和MAC地址的对应关系(了解)
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址。
收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。
传输层
PORT协议(端口协议)
用来标识一台计算机上面的某一个应用软件
范围:0-65535
特征:动态分配(火锅店排号等待)
端口号默认情况:
0-1024:是系统默认使用的端口号
1024-8000:常见软件的端口号
>8000:我们开发软件建议可以使用的端口号,
注意:如果我们使用8000之前的端口号,启动很多个软件,计算机随机分配的端口号会撞号,
URL协议:统一资源定位符(网址)
网址本质由IP和PORT组成的
IP+PORT:能够定位全世界独一无二的一台计算机上面的某一个应用程序
域名解析:将网址解析成IP+PORT
我们之所以不直接使用IP+PORT的原因是太难记了,所以发明了域名(网址)
IP+PORT 推荐使用冒号连接
114.55.205.139:80
实际上,是为了方便阅读,我们才将IP:PORT与字符网址对应起来,我们通过DNS服务就可以将域名转换为IP:PORT的格式,从而访问到网络那一端的程序。
传输层之TCP与UDP协议
TCP与UDP 都是用来规定通信方式的
通信的时候可以随心所欲的聊,也可以遵循一些协议符合要求的聊天
eg:
随性:文字、图片、视频等各种
遵循协议:首行空两格,尊称,用官方话
ps:不遵循上述协议也可以通信。只不过遵循了更合规合法合理
TCP与UDP是用于应用程序之间的通信。
eg:
1.一台拥有IP地址的主机可以提供很多服务:Web服务、FTP服务、SMTP服务等,可以通过1IP地址来实现。
2.IP地址与网络服务的关系是一对多的关系,实际上是通过‘IP地址+端口号’来区分不同的服务的
1.TCP协议(重要)
当应用程序想通过TCP与另外一个应用程序通信时,它会发送一个通信请求这个请求必须被送到一个确切的地址,在双方‘握手’之后,TCP将在两个应用程序之间建立一个全双工(full-duplex)
这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或者双方关闭为止。
关于TCP协议的问题
1.TCP协议也称为可靠协议(数据不容易丢失)
造成数据不容易丢失的原因不是因为有双向通道,而是因为有反馈机制,给对方发消息之后会保留一个副本,直到对方回应消息收到了才会删除,否则会在一定的时间内反复发送
2.洪水攻击
同一时间有大量的客户请求建立链接,会导致服务端一致处于SYN_RCVD状态
3.服务端如何区分客户端建立链接的请求
可以对请求做唯一的标识ip
1.1 三次握手键连接
TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK[1],并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接。[1]
TCP三次握手的过程如下:
客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
四次来回,中间是可以并为三次的
如下图

1.2四次挥手断链接
四次不能合并为三次
因为中间需要确认消息是否发完(time_wait)
建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。
1.某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
2.接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
3.一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
4.接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。
既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。
注意:
(1) “通常”是指,某些情况下,步骤1的FIN随数据一起发送,另外,步骤2和步骤3发送的分节都出自执行被动关闭那一端,有可能被合并成一个分节。
(2) 在步骤2与步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,这称为“半关闭”(half-close)。
(3) 当一个Unix进程无论自愿地(调用exit或从main函数返回)还是非自愿地(收到一个终止本进程的信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也发出一个FIN。
无论是客户还是服务器,任何一端都可以执行主动关闭。通常情况是,客户执行主动关闭,但是某些协议,例如,HTTP/1.0却由服务器执行主动关闭。
复制代码

可以简单的理解:
eg:
三次握手和四次挥手可以看作商业的合作过程
三次握手:双方需求和要求基本一致,促成合作
四次挥手:一方满意,另一方不满意,最终因为条件不统一,最终导致合作失败
2.UDP协议
UDP协议:称为数据报协议、不可靠协议
早期的qq使用的是纯生的(没有加额外的功能)UDP协议
现在的QQ自己添加了很多技术和功能
使用UDP的原因就是因为简单、快捷、直接,只要指定对方的地址就可以发消息了
当应用程序希望通过UDP与一个应用程序通信时,传输数据之前源端和终端不建立连接。
当它想传送时就简单地去抓取来自应用程序的数据,
3.TCP与UDP的对比

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快
现在Internet上流行的协议是TCP/IP协议,该协议中对低于1024的端口都有确切的定义,他们对应着Internet上一些常见的服务。这些常见的服务可以分为使用TCP端口(面向连接)和使用UDP端口(面向无连接)两种。
说到TCP和UDP,首先要明白“连接”和“无连接”的含义,他们的关系可以用一个形象地比喻来说明,就是打电话和写信。两个人如果要通话,首先要建立连接——即打电话时的拨号,等待响应后——即接听电话后,才能相互传递信息,最后还要断开连接——即挂电话。写信就比较简单了,填写好收信人的地址后将信投入邮筒,收信人就可以收到了。从这个分析可以看出,建立连接可以在需要痛心地双方建立一个传递信息的通道,在发送方发送请求连接信息接收方响应后,由于是在接受方响应后才开始传递信息,而且是在一个通道中传送,因此接受方能比较完整地收到发送方发出的信息,即信息传递的可靠性比较高。但也正因为需要建立连接,使资源开销加大(在建立连接前必须等待接受方响应,传输信息过程中必须确认信息是否传到及断开连接时发出相应的信号等),独占一个通道,在断开连接钱不能建立另一个连接,即两人在通话过程中第三方不能打入电话。而无连接是一开始就发送信息(严格说来,这是没有开始、结束的),只是一次性的传递,是先不需要接受方的响应,因而在一定程度上也无法保证信息传递的可靠性了,就像写信一样,我们只是将信寄出去,却不能保证收信人一定可以收到。
TCP是面向连接的,有比较高的可靠性, 一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等。
而UDP是面向无连接的,使用这个协议的常见服务有DNS、SNMP、QQ等。对于QQ必须另外说明一下,QQ2003以前是只使用UDP协议的,其服务器使用8000端口,侦听是否有信息传来,客户端使用4000端口,向外发送信息(这也就不难理解在一般的显IP的QQ版本中显示好友的IP地址信息中端口常为4000或其后续端口的原因了),即QQ程序既接受服务又提供服务,在以后的QQ版本中也支持使用TCP协议了。
我们可以简单的理解为:TCP可以看成打电话,双方是来回回应的;而UDP看作发短信,一方只管发,不论对方看不看。
应用层
应用层相当于是程序员自己写的应用程序,里面的协议非常的多
常见的有:HTTP、HTTPS、FTP
后续有讲解
七层模型传输数据过程
1.OSI 七层模型数据传输过程如下

2.数据包传输过程

3.IP层传输单位是IP分组,属于点到点的传输;TCP层传输单位是TCP段,属于端到端的传输

4.七层OSI

动图来源于博客园---Iron_Man~

浙公网安备 33010602011771号