咱们来回顾一下上次分享到的mongodb
的安装和使用
mongodb
的介绍mongodb
如何安装mongodb
如何简单使用mongodb
要是对于mongodb
还有点兴趣的话,可以查看文章 一文便知 GO 中mongodb 的安装与使用
今天咱们来看点面试题
大端模式,低地址存高字节
小端模式,低地址存低字节
ACK
应答,SYN标志。携带序号,数据字节大小(0),确认序号,滑动窗口大小ACK
应答,携带确认序号ACK
。 -- 半关闭ACK
应答 -- 连接全部关闭如果此时ACK
在网络中丢失,过了超时计时器后,那么Server端会重新发送SYN+ACK
包
重传次数根据/proc/sys/net/ipv4/tcp_synack_retries
来指定,默认是 5
次
如果重传指定次数到了后,仍然未收到ACK
应答,那么一段时间后,Server自动关闭这个连接
但是Client认为这个连接已经建立,如果Client
端向Server
写数据,Server端将以RST
包响应,方能感知到Server
的错误。
当失败时服务器并不会重传ack
报文,而是直接发送RTS
报文段,进入CLOSED
状态
这样做的目的是为了防止SYN
洪泛攻击
长连接:连接->传输数据->保持连接 -> 传输数据-> ………..->直到一方关闭连接,多是客户端关闭连接
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
长连接可以省去较多的tcp建立/关闭
的操作,减少浪费,节省时间,对于频繁请求资源的客户,较适用于长连接;
随着客户的越来越多,server早晚会有扛不住的一天,这时需要采取一些策略,如关闭一些长时间不读写操作的连接,这样可以避免一些恶意连接导致server端服务受损,如果条件再允许,就可以以客户端为颗粒度,限制每个客户端的最大连接数
连接->传输数据->关闭连接
比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
短连接对于服务器来说较为简单,存在的连接都是有用的连接,不需要额外的控制
客户端连接频繁,会在tcp
的建立和关闭上浪费时间。
发送给对端连接,本段的缓冲区实时大小,保证数据不会丢失。
表明对端已经关闭连接
errno
的情况设置了非阻塞的方式,读的时候,数据还没有到达
被信号中断
异常
netstat -antp
int opt = 1;
setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(void *)&opt,sizeof(opt));
终止一个连接要经过 4次 握手
这由TCP的半关闭(half-close)
造成的
CLOSE_WAIT
状态的问题情况父进程打开了socket
,然后用派生子进程来处理业务,父进程继续对网络请求进行监听,永远不会终止
客户端发FIN
过来的时候,处理业务的子进程的read返回0,子进程发现对端已经关闭了,直接调用close()对本端进行关闭
实际上,仅仅使socket
的引用计数减1,socket
并没关闭。从而导致系统中又多了一个CLOSE_WAIT
的socket。。。
子进程的关闭处理应该是这样的:
shutdown(sockfd, SHUT_RDWR);
close(sockfd);
这样处理,服务器的FIN会被发出,socket进入LAST_ACK
状态,等待最后的ACK
到来,就能进入初始状态CLOSED
linux
系统下使用 shutdown
系统调用来控制socket的关闭方式
int shutdown(int sockfd,int how);
参数 how
允许为shutdown
操作选择以下几种方式:
关闭连接的读端。也就是该套接字不再接受数据,任何当前在套接字接受缓冲区的数据将被丢弃。进程将不能对该套接字发出任何读操作。对TCP套接字该调用之后接受到的任何数据将被确认然后被丢弃。
关闭连接的写端。
相当于调用shutdown
两次:首先是以SHUT_RD,然后以SHUT_WR
注意:
在多进程中如果一个进程中shutdown(sfd, SHUT_RDWR)
后其它的进程将无法进行通信,如果一个进程close(sfd)
将不会影响到其它进程
2MSL
时长 TIME_WAIT
一定出现在主动关闭的一端,保证最后一个ACK
对端能够收到。
TTL
是什么?TTL是 Time To Live的缩写
该字段指定**IP
包被路由器丢弃之前允许通过的最大网段数量**。
TTL是IPv4
包头的一个8 bit
字段。
TTL的作用是限制IP
数据包在计算机网络中的存在的时间。
TTL的最大值是255,TTL的一个推荐值是64
TTL
原理虽然TTL
从字面上翻译,是可以存活的时间,但实际上TTL是IP
数据包在计算机网络中可以转发的最大跳数。
TTL
字段由IP
数据包的发送者设置,在IP
数据包从源到目的的整个转发路径上
每经过一个路由器,路由器都会修改这个TTL
字段值,具体的做法是把该TTL的值减1,然后再将IP
包转发出去。
如果在IP
包到达目的IP
之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP``包
并向IP
包的发送者发送ICMP
发送超时报文。
优点:
C/S的最大优点是能够实现复杂的应用构造,安全性高,数据传输速度快。
缺点:
工作过程
b/s
模型优点:
B/S
最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件,只要有一台能上网的电脑就能使用
客户端零安装、零维护。系统的扩展非常容易。
分布式、易扩展、共享性强
相比较传统的C/S
的优势:
缺点:
工作过程
Web
服务器提出HTTP
请求。Web
服务器根据浏览器请求调出相应文件,对相应文件不做处理或加以解释执行后,将纯客户端HTML
代码结果返回给浏览器。Web
服务器发回的页面内容(纯HTML
代码),显示给用户。ICMP
协议过程例子
ARP
请求,查询 192.168.2.179的MAC地址。ARP
请求,向A电脑发起单向应答,告诉A电脑自己的MAC地址为90:A4:DE:C2:DF:FE
ping命令是依托于ICMP
协议的,ICMP
协议的存在就是为了更高效的转发IP
数据报和提高交付成功的机会。
ping命令除了依托于ICMP
,在局域网下还要借助于ARP
协议,ARP
协议能根据IP
地址查出计算机MAC地址。
ARP
是有缓存的,为了保证ARP
的准确性,计算机会更新ARP
缓存。
ICMP
是(Internet Control Message Protocol)Internet控制报文协议。
ICMP协议
是一种面向无连接的协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。ICMP是一个网络层协议。
主要功能主要有:
IP
包是否成功到达目标地址IP
包被丢弃的原因read
函数ICMP
朋友们,写作不易
你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是小魔童哪吒,欢迎点赞关注收藏,下次见~