计算机网络
计算机网络
网络体系结构
应用层:用户访问网络的接口
传输层:进程间通信
网络层:选择合适路由和交换节点,完成任意两台主机间通信
数据链路层:IP数据报封装成帧在相邻节点间传输
物理层:相邻节点比特流的透明传输
各层协议
数据各层传输方式
从上到下给数据包装,从下到上解包装
传输层:TCP:报文,UDP:用户数据报
网络层:IP数据报
数据链路层:帧
物理层:数据比特流
DNS解析过程
域名和IP相互映射
输入域名 –> 浏览器缓存找 –> 本地Host缓存 –> 本地DNS服务器 –>
(根域名服务器(返回顶级域名服务器地址) –> 顶级域名服务器(com,返回权限域名服务器地址) –> 权限域名服务器(www.baidu,返回请求域名的ip))
三次握手四次挥手
TCP 建立连接、断开连接的过程
三次握手(建立连接):
SYN(Synchronize Sequence Numbers):同步序列号
ACK(Acknowledgement Number):确认编号
三次握手是为了解决由于网络阻塞等原因一个请求建立报文没有传送到服务器,客户端又发送一个请求连接的报文给服务端,服务端收到了这次的报文;但之前滞留在网络中的报文又到达了服务端,服务端误以为是客户端发起了新的连接,造成客户端和服务端的状态不一致,服务端会一直等待客户端发送数据。(在不可靠的信道上建立可靠的数据连接)
传输确认:
- 服务端将发送缓存区的数据按序列号传送,客户端收到后回复一个ACK,ACK包含了一下个请求传输的序列号,如果没有收到可以要求服务端重传
四次挥手:
- 第一次、第二次挥手:客户端发送FIN,客户端和服务端进入将要关闭状态,此时服务端还可以发送未发完的数据
- 第三次、第四次挥手:服务端发送完消息,发送FIN,客户端收到后回复ACK并等待一段时间(报文最长生存时间*2)后关闭(防止由于网络问题导致服务端没收到,从而服务端没有关闭连接),服务端收到ACK后关闭。
- 四次挥手是为了把数据传完
TCP、UDP比较
TCP:
面向连接,点对点,全双工通信,面向字节流,拥塞控制
稳定可靠,适用于对网络通讯质量要求较高的场景,如传输文件、浏览网页
基于TCP的应用层协议有HTTP、FTP、SMTP、SSH等
UDP:
面向报文,可一对多,头部短(8Byte)
速度快,适用于对实时性要求高的场景,如语音通话、直播
基于UDP的应用层协议有DNS、TFTP、SNMP等
TCP头部字段
- 序号:假设A和B通讯,A发送给B的第一个报文中的序号为一个随机的ISN(初始序号值),后续发送的报文序号为ISN+携带数据的第一个字节在字节流中的偏移量
- 确认号:在收到的报头的序号上+1
- 头部长度:表示TCP头部有多少个32bit的字,TPC头部长度范围为20Byte ~ 15*4Byte = 60Byte
- 标志位:
- ACK:表示确认号是否有效,携带ACK的报文段为确认报文段
- SYN:表示请求建立连接,携带SYN的报文段为同步报文段
- FIN:表示通知对方本端要关闭连接,携带FIN的报文段为结束报文端
- 窗口大小:告诉发送端本端的接收缓冲区还剩多少,用来TCP流量控制
粘包、半包
粘包:多个包一起发送
半包:一个包拆成多个发送
解决方式:
- 在数据尾部添加特殊字符进行分割
- 发送分为头部和内容,头部里声明了内容的大小
拥塞控制
拥塞窗口:每次发送多少个数据包
慢开始:开始时不知道当前网络状况,因此从1开始指数增加拥塞窗口的大小
拥塞避免:当拥塞窗口到达阈值后线性增长,当出现超时事件时拥塞窗口变为1并降低阈值(此时的拥塞窗口大小/2)
快重传:如果是因为丢包而不是网络阻塞造成没有收到数据包,接收方若在数据包超时时间内连续收到三个同一个包的确认收到消息,就认为是丢包了,会立即重新传这个包的下一个包,而不是等到超时时间
快恢复:快重传后把阈值降为拥塞窗大小的一半,把拥塞窗口降为阈值而不是1
常见状态码
200:请求成功;
301:永久重定向;302:临时重定向;
404:无法找到此页面;405:请求的方法类型不支持;
500:服务器内部出错。
URI和URL
- URI,全称是Uniform Resource Identifier,中文翻译是统一资源标志符,主要作用是唯一标识一个资源。
- URL,全称是Uniform Resource Location,中文翻译是统一资源定位符,主要作用是提供资源的路径。
Cookie/Session
cookie:
- 服务端servlet创建cookie,保存少量数据,发送给浏览器。
- 浏览器获得服务器发送的cookie数据,将自动的保存到浏览器端。
- 下次访问时,浏览器将自动携带cookie数据(到请求头)发送给服务器。
session:
- 服务端判断浏览器端请求是否包含session标识,没有则创建session并返回sessionId(通过cookie)
- 浏览器端之后的请求都携带sessionId
- session在超时时间过后销毁,而不是关闭浏览器
WebSocket/Socket
Socket是一套标准,它完成了对TCP/IP的高度封装,屏蔽网络细节,以方便开发者更好地进行网络编程。Socket其实就是等于IP地址 + 端口 + 协议。
WebSocket是一个持久化的协议,它是伴随H5而出的协议,用来解决http不支持持久化连接的问题。
Socket一个是网编编程的标准接口,而WebSocket则是应用层通信协议。
网络攻击
CSRF:Cross-site request forgery,跨域请求伪造。挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法
XSS:Cross-Site Scripting,跨域脚本攻击。往Web页面里插入恶意html代码
盗链:获取其他网站的资源展示在自己的网站上。可以通过检查referer头部字段来检查请求来源,从而防盗链