提纲:

🔥Socket

  • 概念

  • Socket函数

🎈面试八股真题

  • 1、HTTP 响应码有哪些?分别代表什么含义?

  • 2、Forward 和 Redirect 的区别?

  • 3、Get 和 Post 请求有哪些区别?

  • 4、说说TCP 与UDP 的区别,以及各自的优缺点

  • 5、说一下HTTP 和HTTPS 的区别

  • 6、说说HTTP、TCP、Socket 的关系是什么?

  • 7、说一下HTTP的长连接与短连接的区别

  • 8、TCP 为什么要三次握手,两次不行吗?为什么?

  • 9、说一下 TCP 粘包是怎么产生的?怎么解决粘包问题的?

  • 10、TCP 如何保证可靠性

  • 11、浏览器中输入:“https://zhiy.cc/getoffer”之后都发生了什么?

  • 12、说说HTTP协议与TCP/IP协议的关系

  • 13、如何理解HTTP协议是无状态的?

  • 14、说说长连接短连接的操作过程

  • 15、OSI这样分层有什么好处

  • 16、IP 地址分为几类,每类都代表什么,私网是哪些?
  • 17、负载均衡是怎么做的?

一、Socket

1. 概念

  • 网络应用编程接口,网络之间进程通过Socket通信

  • 位于用户应用程序(应用层)与传输层(TCP/UDP)之间的一个抽象层,主要提供一组接口来组织数据,使其符合对应的传输层协议,例如socket()、connect()、write()、read()等方法,即 “打开连接-->数据I/O-->关闭连接” 的一套方法

2.Socket函数

  • 1、socket():创建socket时可指定domain、type、protocol

    • domain -- 协议域/协议族,用来表示采用什么样的协议族来确定传输的目标地址,例如AF_INET采用IPV4和16位端口号组合

    • type -- socket类型,主要有流式套接字Stream,数据报Dgram,原始Raw

    • protocol -- 传输协议,主要有TCP,UDP,TICP等,要与type配合使用,例如UDP面向数据报传输,使用Dgram而不是Stream

  • 2、bind():创建socket时为socket绑定一个端口(地址),通常服务端需要绑定,客户端不需要

  • 4、connect():客户端建立连接的请求

  • 3、listen():服务端监听绑定的socket,接收连接请求connect()

  • 5、accept():接收socket连接,可以开始I/O

  • 6、read() & write() / recv() & send() / recvmsg() & writemsg() :网络I/O读写

  • 7、close():将socket描述字的引用计数-1,当归零时关闭TCP连接

二、面试八股真题🎈🎈🎈

1、HTTP 响应码有哪些?分别代表什么含义?

  • 200:成功,Web 服务器成功处理了客户端的请求。

  • 301:永久重定向,当客户端请求一个网址的时候,Web 服务器会将当前请求重定向到另一个网址,搜索引擎会抓取重定向后网页的内容并且将旧的网址替换为重定向后的网址。

  • 302:临时重定向,搜索引擎会抓取重定向后网页的内容而保留旧的网址,因为搜索引擎认为重定向后的网址是暂时的。

  • 400:客户端请求错误,多为参数不合法导致 Web 服务器验参失败。

  • 404:未找到,Web 服务器找不到资源。

  • 500:Web 服务器错误,服务器处理客户端请求的时候发生错误。

  • 503:服务不可用,服务器停机。

  • 504:网关超时。

2、Forward 和 Redirect 的区别?

  • 浏览器 URL 地址:Forward 是服务器内部的重定向,服务器内部请求某个 servlet,然后获取响应的内容,浏览器的 URL 地址是不会变化的;Redirect 是客户端请求服务器,然后服务器给客户端返回了一个 302 状态码和新的 location,客户端重新发起 HTTP 请求,服务器给客户端响应 location 对应的 URL 地址,浏览器的 URL 地址发生了变化。

  • 数据的共享:Forward 是服务器内部的重定向,request 在整个重定向过程中是不变的,request 中的信息在 servlet 间是共享的。Redirect 发起了两次 HTTP 请求分别使用不同的request。

  • 请求的次数:Forward 只有一次请求;Redirect 有两次请求。

3、Get 和 Post 请求有哪些区别?

  • 用途:

    • get 请求用来从服务器获取资源

    • post 请求用来向服务器提交数据

  • 表单的提交方式:

    • get 请求直接将表单数据以 name1=value1&name2=value2 的形式拼接到 URL 上(http://www.baidu.com/action?name1=value1&name2=value2),多个参数参数值需要用 & 连接起来并且用 ? 拼接到 action 后面;

    • post 请求将表单数据放到请求头或者请求的消息体中。

  • 传输数据的大小限制:

    • get 请求传输的数据受到 URL 长度的限制,而 URL 长度是由浏览器决定的;

    • post 请求传输数据的大小理论上来说是没有限制的。

  • 参数的编码:

    • get 请求的参数会在地址栏明文显示,使用 URL 编码的文本格式传递参数;

    • post 请求使用二进制数据多重编码传递参数。

  • 缓存:

    • get 请求可以被浏览器缓存被收藏为标签;

    • post 请求不会被缓存也不能被收藏为标签。

4、说说TCP 与UDP 的区别,以及各自的优缺点

  • 1、TCP面向连接(如打电话要先拨号建立连接):UDP是无连接的,即发送数据之前不需要建立连接。

  • 2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

  • 3、UDP具有较好的实时性,工作效率比TCP高,适用于对