#web的相关概念
软件架构
1.C(client)/S(service):客户端/服务器端
2.B(browse)/S(service):浏览器/服务器端(可以通过url访问到):javaEE开发一般用bs架构 优点客户端0维护
服务器的资源分类
1、静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析
- 如: html,css,JavaScript
2、动态资源:每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。动态资源被访问后,需要先转换为静态资源,在返回给浏览器 - 如:servlet/jsp,php,asp…
网络通信的三要素
1.IP:电子设备(计算机)在网络中的唯一标识。
- 端口:应用程序在计算机中的唯一标识。 0~65536
- 传输协议:规定了数据传输的规则
*基础协议:
1.tcp:安全协议:三次握手:速度较慢
2.udp:不安全协议:也叫广播协议,速度快
关于TCP的三次握手![TCP的三次握手](https://img-blog.csdnimg.cn/84ef90f62475415eb3713449d7f354a4.jpeg pic_center=x500)
三次握手==》发送三个数据包
具体流程:客户端调用socket()函数创建套接字后,因为没有建立链接,所以套接字处于closed状态。服务器嗲用listen()函数后,套接字会进入listen()转台,开始监听客户端的请求,
1、此时:客户端开始是起请求,当客户端调用connect()函数后,TCP协议会组建一个数据包,并设置一个SYN标识为,标识该数据包是用来建立同步j链接的。同时生成一个随机数字(1000),填充序号(Seq)字段,标识该数据包的序号,完成这些工作,就开始想服务器发送数据包,客户端就进入了SYN-SEND状态
2、当服务器收到数据包(第一次握手成功):检测到已经设置了SYN标志位,就知道这是客户端发来的建立链接的“请求包”。此时服务器端也会组建一个数据包,并设置SYN和ACK标志位,SYN表示该数组包用来建立链接,ACK用来确认收到了刚才客户端发送的数据包。此时服务器端会生成一个随机数2000,填充序号(Seq)字段。2000和客户端数据包没有关系。而服务器将客户端数据包序号(1000)加1,得到1001,并用这个数字去填充“确认号(ACK)”字段,服务器将数据包发出,进入SYN——RECV状态
3、客户端收到数据包,检测到已经设置了SYN和ACK标志位,就知道这是服务器端发来的“确认包”。客户端会检测“确认号(ACK)”字段,看他的值是否等于1000+1,如果是就说明链接建立成功(第二次握手成功),接来下,客户端会继续组建数据包,并设置ACK标志位,标识客户端正确接收到了服务器发来的“确认包”,同时将刚才服务器发来的数据包 序号(2000)加1,得到2001,并用这个分数字来填充“确认号(ACK)”字段,客户端将数据包发出,进入ESTABLISED状态,表示成功建立链接
4、服务器收到数据包,检测到已经设置了ACK的标志位(第三次握手成功),就知道这是客户端发来的“确认包”。服务器会检测“确认号(Ack)”字段的值是否位2000+1,如果是就说明建立链接成功,服务器也进入ESTABLISED状态,表示成功建立链接
当两者都进入ESTABLISED转台,就说明两者可以进行通信了
说明:为什么要三次??
客户端和服务器手要知道对方是具有收发能力!==》至少3次握手
第一次握手:客户端发出链接请求,服务端收到链接请求,这样服务器就知道客户端有发送的能力
第二次握手:服务器收到第一次客户端发出的连接秦秋后,向其发出收到的链接请求的响应和连接请求,至此,客户端知道知道服务器有发送,接收的能力
第三次握手 客户端收到服务端对他的第一次所请求的回应后,发送收到链接的请求响应,服务端收到手,服务端就知道了客户端有接收能力
从底层来说:三次握手的关键是要确认对房收到了自己的数据包,这个目标就是通过“确认号Ack”字段来实现的,计算机会记录下自己发送的数据包的序号Seq,待接收到对方的数据包后,检测‘确认号Ack’字段 看Ack=seq+1是否成立,如果成立就说明对房正确的收到了自己的数据包
通俗说发:
客户端: 我来连接你了,你准备好了么
服务器:收到收到(第一次握手成功)我准备好了,你可以建立连接了
客户端:收到收到(第二次握手成功)好的好的,那我真的开始连接了
服务器:收到收到(第三次握手成功)连吧