Fork me on GitHub

TCP与UDP协议

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP/IP协议是Internet最基本的协议,其中应用层的主要协议有Telnet、FTP、SMTP等,是用来接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层;传输层的主要协议有UDP、TCP,是使用者使用平台和计算机信息网内部数据结合的通道,可以实现数据传输与数据共享;网络层的主要协议有ICMP、IP、IGMP,主要负责网络中数据包的传送等;而网络访问层,也叫网路接口层或数据链路层,主要协议有ARP、RARP,主要功能是提供链路管理错误检测、对不同通信媒介有关信息细节问题进行有效处理等。

TCP简介
  1. 面向连接、可靠的、基于字节流的传输层通信协议
  2. 将应用层的数据流分割成报文段并发送给目标节点的TCP层
  3. 数据包都有序号,对方收到则发送ACK确认,未收到则重传
TCP的三次握手

ACK:确认序号标志

SYN:同步序号,用于建立连接过程

FIN: finish标志,用于释放连接

“握手”是为了建立连接,TCP三次握手流程图

第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。

第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

TCP的四次挥手

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态;

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序列号为收到序号+1(与SYN相同,一个FIN占用一个序号)Server进入CLOSE_WAIT状态;

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态;

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认为收到序号+1,Server进入CLOSED状态,完成四次挥手。

UDP简介
  1. 面向非连接
  2. 不维护连接状态,支持同时向多个客户端传输相同的消息
  3. 数据包报头只有8个字节,额外开销较小
  4. 吞吐量只受限数据生成效率,传输效率以及机器性能
  5. 尽最大努力交付,不保证可靠交付,不需要维持复杂的链表状态表
  6. 面向报文,不对程序提交的报文信息进行拆分或者合并
TCP和UDP的区别
  1. 面向连接和面向无连接
  2. 可靠性
  3. 有序性(TCP通过序号保证有序)
  4. 速度(TCP通过握手请求耗费时间)
  5. 量级(TCP报文头20个字节,UDP报文头8个字节)
HTTP简介

HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

特点

  1. 支持客户/服务器模式
  2. 简单快速
  3. 灵活
  4. 无连接
  5. 无状态

HTTP请求结构

HTTP请求报文
请求方法 空格 URL 空格 协议版本 回车符 换行符 请求行
头部字段名 值 回车符 换行符 请求头部
…… 请求头部
头部字段名 值 回车符 换行符 请求头部
回车符 换行符
请求正文

请求/响应的步骤

  1. 客户端连接Web服务器
  2. 发送HTTP请求
  3. 服务器接受请求并返回HTTP响应
  4. 释放连接TCP连接
  5. 客户端浏览器解析HTML内容

:memo:在浏览器地址栏输入URL,按下回车之后经历的流程

  1. DNS解析
  2. TCP连接
  3. 发送HTTP请求
  4. 服务器接受请求并返回HTTP响应
  5. 浏览器解析渲染页面
  6. 连接结束

:memo: HTTP状态码 :

1xx:指示信息–表示请求已接受,继续处理

2xx:成功–表示请求已被成功接受、理解、接受

3xx:重定向–要完成请求必须进行更进一步的操作

4xx:客户端错误–请求有语法错误或请求无法实现

5xx:服务器端错误–服务器未能实现合法请求

  1. 200响应成功
  2. 302重定向
  3. 400语法格式错误
  4. 401请求未授权
  5. 403服务器收到请求,但拒绝服务
  6. 404未找到资源
  7. 405请求方法错误
  8. 500服务器内部错误
  9. 503服务器当前不能处理客户端请求,一段时间后可能恢复正常

:memo: GET请求和POST请求的区别

  1. HTTP报文层面:GET将请求信息放在URL,POST放在报文体中、
  2. 数据库层面:GET符合幂等性和安全性,POST不符合
  3. 其他层面:GET可以被缓存、被存储,而POST不行

:memo: Session和Cookie的区别

  1. Cookie数据存放在客户的浏览器上,Session数据存放在服务器上
  2. Session相对于Cookie更安全
  3. 若考虑减轻服务器负担,应当使用Cookie

:memo: HTTP和HTTPS的区别

  1. HTTPS需要到CA申请证书,HTTP不需要
  2. HTTPS密文传输,HTTP明文传输
  3. 连接方式不同,HTTPS默认使用443端口,HTTP使用80端口
  4. HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全