TCP UDP

147 阅读6分钟
  • TCP

基于连接 打电话,稳定性好,可防止丢包,处理丢包占用内存大,适用于传输安全,一对一

  • Tcp为什么是三次握手? 如果只通过两次或者一次没法确定这个连接是否是过期或者有存在重复的,TCP请求时候会通过序列号进行去重和判断是否过期
  • DNS解析
    • Ip层,tcp层,http层,逐级往上
    • 浏览器自身DNS缓存(缓存内容大概一分钟,大概100条)
    • 系统自身DNS缓存
    • host文件
    • 域名服务器

UDP

基于非来连接 写信,稳定性差,占用内存小,使用于视频语音通话 查询域名,可一对多

TCP/UDP 区别

  • UDP 是不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作
  • UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能
  • 应用程序必须选择合适大小的报文,UDP不会对报文进行压缩和删减
  • UDP通信都不需要建立连接,想发就发,这样的情况肯定不可靠;收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了
  • UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP
  • UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的 UDP | TCP | | | ------ | ---------------------- | ------------------- | | 是否连接 | 无连接 | 面向连接 | | 是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 | | 连接对象个数 | 支持一对一,一对多,多对一和多对多交互通信 | 只能是一对一通信 | | 传输方式 | 面向报文 | 面向字节流 | | 首部开销 | 首部开销小,仅8字节 | 首部最小20字节,最大60字节 | | 适用场景 | 适用于实时应用(IP电话、视频会议、直播等) | 适用于要求可靠传输的应用,例如文件传输

小题大作

  • 入网络延迟是20ms,那么ping一个网站需要多少ms?如果请求一个Https协议的网站,TTFB至少需要多少ms? udp协议只需要来回两次,就是需要40ms,如果使用tcp协议那么需要60ms,三次握手 TTFB:响应第一个返回字节,至少需要120ms,多了一个证书校验80ms
  • 网络请求的过程
    • 通过url进行Dns解析转换为ip
    • Ip进行tcp连接
    • 通过tcp请求发起更底层http请求
    • Http请求连接后,服务器吧http请求回的html发送给浏览器
    • 浏览器解析html is css等运行起来
    • 浏览器渲染 服务器关闭连接
  • 详细描述
    • 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。
    • 如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫hosts的文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。
    • 但是这种操作系统级别的域名解析规程也被很多黑客利用,通过修改你的hosts文件里的内容把特定的域名解析到他指定的ip地址上,造成所谓的域名劫持。所以在windows7中将hosts文件设置成了readonly,防止被恶意篡改。
    • 如果至此还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。
    • 如果LDNS仍然没有命中,就直接跳到Root Server 域名服务器请求解析
    • 根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址
    • 此时LDNS再发送请求给上一步返回的gTLD
    • 接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器
    • Name Server根据映射关系表找到目标ip,返回给LDNS
    • LDNS缓存这个域名和对应的ip
    • LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束
  • TCP面向连接 三次握手四次挥手
    • 面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础
    • 仅支持单播传输,每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。
    • 面向字节流,TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。
    • 可靠传输,对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
    • 提供拥塞控制,当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞
    • TCP提供全双工通信,TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)