[网络编程] Socket programing - Gukie/learning GitHub Wiki
refer
- https://blog.csdn.net/min996358312/article/details/68969519 (HTTP,Socket与TCP的区别)
- https://blog.csdn.net/li_ning_/article/details/52117463 (TCP与UDP的区别)
HTTP,Socket与TCP的区别
HTTP,Telnet,DNS... 这一层,属于应用层
|
Socket 这一层,是传输层抽象出来的一层,本质是接口,即:传输层的接口
|
TCP, UDP 这一层,是真正的数据传输层
|
IP 这一层,是网络层
HTTP跟Socket的区别
- HTTP,是基于TCP的一个应用层,它建立的链接,大部分都是短链接; 也可以通过配置,建立长链接;建立的链接都是 可靠的,有序的
- Socket,可基于TCP,也可以基于UDP建立链接;建立的链接都是长链接; 基于TCP的socket链接,是可靠有序的,基于UDP的则不可靠
- 通信方式:
- HTTP是基于响应式,即“请求-响应”机制; 客户端如果没有发起请求,服务器无法自动发送响应过去
- Socket的通信,是双工的,即 client跟server,谁先发送消息都可以
- 适用场景:
- HTTP适合于: 不需要长时间在线,比如资源获取,大部分的网站
- Socket适用于: 同时在线,进行聊天,视频
TCP跟UDP的区别
- 是否基于链接
- TCP是基于连接的,即通信之前会通过 三次握手,建立链接,这样发送消息之前,知道对方是否在线
- UPD不是基于链接的,即使对方不在线,也可以发送消息
- 是否可靠
- TCP是可靠的,即数据如果发送失败,有重发机制
- UPD是不可靠的,数据发出去了,就不管了;是否发送成功,需要应用程序里做工作
- 数据是否有序
- TCP发送的数据是有序的;
- UDP发送的数据,是无序的
HTTP是无状态,无链接的网络协议
- refer:
无链接: 每一次请求都是重新建立连接,都是一个新的连接; 为了解决这个问题,就有了keep-alive 无状态: 服务器不会记住客户端请求的信息,后一次的请求,服务器里没有前一次请求的客户端信息; 这就造就了 cookie跟session
cookie vs session
refer
- cookie 存在于客户端,只能支持AscII码等简单等字符串,复杂的不能支持;session可以支持复杂的,比如Java bean
- cookie容易被其他程序窥探到,不安全;私密信息需要加密,而session则不会
- cookie有效期可以很长,而session则是浏览器关闭后,会存储于服务器端,当没有过期的时候,可以重新带上sessionId,这样又可以访问了
- cookie可以支持跨域,而session不行
- 由于session是基于cookie的,当浏览器不支持cookie的时候,可以通过url重写或者增加隐藏的表单字段的形式 支持session
- 所谓URL重写就是在URL后面加上sessionId的字段,将sessionId附上
与 Cookie 相对的一个解决方案是 Session,它是通过服务器来保持状态的。
当客户端访问服务器时,服务器根据需求设置 Session,将会话信息保存在服务器上,同时将标示 Session 的 SessionId 传递给客户端浏览器,浏览器将这个 SessionId 保存在内存中,我们称之为无过期时间的 Cookie。浏览器关闭后,这个 Cookie 就会被清掉,它不会存在于用户的 Cookie 临时文件。
以后浏览器每次请求都会额外加上这个参数值,服务器会根据这个 SessionId,就能取得客户端的数据信息。
如果客户端浏览器意外关闭,服务器保存的 Session 数据不是立即释放,此时数据还会存在,只要我们知道那个 SessionId,就可以继续通过请求获得此 Session 的信息,因为此时后台的 Session 还存在,当然我们可以设置一个 Session 超时时间,一旦超过规定时间没有客户端请求时,服务器就会清除对应 SessionId 的 Session 信息