网络基础问答

103 阅读7分钟

TCP/IP 协议簇自顶向下包含哪些部分?

  • 应用层协议: HTTP SMTP FTP DNS Telnet
  • 传输层协议: TCP UDP。TCP面向连接,具备拥塞控制机制,全双工(连接双方的进程可以同时收发报文按序发送);UDP 无连接不需要握手,报文乱序
  • 网络层协议: IP ICMP ARP
  • 链路控制协议: RIP OSPF BGP

系统约定网络端口号规则?

周知端口号 0-1023,静态分配,比如 HTTP 80,FTP 21,SSH 22 端口 时序分配的端口号 1024-65535,以保证不同进程可以用不同的端口号通讯

数据包在协议每一层经过了哪些处理加工?

  • 应用层:数据
  • 传输层:TCP 包首部+数据
  • 网络层:IP 包首部 + TCP 包首部+数据
  • 通信链路层: 以太网首部+IP 首部+TCP 包首部+数据

TCP怎么保证可靠性?

  • 通过ack确认机制来保证确认信息收到
  • 通过重传机制(基于超时 和确认信息,可设置重试次数R1(3+)和超时时间R2(100s+))对丢失信息进行重传

应用端将数据交给TCP后就不用管了,他一定能传到所以称之为可靠性。但是udp并不意味着他就不可靠,只是可靠性的保证交给了应用去做

TCP为什么需要3次握手?SYN 洪泛攻击是怎么产生的?

保证连接是双工的,防止已失效的请求报文段突然又传送到了服务端而产生连接误判,服务端空等浪费资源。 例如以下场景: client发出的第一个连接请求报文段在某个网络结点长时间的滞留,以致延误到连接释放以后的某个时间才到达server。server收到此失效的连接请求报文段后误认为是client再次发出的一个新的连接请求,于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了,client不会理睬server对已失效连接报文的确认,server却一直等待client发来数据。这样,server的很多资源就白白浪费掉了。 SYN洪泛攻进正是在三次握手中攻击者发送大量的 TCP SYN的连接请求,但是发送端都不完成握手,导致服务器不断为这些斗开连接分配资源连接被消耗殆尽,属于DDos攻击的一种

TCP为什么需要4次挥手?

在建立连接时,服务端可以同时返回 SYN+ACK;关闭时服务端 收到 FIN 此时可能还在传送数据,所以先回复一个 ACK 告诉 C 已收到 FIN 报文,等传送完再单独发一个 FIN.

四次挥手后,发送方为什么进入 TIME-WAIT?

为了确认接收方收到了最后一个 ACK。
当发送方最后一个 ACK 报文发出并不确定一定到达 接收端,此时等待 2MSL(2 个最大报文段生存时间),如果在等待期间又接到 FIN 报文,说明 ACK 未发送到对方,则重新发送 ACK 再等待 2MSL 重复此过程直到收不到 FIN 关闭。

不论是三次握手还是四次挥手,都是为了【在不可靠的信道上可靠的传输信息】

TCP 半开启 与半关闭是怎么回事?

半开启: 例如通信中一方电源关闭未发送关闭,另一方无法检测对方已下线,导致服务上有很多半开启的 TCP 连接, 属于不正常情况。 半关闭: 一方发起 FIN 报文表示不再主动发送信息通知,但是仍然接收另一方正在发送来的数据,直到收到 FIN 回应 ACK 断开连接

TCP MSS 与 MTU是什么?

主机发送是以报文段(segment)进行的,TCP 将数据流分为多个 chunk,每个 chunk 添加 TCP 标头就形成了报文段,每一个段不能超过最大数据段长度MSS,在报文段经过链路层,链路层有最大传输单元 MTU

TCP慢启动,以及如何知道网络拥堵了?

TCP刚启动时并不是按最大带宽传输数据的,而是将cwnd发送的报文段个数从初始的1 ~2~4~8....进行指数增长,到设定的门限后进入拥塞避免阶段。 TCP每个报文都有一个重传定时器RTO,当超时还没有收到确认报文会进行报文重传,也即认为网络产生拥塞,降低cwnd。

Socket套接字有几种类型?

  • UDP-Datagram

    • Q:UDP 相比 TCP为什么快?

    • A: 相比 TCP,UDP无须三次握手,无连接状态(无收发缓存,拥塞控制,序号和确认号),报文段首部包含信息更小

    • Q: UDP 一定不可靠吗?

    • A: 应用层可以增加确认重传,实现可靠的数据传输( TCP/UDP 报方数据中都有检验和数据,但 UDP对差错没有恢复能力和重传机制)

  • TCP-Stream

    • Q: 怎么实现传输可靠性? A: 通过SEQ序号+ACK确认号
    • Q: 怎么实现发送方和接收方的速率匹配,即流量控制? A: 发送方定期发送窗口探测包,接收方使用receive window给发送方指示到底有多少可用的缓存空间避免数据溢出
  • Raw 直接发送和接收 IP 数据包

HTTP 请求和响应过程是怎样的?

  1. DNS将输入的域名解析成IP,建立 socket 连接
  2. 发请求报文
  3. 接收并处理返回报文
  4. 服务器通知 tcp 断开
  5. 客户端接收完后关闭 TCP

HTTP 报文格式?

  • HTTP 发送报文 : 起始行(方法 URI 版本)+header+正文(可选)
  • HTTP 响应报文: 状态行+ header+正文

使用空格/CRLF 分隔

什么是HTTP Session/Cookie?

客户端请求服务器,服务器生成一块 Session 对象空间,同时生成对应的 sessionid,通过 header set-cookie:JSESSIONID=xxx 设置客户端 cookie,接下来的通信中客户端每次向该服务器发请求都会带上该 包含 sessionid 的cookie。cookie存储在客户端,分为

  • Session Cookies 不包含到期日期,不写入磁盘
  • Persistent Cookie 写入磁盘 Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;

Session的问题: 启用负载均衡的另外一台服务器未存储之前建立连接的session信息, 导致 session 丢失。解决方案包括:

  • 会话保持 nginx: ip_hash 按访问ip的hash分配服务器,每个访客固定访问一个后端服务器
  • 会话复制 Tomcat利用Delta Manager/BackupManager将Session复制到其他节点
  • 会话共享 将session放在统一的地方,比如数据库,或性能更快的分布式kv数据库memcached/redis

什么是反向代理服务器Reverse Proxy?

以代理服务器接收客户端连接请求转发给内网上的服务器,并将请求结果返回给客户端,具有以下几种作用

  • 安全,将符合条件的请求转发到真实服务器
  • 内容缓存
  • 负载均衡

什么是CDN?

通过分布在多个地理位置上的服务器,存储常用资源数据副本,返回给物理位置最近或连接路径通畅的请求用户

其他常用网络协议?

  • DNS
  • P2P 一般用来共享资源提供特定任务,无需中央服务器)
  • TELNET: 远程登陆 明文容易嗅探
  • SSH:使用更强的认证 支持端口转发(port forwarding) 可以将特定端口收到的消息转发到指定 IP 地址和端口,为特定应用进程与服务器建立安全的- 传输管道
  • FTP/SMTP
  • DHCP
  • ICMP
  • ARP