IPv4 地址长度共 32 位,是以每 8 位作为一组,并用点分十进制的表示方式
IPv6 地址长度是 128 位,是以每 16 位作为一组,每组用冒号 「:」 隔开
IPV6 相对于 IPV4 首部的改进:
TCP头部信息出现在每个TCP报文段中, 用于指定通信的游端端口号、目的端端口号, 管理TCP连接, 控制两个方向的数据流。
序列号(Sequence Number)
在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一
次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。
确认应答号(Acknowledgement Number)
指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序
号以前的数据都已经被正常接收。用来解决不丢包的问题。
控制位
TCP三次握手四次挥手
TCP三次握手
刚开始,服务端和客户端都是出于 CLOSED 状态。先是服务端主动监听某个窗口,出于 LISTEN 状态。
第一次握手:
客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里,之后客户端处于 SYN_SEND状态。
第二次握手 :
服务器发回确认包 (ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。之后服务端处于 SYN_RECV状态。
第三次握手:
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1。
最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态。服务器收到客户端的应答报文后,也进入 ESTABLISHED 状态。
即 S Y N 就 是 询 问 : 你 能 听 得 到 吗 ? A C K 就 是 回 到 : 我 能 听 得 到 啊 。 \textcolor{red}{即SYN就是询问: 你能听得到吗? ACK就是回到: 我能听得到啊。} 即SYN就是询问:你能听得到吗?ACK就是回到:我能听得到啊。
为什么是三次握手?
三次握手才能阻止重复历史连接的初始化(主要原因)
三次连接才可以同步双方的初始序列号
三次握手可以避免资源浪费
为什么不是两次或者四次握手?
两次握手,无法阻止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号。
四次握手:三次握手已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。
如果两次,那么B无法确定B的信息A是否能收到,所以如果B先说话,可能后面的A都收不到,会出现问题 。
如果四次,那么就造成了浪费,因为在三次结束之后,就已经可以保证A可以给B发信息,A可以收到B的信息; B可以给A发信息,B可以收到A的信息
TCP四次挥手
四次挥手
A:“喂,我不说了 (FIN)。”A->FIN_WAIT1
B:“我知道了**(ACK)**。等下,上一句还没说完。Balabala……(传输数据)”B- >CLOSE_WAIT | A->FIN_WAIT2
B:”好了,说完了,我也不说了(FIN)。”B->LAST_ACK
A:”我知道了(ACK)。”A->TIME_WAIT | B->CLOSED
A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED
这样,通过四次挥手,可以把该说的话都说完,并且A和B都知道自己没话说了,对方也没花说了,然后就挂掉电话(断开链接)了 。
HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!
TCP常用于 FTP 文件传输,HTTP/HTTPS,UDP常用于总包较少的通信,如 DNS、SNMP等。
连接:UDP是无连接的,发送数据之前无需建立连接,发送数据结束后也无需释放连接。TCP是面向连接的,在发送数据之前需要通过三次握手建立连接,发送数据结束后需要通过四次挥手释放连接。
可靠性:TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。UDP 是尽最大努力交付,不保证可靠交付数据。
传输方式。TCP 是流式传输,没有边界,但保证顺序和可靠。UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。
通信双方:UDP支持一对一、一对多、多对一、多对多的交互通信。TCP连接是点对点(一对一),每一条TCP连接只能有两个端点。
拥塞控制、流量控制。TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
首部开销:UDP首开销小,只有8个字节。TCP首部是20个字节。
序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输的
针对数据包丢失情形,使用重传机制解决
针对数据包往返时间长,通信效率就会变低,使用滑动窗口解决
发送方不能无脑的发送数据给接收方,要考虑接收方的处理能力。为了避免接收方处理不过来,TCP提供流量控制机制解决。
拥塞控制,目的是为了避免发送方的数据填满整个网络。
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
客户端请求消息
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
下面是常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
默认端口 :HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的UR由“https://”起始且默认使用端口443。
安全性和资源消耗: HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。
HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
HTTPS需要向CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
证书验证,客户端发送一个证书请求个服务器端,服务器端返回证书,客户端对证书进行验证。
交换密钥,使用非对称加密,客户端使用公钥进行加密,服务器端使用密钥解密。
交换数据,使用对称加密的方式对数据进行加密,然后进行传输
Get:请求从服务器获取资源,这个资源可以是静态的文本、页面、图片视频等。
POST:相反操作,向URL指定的资源提交数据,数据就放在报文的 body 中。
参数位置、参数长度、参数编码、TCP数据包
参数位置:GET方法参数位置包含在URL,POST方法参数包含在请求主体
参数长度:GET方法的URL长度有限度,POST长度没有限制
参数编码:GET方法参数编码是ASCII码,POST没有限制
TCP数据包:GET方法产生一个TCP数据包,把首部和数据一起发送,POST方法产生两个TCP数据包,先发首部,服务器响应后再发数据
参考: