1.TCP的可靠传输
- tcp的可靠传输主要靠 来自接收方的确认报文 和 超时重传。
- 发出报文,计时器开始计时,在规定超时时间内未收到确认报文则重新发送。
- 注意:发送报文都留一个副本,如果收到确认报文就会删除,未重新发送之后超时时间会设置为原来的2倍。
- 对于流水线形式的请求报文,服务器只会按照顺序发出确认报文,如果出现失序报文,则不会被确认而是继续发送前一个的确认报文。
- 流水线形式:不必等到一个确认报文到来再发送下一个请求报文,而是连续发送请求报文。序 失效报文是指确认号不正确的报文
- 如 第一个请求报文seq=1 带有100个数据,则第一个确认报文ack = 101。
- 此时服务器应该收到第二个报文seq = 101, 但是服务器却收到了 seq = 300,这说明第二个报文丢失了或者拥塞还没到来,解决此问题一是等到被拥塞的报文到来,二是通过快重传重新发送。
- 在收到失序报文后不会发送对其的确认报文,而是发送上一个正常的确认报文。
- 因为只有服务器收到请求报文才会发送确认报文,如果收到确认报文说明该报文的确认号之前的数据都收到了,这些数据不会被重发。
2.拥塞控制
- 需求产生的原因:需求大于供应,某些网络节点进来的报文没有出去的多,造成数据积压。
- 判断拥塞的依据就是出现了超时。
- 拥塞窗口 cwnd : 拥塞窗口随着拥塞程度浮动变化,并且发送窗口就等于拥塞窗口,一次要发送多少个请求就看cwnd数量。
- 慢开始:无拥塞时窗口数量加倍,达到慢开始门限进入拥塞控制。
- 拥塞避免: 每经过一个RTT窗口数目增加1。
- 慢开始和拥塞避免都是基于窗口的。
- 快重传:当收到3个连续相同的ack确认报文,则立刻在定时器过期之前重传一次请求报文,避免超时。
- 有时候个别报文丢失了,而不是发生了拥塞,如果服务器迟迟不发送确认消息就会超时,被认为出现了拥塞,这会导致发送方错误的开启慢启动,减低性能。
- 当收到失序报文之后会立即发送上一个确认报文,当客户端收到3个连续的相同报文(一共四个相同报文)就认为报文丢失了,则会立即快重传,避免超时。
- 为啥3个才会认为丢失? 如果遇到了拥塞之后又立刻恢复导致报文段比他后面的报文来的迟,那么在3个确认报文发送期间可以被收到就可以避免快重传,超过三个不管什么原因都进行快重传。
- 快恢复:由于收到了3个相同的确认报文,说明有三个报文已经到达了服务器,为了提高性能,窗口就要扩大一些,或者把慢开始上限提高到当前窗口一半,再进行慢开始。
3.UDP
- 用户数据报协议UDP
- 传输控制协议TCP
- UDP不要先建立连接,不是面向连接的。
- UDP只有2个字段,一个首部字段一个数据字段。
- 首部字段只有8个字节 。
4.网络层提供不可靠服务
- 网络层向上提供 无连接 尽最大努力交付的数据报服务。
- 尽最大努力就是不可靠:当路由器缓存溢出,他会将缓冲区的所有数据报丢弃并发送UCMP错误报告给发送源
- 接收方接收到IP报文时,会计算首部校验和,如果发现有误则丢弃报文,并不会通知任何信息给发送源。
- 发送方设置校验和
- 首先把校验和(16bit)设为0,将头部每16bit划分为一个间隔字段。
- 将所有间隔字段二进制相加求和在取反。
- 将结果写入校验和。
- 接收到检验校验和
- 将头部每16bit划分为一个间隔字段。
- 所有字段(包括校验和)二进制求和取反。
- 如果为0,则正确,如果不为0则有错误,就要丢弃。
- 发送方设置校验和
3.所有可靠性由运输层或者应用层实现。
5.常见的网络端口和协议
- 端口地址都是16比特,可以有在0---65535范围内的端口号。
- 公认端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。
20/21 | TCP | FTP | 文件传输,21端口用于连接,20端口用于传输数据 |
23 | TCP | Telent | Internet远程登录服务 |
25 | TCP | SMTP | 简单邮件传输服务器 |
53 | UDP | DNS | 域名服务器 |
69 | UDP | TFTP | 便于从系统下载启动代码 |
80 | TCP | HTTP | 超文本传输协议 |
110 | TCP | POP3 | 邮件协议3 |
443 | TCP | HTTPS | 安全的超文本传输协议 |