美文网首页
网络资料总结3

网络资料总结3

作者: 梦工厂 | 来源:发表于2018-09-20 20:46 被阅读24次

传输层相关

一 TCP
1.1 TCP状态
  1. TCP连接的建立和终止
  2. 理解TCP的三次握手,四次挥手
    TCP 为什么是三次握手,为什么不是两次或四次?关键在于序列号的同步
  3. TCP发送RST场景
    • 一方为close,一方为established;
    • 白名单黑名单限制连接;
  4. TCP三次握手各种异常
    Q:向一个不存在但合法的公网IP任意端口发送SYN包会出现什么情况?
    A:返回ICMP主机不可达。
    Q:向一个存在的IP但未绑定的端口发送SYN包会出现什么情况?
    A:返回TCP RST segment。
    Q: 第一个SYN包丢失了,客户主机(主动连接方)会采取什么动作?
    A:重传,重试几次后(一般是3次)失败后,连接失败。
    Q: 为什么连接建立的过程作3次TCP segment交互,而不是4次?
    A:Server端的SYN&ACK在一个TCP segment传给了Client。
    Q:什么情况下将会出现4次TCP segment交互?
    A: 连接的两端同时打开。
    Q: 第二个SYN2(就是图示中的SYN2+ACK1)丢失了,将出现什么情况?
    A: Client收不到SYN2而不发送ACK2,Server端将超时重发。
    Q: ACK2丢失了将会怎样?
    A: Server端认为Client没收到SYN2+ACK1,重发SYN2+ACK1;另外连接处于未完成的状态,如果出现大量的ACK2丢失,未完成的连接队列会出现“满”的状态,从而不能再接收SYN1。这就是DOS。
1.2 TCP可靠性
  1. 通过序列号和确认应答提高可靠性,重传机制;
  2. 滑动窗口
    • 流量控制
      针对的是发送方和接收方速度不匹配的问题,流量控制是由接收方控制的,发送方始终是被迫调整至与接收方同步。
    • 拥塞控制主要是四个算法:1)慢启动,2)拥塞避免,3)拥塞发生,4)快速恢复
  3. 建立连接,三次握手四次挥手
1.3 TCP粘包与拆包
  1. 针对tcp是字节流协议,问:比如说发送方发了10个包,接收方要怎么知道包的个数呢?
    • 使用固定长度的消息,报文长度不够的时候用无效数据填充。
    • 使用换行字符来分割不同的报文。
    • 把消息分为消息头和消息体两个部分,在消息头中添加消息长度的字段。
二 其他
  1. 端口
    端口被分为三类:著名端口、监听端口和动态端口。

    • 著名端口:通常被用于系统进程。
      这些端口一个显著特征就是限定在0~1023,并且在Linux/UNIX平台均需要 Root权限才能监听这些端口。
      常见的著名端口有:FTP:21、SSH:22、SMTP:25、HTTP:80、HTTPS:443等。
    • 监听端口:用来运行各种用户自己写的服务,服务监听在这些端口下不需要特别的权限。
    • 动态端口:动态端口通常被用来在主动发起连接时随机分配使用。
      0~65535除去上述著名端口、监听端口两种端口号,剩下的端口都是备用的动态端口。
  2. TCP与UDP的区别与适用场景
    TCP:面向有连接的传输层协议,可以保证通信两端主机之间的通信可达;
    可以正确的处理传输过程中丢包、传输乱序等异常情况;还能有效利用带宽,缓解网络拥堵。
    UDP:面向无连接的传输层协议,不关注对端是否真的收到传送的数据;
    如需检查对端是否收到分组数据包,或对端是否连接到网络,需要在应用程序中实现。
    常用于分组数据较少或多播。广播通信及视频通信等领域。

  3. TCP、UDP数据包大小的限制
    UDP 包的大小就应该是 1500 - IP头(20) - UDP头(8) = 1472(Bytes)
    TCP 包的大小就应该是 1500 - IP头(20) - TCP头(20) = 1460 (Bytes)

  4. 为什么说TCP报文段是面向字节流的,UDP包是面向数据报的
    问题的关键在于TCP是有缓冲区,作为对比,UDP面向报文段是没有缓冲区的。
    TCP发送报文时,是将应用层数据写入TCP缓冲区中,然后由TCP协议来控制发送这里面的数据,而发送的状态是按字节流的方式发送的,跟应用层写下来的报文长度没有任何关系,所以说是流。
    作为对比的UDP,它没有缓冲区,应用层写的报文数据会直接加包头交给网络层,由网络层负责分片,所以是面向报文段的。

  5. 如果要主动关闭连接,如何保证对方已经收到全部数据?
    调用shutdown函数,先关闭写半连接,此时仍然保留读连接,直到read 返回0(表明对端已经发起关闭写连接),然后再关闭读半连接。(即下图的客户端)


    image

    顺便说一下,close和shutdown的区别。主要有两个:

    1. Close把描述符的引用计数减1,仅在该计数变为0时才关闭套接字。而使用shutdown可以不管引用计数就激发TCP的正常连接终止序列。
    2. Close终止读和写两个方向的数据传送。但有时候我们需要告知对端我们完成了数据发送,但对端仍有数据要发送给我们,这时就需要使用shutdown。
      注意!套接字的半关闭指的是 关闭连接的写这一半。

相关文章

  • 网络资料总结3

    传输层相关 一 TCP 1.1 TCP状态 TCP连接的建立和终止 理解TCP的三次握手,四次挥手TCP 为什么是...

  • 网络资料总结2

    网络层相关 一 IP 1.1 IP协议 ​ 子网掩码、默认网关 10.100.122.2/24 ​ 广播地...

  • 网络资料总结0

    问题列表 小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?

  • 网络资料总结1

    应用层相关 一 HTTP:超文本传输协议 HTTP学习笔记1:HTTP报文 请求报文和响应报文结构请求报文是由请求...

  • 自动化运维工具Ansible使用介绍

    本文主要内容均收集于网络上的博文资料,仅以此文作为学习总结。BTW,目前Ansible对python3的支持还不是...

  • 【摘录】产品---竞品分析

    今天对网络上的一些产品的竞品分析资料进行吸收,今天做一个归类总结:所有资料都来源于网络。 一、竞品分析的目的 首先...

  • 简书记录原则

    1..故事经历/总结 2.资料来源学习方法 3.

  • Android 开发资料总结--网络请求框架

    最近打算好好整理下之前保存过的关于Android的一些文章,网站,资源等,由于数量还是不少的,而且也会持续更新,所...

  • ios 资料大全

    一、IOS资料汇总 1.iOS 资料合集2.iOS超全开源框架、项目和学习资料汇总(3)网络和Model篇 二、I...

  • 2019-03-27

    雷雁雄3月27日总结:今天整理智慧社区资料,准备明天出差。

网友评论

      本文标题:网络资料总结3

      本文链接:https://www.haomeiwen.com/subject/jjxonftx.html