zoukankan      html  css  js  c++  java
  • 计算机网络

    1.访问一个url会发生什么?
    https://blog.csdn.net/damn_yang/article/details/90727758

    2.微信扫码登录会发生什么
    https://blog.csdn.net/windforce828/article/details/104607286/

    3.OSI七层模型

    4.TCP/IP协议总结
    https://zhuanlan.zhihu.com/p/140754064
    网络层只是把分组发送到目的主机,但真正通信的并不是主机还是主机中的进程。传输层提供进程间的逻辑通信,向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是两个传输层实体之间有一条端到端的逻辑通信信道。
    UDP首部格式:8个字节。源端口、目的端口、长度(首部+数据,最小为8字节)、检验和。
    TCP首部格式:20字节。源端口号,目的端口号,序号,确认号,首部偏移(4位,证明首部最长60个字节),确认ACK,同步SYN,终止FIN,窗口,校验和等。

    序号:对字节流的编号。
    确认号:期望收到的下一个报文段的序号。
    数据偏移:数据部分距离报文起始处的偏移量,实际上就是首部长度
    确认ACK:ACK=1表示确认号字段有效,否则无效。TCP规定,建立连接后所有传送的报文段都必须把ACK置1。
    同步SYN:在连接建立时用来同步序号。
    终止FIN:用来释放一个连接,FIN=1
    窗口:作为接收方让发送方设置其发送窗口的依据。
    https://blog.csdn.net/zhangbinalan/article/details/38854515?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

    5.TCP与UDP的区别

    6.TCP三次握手
    假设A为客户端,B为服务器端
    B出于监听状态,等待客户的连接请求。
    A向B发送连接请求报文,SYN=1,ACK=0,并选择一个初始序号x
    B收到连接请求报文,如果同意建立连接,则向A发送连接确认报文,SYN=1,ACK=1,确认号为x+1(数据长度,但是此时并没有数据传递,所以此时发送的确认号为x+1),同时选择一个初始序号y
    A收到B的连接确认报文之后,还需要向B发送确认,确认号为y+1,序号为x+1
    B收到A的确认后,连接建立

    三次握手原因?
    防止失效的连接请求到达服务器,让服务器错误打开连接。
    客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能到达服务器,然后服务器发回连接确认。客户端等待一个超时重传的时间之后会发重新发起连接请求。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端就会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此不会再次打开连接。

    7.TCP四次挥手(没额外说明ACK因为建立连接之后ACK都为1)
    A发送连接释放报文,FIN=1
    B收到之后发出确认,此时TCP处于半关闭状态,B处于close-wait状态,B可以向A发送数据,但A不能向B发送数据
    当B不再需要连接时,发送释放报文FIN=1
    A收到后发出确认报文,进入time-wait状态,等待2MSL(最大报文存活时间)后释放连接
    B收到A的确认后释放连接

    四次挥手的原因:
    客户端发送了FIN连接释放报文之后,服务器收到了这个报文,就进入close-wait状态。这个状态是为了让服务器发送还未传送完毕的数据,传送完毕之后,服务器会发送FIN连接释放报文。

    time-wait状态存在的意义?
    客户端接收到服务器端的FIN报文之后进入此状态,此时并不是直接进入closed状态,还需要等待一个时间计时器设置的2MSL,理由:
    (1)确认最后一个确认报文可以到达,如果B没收到A发送的确认报文,那么就会重新发送连接释放请求报文,A等待一段时间就是为了处理这种情况
    (2)等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使下一个新的连接中不会出现旧的连接请求报文

    8.TCP的可靠传输
    TCP使用超时重传实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。
    往返时间RTT,加权往返时间RTTs,超时时间RTO,RTT(d)为偏差的加权平均值

    9.滑动窗口
    接收窗口只会对窗口内最后一个按序到达的字节进行确认。

    10.TCP流量控制
    控制发送方的发送速率,保证接收方来得及接收。
    0窗口:发送方暂停发送数据,启动一个持续计时器,到期后发送一个大小为1个字节的探测数据包,以查看接收窗口的状态。

    11.拥塞控制(降低整个网络的拥塞程度)
    TCP的窗口大小是基于字节的;发送方有一个拥塞窗口cwnd的状态变量;慢开始门限ssthresh
    慢开始:cwnd=1,->2,4,8,16...
    拥塞避免:当cwnd>=ssthresh,cwnd = cwnd+1
    快重传:若收到三个对同一个报文段的确认,那么可以判断出丢失了下一个报文,执行快重传,立即重传丢失的数据报
    快恢复:此时只是丢失个别报文段,并不是网络拥塞,执行快恢复,ssthresh = cwnd/2, cwnd = ssthresh,之后进入拥塞避免阶段

    12.面向连接与无连接的区别
    https://www.cnblogs.com/nzbbody/p/6389581.html
    面向连接与无连接指的是协议,本质区别是对于无连接协议,每一个分组都独立于其他分组;而面向连接的协议,协议实现并维护了当前分组与后继分组有关的状态信息。

    13.TCP如何保证传输的可靠性
    数据包校验;序列号提供重排;丢弃重复数据;应答确认机制;超时重传;滑动窗口用作缓冲区保证可以实现超时重传(流量控制与拥塞控制)

    14.长连接与短连接的区别
    https://www.cnblogs.com/liuyong/archive/2011/07/01/2095487.html
    http://blog.sina.com.cn/s/blog_6d39b5be0101k6v4.html

    15.TCP如何解决粘包、拆包问题
    https://www.cnblogs.com/kancy/p/13282009.html
    https://blog.csdn.net/feng020a/article/details/60587726

    16.UDP如何实现可靠传输?
    UDP资源消耗少,处理速度快,但是会丢失数据包,可靠传输需要通过应用层来实现。实现可靠传输的方式参考TCP,只不过是转移到了应用层
    https://blog.csdn.net/daboluo521/article/details/80726867?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
    https://blog.csdn.net/gettogetto/article/details/76736365

    17.IP地址与子网掩码
    IP数据报:版本,首部长度,区分服务,总长度,生存时间,协议,首部检验和,标识,标志,片偏移,源地址,目的地址

  • 相关阅读:
    iOS中GestureRecognizer的6大手势与代理方法详细使用
    使用pan手势实现抽屉效果
    mfc HackerTools释放资源
    mfc HackerTools防止程序双开
    FLV简介
    AAC简介
    H.264简介
    PCM简介
    YUV格式
    编译ffmpeg(第一次),实现JPG转MP4
  • 原文地址:https://www.cnblogs.com/sunshine-free/p/13847654.html
Copyright © 2011-2022 走看看