一、HTTP协议
1.HTTP基本架构
Web Client 可以是浏览器、搜索引擎、机器人等等一切基于HTTP 协议发起 http 请求的工具。
Web Server 可以是任何的能解析 HTTP 请求,并返回给Web Client 可识别的响应的服务,常见的有 apache、nginx、IIS 等等 web 服务器。
2.HTTP请求报文结构
HTTP请求报文由请求行、请求头、空行和请求内容4个部分组成
二、TCP/IP协议
1.简介
2.OSI七层模型和TCP/IP五层模型
作用:
- 应用层:为操作系统或应用程序提供访问网络服务的接口。例如:telnet-远程连接服务、FTP-件传输协议、HTTP、DNS-域名服务解析器等。
- 表示层:主要负责上下层数据格式的转换,常见:url加密、图片解码和编码、口令加密
- 会话层:负责建立和断开通信连接,以及数据的分割等数据传输相关的管理。常见:服务器验证用户登录
- 传输层:会话层负责决定建立连接和断开连接的时机,而传输层进行实际的建立和断开处理。常见:TCP、UDP、进程、端口。
- 网络层:将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某个地址。因此这一层主要负责寻址和路由选择。常见:路由器、多层交换机、防火墙。
- 数据链路层:负责物理层上的互联、节点之间的通信传输。常见:网卡、网桥、二层交换机。
- 物理层:负责0、1比特流(0、1序列)与电压的高低、光的闪灭之间的互换。常见:中继器、集线器、网线
七层通信过程:
3.IP协议
IPV4首部
- 版本:表示 IP 协议的版本。
- 首部长度:首部的长度,单位是 4 字节。
- 区分服务:服务类型。
- 总长度:首部和数据之和的长度,单位为字节,当数据报的总长度超过数据链路层的最大传送单元时就必须进行分片处理。将一个 IP 数据报分成多个分片,每个分片都具有 IP 首部。
- 标识:对分片进行标识,同一个数据报的分片具有同样的标识。
- 标志:占 3 位。最低位记为 MF(More Fragment),MF = 1 表示后面“还有分片”,MF = 0 表示这是多个数据报片中的最后一个;中间一位记为 DF(Don't Fragment),只有当 DF = 0 时才允许分片。
- 片偏移:表示该分片在原分组中的相对位置,片偏移以 8 个字节为偏移单位。
- 生存时间:TTL,表示该数据报在网络中可以被转发的次数,每经过一次转发,这个值减 1。
- 首部校验和:这个字段只检验数据报的首部,不检验数据部分。
- 源地址:32位源IP地址
- 目的地址:32位目的IP地址
- 可变部分:可变部分中包括用于增加 IP 数据报功能的选项,这些选项一个一个拼起来,中间不需要分隔符,最后用 0 填充为 4 字节的整数倍。
4.TCP协议格式详解
- 端口号:用来标识同一台计算机的不同应用进程
- 源端口:源端口和IP地址的作用是标识报文的返回地址
- 目的端口:端口指明接收方计算机上的应用程序接口。
-
TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。
- 序号:用于对字节流进行编号。例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。
- 确认号:期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。
- 数据偏移:指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
- 保留:
- TCP连接:SYN ACK RST UTG PSH FIN
- URG:紧急标志
- ACK:确认标志,当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。
- PSH:推标志
- RST:复位标志。
- SYN:同步标志,在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。
- FIN:结束标志,用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放运输连接。
- 窗口:用来表示想收到的每个TCP数据段的大小
- 检验和:
- 紧急指针:
5.TCP/UDP的区别
TCP是可靠的、面向连接、面向字节流、全双工、传输效率低且传输速度慢
UDP是不可靠的、无连接、面向报文、传输效率高且传输速度快
TCP和UDP协议的一些应用:
6.三次握手,四次挥手
三次握手:一定是socket客户端向服务端发起连接请求. a:客户端发起请求连接服务端.b:服务端返回:可以连接,并请求连接服务端.c:客户端回复:可以连接
四次挥手:客户端和服务端断开连接(谁发起的都行). a:客户端向服务端发送断开连接的请求 b:服务端.我接受到你的断开请求了,等我处理一些手头上的事情. c服务端.我处理完了,可以断开了 d:客户端回复:收到你的信息,断开连接