客户端|这可能是你见过最全面的网络安全面试题了——入门篇( 四 )


TCP 与 UDP 区别总结?1.TCP 面向连接(如打电话要先拨号建立连接)提供可靠的服务;UDP 是无连接的 , 即发送数据之前不需要建立连接 , ;UDP 尽最大努力交付 , 即不保证可靠交付 。 (由于 UDP 无需建立连接 , 因此 UDP 不会引入建立连接的时延 , TCP 需要在端系统中维护连接状态 , 比如接受和发送缓存 , 拥塞控制 , 序号与确认号的参数等 , 故 TCP 会比 UDP 慢)
2.UDP 具有较好的实时性 , 工作效率比 TCP 高 , 适用于对高速传输和实时性有较高的通信或广播通信 。
3.每一条 TCP 连接只能是一对一的;UDP 支持一对一 , 一对多 , 多对一和多对多的交互通信
4.UDP 分组首部开销小 , TCP 首部开销 20 字节;UDP 的首部开销小 , 只有 8 个字节 。

  1. TCP 面向字节流 , 实际上是 TCP 把数据看成一连串无结构的字节流;UDP 是面向报文的(一次交付一个完整的报文 , 报文不可分割 , 报文是 UDP 数据报处理的最小单位) 。
6.UDP 适合一次性传输较小数据的网络应用 , 如 DNS , SNMP 等
什么是三次握手四次挥手?tcp 为什么要三次握手?为了防止已失效的连接请求报文段突然又传送到了服务端 , 因而产生错误第一次握手:建立连接时 , 客户端发送 syn 包(syn=j)到服务器 , 并进入 SYN_SEND 状态 , 等待服务器确认;
第二次握手:服务器收到 syn 包 , 必须确认客户的 SYN(ack=j+1) , 同时自己也发送一个SYN 包(syn=k) , 即 SYN+ACK 包 , 此时服务器进入 SYN_RECV 状态;
第三次握手:客户端收到服务器的 SYN+ACK 包 , 向服务器发送确认包 ACK(ack=k+1) , 此包发送完毕 , 客户端和服务器进入 ESTABLISHED 状态 , 完成三次握手 。
完成三次握手 , 客户端与服务器开始传送数据客户端先发送 FIN , 进入 FIN_WAIT1 状态 , 用来关闭 Client 到 Server 的数据传送服务端收到 FIN , 发送 ACK , 进入 CLOSE_WAIT 状态 , 客户端收到这个 ACK , 进入 FIN_WAIT2状态
服务端发送 FIN , 进入 LAST_ACK 状态 , 用来关闭 Server 到 Client 的数据传送
客户端收到 FIN , 发送 ACK , 进入 TIME_WAIT 状态 , 服务端收到 ACK , 进入 CLOSE 状态(等待 2MSL 时间 , 约 4 分钟 。 主要是防止最后一个 ACK 丢失 。 )
第一次挥手:主动关闭方发送一个 FIN , 用来关闭主动方到被动关闭方的数据传送 , 也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然 , 在 fin 包之前发送出去的数据 , 如果没有收到对应的 ack 确认报文 , 主动关闭方依然会重发这些数据) , 但是 , 此时主动关闭方还可 以接受数据 。
第二次挥手:被动关闭方收到 FIN 包后 , 发送一个 ACK 给对方 , 确认序号为收到序号+1(与SYN 相同 , 一个 FIN 占用一个序号) 。
第三次挥手:被动关闭方发送一个 FIN , 用来关闭被动关闭方到主动关闭方的数据传送 , 也就是告诉主动关闭方 , 我的数据也发送完了 , 不会再给你发数据了 。
第四次挥手:主动关闭方收到 FIN 后 , 发送一个 ACK 给被动关闭方 , 确认序号为收到序号+1 , 至此 , 完成四次挥手 。
GET 和 POST 的区别get 是获取数据 , post 是修改数据
get 把请求的数据放在 url 上 ,以?分割 URL 和传输数据 , 参数之间以&相连 , 所以 get 不太安全 。 而 post 把数据放在 HTTP 的包体内(requrest body)
get 提交的数据最大是 2k( 限制实际上取决于浏览器) ,post 理论上没有限制 。
GET 产生一个 TCP 数据包 , 浏览器会把 http header 和 data 一并发送出去 , 服务器响应 200(返回数据); POST 产生两个 TCP 数据包 , 浏览器先发送 header , 服务器响应 100 continue , 浏览器再发送 data , 服务器响应 200 ok(返回数据) 。