计网学习笔记---(一)
计网学习笔记---(一)
应用层
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的区别
UDP | TCP | |
---|---|---|
是否连接 | 无连接 | 面向连接 |
是否可靠 | 不可靠 | 可靠 |
是否有序 | 无序 | 有序 |
传输速度 | 快 | 慢 |
连接对象个数 | 可以一对一、也可以一对多 | 一对一 |
传输方式 | 面向报文 | 面向字节流 |
首部开销 | 小(8B) | 大(20B) |
适用场景 | 视频、电话、直播 | 邮件、文件传输 |
UDP直接发送一个个报文,而TCP直接将数据发送到缓存区,类似于流的传输
使用UDP套接字发送数据时,确定了目的IP和目的端口,接收方接收到时,可以根据不同的端口号来确定是哪个应用程序需要
使用TCP套接字发送数据时,一对一,确定了主机IP、端口和目标IP、端口后,发起连接请求。
TCP是全双工通信的,即双方可以同时收发(类似于打电话可以同时接听和说话)
TCP的可靠传输机制
- 序列号:确保数据包的有序传递和完整性。
- 确认号:接收方用它来告诉发送方哪些数据已经被成功接收。通过确认响应,发送方可以了解哪些数据需要重传。
- 重传机制:当发送方没有收到对特定数据包的确认时,它会重传该数据包。或者出现冗余ACK时也会重传未收到ACK的第一个数据包,这确保了数据在面对丢包等网络问题时仍能可靠地传输。(这两种重传分别对应:超时重传和快速重传)
流量控制机制:
是为了防止双方发送速率过快而导致缓存区溢出而设立的机制
接收方的窗口会根据缓冲区的剩余容量来改变大小,如果快满了就减小窗口
发送方发现窗口变小了,也会减少发送量
就相当于水库有进水口和出水口,水库快满时,就会放低闸门,减慢进水速度
拥塞控制机制:
- 慢启动:cwnd(拥塞窗口)一开始较小,开始指数增长(2^n),直到达到阈值(ssthresh)---RTT=1
- 拥塞避免:cwnd达到阈值后,发送方进入拥塞避免阶段,开始小段小段增长(探测可用带宽)---RTT=6
- 快速重传:发送方连续收到三个重复ACK时,进入快速重传阶段,阈值和cwnd都为原cwnd一半,,传输速率依旧不变 ---RTT=16
- 超时处理:严重拥塞,阈值为cwnd一半,cwnd减到1,速率变为慢启动状态 ---RTT=22
题目来源:2020计网A卷
买一送一,再做一道OSPF(虽然不在传输层
目的 | 下一跳 | 代价 |
---|---|---|
S | V | 8 |
T | V | 7 |
U | V | 6 |
V | 直接交付 | 3 |
W | 直接交付 | 6 |
Y | V | 4 |
Z | V | 12 |
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
选了道贪心,不算很会,一开始的想法是对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;
}
};
有点烦,感觉题目没看明白就想到一个思路后,就回不来了。
还是得先看清题目再去思考
赶紧润去复习嵌入式,不然挂科了!