[面经汇总](五)计算机网络

TCP

TCP为什么三次握手,两次会产生什么问题,第三次握手失败怎么处理
  • 为了实现可靠数据传输,TCP通信双方需要维护一个序列号以表示发出的数据包哪些被对方接收;三次握手即是通信双方互相告知序列号起始值并确认对方已经收到的必须步骤
  • 只是两次握手之多只有连接发起方的的起始序列号能被确认,另一方得不到确认,只能保证单向连接通畅
  • 失败时服务器不会重传ACK报文而是直接发送RTS报文段进入CLOSED状态防止SYN泛洪攻击
Time_wait这个状态是怎么产生的
  • 主动发起连接关闭的一方再发送最后一个ACK后进入TIME_wait状态等待2MSL时间后回到初始状态(closed)
  • 等待2msl是为了确保最后一次发送的ACK被对方接收
编程过程中处理过tcp的断开吗
TCP拥塞控制
TCP协议为什么可靠?报文传输的结构
TCP常见状态
  • LISTEN
  • SYN-SENT
  • SYN-RECEIVED
  • ESTABLISHED
  • FIN-WAIT-1
  • FIN-WAIT-2
  • CLOSE-WAIT
  • CLOSING
  • LAST-ACK
  • TIME-WAIT
  • CLOSED

Http

HTTPs怎么加密
HTTPS的SSL握手过程(重点)
http请求如何区分请求头/请求体

http请求头和请求体间有换行符/r/n

web

Cookie和Session的区别
重定向和请求转发
  • 重定向在客户端完成,地址栏url会改变;转发在服务端完成,地址栏url不会改变
  • 重定向是两次不同请求,速度慢;转发是一次请求更快

Socket

socket通信服务端代码流程

服务端

  • socket()创建一个套接字
  • bind()绑定监听IP+port
  • Listen()设置监听队列
  • Accept()循环等待客户端连接
  • Receive()接收客户端数据
  • Send()向客户端发送数据
  • close()

客户端

  • socket()
  • connect()请求连接服务器
  • send()发送数据
  • Receive()接收服务端数据
  • close()关闭客户端socket
网络编程代码实现

Linux相关

怎么查看TCP链接状态,TCP状态有哪些

查看系统TCP连接:netstat

	netstat -atn
	-a 显示所有socket
	-t 显示tcp连接情况
	-n 以ip代替名称

	可以用awk对输出文本进行编辑输出
查看端口

netstat -anp | grep 目标端口号

系统相关

如果打开一个网站慢了是什么原因
CPU满了怎么处理
服务器负载过高定位
  • 登录服务器执行 top 命令查看CPU占用情况,可以定位到CPU使用率较高的进程

      $top
         PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
        1893 admin     20   0 7127m 2.6g  38m S 181.7 32.6  10:20.26 java
    
  • 定位进程相关的线程 top -Hp 进程PID

      $top -Hp 1893
         PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
        4519 admin     20   0 7127m 2.6g  38m R 18.6 32.6   0:40.11 java
    
  • 将线程PID转为16进制格式 prinf

     $printf %x 4519
     11a7
    
  • 通过jstack查看栈信息,查看可能出现问题的代码

      $sudo -u admin  jstack 1893 |grep -A 200 11a7
      "HSFBizProcessor-DEFAULT-8-thread-5" #500 daemon prio=10 os_prio=0 tid=0x00007f632314a800 nid=0x11a2 runnable [0x000000005442a000]
         java.lang.Thread.State: RUNNABLE
        at sun.misc.URLClassPath$Loader.findResource(URLClassPath.java:684)
        at sun.misc.URLClassPath.findResource(URLClassPath.java:188)
        at java.net.URLClassLoader$2.run(URLClassLoader.java:569)
        at java.net.URLClassLoader$2.run(URLClassLoader.java:567)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findResource(URLClassLoader.java:566)
        at java.lang.ClassLoader.getResource(ClassLoader.java:1093)
        at java.net.URLClassLoader.getResourceAsStream(URLClassLoader.java:232)
        at org.hibernate.validator.internal.xml.ValidationXmlParser.getInputStreamForPath(ValidationXmlParser.java:248)
        at org.hibernate.validator.internal.xml.ValidationXmlParser.getValidationConfig(ValidationXmlParser.java:191)
        at org.hibernate.validator.internal.xml.ValidationXmlParser.parseValidationXml(ValidationXmlParser.java:65)
        at org.hibernate.validator.internal.engine.ConfigurationImpl.parseValidationXml(ConfigurationImpl.java:287)
        at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:174)
        at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)
        at com.test.common.util.BeanValidator.validate(BeanValidator.java:30)
    
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页