文章目录
#网络
TCP/IP
TCP/IP协议(传输控制协议/互联网协议)不是简单的一个协议,而是一组特别的协议,包括:TCP,IP,UDP,ARP等,这些被称为子协议。在这些协议中,最重要、最著名的就是TCP和IP。因此,大部分网络管理员称整个协议族为“TCP/IP”
七层网络
四层网络
TCP 和 UDP
TCP
TCP协议中,主动发起请求的一端称为客户端,被动连接的一端称为服务端。由于全双工,不管是客户端还是服务端,TCP连接建立完后都能发送和接收数据。
- SYN:同步报文
- ACK:确认报文
- FIN:终止报文
全双工
- 全双工(Full Duplex)是通讯传输的一个术语。通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。
- 单工就是在只允许甲方向乙方传送信息,而乙方不能向甲方传送 。(比喻汽车的单行道。)
TCP三次握手
为什么不能两次握手建立连接
- 假设客户端在没有收到服务端ACK报文时,会一直向服务端发送SYN报文;
- 而此时服务端收到SYN报文,并向客户端发起ACK报文,客户端等待一段时间后如没有收到SYN报文即认为客户端已收到ACK报文
- 然而此时会出现一种情况,就是服务端的ACK报文和客户端再次发送的SYN都丢包了,此时客户端认为没有建立连接,而客户端却认为建立连接了,会产生混乱。
因此最少需要三次握手
TCP四次挥手
为什么建立连接的时候是三次握手,而关闭连接的时候是四次
因为TCP是全双工的,当客户端发送终止请求的时候,仅仅代表客户端没有数据发送给服务端,而服务端可能还有数据没有发送完。此时服务端只能发送确认报文告诉客户端已经收到报文,等服务端所有报文发送完,才会向客户端发送终止报文。所以是四次挥手。
为什么客户端发送完确认请求后进入TIME_WAIT要等待2MSL
因为网络是不可靠的,我们要假设发送的ACK有可能丢失。服务端如果没有收到ACK报文,会不断向客户端发送FIN报文。客户端如果再次收到FIN,就说明ACK报文丢失了。等待2MSL就是为了确认客户端是否真的收到报文。MSL是从客户端发送报文到服务端的时间,等待2MSL刚好就是一个来回。
TCP如何保证可靠传输
流量控制
TCP 和 UDP 的区别
- TCP面向连接,UDP无连接
- TCP数据传输可靠,UDP数据传输不可靠
- TCP数据传输慢,UDP速度快
- TCP开销大(首部20字节),UDP开销小(首部8字节)
- TCP适合传输少量数据,UDP适合传输大量数据
- TCP保证数据的顺序传输,UDP不保证
- TCP安全性稍低,UDP安全性高一些
- TCP有拥塞控制,UDP没有拥塞控制
- TCP连接只能是点到点的,UDP支持一对一,一对多,多对一和多对多的交互通信
HTTP 和 HTTPS
HTTP
超文本传输协议,应用层协议,基于TCP/IP
- 无状态:对客户的没有状态存储
- 无连接:每次请求都需要TCP建立连接
- 由客户端发起请求,服务端响应
- 简单、快速
- 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性
HTTP状态码
- 1xx:表示服务器已接收了客户端请求,客户端可继续发送请求
- 2xx:表示服务器已成功接收到请求并进行处理
- 200 OK:表示客户端请求成功
- 3xx:表示服务器要求客户端重定向
- 4xx:表示客户端的请求有非法内容
- 400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解
- 401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用
- 403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因
- 404 Not Found:请求的资源不存在,例如,输入了错误的URL
- 5xx:表示服务器未能正常处理客户端的请求而出现意外错误
- 500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求
- 503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常
HTTPS
基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护。
- 内容加密:采用混合加密技术,中间者无法直接查看明文内容
- 验证身份:通过证书认证客户端访问的是自己的服务器
- 保护数据完整性:防止传输的内容被中间人冒充或者篡改
SSL
- SSL(Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层。
- 起初是因为HTTP在传输数据时使用的是明文(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层。
- SSL是基于HTTP之下TCP之上的一个协议层。
- HTTPS的推出受到了很多人的欢迎,在SSL更新到3.0时,IETF对SSL3.0进行了标准化,并添加了少数机制(但是几乎和SSL3.0无差异),标准化后的IETF更名为TLS1.0(Transport Layer Security 安全传输层协议),可以说TLS就是SSL的新版本3.1
加密方式
-
混合加密:结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。
-
数字摘要:通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。
-
数字签名技术:数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。
Get 和 Post 区别
- GET参数通过URL传递(只能用URL编码,因此参数都是直接暴露在URL中,并不安全),POST放在request body中
- GET发送一次TCP请求,POST发送两次TCP请求(也有例外:Firefox发送一次)
- GET请求参数会被保存在历史数据里,POST不会
- GET请求URL有长度限制(跟浏览器相关),POST没有
DNS
DNS将域名转换为IP地址。
MAC地址、IP地址
- 每台主机在出厂时都有一个唯一的MAC地址,但是IP地址的分配是根据网络的拓朴结构,得以保证路由选择方案建立在网络所处的拓扑位置基础而不是设备制造商的基础上
- 使用IP地址更方便数据传输。数据包在这些节点之间的移动都是由ARP协议负责将IP地址映射到MAC地址上来完成的。
TCP拥塞控制和流量控制
- 拥塞控制:对网络中的路由和链路传输进行速度限制,避免网络过载;包含四个过程:慢启动、拥塞避免、快重传和快恢复
- 流量控制 :对点和点/发送方和接收方之间进行速度匹配,由于接收方的应用程序读取速度不一定很迅速,加上缓存有限,因此需要避免发送速度过快;相关技术:TCP滑动窗口、回退N针协议
TCP流量控制滑动窗口和拥塞窗口
-
发送方没有收到接收方发回的ACK,就不能向右滑动。假设发送方向接收方发了ABCD就滑动,只要对方没收到A,就不能滑动,那么就会出现二者不同步的局面。
-
滑动窗口提高了信道利用率,TCP是发送报文段为单位的,假如每发一个报文就要等ACK,那么对于大数据包,等待时间就太长了。只要发送的报文在滑动窗口里面,不用等每个ACK回来就可以向右滑动。本例中,开始接收端空着AB,只有CD,此时不能滑动;之后接收到EF和H,直接向右滑动2位,不必等G到位。
-
窗口大小不能大于序号空间大小的一半。目的是为了不让两个窗口出现交迭,比如总大小为7,窗口大小都为4,接收窗口应当滑动4,但只剩3个序号,导致两个窗口交迭。
-
有一种情况没出现:发送方发ABCD,接收方都收到然后向右滑动,但回复的ACK包全丢了。发送方未收到任何ACK, timeout后会重发ABCD,此时的接收方按累计确认的原则,收到ABCD后只会重发D的ACK,发送方收到后向右滑动
滑动窗口是控制接收以及同步数据范围的,通知发送端目前接收的数据范围,用于流量控制,接收端使用。拥塞窗口是控制发送速率的,避免发的过多,发送端使用。因为tcp是全双工,所以两边都有滑动窗口。
两个窗口的维护是独立的,滑动窗口主要由接收方反馈缓存情况来维护,拥塞窗口主要由发送方的拥塞控制算法检测出的网络拥塞程度来决定的。
Socket
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议