TCP/IP总结

TCP

TCP和UDP的区别

这里写图片描述

TCP的三步握手、四次挥手

同时打开:四次握手;同时关闭:四次挥手

TCP的可靠性

  1. 应用数据被分割成最适合发送的数据块
  2. 发出报文段后启动一个定时器,不能及时收到确认,就会重发报文段(首次分组传输和复位信号时间差为9分钟)
  3. TCP会通过伪首部来计算检验和,如果有错就会丢弃这个报文段,希望发送端重传
  4. IP数据会失序和重复,TCP也会失序和重复,接受端会重新排序并去掉重复报文段
  5. 流量控制,只能发送缓冲区能接受的数据,滑动窗口协议
  6. 拥塞控制:慢启动,拥塞避免,快速重传,快速恢复

流量控制和拥塞控制

流量控制

  1. 起点是ACK,终点是ACK+窗口大小
  2. 发送窗口只有收到对端对于本段发送窗口内字节的ACK确认,才会移动发送窗口的左边界;发送方不必发送一个全窗口大小的数据
  3. 接收端可以根据自己的状况通告窗口大小,从而控制发送端的接收,进行流量控制。右边沿必须向右移动, 接收方发送ACK前不必等待窗口被填满

拥塞控制

TCP的真正的发送窗口=min(rwnd, cwnd)。但是rwnd(对端通告的接收窗)是由对端确定的,网络环境对其没有影响,所以在考虑拥塞的时候我们一般不考虑rwnd的值,我们暂时只讨论如何确定cwnd值的大小.关于cwnd的单位,在TCP中是以字节来做单位的,我们假设TCP每次传输都是按照MSS大小来发送数据的,因此你可以认为cwnd按照数据包个数来做单位也可以理解,所以有时我们说cwnd增加1也就是相当于字节数增加1个MSS大小。

拥塞控制的具体过程如下:

  1. TCP连接初始化,将拥塞窗口设置为1
  2. 执行慢开始算法,cwnd按指数规律增长,直到cwnd=ssthresh时,开始执行拥塞避免算法,cwnd按线性规律增长
  3. 当网络发生拥塞,把ssthresh值更新为拥塞前ssthresh值的一半,cwnd重新设置为1,按照步骤(2)执行

以上过程可以分为下面四种算法:

  1. 慢启动算法:当新建连接时,cwnd初始化为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加1个MSS大小。这样cwnd的值就随着网络往返时间(RoundTrip Time,RTT)呈指数级增长,事实上,慢启动的速度一点也不慢,只是它的起点比较低一点而已。 即从第一个报文段指数级增加。
  2. 拥塞避免:从慢启动可以看到,cwnd可以很快的增长上来,从而最大程度利用网络带宽资源,但是cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段。对于大多数TCP实现来说,ssthresh的值是65536(同样以字节计算)。拥塞避免的主要思想是加法增大,也就是cwnd的值不再指数级往上升,开始加法增加。此时当窗口中所有的报文段都被确认时,cwnd的大小加1,cwnd的值就随着RTT开始线性增加,这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值。即到达一定阈值后不再指数级增加,而是加法增加。
  3. 快速重传:如果一连串收到三个重复的ACK。就非常可能是一个报文段丢失了,我们立即重传丢失的报文段而无需等待超时定时器溢出。之所以使用快速重传而不慢启动是因为接收方只有在收到另一个报文段才会产生重复的ACK,说明收发两端仍有流动的数据,慢启动会突然减少数据流。即连着收到三个ACK时不等定时器溢出直接重传。
  4. 快速恢复主要分为三步:
    a.当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络;
    b.再收到重复的ACK时,拥塞窗口增加1;
    c.当收到新的数据包的ACK时说明重传的包成功了,这个时候推出快速恢复算法。把cwnd设置为第一步中的ssthresh的值。再次进入拥塞避免状态。
    在这里插入图片描述
    TCP超时重传、滑动窗口、拥塞控制、快重传和快恢复
    TCP 拥塞控制算法

从TIME_WAIT到CLOSE为什么是2MSL

  1. 在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。
  2. Client会在发送出ACK之后进入到TIME_WAIT状态, Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。
  3. 如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

TCP出现RST的几种情况

1 端口未打开(udp会产生一个icmp端口不可达信息)
2 请求超时
3 提前关闭
4 在一个已关闭的socket上收到数据

报文分段

TCP分段的原因是MSS,IP分片的原因是MTU。

  1. MTU:最大传输单元,以太网是1500字节,超级通道的MTU65535,是最长IP长度
  2. MSS:TCP最大报文长度,非本地网络不设置默认为536(适合主机接受的576字节的IP数据包),本地网络最大可达1460;UDP一般限制用户数据报长度512。

交互数据流和成块数据流

  1. 交互数据流:经受时延的确认(捎带ACK),Nagel算法(Telnet)
  2. 成块数据流:滑动窗口协议,收到确认前可以发送多个分组(ftp)

HTTP

报文结构

请求报文(GET/URL/HTTP1.1)

响应报文(HTTP1.1/200/OK)

状态码
速记,信息成功重定向客户端服务器.
1XX(信息状态码):接收的请求正在处理
2XX(成功状态码):接收的请求正常处理完毕
3XX(重定向状态码):需要进行附加的操作以完成请求
4XX(客户端错误状态码):服务器无法处理请求
5XX(服务器错误状态码):服务器处理请求出错

请求方式
get(查,获取资源),post(改,传输实体主体),delete(删,删除文件),put(增,传输文件)等

GET和POST的区别

  1. GET:请求的数据会附在URL之后,以?分割URL和传输数据,多个参数用&连接;POST:把提交的数据放置在是HTTP包的包体中。因此,GET提交的数据会在地址栏中显示出来,而POST提交不会改变地址栏。
  2. GET:特定浏览器和服务器对URL长度有限制,因此对于GET提交时,传输数据就会受到URL长度的限制;POST:理论上数据不受限。
  3. POST的安全性要比GET的安全性高。比如:通过GET提交数据,用户名和密码将明文出现在URL上。

连接方式

  1. 每进行一次http通信就要断开一次
  2. 持久连接,只要建立连接就能一次性发送所有资源
  3. 管线化,不用等待响应也可直接发送下一个请求

HTTP2.0

在性能上进行了大幅改进,以减少连接数为目的,通过压缩http头、多路复用请求以及对请求划分优先级来缩短网页的加载时间,同时提高了安全性。

HTTPS

ssl(安全套接层):公有秘钥传输,私有秘钥解密,公共加密
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。

服务器认证阶段:1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;4)服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

端口号和协议

服务器的熟知端口号0-1023, 登记端口号1024~49151;客户端使用的端口由客户进程运行时动态选择。

TCP协议:Telnet(23),FTP(20,21),SMTP(25) ,HTTP(80)
UDP协议:TFTP(69),DNS(53,在发送和接收域名数据库下使用TCP)

DNS

以“."结尾的域名是绝对域名,如果一个域名不以”."结尾就是不完全的,但如果不完整的域名由两个或两个以上的“."组成,则认为它是完整的。

ICMP

  • 分为查询(Ping)和差错(Traceroute),查询报文可产生差错报文,差错报文不能产生差错报文
  • Traceroute发送UDP数据报给目的主机,但它选择了一个不可能的端口,目的主机收到后会产生一份“端口不可达”的ICMP差错报文
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值