计网学习笔记---(一)

应用层

C/S模型:客户端/服务端

P2P模型:每台机器既是客户端又是服务端

域名系统(DNS):

  • 把主机名转为IP地址(域名合适一点)

  • UDP协议:53端口

  • 服务器分为:根域名服务器、顶级域名服务器、授权域名服务器、本地域名服务器

    根域名知道所有顶级域名服务器的IP,(如com,top,net等)

  • 递归查询、递归与迭代结合

文件传输协议(FTP):

  • 允许用户在网上存取文件
  • TCP协议,控制链接端口:21号,数据链接端口:20号

电子邮件传输(都是TCP协议):

发送协议(STMP):主动发送邮件:25号端口

接收协议(POP3):要求接收文件:110号端口

WWW:

统一资源定位符(URL):标记各种文档

HTTP(TCP协议上):在万维网上可靠交换文件,80号端口 ---HTTPS 443号端口

HTML对页面上各种信息的描述

传输层

TCP和UDP的区别

UDPTCP
是否连接无连接面向连接
是否可靠不可靠可靠
是否有序无序有序
传输速度
连接对象个数可以一对一、也可以一对多一对一
传输方式面向报文面向字节流
首部开销小(8B)大(20B)
适用场景视频、电话、直播邮件、文件传输

UDP直接发送一个个报文,而TCP直接将数据发送到缓存区,类似于流的传输

使用UDP套接字发送数据时,确定了目的IP和目的端口,接收方接收到时,可以根据不同的端口号来确定是哪个应用程序需要

使用TCP套接字发送数据时,一对一,确定了主机IP、端口和目标IP、端口后,发起连接请求。

TCP是全双工通信的,即双方可以同时收发(类似于打电话可以同时接听和说话)

TCP的可靠传输机制

  • 序列号:确保数据包的有序传递和完整性。
  • 确认号:接收方用它来告诉发送方哪些数据已经被成功接收。通过确认响应,发送方可以了解哪些数据需要重传。
  • 重传机制:当发送方没有收到对特定数据包的确认时,它会重传该数据包。或者出现冗余ACK时也会重传未收到ACK的第一个数据包,这确保了数据在面对丢包等网络问题时仍能可靠地传输。(这两种重传分别对应:超时重传和快速重传)

流量控制机制:

是为了防止双方发送速率过快而导致缓存区溢出而设立的机制

接收方的窗口会根据缓冲区的剩余容量来改变大小,如果快满了就减小窗口

发送方发现窗口变小了,也会减少发送量

就相当于水库有进水口和出水口,水库快满时,就会放低闸门,减慢进水速度

拥塞控制机制:

image-20240116153907741

  • 慢启动:cwnd(拥塞窗口)一开始较小,开始指数增长(2^n),直到达到阈值(ssthresh)---RTT=1
  • 拥塞避免:cwnd达到阈值后,发送方进入拥塞避免阶段,开始小段小段增长(探测可用带宽)---RTT=6
  • 快速重传:发送方连续收到三个重复ACK时,进入快速重传阶段,阈值和cwnd都为原cwnd一半,,传输速率依旧不变 ---RTT=16
  • 超时处理:严重拥塞,阈值为cwnd一半,cwnd减到1,速率变为慢启动状态 ---RTT=22

题目来源:2020计网A卷

买一送一,再做一道OSPF(虽然不在传输层

image-20240116160822231

目的下一跳代价
SV8
TV7
UV6
V直接交付3
W直接交付6
YV4
ZV12

TCP连接的建立进行了三次握手,断开进行了四次挥手:

  • 第一次握手([SYN], Seq = x) 客户端发送一个SYN标记的包,Seq初始序列号x,发送完成后客户端进入SYN_SEND状态。

  • 第二次握手([SYN,ACK], Seq = y, ACK = x + 1) 服务器返回确认包(ACK)应答,同时还要发送一个SYN包回去。ACK = x + 1,表示确认收到(客户端发来的Seq值 + 1),Seq = y, 表示让客户端确认是否能收到。发送完成后服务端进入SYN_RCVD状态。

  • 第三次握手([ACK], ACK = y + 1) 客户端再次发送确认包(ACK),ACK = y + 1, 表示确认收到服务器的包(服务端发来的Seq值 + 1)。客户端发送完毕后,进入ESTABLISHED状态,服务端接收到这个包,也进入ESTABLISHED状态, TCP握手结束。

详解请看博客


Tips: IP报文段分片传输时的MF标志位(1代表未结束,0代表已结束)

欠缺知识点:IPv6、链路层知识


吃饭前快乐的进入今日的刷题站点

ID:55

image-20240116171438116

选了道贪心,不算很会,一开始的想法是对nums[i](当前数字)选择加或者减,然后最终实现下标为n-1即可

后来想,如果我从目的地倒着走回来,是不是也可以,然后就开始想反向怎么减

只能过一半样例(想复杂了。。。跳过最后一个也算成功,而不只是跳到

而且我还考虑了能不能往回跳....

其实只能往前跳,而且可以不跳最大长度,我看题目以为跳2步跳回来1步然后往前跳3步...

answer:

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int n =nums.size();
        if(n==1)return true;
        int i=0;
        int k=0;
        while(i<n){
            if(i>k)return false;
            k=max(k,nums[i]+i);
            i++;
        }
        return true;
    }
};

有点烦,感觉题目没看明白就想到一个思路后,就回不来了。

还是得先看清题目再去思考

赶紧润去复习嵌入式,不然挂科了!

文章作者: P4ul
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 打工人驿站
杂谈 后端 算法 c++
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝