zoukankan      html  css  js  c++  java
  • 【网络】TCPIP知识汇总

    1.OSI模型个TCP/IP模型区别

     2.Unix以及类Unix操作系统演变

     3.SSH协议(安全外壳协议)

    通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。

    使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度

    SSH有很多功能,它既可以代替Telnet,又可以为FTPPoP、甚至为PPP提供一个安全的"通道" 

    两种验证方式:

    基于口令:利用账号和口令 登录远程主机,与服务器传输数据,数据是加密的,但不保证服务器不被中间人替代。

    基于密钥:你生成一对密钥,一个放在服务器,一个在自己这,连接SSH服务器时,需要服务器比较你的密钥。

    SSH三层协议:

    SSH-TRANS传输层协议

    SSH-AUTH用户认证协议

    SSH-CONN连接协议

    4.套接字四元组

    (源ip 源端口,目的ip 目的端口)

    5.保留网段:

    IPv4协议中有三段不会被公网使用,留在内部网络使用

    6.域名分类及DNS分类

    7.子网掩码是什么?

    子网掩码它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。

    子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址主机地址两部分

    (子网掩码的网络位全为1  比如255.255.255.0)

    8.子网掩码的作用:

    将子网掩码取反,然后与本机ip地址进行与运算,得出两台主机是否在一个子网内。

    分离出IP地址中的网络地址和主机地址,用于判断该IP地址是在局域网上,还是在广域网上。

    子网掩码一般用于将网络进一步划分为若干子网,以避免主机过多而拥堵或过少而IP浪费。

    例如:设IP地址为192.168.10.2,子网掩码为255.255.255.240,那么子网掩码是怎样来区分网络地址和主机地址的呢。

    主机地址为:0.0.0.2(将掩码取反,然后与运算)

     

    9.TCP与UDP的套接字的区别

    TCP,又被叫做字节流套接字(Stream Socket),UDP也有一个类似的叫法, 数据报套接字(Datagram Socket),

    一般分别以“SOCK_STREAM”与“SOCK_DGRAM”分别来表示TCP和UDP套接字。

     

    10.socket流程

     服务器初始化过程:首先初始化socket,之后服务器端需要执行bind函数,将自己的服务能力绑定在一个众所周知的地址和端口上,

    紧接着,服务器端执行listen操作,将原先的socket转化为服务端的socket,服务端最后阻塞在accept上等待客户端请求的到来。

    客户端初始化过程:客户端需要先初始化socket,再执行connect向服务器端的地址和端口发起连接请求

    三次握手:

    一旦连接建立,数据的传输就不再是单向的,而是双向的,这也是TCP的一个显著特性。

    11.socket结构体

    通用套接字

    struct sockaddr{
        sa_family_t sa_family;  /* 地址族.  16-bit*/
        char sa_data[14];   /* 具体的地址值 112-bit */
      }; 

    地址族的三种情况(本地 IPV4 IPV6)

     IPV4套接字

    /* 描述IPV4的套接字地址格式  */
    struct sockaddr_in
      {
        sa_family_t sin_family; /* 16-bit */
        in_port_t sin_port;     /* 端口口  16-bit*/
        struct in_addr sin_addr;    /* Internet address. 32-bit */
    
    
        /* 这里仅仅用作占位符,不做实际用处  */
        unsigned char sin_zero[8];
      };

    端口号 这里是16bit.。ipv4的地址是2的16次方。

    sin_family就是上面所说的IPV4对应的  AF_INET

    IPV6套接字

    struct sockaddr_in6
      {
        sa_family_t sin6_family; /* 16-bit */
        in_port_t sin6_port;  /* 传输端口号 # 16-bit */
        uint32_t sin6_flowinfo; /* IPv6流控信息 32-bit*/
        struct in6_addr sin6_addr;  /* IPv6地址128-bit */
        uint32_t sin6_scope_id; /* IPv6域ID 32-bit */
      };

    地址族显然应该是AF_INET6,端口同IPv4地址一样16bit,关键的地址从32位升级到128位

    12.三次握手过程:

    1. 客户端的协议栈向服务器端发送了SYN包,并告诉服务器端当前发送序列号j,客户端进入SYNC_SENT状态;
    2. 服务器端的协议栈收到这个包之后,和客户端进行ACK应答,应答的值为j+1,表示对SYN包j的确认,同时服务器也发送一个SYN包,告诉客户端当前我的发送序列号为k,服务器端进入SYNC_RCVD状态;
    3. 客户端协议栈收到ACK之后,使得应用程序从connect调用返回,表示客户端到服务器端的单向连接建立成功,客户端的状态为ESTABLISHED,同时客户端协议栈也会对服务器端的SYN包进行应答,应答数据为k+1;
    4. 应答包到达服务器端后,服务器端协议栈使得accept阻塞调用返回,这个时候服务器端到客户端的单向连接也建立成功,服务器端也进入ESTABLISHED状态

    13.TCPUDP的区别

    TCP 是一个面向连接的协议,TCP 在 IP 报文的基础上,增加了诸如重传、确认、有序传输、拥塞控制等能力,通信的双方是在一个确定的上下文中工作的。

    而 UDP 则不同,UDP 没有这样一个确定的上下文,它是一个不可靠的通信协议,没有重传和确认,没有有序控制,也没有拥塞控制。我们可以简单地理解为,在 IP 报文的基础上,UDP 增加的能力有限。

    UDP 不保证报文的有效传递,不保证报文的有序,也就是说使用 UDP 的时候,我们需要做好丢包、重传、报文组装等工作。

    DNS服务就是基于UDP的。

    14.本地套接字是 IPC,也就是本地进程间通信的一种实现方式。除了本地套接字以外,其它技术,诸如管道、共享消息队列等也是进程间通信的常用方法,但因为本地套接字开发便捷,接受度高,所以普遍适用于在同一台主机上进程间通信的各种场景。

    15.本地套接字

    本地套接字是一种特殊类型的套接字,和 TCP/UDP 套接字不同。TCP/UDP 即使在本地地址通信,也要走系统网络协议栈,

    而本地套接字,严格意义上说提供了一种单主机跨进程间调用的手段,减少了协议栈实现的复杂度,效率比 TCP/UDP 套接字都要高许多。类似的 IPC 机制还有 UNIX 管道、共享内存和 RPC 调用等。

    16.ping指令和ICMP

    ping 是基于一种叫做 ICMP 的协议开发的,ICMP 又是一种基于 IP 协议的控制协议,翻译为网际控制协议。

     

     

    17.四次挥手

     最长分节生命期 MSL(maximum segment lifetime)的两倍,一般称之为 2MSL

    只有发起连接终止的一方会进入 TIME_WAIT 状态

    TIME-WAIT的作用:

    (1)为了确保最后的 ACK 能让被动关闭方接收,从而帮助其正常关闭。如果ACK丢失了,服务器重传FIN,状态为closed,服务器关闭出错。

    (2)和连接“化身”和报文迷走有关系,为了让旧连接的重复分节在网络中自然消失。如果有一个新的tcp连接拥有相同的套接字四元组,则会认为是一个连接。

    2MSL的作用:

    经过 2MSL 这个时间,足以让两个方向上的分组都被丢弃,使得原来连接的分组在网络中都自然消失,再出现的分组一定都是新化身所产生的。

    TIME-WAIT的危害:

    资源占用、端口占用

    18.在绝大数情况下,TCP 连接都是先关闭一个方向,此时另外一个方向还是可以正常进行数据传输

    19.流量控制和生产者 - 消费者模型(单个TCP连接的控制)

    发送窗口和接收窗口是 TCP 连接的双方,一个作为生产者,一个作为消费者,为了达到一致协同的生产 - 消费速率、而产生的算法模型实现。

    说白了,作为 TCP 发送端,也就是生产者,不能忽略 TCP 的接收端,也就是消费者的实际状况,不管不顾地把数据包都传送过来。如果都传送过来,消费者来不及消费,必然会丢弃;而丢弃反过使得生产者又重传,发送更多的数据包,最后导致网络崩溃。

    20.拥塞控制(多个 TCP 连接共享带宽的拥塞控制模型)

    TCP 就必须考虑多个连接共享在有限的带宽上,兼顾效率和公平性的控制,这就是拥塞控制的本质。

    在 TCP 协议中,拥塞控制是通过拥塞窗口来完成的,拥塞窗口的大小会随着网络状况实时调整。

  • 相关阅读:
    实现报表数据外置计算
    实现报表数据的可控缓存
    实现报表数据分库存储
    实现报表数据预先计算
    实现报表与算法的统一管理
    如何实现报表直接打印需求
    交叉填报表的制作
    格间计算性能提升方案
    填报脚本之轻松搞定复杂表的数据入库
    treeview_dropdown_control
  • 原文地址:https://www.cnblogs.com/cckong/p/14362116.html
Copyright © 2011-2022 走看看