常用协议的区别
IP : 无连接的 , 不可靠, 无序的
TCP : 面向连接, 可靠的, 基于字节流, 全双工 (排序+控制)
UDP: 面向事务 , 无序的, 基于数据报
HTTP: 面向短连接 , 无状态 , 可靠的
Websocket: 面向长连接 , 有状态 , 可靠的 (类似TCP的机制), 全双工
HTTP为什么不延续TCP的长连接特性?
HTTP是无状态的, TCP是面向连接的
TCP设计的需求是 : 数据可靠传输 (设计支持长连接)
HTTP设计的需求是: 数据可靠(TCP特性), 高效率; 至于状态维护并不是必须的内容;
HTTP使用了TCP提供的部分功能, 为了高效传输舍弃了TCP的长连接(使用短连接)
个人猜测: 互联网设计之初的目标是指定地址, 访问页面, 因此是请求-回应的模式, 为了效率考虑设计了HTTP1.0, 后来的发展才有了状态的需求, 于是设计了websocket
HTTP 请求/响应 构成?
HTTP 请求 = 状态行 + 请求头 + 消息主体
状态行 = 请求方式 + url + 版本号
HTTP 响应 = 状态行 + 响应头 + 消息主体
状态行 = 版本号 + 状态码 + 状态描述
POST和GET的异同?
都是HTTP下的请求方式;
- GET更简单, 速度更快; POST需要封装数据
- POST相对于明文显示数据的GET方法显得更安全
- GET发送的数据只能是文本格式, 长度小于1024字节; POST能发送文本 + 二进制格式, 只有POST可以配合使用enctype发送文件
TCP与UDP的区别?
- UDP没有重发, 没有状态, 是不可靠的高效传输协议
- UDP的数据报是有长度限制的
- UDP支持广播和单播
- UDP是无状态的, 不需要三次握手/四次挥手
TCP为什么是面向连接的协议?
- 使用长连接机制
- 有状态(对端双方都知道自己发出去的包是否被对方接收)
- 有数据控制(重发/重排序/流量控制/剔除重复/数据校验)
长连接如何减少连接浪费?
- 关闭长时间无请求的连接
- 限制客户端最大连接数
- 启用心跳机制, 对离线设备断开连接
TCP/IP 四层结构 / OSI 7 层结构
层级结构 | 常见协议 |
---|---|
应用层 | FTP(TCP) ,SSH, HTTP(TCP), SMTP / POP3, TELNET , DHCP(UDP) , DNS |
传输层 | TCP + UDP |
网络层 | IP , ICMP(ping), IGMP, ARP,RARP |
(物理)链路层 | Wi-Fi, ethernet |
网友评论