计算机基础知识复习8.30

TIME_WAIT发生在什么时候,为什么是2MSL

MSL是报文最大生存时间,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为TCP报文基于是IP协议的,而IP头中有一个TTL字段,是IP数据报可以经过的最大路由数,每经过一个处理他的路由器此值就减1,当此值为0则数据报将被丢弃,同时发送ICMP报文通知源主机。

TIME_WAIT等待2倍的MSL,原因是可能存在来自发送方的数据包,当这些发送方的数据包被接收方处理后又会向对方发送响应,所以一来一回需要等待2倍的时间。如果被动关闭方没有收到断开连接的最后的ACK报文,就会触发超时重发FIN报文,另一方接收到FIN后,会重发ACK给被动关闭方,一来一去正好2个MSL。

TLS协议怎么解决HTTP风险的

信息加密:HTTP交互信息是被加密的,第三方就无法被窃取

校验机制:校验信息传输过程中是否有被第三方篡改过,如果被篡改过,则会有警告提示

身份证书:用于身份的验证

MAC包头格式

接收方Mac地址+发送方Mac地址+协议类型

在MAC包头里需要发送方MAC地址和接收方目标MAC地址,用于两点之间的传输

发送方的MAC地址获取比较简单,MAC地址是在网卡生产时写入到ROM里的,只要将这个值读取出来写入到MAC头部就可以了

接收方的MAC地址,是由ARP协议帮我们找到路由器的MAC地址。ARP协议会在以太网以广播的形式发送到以太网所有的设备。当对方和自己处于同一子网中,那么就可以得到对方的MAC地址

IO多路复用

是一种IO处理方式,指的是复用一个线程,处理多个socket中的事件,处理多个socket中的事件,能够资源复用,防止创建过多线程导致的上下文切换的开销

select/poll epoll区别

select实现多路复用的方式是,将已连接的socket都放到一个文件描述符集合,然后调用select函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历文件描述符集合的方式,当检查到有事件产生后,将此socket标记为可读或可写,接着再把整个文件描述符集合拷贝回用户态里,然后用户态还需要再通过遍历的方法找到可读或可写的socket,然后再对其处理。所以,对于select这种方式,需要进行2次遍历文件描述符集合,一次是在内核里,一次是在用户态,而且还会发生2次拷贝文件描述符集合,先从用户空间传入内核空间,由内核修改后,再传出到用户空间中。

select使用固定长度的bitmap,表示文件描述符集合,而且所支持的文件描述符的个数是有限制的,在Linux系统中,由于内核中的FD_SETSIZE限制,默认最大值为1024,只能监听0-1023的文件描述符。

poll不在用bitmap来存储所关注的文件描述符,取而代之用动态数组,以链表形式来组织,突破了select的文件描述符个数限制,当然还会受到系统文件描述符限制

epoll在内核里使用红黑树来跟踪所有待检测的文件描述字,把需要监控的socket通过epoll_ctl函数加入到内核中的红黑树里,红黑树是个高效的数据结构,增删改一般时间复杂度是O(logn)而select/poll内核里没有类似epoll红黑树这种保存所有待检测的socket的数据结构,所以select/poll每次操作时都传入整个socket集合给内核,而epoll因为在内核维护了红黑树,可以保存所有待检测的socket,所以只需要传入一个待检测的socket,减少了内核和用户空间大量的数据拷贝和内存分配

epoll使用事件驱动的机制,内核里维护了一个链表来记录就绪事件,当某个socket有事件发生时,通过回调函数内核会将其加入到这个就绪事件列表中,当用户调用epoll_wait函数后,只会返回有事件发生的文件描述符的个数,不需要像select/poll那样轮询扫描整个socket集合,大大提高了检测的效率。

死锁问题

只有满足互斥条件,持有并等待条件,不可剥夺条件,环路等待条件四个条件后,才会发生死锁

互斥条件是指多个线程不能同时使用同一个资源,如果线程A已经持有的资源,不能再同时被线程B持有,如果线程B请求获取线程A已经占用的资源,那线程B只能等待,直到线程A释放了资源。

持有并等待条件是指,当线程A已经持有了资源1,又想申请资源2,而资源2已经被线程C持有了,所以线程A就会处于等待状态,但是线程A在等待资源2的同时并不会释放自己已经持有的资源1

不可剥夺条件

当线程已经持有了资源,在自己使用完之前不能被其他线程获取,线程B如果也想使用此资源,则只能在线程A使用完并释放后才能获取

环路等待条件

在死锁发生的时候,两个线程获取资源的顺序构成了环形链。线程A已经持有资源2,而想请求资源2,线程B已经获取了资源1,而想请求资源2,这就形成资源请求等待的环形图

平衡二叉树结构

左右两个子树的高度差的绝对值不超过1

左右两个子树都是一颗平衡二叉树

ping查询报文类型的使用

ping命令执行的时候,源主机首先会构建一个ICMP回送请求消息数据包

ICMP数据包内包含多个字段,最重要的是两个:

第一个是类型,对于回送请求消息而言该字段为8

另一个是序号,主要用于区分连续ping的时候发出的多个数据包。

由ICMP协议将这个数据包连同地址192.168.1.2一起交给IP层,IP层将以192.168.1.2作为目的地址,本机IP地址作为源地址,协议字段设置为1表示是ICMP协议,再加上一些其他控制信息,构建一个IP数据包。接下来,需要加入MAC头,如果在本地ARP映射表中查找出IP地址192.168.1.2所对应的MAC地址,则可以直接使用。如果没有,则需要发送ARP协议查询MAC地址,获得MAC地址后,由数据链路层构建一个数据帧,目的地址是IP层传过来的MAC地址,源地址则是本地的MAC地址,还需要附加上一些控制信息,依据以太网的介质访问规则,将他们传送出去。

主机B收到这个数据帧后,先检查他的目的MAC地址,并和本机的MAC地址对比,如符合则接受,否则就丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层。同样,IP层检查后,将有用的信息提取后交给ICMP协议。

主机B会构建一个ICMP回送响应消息数据包,回送响应数据包的类型字段为0,序号为接受到的请求数据包中的序号,然后再发送出去给主机A

在规定的时间内,源主机如果没有接到ICMP的应答包,则说明目标主机不可达,如果接受到了ICMP回送响应消息,则说明目标主机可达。

参考资料

小林coding

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值