TCP怎么保证可靠性
序列号,确认序列号 确认应答和超时重传 当接收方接受到消息之后会发送一个ACK报文给发送方 报文中有一个确认序列号 就是接收到的报文的序列号+1 说明没有接收错报文 如果没有发送方没有接收到这个ACK报文 就会超时重传 也就是在等待2RTT(也就是两个报文往返时间)+一个偏差值后重新发送 窗口控制和快速重发
窗口控制能提高传输效率 他不用等到发送方应答才发送下一条数据 那么如何保证数据的可靠 如果接收方并没有按顺序接受到预想中的数据 例如序列号一般接受到 1 2 3 5中间没有接受到4 直接接受到了5 那么接收方就会一直发送确认序列号为3的ACK报文给发送方 如果发送方连续接受到三次(三次的原因是 就算发送端是按序列号发送的报文 在传输过程中因为是TCP包封装在IP包里 一样可能造成乱序 而乱序一般是造成两次乱序 乱序造成三次冗余的概率是百分之四十 而三次更大概率是丢包了 所以选择了三次 为啥不选择四次五次 主要是因为这样会造成响应太慢 三次是实践经验吧 )相同的ACK报文那么就会重发这个序列号的报文保证数据的准确 拥塞控制 拥塞控制就有慢开始 拥塞避免 慢开始就是一开始值发送一点点数据 这个一点点的定义就是一开始将拥塞窗口设置为1 每接受到一次应答(也就是一个rtt)就2 拥塞避免就是这个拥塞窗口的增长有个上限值 到了这个设定的上限值后就不再2增长 而是每次+1 如果发生了堵塞(可以看做发生了超时重传) 那么这个上限就会变为一般 拥塞窗口又从1开始 重复慢开始
HTTP
http就是一个请求-响应协议标准 就是在在两方建立好了TCP链接之后 按照HTTP协议标准进行数据传输 作用是对前后端(浏览器和服务端)数据传输做一个规范 默认是在TCP协议的80端口 HTTP是以明文的方式传递信息 结束后就会断开链接 而HTTP在1.0的时候 浏览器每次发起HTTP请求都需要和服务端创建一个新的TCP链接 每次创建和关闭请求都需要耗费时间 如果将connection设置为keep aLive(长链接)就会告诉对方这个请求响应暂时不要关闭 但是keepalive也有缺点 就是长时间保持TCP链接容易导致系统资源被无效占用 所以选了个折中的办法就是完成最后一个HTTP请求之后就设置固定数秒关闭TCP链接
长链接和短链接
主要应用场景就是短链接 用于多并发交流没那么频繁的 客户端连接数较多 淘宝京东那种 长链接就是交流比较频繁 点对点那种 网路游戏 通讯等
HTTPS
就是在HTTP协议的基础上添加了身份验证和传输加密 保证了传输的安全 用的TCP端口就是443
HTTPS工作流程
客户端会先发起一个HTTPS请求给服务端 然后会链接上服务器的443端口 这个HTTPS请求里面包含了自己的加密算法列表(加密算法列表就是告诉服务端自己支持那些加密算法)和秘钥长度
服务端就会通过这个加密算法列表选择一个合适这个客户端的加密算法连同加密组件一起发送给客户端
服务端再向客户端发送一个包含数字证书的报文
然后服务端就会再发送一个完成协商报文告诉客户端SSL第一阶段协商已经完成
第一阶段完成之后客户端会回一个回应报文 告诉服务端之后的内容都用pre_master_secre加密 然后再向服务端发送一个结束报文 这次握手中包含第一次握手至今所有报文的整体校验值,最终协商是否完成取决于服务端能否成功解密。 然后服务端会发送一个和①一样的报文给客户端 让客户端确认 最后服务端发送一个finish报文告诉客户端自己正确解密了 当服务端和客户端的 finish 报文交换完成之后,SSL 连接就算建立完成了,之后就进行和 HTTP 相同的通信过程,唯一不同的是在 HTTP 通信过程中并不是采用明文传输,而是采用对称加密的方式,其中对称密钥已经在 SSL 的建立过程中协商好了
HTTP和HTTPS的区别
HTTP是以明文进行数据传输 而HTTPS会对数据进行TLS加密 HTTPS在三次握手之后还需要进行SSL握手 HTTPS还要申请服务端申请证书 浏览器端需要安装对应的根证书 HTTP端口是80 而HTTPS端口是443 HTTPS的有点就是安全性更高 但是缺点是握手端延时较高就是三次握手之后还需要SSL握手 要数字认证机构申请证书 需要一定费用 HTTPS还需要对传输数据进行解密 占用更多CPU资源
状态码(HTTP返回码)
200 请求成功 204 请求成功但无内容返回 206 范围请求成功
301 永久重定向; 30(2|3|7)临时重定向,语义和实现有略微区别; 304 带if-modified-since 请求首部的条件请求,条件没有满足
400 语法错误 401 需要认证信息 403 拒绝访问 404 找不到资源 412 除if-modified-since 以外的条件请求,条件未满足
500 服务器错误 503 服务器宕机了
IP地址和MAC地址
MAC地址是一个硬件地址 用来定义网络设备的位置 数据链路层负责 IP地址是IP协议提供 为互联网上每一个网络每一个主机分配一个逻辑地址屏蔽物理地址的差异
七层模型
物理层 (比特)实现计算机之间的比特流的透明传输 尽量屏蔽掉传输设备和物理设备之间的物理差异 方便链路层传输 不需要在考虑网络的传输介质是什么 IEE8802.3 数据链路层(帧) 两台主机就是在链路上进行数据交换 将网络层传递下来的网络数据组装成帧 MAC VLAN PPP 网络层(IP层)(包) 选择合适的网间路由和交换节点 将传输层的报文装成分组和包 IP ARP ICMP 传输层(报文) 传递报文和错误恢复 TCP UDP 会话层(SPDU) 建立 管理 终止对话 RPC NFS 表示层(PPDU) 对数据进行翻译加密传输 使通信的应用程序能解释交换数据的含义 就是帮助程序理解交换来的数据的意义 JPEG 应用层(APDU) 定义了用户之间的交互规则 FTP HTTP DNS
四层模型 网络接口层:MAC VLAN
网络层:IP ARP ICMP
传输层:TCP UDP
应用层:HTTP DNS SMTP
搜索baidu,会用到计算机网络中的什么层?每层是干什么的
|