一、网络
通过通信线路将设备连接起来,实现资源共享和信息传递虚拟平台
二、IP地址
IP:唯一标识一台设备的地址
windows: ipconfig linux:ifconfig
三、端口、端口号
端口:对应程序,数据的通道,发送数据
端口号:不同的数据通道,标识一个程序 0-65535
四、TCP
传输协议(普通话)
面向连接、可靠传输
先建立连接,发送数据,关闭连接
三次握手
1) 客户端发送SYN+初始号给服务端(1开启、0关闭)
(上班第一天,你第一次见老板,告诉自己的名字信息之类的)
2)服务端回复SYN+ACK (确认号 = 序号+1)
(老板了解了你的信息,确认你这个人)
3) 客户端确认ACK
(你签合同确认入职,同意)
SYN:同步
四次挥手(客户端或服务端都可以发起)
1)客户端发送FIN+ACK,表示不在发送数据,但可以接受数据
(下班前,你告诉老板工作做完了,但你不能直接走,老板可能还有事给你,你还得接收)
2) 服务端发送ACK,可能还会发送
(老板确认你完成工作,但不一定立刻让你走,还可能给你布置额外任务)
3) 服务端发送ACK+FIN,同意关闭
(直到老板决定你可以下班了,发送FIN同意你才能回家)
4) 客户端发送ACK 确认
(礼貌“问候”老板say bye)
1. 为什么协议是三次握手,而关闭连接是四次挥手?
建立连接时,ACK和SYN放在一个报文里;关闭连接时服务器可能还要再发送一些数据后,再发送FIN报文表示同意关闭,所以ACK报文和FIN报文大多数是分开发送的
2. 为什么TIME_WAIT还要等待2MSL才能返回closed状态
1. 无法保证最后一次发送的ACK报文一定会被对方收到
2. 关闭连接后可能会出现相同的IP地址和端口建立新的连接,为了放置旧连接重复分组。2MSL足够让分组最多存活MSL秒被丢弃。
(MSL是Maximum Segment Lifetime的英文缩写,可译为“最长报文段寿命”)
3. 为什么必须是三次握手,不能用两次握手
容易死锁。
为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤;如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。
4. TCP、UDP
都在传输层,TCP面向连接的是安全的,UDP不是(视频)
1)TCP面向连接;UDP是无连接的,发送数据前不需要建立连接
2)TCP提供可靠服务,数据无差错、不丢失、重复;UDP不保证可靠性
3)TCP面向字节流;UDP面向报文
4)TCP逻辑通信信道是全双工可靠信道;UDP是不可靠信道
5. TCP常见的控制算法
1)流量控制
TCP协议通过滑动窗口来进行流量控制,它是控制发送方的发送速度从而使接受者来得及接收并处理。而拥塞控制是作用于网络,它是防止过多的包被发送到网络中,避免出现网络负载过大,网络拥塞的情况。
2)拥塞控制
为了降低网络拥塞程度
拥塞控制主要是四个算法:1)慢启动,2)拥塞避免,3)拥塞发生,4)快速恢复。
6. TCP如何保证可靠性
1)序列号
2)超时重传
3)连接管理(三次握手、四次挥手)
4)流量控制(TCP根据接收端数据的处理能力,决定发送端的发送速度)
5)拥塞控制
7. UDP如何保证可靠
不属于连接型协议,资源消耗小,处理速度快的优点
音频、视频和普通数据在UDP传送时使用较多
1)提供超时重传
2)提供确认序列号,对数据包进行确认和排序
8. TCP的keep-alive和HTTP的keep-alive
HTTP的keep-alive:tcp活的久一点,以便传送多个http请求
TCP的keep-alive:检测TCP连接状况的保鲜机制
9. TCP报文头部结构
11.TCP半连接发生的场景
收到ACK之间的TCP连接
六、TCP应用程序开发流程
客户端:软件
服务器端:处理数据
模型:
1)CS:客户端和服务器
2)BS:浏览器和服务器
应用程序开发流程:
七、HTTP协议
1. 超文本传输协议,协议格式基于TCP传输协议
2. 规定浏览器和web服务器通信数据的格式
1. 访问网页后发生了什么?
客户端输入域名,根据DNS域名解析出ip地址返回给客户端(域名解析),发起TCP三次握手建立http请求,客户端根据真实IP请求服务器,服务器中获得对应的资源(图片、js、css),返回这些给浏览器,浏览器对资源进行渲染,显示。
web默认服务器程序端口号为80
2. url地址
统一资源定位符,网址
https://123.com/34/e3
1. https 协议
2.123.com 域名
3. /32/2es 资源路径
以?开始key = value 查询参数,如(?wd=python)有多个参数用&隔开
3. HTTP请求报文和响应报文
GET:获取数据(请求行、请求头、空行)
POST:提交数据(请求行、请求头、空行、请求体(表单数据))
host服务器的主机地址端口号
响应报文:响应行、响应头、响应体(在response里)
4. HTTP与HTTPS有什么区别
1. HTTPS协议需要申请证书,HTTP不需要
2. HTTP超文本协议,属于应用层;HTTPS具有SSL加密安全性传输协议
3. 不同的连接方式,端口也不一样,HTTP(80)HTTPS(443)
4. HTTP连接很简单是无状态的,HTTPS由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议(零信任)
非对称加密(公钥、私钥)和对称加密
五、Socket(套接字)
IP+Socket进程之间网络数据的传输通过socket来完成
例:我的微信和你的微信聊天
传输数据流程:
1. 先将数据按照TCP协议数据格式(通过socket传输)
2. 根据对方的IP地址找到对方的电脑
3. 通过端口号找到端口
六、RPC、Restful区别和优点
1. RPC:远程过程调用协议,通过网络从远程计算机程序上请求服务(TCP、UDP)
2. Restful:
七、OSI七层协议
1. 物理层
硬件之间的通信问题:传输比特流
2. 数据链路层
接收来自物理层的位流形式的数据,并封装成帧,传送到上一层
3. 网络层
通过路由选择算法,为报文(该层的数据单位,由上一层数据打包而来)通过通信子网选择最适当的路径。这一层定义的是IP地址,通过IP地址寻址,所以产生了IP协议。
4. 传输层
监控数据传输服务的质量,保证报文的正确传输。
5. 会话层
它的作用就是建立和管理应用程序之间的通信。
6. 表示层
负责数据格式的转换,将应用处理的信息转换为适合网络传输的格式
7. 应用层
直接向用户提供服务
八、中间件
中间件:系统软件和用户应用软件之间连接的软件,以便于软件各部件之间的沟通
中间件是一类能够为一种或多种应用程序合作互通,资源共享,同时还能够为该应用程序提供相关的服务的软件。中间件是一类软件统称,而非一种软件,中间件不仅仅实现互联,还要实现应用之间的互操作。
Nginx: Nginx是一个开源且高性能、可靠的HTTP中间件、代理服务。其特点是占有内存少,并发能力强。