网络编程
软件开发架构
1.C/S架构
C:Client 客户端
S:Server 服务端
客户端指代的是手机端的APP和电脑上的各种软件,我们可以通过这些软件来进行各种各样的操作,聊天、看电影、玩游戏、购物等,但是这些操作是需要有数据来支撑的,所以我们手机电脑上的软件只是一个客户端,数据支撑位于网络另一端的服务器上,也就是服务端。
作为服务端需要必备的几个条件:
1.能够全天候不间断运行
2.有一个固定的访问地址
3.可以同时为多人提供服务
2.B/S架构
B:Browser 浏览器
S:Server 服务端
这是基于浏览器来访问服务端,用浏览器充当客户端,就类似网页版的百度淘宝等
两者差别
C/S架构
不同的客户端由不同的公司独立开发,客户端功能高度定制化,但是客户顿需要下载才能使用
B/S架构
不用下载就可以直接访问,但是需要遵守浏览器的很多规则无法高度定制化
网络编程前戏
1.什么是网络编程
基于网络编写代码,能够实现数据的远程交互
2.学习网络编程的目的
能够开发出C/S架构得软件
3.网络编程的必备条件
数据的远程交互
OSI七层协议
简介
应用层
表示层
会话层
传输层
网络层
数据链路层
物理连接层
这七层就是OSI七层协议,但是我们常见的是整合之后的四层或五层
应用层
传输层
网络层
数据链路层
物理连接层
# 接受网络消息,数据从下往上传;发送网络消息,数据从上往下传
OSI七层协议规定了所有的计算机在进行远程数据交互的时候必须经过相同的处理流程,在制造过程中必须拥有相同的功能硬件
物理链路层
用于确保计算机之间的物理连接介质,接收数据
数据链路层
1.规定了电信号的分组方式
2.以太网协议
规定了计算机在出场的时候都必须有一块网卡,网卡上有一串数字,该数字就相当于计算机在网络中的唯一标识,就像人的身份证号一样
该数字的特征是12位16进制数据,前六位位厂商编号,后六位为流水线号
该数字也称为以太网地址/MAC地址
网络层
IP协议:
规定了所有接入互联网的计算机都必须有一个IP地址
MAC地址是唯一的,不可修改的
IP地址是动态分配的,同一台机器不同地点不同场所下它的IP地址不同
IP地址特征:
IPV4:点分十进制 0.0.0.0 —— 255.255.255.255
IPV6:冒分十六进制,格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16b,以十六进制表示,其地址池数量号称可以为地球上每一粒沙子都分配一个IP地址
传输层
PORT协议,也称端口协议
用来标识计算机上的某一个应用程序
范围:0 - 65535
特征:动态分配 0-1024 系统默认要用的 1024-8000 常见的软件端口号
URL:统一资源定位符(网址)
本质上是由IP和PORT组成的
IP+PORT:可以定位全世界唯一的一台计算机上面的某个应用程序
域名解析:将网址解析成IP+PORT
IP+PORT实际使用冒号链接 IP:PORT
我们访问百度网站通常都是实用网址访问,前面也说了网址实际是由IP和PORT组成的,那么我们当然可以通过IP+PORT来访问百度,只是这样太难记了,所以才有了域名
网络相关的专业名词
1.交换机
能够将所有接入交换机的计算机彼此互联起来
2.广播
首次查找接入同一个交换机的其它计算机,需要向交换机发送一个请求,该交换机内的所有计算机都能接收到这一请求
3.单播
首次被查找的计算机回应查找它的计算机并附带自己的MAC地址
4.广播风暴
接入同一台交换机的多台计算机同时发广播
5.局域网
可以简单理解为一台交换机下面的所有计算机组成的网络
在局域网中可以直接使用MAC地址通信
6.广域网
就是范围更大的局域网,多台交换机组成的网络
7.互联网
所有的局域网、广域网在一起组成的恶网络
8.路由器
不同的局域网内的计算机是无法直接实现数据交互的,需要使用路由器连接
TCP与UDP协议
TCP与UDP都是用来规定通信方式的
1.TCP协议
1.三次握手建链接(见图一)
客户端各个状态:
CLOSED状态:为关闭状态
SYN_SENT状态:为请求连接状态, 当你要访问其它的计算机的服务时首先要发个同步信号给该端口,此时状态 为SYN_SENT,如果连接成功了就变为ESTABLISHED,此时SYN_SENT状态非常短暂。
ESTABLISHED状态:连接成功
服务端的各个状态:
LISTENING状态:监听状态, State显示是LISTENING时表示处于侦听状态,就是说该端口是开放的,等待连 接,但还没有被连接。就像你房子的门已经敞开的,但还没有人进来。
SYN-RCVD状态:收到和发送一个连接请求后等待对方对连接请求的确认。
ESTABLISHED状态:连接成功
TCP协议也称之为可靠协议(数据不容易丢失)
TCP可靠不是因为有双通道,而是因为有反馈机制,给对方发送消息之后会保留一个副本,对方反馈消息收 到了删除副本,否则会在一定时间内一直发送
洪水攻击
同一时间有大量客户请求建立连接,导致服务器端一直处于SYN_RCVD状态
服务端如何区分客户端建立连接的请求
对请求做唯一标识
2.四次挥手断链接(见图二)
第一次挥手:
客户端向服务器发送一个 FIN 数据包(FIN = 1,seq = u)主动断开连接,报文中会指定一个序列号,告诉 服务器:我要跟你断开连接了,不会再给你发数据了;
客户端此时还是可以接收数据的,如果一直没有收到被动连接方的确认包,则可以重新发送这个包,此时客户端 处于 FIN_WAIT1 状态
第二次挥手:
服务器收到 FIN 数据包之后,向客户端发送确认包(ACK = 1,ack = u + 1),把客户端的序列号值 + 1 作 为 ACK 报文的序列号值,表明已经收到客户端的报文了
这是服务器在告诉客户端:我知道你要断开了,但是我还有数据没有发送完,等发送完了所有的数据就进行第三 次挥手
此时服务端处于 CLOSE_WAIT 状态,客户端处于 FIN_WAIT2 状态
第三次挥手:
服务器向客户端发送FIN 数据包(FIN=1,seq = w),且指定一个序列号,以及确认包(ACK = 1, ack = u + 1),用来停止向客户端发送数据
这个动作是告诉客户端:我的数据也发送完了,不再给你发数据了
此时服务端处于LAST_ACK状态,客户端处于TIME_WAIT状态
第四次挥手:
客户端收到 FIN数据包 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值
此时客户端处于 TIME_WAIT 状态。
需要过一了一定时间(2MSL)之后,客户端发送确认包(ACK = 1, ack = w + 1),此时客户端才会进入 CLOSED 状态,以确保发送方的ACK可以到达接收方,防止已失效连接请求报文段出现在此连接中。
至此,完成四次挥手。
2.UDP协议
也称之为数据报协议,不可靠协议
它的工作原理就是直接向对方的地址发送数据,不管有没有建立链接,不管对方能不能收到
图一
图二
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix