计算机网络

1、TCP

1.1 如何保证可靠性

1)序列号、确认应答、超时重传
数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明了它下一次需要接收的数据序列号。如果发送方迟迟未收到确认应答,发送方在等待一定时间后会进行重传。这个时间一般是2*RTT(报文段往返时间)+一个偏差值。

2)窗口控制与高速重发控制/快速重传(重复确认应答)
TCP会利用窗口控制来提高传输速度,窗口大小就是无需等待确认而可以继续发送数据的最大值。使用窗口控制,发送端如果收到3次相同应答,就会立刻进行重发;但还有种情况有可能是数据都收到了,但是有的应答丢失了,这种情况不会进行重发,因为发送端知道,如果是数据段丢失,接收端不会放过它的,会疯狂向它提醒…

3)拥塞控制

  • 慢开始:一开始将该窗口大小设为1,之后每次收到确认应答(经过一个RTT),将拥塞窗口大小*2(指数上升)。
  • 拥塞避免:设置慢启动阈值,一般开始都设为65536。拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是加法增加(每次确认应答/每个rtt,拥塞窗口大小+1),以此来避免拥塞。
  • 将报文段的超时重传看做拥塞,则一旦发生超时重传,我们需要先将阈值设为当前窗口大小的一半,并且将窗口大小设为初值1,然后重新进入慢启动过程。
  • 快速重传:在遇到3次重复确认应答(高速重发控制)时,代表收到了3个报文段,但是这之前的1个段丢失了,便对它进行立即重传。然后,先将阈值设为当前窗口大小的一半,然后将拥塞窗口大小设为慢开始阈值+3的大小。

1.2 连接建立和断开

在这里插入图片描述
三次握手:

  1. Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  2. Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  3. Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

三次握手的原因:
tcp是全双工通信,两次握手只能确定单向数据链路是可以通信的,并不能保证反向的通信正常

四次挥手:

  1. 数据传输结束后,客户端的应用进程发出连接释放报文段,并停止发送数据,客户端进入FIN_WAIT_1状态,此时客户端依然可以接收服务器发送来的数据。
  2. 服务器接收到FIN后,发送一个ACK给客户端,确认序号为收到的序号+1,服务器进入CLOSE_WAIT状态。客户端收到后进入FIN_WAIT_2状态。
  3. 当服务器没有数据要发送时,服务器发送一个FIN报文,此时服务器进入LAST_ACK状态,等待客户端的确认
  4. 客户端收到服务器的FIN报文后,给服务器发送一个ACK报文,确认序列号为收到的序号+1。此时客户端进入TIME_WAIT状态,等待2MSL(MSL:报文段最大生存时间),然后关闭连接。

四次挥手的原因:
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
由于连接的关闭控制权在应用层,所以被动关闭的一方在接收到FIN包时,TCP协议栈会直接发送一个ACK确认包,优先关闭一端的通信。然后通知应用层,由应用层决定什么时候发送FIN包。应用层可以使用系统调用函数read==0来判断对端是否关闭连接。

2、HTTPS和HTTP

HTTP协议和HTTPS协议区别如下:
1)HTTP协议是以明文的方式在网络中传输数据,而HTTPS协议传输的数据则是经过TLS加密后的,HTTPS具有更高的安全性
2)HTTPS在TCP三次握手阶段之后,还需要进行SSL 的handshake,协商加密使用的对称加密密钥
3)HTTPS协议需要服务端申请证书,浏览器端安装对应的根证书
4)HTTP协议端口是80,HTTPS协议端口是443

HTTPS缺点:
HTTPS握手阶段延时较高:由于在进行HTTP会话之前还需要进行SSL握手,因此HTTPS协议握手阶段延时增加
HTTPS部署成本高:一方面HTTPS协议需要使用证书来验证自身的安全性,所以需要购买CA证书;另一方面由于采用HTTPS协议需要进行加解密的计算,占用CPU资源较多,需要的服务器配置或数目高

3、OSI七层模型和TCP/IP四层模型

OSI七层模型:

物理层: 通过媒介传输比特,确定机械及电气规范,传输单位为bit,主要包括的协议为:IEE802.3 CLOCK RJ45
数据链路层: 将比特组装成帧,提供数据校验保证数据的可靠传输,点到点的传递,传输单位为,frame(数据帧),主要包括的协议为MAC VLAN PPP
网络层:负责数据包从源到宿的传递和网际互连,传输单位为, datagram,packet(数据报),包括的协议为IP ARP ICMP
传输层:提供端到端的可靠报文传递和错误恢复,主要携带端口号,传输单位为报文, segment(数据段),主要包括的协议为TCP UDP
会话层:建立、管理和终止会话,传输单位为SPDU,主要包括的协议为RPC NFS
表示层: 对数据进行翻译、加密和压缩,传输单位为PPDU,主要包括的协议为JPEG ASII
应用层: 允许访问OSI环境的手段,传输单位为APDU,message, 主要包括的协议为FTP HTTP DNS

TCP/IP 4层模型包括:

网络接口层(链路层):MAC VLAN
网络层:IP ARP ICMP
传输层:TCP UDP
应用层:HTTP DNS SMTP

两个主机发送消息的过程:
A一层层封装消息:
应用层:“message”
传输层:TCP/UDP协议,添加通信端口号,封装成报文
网络层:IP协议,添加IP信息,封装成IP包
链路层:添加帧头帧尾(校验码)

IP协议:根据目的IP查找路由表获得下一跳的IP地址,然后通过ARP查找下一跳的MAC地址;
ARP协议:获取下一跳的MAC地址;

数据链路层设备:以太网交换机(或第二层交换机)
公网-公网:直接访问
公网-私网:NAT映射
私网-私网:NAT映射,打洞机制( 所谓udp打洞就是指客户端A通过udp协议向服务器发送数据包,服务器收到后,获取数据包,并且可获取客户端A地址和端口号。同样在客户端B发送给服务器udp数据包后,服务器同样在收到B发送过来的数据包后获取B的地址和端口号,将A和B的地址与端口号分别发送给对方,这样双方可以继续用UDP协议通信。)
NAT映射表:本地IP转换为公网IP(比如QQ聊天,从内网发送数据到腾讯服务器,然后转发消息到目的端)

4、输入URL之后会发生什么

浏览器中输入URL
浏览器要将URL解析为IP地址,解析域名就要用到DNS协议,首先主机会查询DNS的缓存,如果没有就给本地DNS发送查询请求。DNS查询分为两种方式,一种是递归查询,一种是迭代查询。如果是迭代查询,本地的DNS服务器,向根域名服务器发送查询请求,根域名服务器告知该域名的一级域名服务器,然后本地服务器给该一级域名服务器发送查询请求,然后依次类推直到查询到该域名的IP地址。DNS服务器是基于UDP的,因此会用到UDP协议。

得到IP地址后,浏览器就要与服务器建立一个http连接。http生成一个get请求报文,将该报文传给TCP层处理。如果采用https还会使用https协议先对http数据进行加密。TCP层如果有需要先将HTTP数据包分片,分片依据路径MTU(以太网的最大传输单元为1500)和MSS(1460,为TCP数据包每次传输的最大数据分段大小,MSS=MTU值减去IPv4 Header(20 B)和TCP header(20 B))。TCP的数据包然后会发送给IP层。IP层通过路由选路,一跳一跳发送到目的地址。以太网协议需要目的IP地址的物理地址,有需要ARP协议。

其中:
1、DNS协议,http协议,https协议属于应用层
应用层确定进程之间通信的性质以满足用户的需要。这里的进程就是指正在运行的程序。应用层不仅要提供应用进程所需要的信息交换和远地操作,而且还要作为互相作用的应用进程的用户代理,来完成一些为进行语义上有意义的信息交换所必须的功能。应用层直接为用户的应用进程提供服务。

2、TCP/UDP属于传输层
传输层的任务就是负责主机中两个进程之间的通信。因特网的传输层可使用两种不同协议:即面向连接的传输控制协议TCP(可靠的交付),和无连接的用户数据报协议UDP(尽最大努力交付)。在分组交换网内的各个交换机结点都没有传输层。IP报文头中的协议标识字段,17是UDP,6是TCP。

3、IP协议,ARP协议属于网络层
数据包到达网络等准备往数据链层发送的时候,首先会去自己的ARP缓存表。如果查到了,就将目标ip的mac地址封装到链路层数据包的包头。如果缓存中没有找到,会发起一个广播,选择合适的路由。网络层负责为不同主机提供通信。在发送数据时,网络层将运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,分组也叫作IP数据报,或简称为数据报。

4、数据链路层
当发送数据时,数据链路层的任务是将在网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上传送以帧为单位的数据。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制、以及流量控制信息等)。

5、物理层
物理层的任务就是透明地传送比特流。在物理层上所传数据的单位是比特。传递信息所利用的一些物理媒体,如双绞线、同轴电缆、光缆等,并不在物理层之内而是在物理层的下面。因此也有人把物理媒体当做第0层。

5、get和post的区别

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

区别:
1、get参数通过url传递,post放在request body中。
2、get请求在url中传递的参数是有长度限制的,而post没有。
3、get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。
4、get请求只能进行url编码,而post支持多种编码方式。
5、get请求会浏览器主动cache,而post支持多种编码方式。
6、get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。
7、GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
8、GET产生一个TCP数据包;POST产生两个TCP数据包。

6、IP地址

根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。
在这里插入图片描述

类别IP地址范围私网IP地址范围子网掩码网络数网段最大主机数
A1.0.0.1-127.255.255.25410.0.0.0-10.255.255.255255.0.0.0126(2^7-2)16777214(2^24-2)
B128.0.0.1-191.255.255.254172.16.0.0-172.31.255.255255.255.0.016383(2^14-1)65534(2^16-2)
C192.0.0.1-223.255.255.254192.168.0.0-192.168.255.255255.255.255.02097152(2^21-1)254(2^8-2)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值