计算机网络面试知识点整理

1. TCP 报头格式

             

55dc4e84-573d-4c13-a765-52ed1dd251f9.png

  1. 源端口和目的端口,各占两个字节,分别被写入源端口和目的端口;
  2. 序号,占4个字节,TCP连接中传送的字节流每个字节都按顺序编号;
  3. 确认号,占4个字节,是期望收到对方下一个报文的第一个数据字节的序号;
  4. 数据偏移,占4位,它指出TCP报文的数据距离TCP报文段的起始处有多远,即报文首部的长度;
  5. 保留,占6位,保留今后使用,但目前都为0;
  6. 紧急URG,当 URG = 1,表明紧急指针字段有效。告诉系统此报文段中有紧急数据;
  7. 确认ACK,仅当 ACK = 1时,确认号字段才有效。TCP 规定,在连接建立后,所有报文的传输都必须把ACK置1;
  8. 推送PSH,当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收回对方的响应,这时候就将PSH 置1;
  9. 复位RST,当 RST = 1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接;
  10. 同步SYN,在连接建立时用来同步序号。当 SYN = 1,ACK = 0 时,表明是连接请求报文,若同意连接,则响应报文中应该使SYN = 1,ACK = 1;
  11. 终止FIN,用来释放连接。当FIN = 1, 表明此报文的发送方的数据已经发送完毕,并且要求释放;
  12. 窗口,占两个字节,指的是通知接收方,发送本报文需要有多大的空间来接收;
  13. 检验和,占两个字节,校验首部和数据两个部分;
  14. 紧急指针,占两个字节,指出本报文段中的紧急数据的字节数;
  15. 选项,长度可变,定义一些其他的可选参数。

2. UDP 报头格式

d4c3a4a1-0846-46ec-9cc3-eaddfca71254.jpg

首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的。

3. TCP/UDP 区别

  • 用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付没有拥塞控制面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。

  • 传输控制协议 TCP(Transmission Control Protocol)是面向连接的提供可靠交付,有流量控制,拥塞控制提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。

区别:

TCP 面向连接,可靠,基于字节流;UDP 面向无连接,不可靠,基于数据报。对于连接而言,其实真正的连接是不存在的,TCP 面向连接只不过是三次握手在客户端和服务端之间初始化好了序列号。只要确定序列号和确认号,那客户端和服务端之间发送的消息就有效,就可以正常接收。基于字节流是指,对于读写并没有相对应的次数。而UDP 没有三次握手,且发送数据是只有一个发送和一个接收,基于数据报,因此不可靠。

应用场景:

用哪个协议都不是绝对的,需要看具体的应用场景有什么需求。对于TCP 而言,更加注重的是可靠性,而不是实时性,如果我发送的数据很重要一点错误都不能有,有延迟无所谓的话,那就选择TCP;而UDP 更加注重的是速度快,即实时性,却不要求可靠性,比如直播,那么就应该选择UDP了。

4. TCP 三次握手、四次挥手

  • 三次握手

e92d0ebc-7d46-413b-aec1-34a39602f787.png

最开始的时候,客户端和服务端都是处于CLOSED状态。主动打开连接的是客户端,被动打开连接的是服务端。

  1. TCP 服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
  2. TCP 客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这时报文首部中的同步位 SYN = 1,同时选择一个初始序列号 seq = x,此时,TCP客户端进程进入 SYN-SENT (同步已发送)状态。TCP 规定,SYN 报文段(SYN= 1的报文段)不能携带数据,但需要消耗掉一个序号。
  3. TCP 服务器收到请求报文后,如果同意连接,则发出确认报文:SYN = 1, ACK = 1,确认号是 ack = x+1,同时也要自己初始化一个序列号 seq = y,此时,TCP 的服务器进程进入了 SYN-RCVD (同步收到)状态。这个报文也不能携带数据,但是同样要消耗掉一个序号。
  4. TCP 客户端收到确认后,还要向服务器给出确认。确认报文的 ACK = 1, ack = y+1,同时自己的序列号为seq = x+1,此时,TCP 连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
  5. 当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。

为什么TCP客户端最后还要发送一次确认呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值