3.17
计算机网络
TCP基本认识
头格式:
序列号(32位):计算机生成的随机数作为初始值,通过SYN包传给接收端主机,每发一次自增一次该数据字节数的大小,解决网络包乱序问题
确认应答号:指下一次期望收到的数据的序列号,收到这个代表之前的数据已被正常接收
控制位:
ACK:该位为1时,确认应答字段有效,除开最初建立连接时SYN包其他都为1
RST: 该位为1时,表示TCP连接出现异常必须强制断开连接
SYN:该位为1时,表示希望建立连接,并在序列号字段进行初始值的设定
FIN:该位为1时, 表示今后不会有数据发送,希望断开连接。即断开连接时双方交换FIN为1的tcp报文就可以啦
为什么需要TCP协议,他在哪一层
无损坏、无间隔、非冗余、按序
IP不负责任,TCP能保证数据传输可靠、有序,传输层
什么是TCP
TCP是面向连接的、即一对一,不能像UDP那样一对多
可靠的、
基于字节流的:消息没有边界,有序,丢失就得重传
传输层通信协议
什么是TCP连接
用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,socket (IP地址+端口号)+ 窗口大小(流量控制) + 序列号(乱序问题)称为连接
如何唯一确定一个TCP连接
端口:即数据应该发送给哪个进程
TCP四元组:源端口 + 源地址 (32位)+ 目的端口(16位) + 目的地址,
端口—TCP头部 ; 地址 — IP头部
有一个服务器监听了一个端口,它的最大TCP连接数是多少
理论值:最大TCP连接数 = 客户端IP数 * 客户端端口数
实际受限:文件描述符限制(socket也是文件) ; 内存限制(TCP占用内存)
UDP TCP区别,应用场景
UDP利用IP面向无连接,组成:包长度(首部长度和数据长度之和)+ 校验和(提供可靠的UDP头部) + 目的端口+ 源端口,大小都是16位,一共8个字节
1 连接
传输数据前TCP需要建立连接,UDP不需要
2 服务对象
TCP一对一,UDP可以一对多
3 可靠性
TCP可靠交付数据,无损坏、无间隔、无冗余、按序;无差错、不丢失、不重复、不乱序
UDP:尽最大努力交付数据,不保证可靠性
4 流量控制、拥塞控制
TCP有这两个机制,保证数据传输安全性
UDP发送速率则不受网络影响
5 首部开销
TCP(没选项时20)>UDP(8字节)
6 传输方式
TCP:流式传输,没有边界
UDP:一个包一个包、有边界
7 分片不同
TCP,MSS,传输层分片,丢失一个分片,重传这一个就可以啦
UDP,MMU,IP层分片,丢失一个,得重传所有,所以UDP长度最好小于MMU
应用场景
TCP: FTP(文本传输协议,应用层) ; HTTP/HTTPS
UDP: 总包量较少通信,如DNS(应用层、域名解析协议) SNMP(简单网络管理,应用层) ; 视频、音频等多媒体通信 ; 广播通信
为什么UDP头部没有首部字段而TCP有
UDP首部大小固定;TCP有长度可变的选项
为什么UDP有包长度而TCP没有
Leetcode
组合总和二
class Solution {
public:
vector<vector<int>>ans;
vector<int>path;
int sum = 0;
void bt(vector<int>& candidates, int index, int target, vector<bool>& used){
if(sum >= target){
if(sum == target) {ans.push_back(path);}
return;
}
for(int i = index ; i < candidates.size() && (candidates[i] + sum <= target) ; i++){
//关键,也可以使用index去重
if(i > 0 && candidates[i] == candidates[i-1] && !used[i-1]) continue;
sum += candidates[i];
used[i] = true;
path.push_back(candidates[i]);
bt(candidates, i+1, target, used);
sum -= candidates[i];
used[i] = false;
path.pop_back();
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
vector<bool>condi(candidates.size(), false);
bt(candidates, 0, target, condi);
return ans;
}
};
其他
坚持、反省是很可贵的品质。一个秘诀,一个方向
果然有时只要和学习无关,你总会尝试着接触一下
是否准备好接受失败呢,接受一事无成,水啊水啊,
自由是想不做什么就不做什么
看了蛮久小说阿西吧,诡秘之主,不能再这样下去了,现在不是悠闲看小说的时候呀!!!