TCP
TCP 三次握手和四次挥手、画图、fin_wait,time_wait 状态介绍一下、time_wait如何避免、每一次发送报文的具体格式、拥塞控制机制、报文大小(20B)
UDP
TCP 与 UDP 区别?都适用哪些业务场景?用TCP发大包会出现什么情况?UDP会吗?
UDP报文大小 (8B)
封包和解包
-
TCP 粘包现象:
在做TCP通信的时候,如果需要在一条连接上连续发送不同结构的数据时,可能遇到其中的某些包完整,某些包不完整,也可能遇到某些包包含多个数据。这就是典型的TCP粘包现象。TCP粘包现象是指在使用TCP通信的时候,一个完成的消息可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包进行发送。 -
TCP 粘包原因
1、由Nagle算法造成的发送端的粘包。发送端需要等缓冲区满才发送数据出去,这就有可能把多个小的包封装成一个大的数据包进行发送。
2、接收端接收不及时造成的接收端粘包。TCP会把接收到的数据存在自己的缓冲区中,然后通知应用层取数据。当应用层不能及时的把TCP的数据取出来,就会造成缓冲区中存放了多个MSS数据。 - 为了解决 "粘包" 问题,大家通常会在所发送的内容前,加上发送内容的长度,所以对方会先收 4 Byte ,解析获得接下来需要接收的长度,再进行收包
- 对于 UDP 来说就不存在拆包问题。因为 UDP 是个 '数据包' 协议,也就是两段数据间是有界限的,在接收端要么接收不到数据要么就是接收一段完整的数据,不会少接收也不会多接收
HTTP vs HTTPS
了解多少?HTTP状态码了解多少?HTP头部有哪些字段?
cookie 和 session 区别
参考1 参考2
Session 是服务器用来跟踪用户的一种手段,每个 Session 都有一个唯一标识:Session ID。当服务器创建了一个 Session 时,给客户端发送的响应报文就包含了 Set-Cookie 字段,其中有一个名为 sid 的键值对,这个键值对就是 Session ID。客户端收到后就把 Cookie 保存在浏览器中,并且之后发送的请求报文都包含 Session ID。HTTP 就是 Session 和 Cookie 这两种方式一起合作来实现跟踪用户状态的,而 Session 用于服务器端,Cookie 用于客户端。
DNS 域名系统
- DNS 是因特网使用的命名系统,用来把便于人们记忆的含有特定含义的主机名(www.baidu.com) 转换为便于机器处理的 IP 地址
- DNS 采用客户/服务器模型,其协议运行在 UDP 之上,使用 53 号端口
- 浏览器输入 www.baidu.com 发生的事
1,浏览器分析链接指向页面的URL (www.baidu.com)
2,浏览器向 DNS 请求解析 www.baidu.com 的 IP 地址
3,域名系统 DNS 解析出百度服务器的 IP 地址
4,浏览器与该服务器建立 TCP 链接 (默认端口号80)
5,浏览器发出 HTTP 请求: GET 百度首页面
6,服务器通过 HTTP 响应把文件 (首页面) 发送给浏览器
7,TCP 连接释放
8,浏览器将文件 (首页面) 进行解释,并将 web 页显示给用户
常见web安全问题,SQL注入、XSS、CSRF,基本原理以及如何防御
XSS(跨站脚本攻击):用户过分信任网站,放任来自浏览器地址栏代表的那个网站代码在自己本地任意执行。如果没有浏览器的安全机制限制,xss代码可以在用户浏览器为所欲为;
CSRF(跨站请求伪造):网站过分信任用户,放任来自所谓通过访问控制机制的代表合法用户的请求执行网站的某个特定功能。
XSS(盗用用户的身份)原理上利用的是浏览器可以拼接成任意的javascript,然后黑客拼接好javascript让浏览器自动地给服务器端发出多个请求(get、post请求)。
CSRF(服务端程序员背锅,没验证好)原理上利用的是网站服务器端所有参数都是可预先构造的原理,然后黑客拼接好具体请求****url,可以引诱你提交他构造好的请求。
协议
RIP,BGP,ARP了解多少说多少
地址解析协议 ARP(Address Resolution Protocol)
网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。
ARP 实现由 IP 地址得到 MAC 地址。
每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。
如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。
网际控制报文协议 ICMP(Internet Control Message Protocol)
ICMP 报文分为差错报告报文和询问报文。1、 Ping
- Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。
- Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
2、Traceroute
- Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。
- Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。
- 源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
- 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
- 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
- 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。
路由选择协议 RIP OSPF BGP
网际组管理协议 IGMP(Internet Group Management Protocol)
其他
- socket编程,recv返回收到包是真的收到包了吗?会用 socket 吗?
- get 和 post 区别 参考1 参考2
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连
POST把提交的数据则放置在是HTTP包的包体中。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。