[网络编程] Socket programing - Gukie/learning GitHub Wiki

refer

HTTP,Socket与TCP的区别

HTTP,Telnet,DNS...    这一层,属于应用层    
 |
Socket                这一层,是传输层抽象出来的一层,本质是接口,即:传输层的接口
 |
TCP, UDP              这一层,是真正的数据传输层
 |
IP                    这一层,是网络层

HTTP跟Socket的区别

  1. HTTP,是基于TCP的一个应用层,它建立的链接,大部分都是短链接; 也可以通过配置,建立长链接;建立的链接都是 可靠的,有序的
  2. Socket,可基于TCP,也可以基于UDP建立链接;建立的链接都是长链接; 基于TCP的socket链接,是可靠有序的,基于UDP的则不可靠
  3. 通信方式:
  • HTTP是基于响应式,即“请求-响应”机制; 客户端如果没有发起请求,服务器无法自动发送响应过去
  • Socket的通信,是双工的,即 client跟server,谁先发送消息都可以
  1. 适用场景:
  • HTTP适合于: 不需要长时间在线,比如资源获取,大部分的网站
  • Socket适用于: 同时在线,进行聊天,视频

TCP跟UDP的区别

  1. 是否基于链接
  • TCP是基于连接的,即通信之前会通过 三次握手,建立链接,这样发送消息之前,知道对方是否在线
  • UPD不是基于链接的,即使对方不在线,也可以发送消息
  1. 是否可靠
  • TCP是可靠的,即数据如果发送失败,有重发机制
  • UPD是不可靠的,数据发出去了,就不管了;是否发送成功,需要应用程序里做工作
  1. 数据是否有序
  • 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 信息