- OSI七层协议:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层(物联网叔会使用)
- 后来演化--->五层协议:物理层、数据链路层、网络层、传输层、应用层(物联网叔用)
- -------大概了解每层有什么用:从上到下---------
- 应用层:用户交互的层,如QQ。形成报文
- 传输层:差错控制、流量控制(控制发送方速度)、可靠传输(可靠传输TCP和不可靠传输UDP)、拥塞控制(从全局性来看,防止过多数据注入网络层)。形成报文段
- 网络层:差错控制、流量控制(控制发送方速度)、路由选择(选择接收端)。形成IP数据报
- 数据链路层:差错控制、流量控制(控制发送方速度)、成帧(将比特流组装成帧)。形成比特
- 物理层:把比特流转换成电信号。形成电信号
- -------------------------------------传输层--------------------------重点!
- 传输层有两个协议:可靠传输TCP协议、不可靠传输UDP协议
- 不可靠传输UDP协议:为什么不可靠?无需连接即可发送,也不需要等待对方确认(所以不知道是否会丢失信息)。优点:快(直播);缺点:不可靠
- ----------------TCP协议--------------
- 可靠传输TCP协议:为什么可靠?面向连接的,指的是需要先建立连接(对方报文确认)再发送,结束时需要释放连接(对方报文确认),而且有超时重传机制,有一个自适应算法,当多次收到冗余ack时,则说明该字段丢失,要求重传。优点:可靠(邮件、信息);缺点:慢
- 了解TCP协议首部(握手/挥手基础):在报文段中,首部有重点的控制位:
- 同步位(synchronize):SYN,等于1表示有一个开始请求
- 终止位(final):FIN,等于1表示有一个终止请求
- (seq:报文段的位置)
- 确认位(acknowledge):ACK,等于1时,确认已经连接/终止。
- 复位(return):RST,等于1说明连接失败。
- 紧急位(urgent):URG,等于1时,不用在对方的传输层的缓存中排队
- tips:从上往下看,如syn=1,ack=1,seq=2,说明有一个连接请求并已经连接成功,并从上一条报文段的第2个位置开始
- ----------三次握手--------连接确认阶段
- 第一次ss:发送方-->syn=1,seq=x,有一个连接,从x位点开始(不包括x)
- 第二次sas:接收方-->syn=1,ack=1,seq=x+1,我也有一个连接,确认了连接,并请求从发送方的x+1的报文发送给我
- 第三次as:发送方-->ack=1,seq=x+1,确认了连接,发送第x+1开始发送报文
- ------------四次挥手---------连接释放阶段
- 第一次fs:发送方-->fin=1,seq=y,有一个终止任务给你,从y位点终结(包括y)
- 第二次as:接收方-->ack=1,seq=y+1,确认了释放终止,并从发送方的y+1位置的报文终止
- 第三次fas:接收方-->fin=1,ack=1,seq=y+1,有一个终止任务给你,我已经确认释放,并请求从发送方的y+1的报文位置终止
- 第四次as:发送方-->ack=1,seq=y+1,确认了终止,发送第y+1开始终止报文
- ------------->从两次比较可以知道,就第二次有差别,其它三次都无差别,开始变成终止而已
- -------------------------------------应用层--------------------------重点:1系统2协议
- 有1个重要的系统:域名解析系统DNS,有什么用?一般情况下用IP地址去查找网站,如127.1.1.1,但是用www.baidu.com也能访问,这就用到域名解析系统,将域名转成IP地址去访问,所以底层还是访问了IP。
- 有2个重要的协议:一个是Ftp协议(Xftp是啥的就不解释了),用来上传文件。另一个是Http协议(超文本传输协议),用来传输文本(Json);
- ---------------域名解析系统DNS---------------
- 扩展域名知识(可跳过):www:三级域名(www代表主页,也叫万维网,是最重要的域名之一,存有大量的主页及资源;还有mail开头的),baidu二级域名(如beijing),com顶级域名(如gov政府,cn中国)
- 域名解析系统在哪?我们的本地电脑系统就是一台域名解析系统,在某个文件夹中就定义了常访问的域名映射的IP地址,当我们访问该域名时,就可以访问到别的IP地址(如果修改了本地电脑文件,就算访问别的域名,调到的依然是你定义的IP地址)。存放位置为:C:\Windows\System32\drivers\etc的hosts文件中。
- 从小到大依次分为:本地域名服务器(我们电脑)、权限域名服务器、顶级域名服务器、根域名服务器。------>如果在本地域名服务器找不到,就会迭代查询,从小到大访问服务器,直到找到域名对应的IP地址
- ---------------HTTP协议---------------
- 主要特点:(1)无状态的(无记忆的坏处:只能传递消息,(网络层知道对方的路由位置),但并不知道对方具体叫什么名字,所以用到了cookile,有点像TCP首部一样,这不过是在HTTP的请求头里,负责记录信息)(2)采用TCP作为传输层协议,但HTTP在传输保温前是无需连接的(注意这句话不矛盾,TCP有连接,但HTTP无需先连接的)(3)HTTP连接:持久连接(HTTP1.1开始,keep-alive)和非持久连接(每次都要三次握手,HTTP1.0)(4)HTTP默认端口是80
- 响应状态码:1xx通知,2xx成功,3xx重定向,4xx客户端错误,5xx服务端错误
- HTTP--->HTTPS:HTTPS默认端口是443,特点:传输内容采用对称加密,但要是是采用非对称加密的。HTTPS安全性更高,但是耗费更多资源。
- ---------总结-----
- 由域名解析系统和HTTP协议,形成了URL,统一资源定位符(注:uri是统一资源标志符,唯一定位资源)
- -------------HTTP请求---------JavaWeb基础
- 概念:原本的Java程序是没有与网络相连的。有了Http协议之后,Http请求又分为了get、post、put、delete(Restful基础)类型,Http请求进入Tomcat后被创建成封装对象request,传递给java程序作为参数被传入HttpSerlevt处理。所以,JavaWeb可以说是计算机网络应用层的底层实现,接受了HTTP的请求。
- Cookie:由于HTTP是无状态的(记忆的),若用户是2个以上时,服务端往往会接收多个HTTP请求,就不知道该HTTP请求到底是A发送的还是B发送的。所以当用户发送HTTP请求进行登录鉴权之后,便得到了B用户的id,于是服务端发送方在HTTP请求头中附上用户id在cookie信息,封装在TCP里面(OSI层级往下是层层封装的),然后发送去客户端,客户端会层层解封TCP、HTTP请求,获取cookie放在浏览器。下次浏览器再访问时,会自动将cookie信息放入HTTP请求、TCP后发送。同理,服务端接收到拆封就得到了cookie,便知道了该请求是B用户id发送的请求。于是继续从数据库中导入该用户想要的信息返回。
- Session:cookie是保存在客户端的,那么客户的id信息可能会被盗取,这是不安全的。那么改变:当用户发送HTTP请求进行登录鉴权后,便根据key-value生成JsessionId-->用户的id,于是服务端发送方在HTTP请求头中附上JsessionId在cookie信息........。同理,服务端接收到拆封就得到了cookie,得到JsessionId,那么根据key找到了用户id。这样的好处就是客户端根本不知道用户的id是什么。而且,Session还能装一些较大的信息,如网页静态常用信息、用户购物车的信息(即提前根据用户id读取了数据库放入seesion中)
- ---------Json--------
- Json:放在HTTP里面的一种信息通用格式,全名是:application/json。还有其它编码形式:(1)post请求默认格式application/x-www-form-urlencaied(2)二进制数据格式(IO流)一般用于文件传输:multipart/from-date
- 这些信息有三种格式,那么传入时,对于不同的数据形式,进行绑定:(1)x-www-form-urlencaied:@RequestBody(HTTP请求中的post请求体内容)修饰用实体类pojo接收post的不同信息,如商品号、数量,最后将这些数据落入数据库(注意,pojo不要用Spring,不然是单例,线程不安全,应该用原型模式)(2)multipart/from-date:用MultipartFile类来接收IO流,在SpringBoot下还可以定义文件属性如最大单个文件大小/全部文件大小:Spring.http.multipart.maxFileSize/maxResquestSize
-------------------------------------网络编程(Java)--------------------------
- 网络编程的主要问题:(1)如何准确定位到网络上的一台或多台主机(2)找到主机之后如何进行通信;网络通信的要素:(1)IP号和端口号(2)网络通信协议
- 网络编程所用的的类:IP地址-->InterAddress类