常见协议解析(http/https/tcp)

发布时间:2026/7/24 19:53:24
常见协议解析(http/https/tcp) http:http有http请求和http响应他们都有四部分其中后面三部分基本类似只有第一部分不太相同。http请求四部分构成分别是请求行请求头空行请求体正文。一 请求行请求行[ 请求方法 ] [ url ] [ 版本 ]。1. 请求方法常见的有 post传输资源get获取资源。2. url :统一资源定位符原来精准定位互联网上的任意资源。格式协议//主机地址端口/路径查询参数#锚点例如我在百度浏览器搜索 电脑 那么就会形成http//www.baidu.com:443/s?wd电脑#page1这样的url,其中有多个参数的话用相隔。此处有一个小问题那么如果我搜 今天天怎么样 这种带特殊字符的呢参数会有问号吗不会的因为他还会进行对参数编码和解码也就是urlencode和urldecode 这两个函数对/ 这些特殊字符进行转义规则如下将需要转码的字符转为16进制然后从右到左取4位(不足4位直接处理)每2位做一位前面加上%编码成%XY格式3. 版本http/1.0或者http/1.1二 请求头http的请求头是多行键值对 格式 键盘值 用来传递客户端信息ip地址等。常见的请求头Content-Type: 数据类型(text/html等)Content-Length: Body正文的长度Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;User-Agent: 声明用户的操作系统和浏览器版本信息;referer: 当前页面是从哪个页面跳转过来的;location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;三 空行固定使用 \r\n ,用来分割请求头和请求体是必不可少的四 请求体正文用来填写提交给浏览器的数据与url的区别是url会回显出来正文段较为私密。注登录网页的账号密码常常只需要登陆一次是因为会形成一个Cookie文件保存账号密码。http响应一 响应行响应行[ http版本 ] [ 状态码 ] [ 描述短语 ]。https:https就是对http的正文段进行加密防止外部抓包信息泄露。加密一般分为两种对称加密 和 非对称加密。证书现在常见的https协议就是使用证书非对称加密对称加密。证书的引入保证通信双方在开始建立连接协商后续密钥使用的时候不会被中间人偷听甚至修改信息甚至为了对证书进行保护还引入了数字签名申请者带着自己的ip地址法人姓名等去CA机构申请证书CA机构对信息进行加密封装形成明文信息并且使用CA机构的对明文信息进行例如MD5的散列函数摘要再进行私钥加密形成签名而CA机构的公钥早已经内置进机器后面就可以解密对签名进行验证。至此就完成了通信加密的过程后面就可以使用对称加密进行通信。过程客户端向服务器发起连接请求服务器接受请求向客户端发送自己的证书里面包含自己的公钥客户端先验证证书与签名再形成一个对称加密的密钥使用客户端的公钥加密发送给服务器构建对称加密通信tcp:传输层收到上层应用层的数据对数据进行传输控制。tcp全称Transmission Control ProtocolTCP协议段格式从表头第一行就可以看出TCP是用来寻找进程后面的IP协议是定位主机的。tcp是面向字节流的协议他把所有数据看作一串无边界的连续的字节序列并且对这些字节进行数据块的划分因此有了32位序号。确认序列号是tcp协议保证可靠性最重要的措施接收方会对收到的消息做出应答将ACK设置为有效。确认序列号他成功收到的最后一个字节序号1返回的确认序列号表示在此之前的数据我已经全部收到了因此允许部分应答丢失提高了容错率。4位首部长度是报头选项的总长度。真实的首部长度首部长度×4。计算可知选项的最大长度为40。URG: 紧急指针是否有效ACK: 确认号是否有效PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段FIN: 通知对方, 本端要关闭了收到RST的主机会异常终止本次连接并且清空缓冲区。16位窗口大小是自己当前缓冲区所剩空间的大小因此对方可以知道你还有多少空间进而达到流量控制你剩的空间多那就多发数据剩的空间少就少发数据保证了可靠性和效率。16位窗口大小那么缓冲区最大就是65536字节64KB是不是有点太小了因此在选项行你可以设置窗口扩大因子M实际窗口大小就是窗口字段左移M位。16位紧急指针指向数据中一块需要紧急处理的数据地址。一般大小是1字节。数据段一般填充的就是http请求整体也就是应用层交付的数据。知识点1为什么要把32位序号与32位确认序号分离答1. 存在捎带应答2. 是全双工的,客户端和服务器都有可能给对方发消息如果只有序列号那么这块序号究竟是干什么的它是在发送序号还是确认应答呢知识点2超时重传机制主机a发送数据给b之后可能因为网络拥堵等原因数据无法到达主机b主机a一直未收到主机b的应答就会在超出一定限制时间后对b重新发出数据叫做超时重传机制。这个时间是随着网络环境不同有差异的第一次发送之后如果等待500毫秒未收到应答重新第二次发送之后就要等待2×500毫秒第三次则是4×500毫秒累积到一定次数TCP认为网络或者对端主机出现异常强制关闭连接。知识点3三次握手四次挥手①注意这里的SYN是一个报文的简写在客户端处于Established状态时客户端认为连接已经建立完成而服务器只有在收到最终的ack应答才会认为连接建立完成双方存在一个时间差。并且在服务器认为建立完成之前Accept是没有参与的客户端向服务器发起SYN这时服务器会将这个请求插入半连接队列当第三次收到ack应答之后才会插入全连接队列。②这里服务器向客户端发送SYNACK这里是一个捎带应答。但是挥手的时候为什么不能捎带应答呢因为可能有一端仍有数据没有发送完毕或者有数据没有接收到因此断开连接的时候一般不能稍带应答。③TIME_WAIT状态TCP协议规定主动关闭链接的一方要处于TIME_WAIT状态等待两个MSL(maximum segment lifetime)。的时间后才能回到closed状态。因为这样能保证在两个传输方向上的尚未被接收或迟到的报文段都已经消失同时在理论上保证最后一个报文可靠到达。因此有时候会引起bind方法失败因为主动关闭连接后仍会存在两个MSL的时间,此刻端口仍被占用。那么如何解决呢知识点4滑动窗口滑动窗口是进行流量控制的手段。滑动窗口由四部分构成已发送已确认已发送未确认未发送窗口外数据。窗口变化场景​窗口缩小接收端缓冲区被占满ACK携带窗口值变小极端为0窗口发送方暂停发送业务数据仅发送窗口探测报文​窗口变大接收程序读取缓冲区数据释放空间后续ACK通告更大窗口​窗口不变接收缓冲区空闲容量无变化。​关键规则窗口单位是字节仅ACK报文会更新窗口大小。发送窗口上限 min(接收通告窗口rwnd拥塞窗口cwnd)知识点5拥塞窗口因为开始不知道用户的网络通信状况先发送少量数据试探网络情况避免第一次大量发送数据结果网络状况不佳造成大量丢包。因此TCP引入慢启动机制先发送少量数据探探路摸清当前网络拥堵状态再决定按照多大的速度传输数据。发送开始的时候定义拥塞窗口大小为一每次收到一个ack应答拥塞窗口翻倍。每次发送数据包时将拥塞窗口和接收端主机反馈的窗口大小作比较取较小值作为实际发送的窗口。所以就有了上面的那个公式发送窗口上限 min(接收通告窗口rwnd拥塞窗口cwnd)另外在每次超时重发的时候慢启动阈值会变成原来的一半同时拥塞窗口置回1。每次连续收到三个相同的ack应答会直接对这个报文做重发处理这叫做快重传知识点6延迟应答延迟应答指收到报文后不着急应答给上层充分的时间取走数据就有概率能收到确认序号所以能够提高效率增大网络吞吐量但是也不能太晚应答。