计算机网络基础
TCP可靠传输实现
- 校验和
- 序列号
- 确认应答
- 超时重传
- 连接管理
- 窗口控制
- 拥塞控制:慢启动,拥塞避免,快重传,快恢复
tcp本身通过ack确认机制来保证确认信息收到了,并通过重传机制对丢失信息进行重传,也就是说,应用端将数据交给TCP,自己啥都不用管了,他一定能传到,所以称之为可靠性
TCP和UDP区别
TCP面向字节流,UDP面向报文
TCP面向连接的传输协议,传输前必须建立连接,UDP无连接
TCP是可靠的,UDP不保证可靠
TCP保证了数据顺序,UDP不保证
TCP首部开销大于UDP,TCP需要20字节,UDP则是8字节
TCP三次握手四次挥手
三次握手:
主机向服务器发送一个请求连接报文
服务器收到报文后,向主机发送一个确认连接请求报文
主机收到后,送一个检查ACK报文,服务器收到连接建立成功开始传输
四次挥手:
主机向服务器发送连接释放报文
服务器收到后,向主机发送一个ACK报文
当服务器无数据传输时,发送一个连接释放报文
主机收到后,发送一个ACK报文,进入时间等待状态,等待两个报文段最大生存时间,然后关闭连接(保证最后一次报文能到B,2MSL后,这次连接的所有报文都会消失)
不是2次握手:无法获取到对方的状态,无法知道主机是否收到服务器的确认连接,且不会超时重传,TCP不会为没有数据的ACK进行重传;为了防止 已失效的链接请求报文突然又传送到了服务端,因而产生错误。
不是4次挥手:主动关闭方需要等待被动关闭方传送完数据,所以在收到主机连接释放报文时,不能直接回复一个连接释放报文,需要等服务器数据发送完
https和http的区别
- HTTP是以明文的方式在网络中传输数据,而HTTPS协议传输的数据则是经过TLS加密后的,HTTPS具有更高的安全性
- HTTPS在TCP三次握手阶段之后,还需要进行SSL的握手,协商加密使用的对称加密密钥
- HTTPS协议需要服务端申请证书,浏览器端安装对应的根证书
- HTTP协议端口是80,HTTPS协议端口是443
- HTTPS的安全性更高,握手阶段延时较高
HTTP三个缺点:被篡改、被监听、被伪装
https的建立过程
- 客户端发送请求到服务端
- 服务端返回公钥和证书到客户端
- 客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数,用公钥对其加密,发送到服务端
- 服务端接受到这个加密后的随机数后会用私钥对其解密得到真正的随机数,随后用这个随机数当做私钥对需要发送的数据进行对称加密
- 客户端在接收到加密后的数据使用私钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户
- SSL加密建立
对称加密和非对称加密
对称加密:即加密的密钥和解密的密钥相同
非对称加密:非对称加密将密钥分为公钥和私钥,公钥可以公开,私钥需要保密,客户端公钥加密的数据,服务端可以通过私钥来解密
http1.0 http1.1和http2.0
http1.0 是短连接 http1.1是长链接
短连接每次请求都需要建立连接,长连接则允许传送多个HTTP请求响应
http2.0增加了多路复用,也就是连接共享,一个连接可以有多个请求并行执行
ipv4和ipv6的区别
地址长度不同,iPv4为4字节32位,ipv6为16字节128位,因此他们的寻址空间不同
IPv4使用了地址解析通讯协议,IPv6使用的是多点传播
IPV6的安全性更高。在使用IPv6网络中,用户可以对网络层的数据进行加密并对IP报文进行校验,这极大地增强了网络安全
post和get请求区别
对于get方式,浏览器会把http 消息头和data 一并发送过去,服务器响应200(返回数据);
对于post方式,浏览器先发送消息头,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回浏览器)
区别:
l、get参数通过url传递,post放在request body中。
2、get 请求在url中传递的参数是有长度限制的,而post没有。
3、get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。
4、get 请求只能进行url编码,而post支持多种编码方式。
5、get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。
6、GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
7、GET产生一个TCP数据包:POST产生两个TCР数据包。
session和cookie区别
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。
一般情况下,服务器会在一定时间内(默认30分钟)保存这个 Session,过了时间限制,就会销毁这个Session。在销毁之前,程序员可以将用户的一些数据以Key和Value的形式暂时存放在这个 Session中。当然,也有使用数据库将这个Session序列化后保存起来的,这样的好处是没了时间的限制,坏处是随着时间的增加,这个数据 库会急速膨胀,特别是访问量增加的时候。一般还是采取前一种方式,以减轻服务器压力。
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。
当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
OSI七层模型和TCP四层模型
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
应用层、传输层、网络层、数据链路层、物理层
TCP各层相关的协议
应用层:FTP、SMTP、HTTP
传输层:TCP、UDP
网络层:IP、ICMP、IGMP(组管理协议)、ARP
链路层:MAC,VLAN
DNS解析过程以及DNS劫持
1)、在浏览器中输入一个域名,例如www.tmall.com,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析, windows下hosts文件在C:/Windows/System32/drivers/etc/hosts下,linux一般都在/etc/hosts下。
2)、如果hosts里没有这个ip到域名的映射,那么就要查找本地DNS解析器缓存,是否有这个域名到ip地址的映射关系,如果有,直接返回,完成域名解析。
3)、如果本机的hosts与本地DNS解析器缓存都没有相应的网址映射关系,那么就要找到你的TCP/ip参数中设置的首选DNS服务器,我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4)、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个域名到ip地址的映射,完成域名解析,但是此解析不具有权威性。
5)、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负 责.com域的这台服务器。这台负责(.com)域名的服务器收到请求后,如果自己无法解析,它就会找一个管理(.com)域的下一级DNS服务器地址 (tmall.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找(tmall.com)域服务器,重复上面的动作,进行查询,直至找到 (www.tmall.com)主机。
6)、如果用的是转发模式,此DNS服 务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地 DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。举一个简单的例子,比如你输入的域名地址是www.google.cn然后弹出来百度的页面,很明显发生了DNS域名劫持。
MAC地址和IP地址
MAC地址是一个硬件地址,用来定义网络设备的位置,主要由数据链路层负责。
IP地址是IP协议提供的一种统一的地址格式,为互联网上每个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
TCP/IP数据链路层的交互过程
先去本地arp缓存表查找是否有目的ip的mac地址,如果查到了就将mac地址封装到数据报的报头,没有找到的话,就发起一个广播,所有收到广播的机器看这个ip是不是自己,如果是就以单拨形式发送自己的mac地址给请求的机器。如果没有找到,则不可达(报错)