计算机网络总结2

237 阅读7分钟

1.为什么tcp要经过三次握手,四次挥手?

  • a.重要标志位
  1. ACK:tcp协议规定,只有ACK为1的时候报文有效,也就是规定连接建立后,发送的所有报文ACK必须为1
  2. SYN:在连接建立时用于同步序列号,当SYN=1而ACK=0时,表明这是一个连接请求报文,对方若同意连接,则应在响应报文中使用SYN=1和ACK=1,所以,SYN=1表示这是一个请求连接,或连接接受报文。
  3. FIN:终结的意思,用来释放一个连接,当FIN=1时,表明此报文端发送方的数据已经发送完毕,并请求释放连接
  • b.三次握手-》
  1. 第一次握手-》建立连接。客户端发送请求报文段,将SYN=1,Sequence Number为x,然后,客户端进入SYN_SEND状态,等待服务器的确认
  2. 第二次握手-》服务端收到SYN报文段。服务端收到客户端的SYN报文段后,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1,同时,自己还要发送SYN请求,将SYN=1,sequence Number为y;服务端将这些信息(SYN+ACK报文段)放到一个报文段中,一并发送给客户端,然后进入SYN_RECV状态
  3. 第三次握手-》客户端收到服务端的SYN+ACK报文段,然后将acknowledgment number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕后,双方都进入established状态,完成TCP三次握手
  • b.四次挥手
  1. 第一次分手:主机1(可以是客户端,也可以是服务端),设置sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段,此时,主机1进入FIN_WAIT_1状态,表示主机1没有数据要发给主机2了
  2. 第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,ack number为seq number加1,之际1进入FIN_WAIT_2状态,表示同一对方的关闭请求
  3. 主机2向主机1发送FIN报文段,请求关闭连接,然后主机2进入LAST_ACK状态
  4. 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态,主机2收到主机1的ACK报文段后,立即关闭连接,此时主机1如果等待2msl没有收到主机2回复,增明主机2已正常关闭,那么主机1也关闭连接了 c.为什么要有四次挥手?-》因为tcp是全双工模式,收到FIN意味着没有数据再发来,但是还可以继续发送数据

2.TCP的滑动窗口机制

  • a.确认和重传-》接受方收到报文后会进行确认,发送方一段时间没收到确认就会重传
  • b.数据校验-》tcp会对要发送的数据进行分片,接收方缓存为按顺序到达的数据,重新排序后交给应用层
  • c.流程控制-》当接收方来不及接收数据的时候,会提醒发送方传慢点,防止数据丢失
  • d.拥塞控制-》当网络发生拥塞时,减少数据的发送

3.tcp和udp的区别

  • a.基于连接和无连接
  • b.tcl对系统资源要求较多,udp较少
  • c.udp程序结构较简单
  • d.tcp是流模式,udp是数据报模式
  • e.TCP保证数据的正确性,UDP不保证
  • f.TCP保证数据顺序,UDP不保证

4.如何设计在UDP上层保证UDP的可靠性传输

  • a.传输层无法保证数据的可靠传输,只能在应用层实现了,实现方式参照TCP
  1. 添加seq/ack机制,确保数据发送到对端
  2. 添加发送和接收缓冲区,主要用于超时重传
  3. 添加超时重传机制
  • b.具体实现是什么?-》发送端发送数据的时候,生成一个随机的seq=x,然后每一片按照数据大小分配seq,数据到达接收端后存入缓存,并回传一个ack=x的包,表示已经接收到数据,发送端收到ack包后,删除缓冲区对应的数据,定时检查是否需要重传数据

其他重要网络概念

1.socket的断线重连怎么实现,心跳机制怎么实现?

  • a.socket概念-》套接字(socket)是通信的基石,是网络通信中端点的抽象表示,其中包含了网络通信中必备的五种信息
  1. 连接使用的协议
  2. 本地主机的IP地址
  3. 本地进程的协议端口
  4. 远地主机的IP地址
  5. 远地进程的协议端口 应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务
  • b.建立socket连接-》建立socket连接至少需要一对套接字,其中一个运行在客户,称为ClientSocket,另一个运行在服务端,成为ServerSocket,套接字之间的连接过程分为三个步骤
  1. 服务器监听:服务端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络,等待客户端的连接请求
  2. 客户端请求:指客户端的套接字提出连接请求,要连接的目标是客户端的套接字,为此,客户端的套接字需要先描述出它要连接的服务端套接字,指出套接字的地址和端口号,然后向服务端套接字发送连接请求
  3. 连接确认:当服务器端套接字接收到客户端套接字的连接请求时,就响应客户端的连接请求,建立一个新的线程,把服务端的套接字描述发送给客户端,一旦客户端确认了这个描述,双方就证书建立了连接。然后服务端继续处于监听状态,监听其他客户端套接字的连接请求
  • c.socket连接和tcp连接-》Socket可以注定使用的传输层协议,Socket可以支持不同的传输层协议(Tcp/Udp)当使用TCP协议的时候,这个socket连接就是一个TCP连接

  • d.心跳机制的实现-》 客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线,比如qq

2.Cookie与session的作用和原理

  • a.session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群,数据库,文件中
  • c.cookie是客户端保存用户信息的一种机制
  • d.为什么要有session?-》由于HTTP是无状态协议,所以服务端要记录用户状态时,就需要某种机制来识别具体的用户,这个机制就是session,典型场景比如购物车,用来记录哪个用户买了哪些书
  • e.干嘛要有cookie?-》Cookie是服务端生成,发送给浏览器的,用于标识身份,客户端访问浏览器的时候会携带上cookie

常见网络流控制机制

1.浏览器输入地址到返回结果发生了什么?

  1. Dns解析
  2. TCP连接
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报文
  5. 浏览器解析渲染界面
  6. 连接结束

2.如何尽快加载资源(网络优化)?

  • a.能不从网络加载资源就不从,合理使用客户端缓存
  • b.如果必须要从网络加载,则要考虑缩短连接时间,对响应内容进行压缩