传输层两个协议
- TCP(传输控制协议):需要将要传输的文件分段传输 建立会话 可靠传输 流量控制(当客户端处理不过来时暂停一下)
- UDP(用户数据报协议):一个数据包就能够完成数据通讯 不需要建立会话 不需要流量控制 不可靠传输
例:
UDP:计算机请求解析域名时,传输层用UDP协议、QQ聊天也是UDP协议、屏幕广播,多播(不建立会话,也不保证可靠传输)
TCP:QQ传文件用的是TCP协议
netstat -n:查看会话
netstat -nb:查看会话是那个进程建立的
传输层协议和应用层协议之间的关系
通过端口加TCP/UDP
HTTP=TCP+80
HTTPS=TCP+443
SQL=TCP+1433
服务和应用层协议之间的关系
服务使用TCP或UDP的端口侦听客户端的请求
客户端使用IP定位目标服务器,使用目标端口,定位服务
可能够在网卡上设置,接收的数据包里,什么样的目标端口能进来(放行端口)
为了网络安全,只开放必要的端口或服务
在Windows配置服务
安装
查看服务侦听的端口
- netstat -an:查看侦听的端口
- netstat -n:查看建立的会话
- netstat -nb:查看建立会话的进程
- telnet ip port:测试服务器的端口通不通
黑客就是通过扫描端口工具来判断开启了什么服务,然后通过服务的漏洞来进行攻击
比如如果你开了远程桌面3389的端口,那么攻击者就可以试密码了
更改服务使用的默认端口
迷惑入侵者 是系统更安全
设置Windows的网络安全
防火墙
开放端口
传输层功能
- 传输层为应用程序之间提供端到端的逻辑通信(网络层是为主机之间提供逻辑通信)
- 传输层还要对接收到的报文进行差错检测
- 传输层提供面向连接和无连接的服务(TCP、UDP)
传输层协议和网络层协议的区别
传输层的端口 协议号、端口号
端口用一个16位端口号进行标志
端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口没有联系
本地应用访问外部服务器服务时的原端口是由应用程序动态产生的一个高端口
三类端口
熟知端口:数值一般为0~1023
- FTP:21
- TELNET:23
- SMTP:25
- DNS:53
- HTTP:80
- HTTPS:443
- RDP:3389
登记端口号:数值为1024~49151
程序开发者需要进程注册
客户端口号:数值为49152~65535
作为应用程序的源端口
UDP
UDP的主要特点
- 无连接
- 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制
- 面向报文,没有拥塞控制,很适合多媒体通信的要求
- 支持一对一、一对多、多对一和多对多的交互通信
- 首部开销小,只有8个字节
UDP首部
- 长度:指的是UDP整个数据报的长度(IP的长度也是整个IP数据包的长度)
- 伪首部:其中带有网络层首部的部分信息,目的是为了计算检验和
计算UDP检验和的例子
TCP(传输控制协议)
如何是实现可靠传输、流量控制、避免网络拥塞
- TCP是面向连接的传输层协议
- 每一条TCP连接只能实两个端点(endpoint),每一个TCP连接只能是点对点的(一对一)
- 提供可靠交付
- 提供全双工通信(单向的下载文件也必须有双向通信,需要下载放提供反馈,确保任务在正常进行)
- 面向字节流
文件进行切割放入TCP缓存和TCP缓存把数据组成数据包没有联系(分割选取的字节大小无联系)
TCP连接
每一条TCP连接有两个端点,端点就是端口号加IP地址,构成的端点就叫套接字
可靠传输的工作原理
停止等待协议
超时传输
等待的时间比往返时间长一点
确认丢失和确认迟到
使用确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信
这种可靠传输协议通常被称为自动重传请求ARQ(Automatic Repeat reQuest)
ARQ表明重传请求时自动进行的
信道利用率
停止等待协议的优点就是简单,但缺点就是信道利用率太低
信道利用率U = Td/(Td+RTT+Ta)
提高Td,U就增加了
流水线传输
发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认
由于信道上一直有数据不断的传送,这种传输方式可以获得很高的信道利用率
可靠传输
当窗口内的数据收到了确认消息,则被移出窗口,窗口也移向新数据(滑动窗口)
累积确认
接收方一般采用累积确认的方式
优点:容易实现,信道利用率高
缺点:不能向发送方反映出接受方已经正确收到的所有分组的信息
连续确认ARQ
此时接收到4,但没有三,则确认1、2
TCP报文段的首部格式
- 序号(Seq):从TCP缓存里取出的数据段的第一个字节是整个文件的多少个字节
- 确认号(Ack):接收端返回的数据包内,给发送端指定该发第多少个数据包了(通过接收到的数据包得到值),此时发送者则清除确认了的数据包
- 数据偏移:用来记录TCP报文段的第多少个字节以后就是数据了(因为有可变部分,所以首部长度不是固定的)(其中一个二进制1代表四个字节)
- URG(优先传送):标记为1,则在TCP缓存中可不排队优先传送,用来穿一紧急的信息,比如停止传输
- PSH(push优先读取):标记为1,接收时数据包不用再TCP缓存中排队,直接排在队列最前面提交给应用
- ACK:值为0,确认号无效,为1有效(请求会话时ACK=0,当外部返回确认会话时,确认号为1,同时ACK也必须为1)
- SYN(同步请求):标记为1说明,该数据包的目的是请求建立会话,外部站点同意建立请求时SYN也为1
SYN攻击:xp系统会受到恶意的建立会话的攻击(攻击者请求与目标机建立会话,但是源地址不是攻击者的地址,是随机的地址,这个时候xp会浪费大量的系统CPU资源)
Land攻击:攻击者发送的请求的源地址和目标地址都是目标机器(自己和自己及案例会话)
- RES(reset):设置为1,说明TCP会话出现严重错误,必须释放连接,要想正常通信害的重新建立连接
- FIN:标记为1,标识即将释放连接(被称为三次握手后面的四次挥手)
- 窗口(win):TCP缓存容量的最大值(在建立会话时,两个计算机会相互告诉对方自己的TCP接收缓存的容量。然后把发送缓存的容量设置为对方的接收缓存最大容量)(接收窗口和发送窗口)
- 检验和:和UDP一样,计算校验和时需要在前面加上12个字节的伪首部,但是需要把伪首部的第四个字段改为6(协议号)
- 紧急指针:只有URG为1时才起作用,指定了紧急数据在数据包中结束得位置(值为50一是就是紧急数据是前50个字节)
- 可变选项:可以规定最大数据包得长度是多少(MSS),也可以设置确认是是否支持选择性确认(SACK),也可设置时间戳
- 填充:把可变选项部分筹够4个字节
TCP如何实现可靠传输
以字节为单位的滑动窗口技术
首先A的发送窗口由B的接收窗口决定
数据无丢失:
发送端收到接收端的确认接收数据包后,移动窗口,删除已经接收到的数据包
接收端发送了确认接收的消息后,移动接收窗口,窗口外的消息被应用层程序读取
数据丢失:
接收端发送的确认号是连续数据块的最后一位
此时选择性确认SACK,会告诉发送端哪一段缺失了,发送端就只发丢失的部分
超时重传时间的选择
TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到了但还没收到确认,就重传这一报文段
新的RTTs=(1-a)(旧的RTTs)+a(新的RTT样本)
超时重传时间应略大于上面得出的加权平均往返是啊金RTTs
RFC2988推荐的a值为1/8(a的值越小说明越依赖于旧的值,a的值越大修正的就更及时(最佳的a值需要由实际网络的波动决定))
TCP流量控制
解决通信两端处理速度不一样的问题
双方建立会话时先确定发送窗口和接收窗口
在数据传输过程中,通过接收端告诉发送端接收窗口的大小实现流量控制,当接收端把接收窗口设置为0时,发送端的发送窗口为0:停止发送,为了避免接收端从停止接收(接收窗口为0)到开始接收(接收窗口不为0)的数据包在途中丢失,导致的会话卡死,因此发送端会定时询问接收端的接收窗口大小
TCP拥塞控制
网络堵塞是局域网内所有计算机都有关,一旦出现拥堵现象,所有计算机积极控制,主动降低发送速度
出现质量拥塞的条件:对资源需求的总和>可用资源
拥塞控制:是一个全局的过程,涉及所有主机、所有路由器,以及降低网络性能的所有因素
流量控制:处理的是接收端接收不过来的情况
拥塞控制的作用
- 吞吐量:每秒通过网络的所有流量
实现原理
发送方维持拥塞窗口cwnd
发送控制拥塞窗口的原则:
- 只要网络没有堵塞,就把窗口再增大一些,以便发送更多的分组
- 只要网络出现堵塞,就把窗口再减小一些,以减少注入网络的分组数
慢开始
开始慢,逐渐变快
- 慢开始门限
- 指数增长、加法增长和乘法减少
- 新的慢开始门限位于:网络堵塞处拥塞窗口/2
强调:“拥塞避免”并非完全的避免拥拥塞,利用以上措施要完全避免网络拥塞是不可能的。
“拥塞避免”是说再拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络不容易出现拥塞
快重传和快恢复
- 快重传:接收端收到一个失序的报文段后立即发送重复确认(连续发送三次)
- 快恢复:直接从新的慢开始门限开始(和慢开始相对比较快)
发送窗口的实际上限值
发送窗口的上限值 = Min[rwnd,cwnd]
一开始使用拥塞窗口逐渐增大,但是最终不超过接收窗口上限值
TCP连接管理
传输连接有三个阶段,即:连接建立、数据传送和连接释放
TCP连接的建立都是客户端发起的(client和server)
三次握手建立TCP连接
第三次确认的含义:确认服务器的确认(使服务器确认到客户机也时通的)
TCP三次握手的状态:(netstat -n 查看会话)
四次挥手释放TCP连接
等待2MSL(最大报文寿命MSL,默认是两分钟,这里就是4分钟):防止客户机最后的同意建立连接信息丢包了,如果不等待则服务器永远无法关闭连接了