Fork me on GitHub

面试基础 TCP知识点

咳咳,TCP知识点归纳总结一波。作为后端工程师需要了解一些的计算机网络知识点,点到为止即可吧。

计算机网络知识要点

  1. 计算机网络分层
    OSI分层 : 物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
    5层协议: 物理层,数据链路层,网络层,传输层,应用层
  2. IP地址分类
    A类地址:以0开头,第一个字节范围:0~127; 0开始 第1位到第8位 网络标识 后24位主机标识 2^24-2 = 65,777,214 个主机
    B类地址:以10开头,第一个字节范围:128~191; 10开头 从1位到16位 网络标识 后12位主机 2^12 -2 = 65534个主机
    C类地址:以110开头,第一个字节范围:192~223; 110开头 从1位到24位 网络标识 2^8 -2 = 254个
    D类地址:以1110开头,第一个字节范围为224~239;1110 第1位到32位 没有主机标识 用于多播
  3. ARP地址解析协议 address resolution protocol
    ARP是同一个链路层的地址解析协议。每一个主机都会在自己的ARP缓冲区中建立ARP列表,表示IP和MAC的对应关系。当源主机发送数据包到目标主机时,先检查自己的ARP列表中是否有目标IP对应的mac地址。没有的话就发送ARP请求包,其中含有源主机IP地址,MAC地址,目标主机IP地址。网络中的主机收到ARP后会检查自己的ARP列表,存在就发送结果。
  4. DNS域名系统 domain name system
    浏览器发送www.baidu.com的执行过程 1. 客户端浏览器通过DNS解析到网址的IP地址。2.在应用层客户端发送HTTP请求到IP地址。3.在传输层将HTTP回话分成报文段,添加源端口和目标端口。4.网络层,在报文中添加源IP地址和目标地址,并通过路由得到一条从客户端到服务端的路径。5.在链路层,发送ARP请求得到目标的mac地址,发送数据。
  5. TCP和UDP的区别
    TCP是面向连接、可靠的数据流传输,而UDP提供的是非连接,不可靠的数据流传输。TCP注重数据的安全性,而UDP是传输的速度快,安全性一般。
  6. TCP的连接过程 3次握手,4次挥手
    Evernote Snapshot 20170828 222808
  7. TCP的窗口和重发机制
    TCP使用窗口的概念提高发送速度,因为每一次的ack的确认应答造成流量浪费,并且速度慢。
    窗口的大小指无需确认应答而可以继续发送数据的最大值。这个机制是使用了缓冲区。没有确认应答的信号存储在缓冲区中,而不是丢弃。
    某些ack即使丢弃也无需重发,可以通过下一次的ack确认信号来确认。
    2016-11-09 180000
    2016-11-09 175619
  8. TCP的可靠性机制
    TCP的可靠性是相对于UDP的不可靠传输而言的。TCP一定能保证数据到达对方。
    实现TCP的可靠性机制是:
    1.校验和 保证数据没有被破坏
    2.定时器 超时重发
    3.序号 检测丢失的分组和冗余的分组
    4.确认应答ACK 收到3个同样的ACK信号,表示数据丢失,客户端重传 客户端没有收到ACK,超时重发数据包
    5.窗口 增加吞吐量
  9. TCP链接的半开链接
    当客户端和服务端建立TCP链接后,如果客户端掉线,没有主动断开链接和重启系统,服务端就等不到这个数据,浪费资源。TCP链接有SO_KEEP_ALIVE选项,如果在一定的时间内没有数据传输就发送探针,没有响应就移除该链接。
    但是SO_KEEP_ALIVE是基于整个内核维护,所有的socket都会受到影响。可以在应用层来解决这个问题。使用PING PONG心跳机制来解决这个问题。不能再服务端发送,浪费资源。客户端发送,服务端来响应。
  10. TCP的三次握手过程?为什么会采用三次握手,若采用二次握手可以吗?
    建立连接的过程是利用客户服务器模式,假设主机A为客户端,主机B为服务器端。
    TCP的三次握手过程:主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;主机A再次对主机B的确认进行确认。
    采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。
    采用两次握手不行,原因就是上面说的实效的连接请求的特殊情况。
0%