来自B站韩立刚老师的计算机网络课程
文章目录
1.各层协议
层 | 协议 |
---|---|
应用层 | http https、ftp、DNS、SMTP、PoP3、RDP |
传输层 | TCP、UDP |
网络层 | IP(RIP OSPF BGP) ICMP IGMP ARP |
这里udp/tcp就是传输层的协议。
2.udp/tcp
协议 | 场景、特点 | 例子 |
---|---|---|
TCP | 分段、编号、流量控制、建立会话 | 下载视频、访问网站 |
UDP | 一个数据包就能完成数据通信,不建立会话、多播(一对多) | 浏览网页的解析域名、QQ消息、共享屏幕 |
3.应用层和传输层关系
传输层两个协议,上面有多个应用,用端口区分。
3.1 端口复用
http=TCP+80
https=TCP+443
ftp=TCP+21
SMTP=TCP+25
POP3=TCP+110
RDP=TCP+3389
共享文件夹=TCP+445
SQL=TCP+1433
MYSQL=TCP+3306
DNS=UDP+53 or TCP+53
登记端口号: 1024~49151
客户端端口号:49152~66535
如每访问一个网页都会建立至少一个会话,对应一个端口?
-
查看自己计算机侦听的端口
netstat -an
-
测试远程计算机打开的端口
telnet xx.xx.xx.xx 21
-
端口就代表服务,端口区分服务,比如可以测试一个计算机是否打开了远程服务端口
-
只打开必要的端口,更改端口可增加服务器安全性
-
mstck 远程服务连接Microsoft terminal services client
-
windows防火墙不限制出去的流量,主动限制进来的流量。如远程控制时,,,木马程序是点个图片、链接啥的给本机装服务,主动连外边,防火墙控制不了,
window可以设置ipSec,本地策略控制特定ip进入,
- msconfig 查看服务
4.UDP
运输协议数据
TCP 传送协议单元叫 报文段(segment)
UDP 传送协议单元叫 UDP报文 或 用户数据报协议, user datagram protocal
UDP 传送据前不需要建立连接。对方的运输层在收到UDP报文后,不需要给出确认。不提供可靠交付,但某些情况下是最有效的工作方式。
TCP 提供面向连接的服务。TCP不提供广播或多播服务,提供了可靠、面向连接的运输服务,同时也增加了开销,不仅让协议数据头部增大很多,还占用了许多的处理机器资源。
4.1 报文
IP数据报=首部+数据
数据=首部+数据
首部=伪首部+源端口+目的端口+长度+校验和
伪首部=源ip地址+目的ip地址+0+17+UDP长度
校验和: 传输完要校验包数量
4.2 UDP为什么不可靠?
- 不保证消息交付:不确认,不重传,无超时
- 不保证交付顺序:不设置包序号,不重排,不会发生队首阻塞
- 不跟踪连接状态: 不必建立连接或重启状态机
- 不需要拥塞控制: 不内置客户端或网络反馈机制
5. TCP
transmission control protocol
5.1 特点
- 面向连接的传输层协议;
- 点对点,只能有两个端点
- 端点不是主机,不是ip地址,不是进程,不是传输层协议端口。端点叫套接字(socket);
- IP地址+端口号构成套接字;;
- 提供可靠交付的服务;
- 提供全双工通信;
- 同时发和收,发送的同时还得接收反馈;
- 面向字节流;
- 传输是以字节的形式;
- 无边界性(udp有,发几次收几次)
- 流量控制、拥塞控制(如下东西发的快收得慢,得控制)
5.2 如何实现可靠传输
5.2.1. 停止等待协议
- 无差错情况
- 超时重传
- 确认丢失
- 确认迟到
总结:依靠确认和重传机制,实现在不可靠的传输网络上实现可靠的通信,此可靠传输协议常称为自动重传请求ARQ(automatic repeat request)。此重传是自动的,发送方主动去重传。
5.2.2 超时重传时间选择
TCP每发送一个报文段,就对此报文段设置一个计时器。只要到了计时器重传时间没有收到确认,就要重传报文段。
5.2.3 改进
信道利用率
利用率:
传完就等确认,再传,那传输所占用的时间就挺低。
流水线传输
不等确认,连续发。
如何实现可靠传输?
连续ARQ
连续发完窗口中数据就等待确认,接收到1的确认,就右移,并从缓存删除1,依次。
若中间丢失了3,接收到的确认是2,则回复时设置sack重发3,之前接收到的4 5 保留,然后再发6以后的。
累计确认:不用每接收到一个就发送确认一次,而是累计收到n个包,确认长度为n,说明n以前的已经正确收到。
报文段格式
- 确认号:下次发那个字节
- 数据偏移:4位。TCP首部除去固定20字节,另外的长度不固定。用此记录TCP首部长度。一个位代表4个字节。
- 保留:无用的。
- urg:例如暂停的操作,到接受的缓存不排队
- ACK:标记1则确认号有效性
- syn:同步时用。syn=1说明是建立会话的包
- push:是接受的数据从缓存到应用程序的优先性,push=1就不排队。
- rst: 重置连接标志位,TCP连接出现严重错误。如打开一个网页,等不急就把网页关了。
fin:释放连接。
访问一个网站:首先dns域名解析(域名->IP),拿到网址用TCP建立连接,共三次握手(),然后http协议,发送请求get,然后网站到计算机的传输网页,计算机同时也有确认信息。
确认序号变化:
syn攻击:利用tcp的建立会话机制实行DOS攻击,以不存在的源地址向一计算机建立连接,攻击此计算机。
land攻击:目标地址和源地址都是计算机自己。
- 窗口: 告诉对方自己的接收缓存窗口大小,对方设置相同大小的发送窗口。?
- 校验和:首部和数据两部分长度。
- 紧急指针:2个字节。urg=1时有效,指明紧急数据的尾部位置。
- 选项:例如放mss,最大接收数据包的长度;是否选择性确认(丢包时)……
- 填充:若数据不够4字节则填充。
可靠传输方式总结
- 以字节为单位的滑动窗口技术;
5.3 如何实现流量控制
解决通信两端发送和处理速度不一致的问题。
随着接收的累积,可发送滑动窗越来越小。接收缓存窗口满了就转移到应用中,然后窗口又复原(若出现窗口复原的相应包丢失,发送的也不会一直等,而是也会有确认包过来测定窗口)。
5.4 如何实现拥塞控制
针对所有计算机。
5.4.1慢开始和拥塞避免算法(1983年)
传输窗口慢指数增长再线性增长。再降低门限,再来。
“拥塞避免”并非完全能避免拥塞
拥塞避免指再拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络不容易出现拥塞。
5.4.2 快重传和快恢复算法(1990年)
快重传:接收方没有按顺序接收到包可能就出现丢包了。如收到1 2 4,收到4时,默认5个包,原本得等收到5再回复重传,现在直接发3的请求包。
发送发一接收到3个连续的接收确认,就立刻计算新的拥塞门限,并执行快恢复。
快恢复:从拥塞窗口恢复
实际发送窗口的上限值
为接收方窗口和拥塞窗口两个中的较小值。也即步拥塞时,上限为接收方窗口,和前面说的对应上。
5.4.3 TCP传输连接管理
传输连接又三个阶段:建立连接、数据传输和连接释放;
TCP连接的建立都是客户服务器方式;
客户:主动发起连接建立的应用进程;
服务器:被动等待建立连接的应用进程;
- 三次握手
1.客户端发同步数据包。同步标记SYN=1,确认标记ACK=0,序号seq=x;
2.服务器知道SYN=1,ACK=0说明它是一个主动建立连接的数据包,并发过去一个包,SYN=1,ACK=1,数据长度seq=y,确认号ack=x+1;
3.客户段后到后再发一个包,SYN=0,ACK=1,seq=x+1,ack=y+1;
为什么是三次不是两次?
如果两次握手A发给B的建立连接包去得慢,导致A超时重传并很快收到回复,在AB建立连接结束后B释放了资源。此时收到之前发得慢的建立连接得到,那B就直接认为建立连接而A却根本不会向它发数据,导致B的资源被占耗。总之就是防止无效包导致的无效连接建立占耗服务器资源。
为什么不是四次
四次握手主要是B第二步发送确认标志ACK=1,ack=x+1,加第三步SYN=1,seq=y,而这两步实际可以一步完成。
状态变化
TCP的连接释放
TIME_WAIT:等4分钟,防止最后A->B的回复包丢失,B关不掉。