网络汇总

1、I/O模型,select、poll、epollhttp://blog.csdn.net/pmt123456/article/details/56556557

                                                 区别:http://blog.csdn.net/turkeyzhou/article/details/8504554

                                     epoll为什么这么快:http://blog.csdn.net/wangfeng2500/article/details/9127421

                                     LT和LT模式:点击打开链接

2、三次握手、四次挥手、状态转换图:http://blog.csdn.net/pmt123456/article/details/56677578

非阻塞connect

非阻塞accept:用select检测socket状态,如果有连接就调用accept,这样如果在select检测到由连接请求,在调用accept之前,这个请求断开了,然后调用accept的时候就会阻塞在哪里,除非这时有另外一个连接请求,如果没有,则一直被阻塞在那里。

解决办法:

(1) 使用select监听套接字是否有完成连接的时候,总是把这个监听套接字设置为非阻塞;

(2) 在后续的accept调用中忽略以下错误,EWOULDBLOCK(Berkeley实现,客户中止连接), ECONNABORTED(posix实现,客户中止连接), EPROTO(serv4实现,客户中止连接)和EINTR(如果有信号被捕获);

3、socket编程范式http://blog.csdn.net/fly_yr/article/details/50387065

      使用GDB命令行调试器调试C/C++程序

4、TCP和UDP的区别:

1)TCP提供面向连接的传输,通信前要先建立连接(三次握手机制);UDP提供无连接的传输,通信前不需要建立连接。

2)TCP提供可靠的传输(有序,无差错,不丢失,不重复);UDP提供不可靠的传输。

3)TCP面向字节流的传输,因此它能将信息分割成组,并在接收端将其重组;UDP是面向数据报的传输,没有分组开销。

4)TCP提供拥塞控制和流量控制机制;UDP不提供拥塞控制和流量控制机制。

TCP、udp的优缺点及应用场景


5、流量控制和拥塞控制

1)流量控制:让发送方的发送速率不要太快,要让接收方来得及接受

滑动窗口机制:

TCP 采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节。
在 TCP 报文段首部的窗口字段写入的数值就是当前给对方设置的发送窗口数值的上限。
发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小)。

  


TCP实体在端设备中为每个连接开设两个缓冲区,一个是接受缓冲区,用来接受对方发送来的数据;另一个是发送缓冲区,TCP实体从应用进程接受数据,存储在发送缓冲区。

发送数据一方可以在一定条件下连续发送若干个分组,而不必每次发送都要在前一个分组的确认信息收到后进行。通过设定的数据发送区间进行控制。


滑动窗口的大小和网络接收分组的速度有关,如果窗口大小为1,则滑动窗口协议就退化为简单的肯定确认协议,增加窗口大小,就可以减少甚至消除网络的空闲状态。分组发送速度应当与网络传输分则的能力相匹配。

TCP传输过程中的滑动窗口大小并不是固定不变的,在传输过程中会动态调整,接收方会不断的将自己的接收窗口大小通告发送方,发送方将接收方通告的窗口大小作为发送窗口大小。

发送方在两种情况下会停止发送数据:

a. 发送窗口中全是已发送未确认数据:网络传输延迟大

b. 接收方的接收窗口大小为0:接收方处理速度太慢

2)拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至过载。

拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。

拥塞控制是一个全局性的过程,涉及到所有的主机、路由器以及与降低网络传输性能有关的所有因素。

几种拥塞控制方法:慢启动、拥塞避免、快重传、快恢复

(1) 接收端窗口 rwnd     这是接收端根据其目前的接收缓存大小所许诺的最新的窗口值,是来自接收端的流量控制。接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。
(2) 拥塞窗口 cwnd (congestion window)    是发送端根据自己估计的网络拥塞程度而设置的窗口值,是来自发送端的流量控制。


a、慢启动和拥塞避免:发送方维持一个拥塞窗口cwnd的状态变量,拥塞窗口的大小取决于网络的拥塞程度,并且在动态的变化,发送方让自己的发送窗口等于拥塞窗口。

发送方控制拥塞窗口的原则是:只要窗口没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去;但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

a-1慢启动算法:当主机开始发送数据时,如果立即把大量数据字节注入网络,那么就可能引起网络拥塞,因为现在并不清楚网络的符合情况。因此,较好的方法时先探测下,即由小到大的逐渐增大发送窗口——由小到大逐渐增大拥塞窗口的数值。通常在刚刚发送报文段时,先把拥塞窗口cwnd设置为一个最大报文段MSS的数值,而在每收到一个对新的报文段的确认后,拥塞窗口至多增加一个MSS数值。用这样的方法逐步增大发送方的拥塞窗口cwnd,可以使分组注入网络的速率更加合理。


MSS(Maximum Segment Size,最大报文长度),是TCP协议定义的一个选项,MSS选项用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度

如图,在主机刚刚开始发送报文段时可先将拥塞窗口 cwnd 设置为一个最大报文段 MSS 的数值。
在每收到一个对新的报文段的确认后,将拥塞窗口增加至多一个 MSS 的数值。
用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理

每经过一个传输轮次(往返时间RTT),拥塞窗口wcnd就加倍。不过传输轮次更加强调:把拥塞窗口所允许发送的报文段都连续发出去,并收到了对已经发送的最后一个字节的确认。

注:慢启动的慢并不是指cwnd的增长速度慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是探测一下网络的拥塞状况),然后再逐渐增大cwnd。

当cwnd<ssthresh时,使用上述慢启动算法;

当cwnd>ssthresh时,停止使用慢启动算法,而改用拥塞避免算法;

当cwnd=ssthresh时,即可使用慢启动算法,也可以使用拥塞避免算法。

a-2拥塞避免算法:让拥塞窗口cwnd缓慢的增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd+1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢的增长,比慢开始算法的拥塞擦混口增长速率慢得多。

无论是慢启动开始阶段还是拥塞避免阶段,只要发送方判断网络出现拥塞(没有收到确认),就要把慢启动门限ssthresh设置为出现拥塞时发送方窗口值得一半(但不能小于2)。然后把拥塞窗口cwnd的值重新设为1,执行慢启动算法。这样做的目的就是要迅速减少主机发送到网络中的分组数。

 

发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。

(1)在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。  

(2)发送端收到 ACK1 (确认 M0,期望收到 M1)后,将 cwnd 从 1 增大到 2,于是发送端可以接着发送 M1 和 M2 两个报文段。 

(3)接收端发回 ACK2 和 ACK3。发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1。现在发送端的 cwnd 从 2 增大到 4,并可发送 M4 ~ M6共 4个报文段。 发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输次数按指数规律增长。 当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。 

注:“拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全避免网络拥塞还是不可能的。“拥塞避免”是说在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。


b-2 快速重传和快速恢复


    如果发送方设置了超时计时器时限已到但还没有收到确认,那么很可能是网络出现了拥塞,致使报文段在网络中的某处被丢弃。这时,TCP马上把拥塞窗口cwnd减少到1,并执行慢启动算法,同时把慢启动门限值ssthresh减半。这是不使用快速重传的情况。
    快速重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有达到对而不要等到自己发送数据时才进行捎带确认。



(1) 当发送端收到连续三个重复的 ACK 时,就重新设置慢开始门限 ssthresh,把ssthresh设置为cwnd的一半。
(2) 与慢开始不同之处是拥塞窗口 cwnd 不是设置为 1,而是设置为 ssthresh + 3 *MSS。 (这样做的理由是:既然发送方收到三个重复的确认,就表明有三个分组已经离开了网络。这三个分组不再消耗网络 的资源而是停留在接收方的缓存中。可见现在网络中并不是堆积了分组而是减少了三个分组。因此可以适当把拥塞窗口扩大了些。)
(3) 若收到的重复的 ACK 为 n 个(n > 3),则将 cwnd 设置为 ssthresh + n * MSS。
(4) 若发送窗口值还容许发送报文段,就按拥塞避免算法继续发送报文段。

(5) 若收到了确认新的报文段的 ACK,就将 cwnd 缩小到 ssthresh。



6、socket在什么情况下变为可读/可写

可读:

  1)socket的接收缓冲区中的数据字节大于等于该socket的接收缓冲区低水位标记的当前大小。

对这样的socket的读操作将不阻塞并返回一个大于0的值(即返回准备好读入的数据),可以用SO_RDVLOWAT选项来设置socket的低水位标记,对于TCP和UDP socket而言,缺省值为1

2)该连接的读这一半关闭,

即接收到对方发来的FIN,对于这样的socket的读操作将不阻塞并返回0

3)socket是一个用于监听的socket,并且已经完成的连接数为非0,

是因为socket已经收到了对方的connect请求,执行了三次握手的第一步:对方发生SYN请求过来,使监听socket处于可读状态;正常情况下,这样的socket accept操作不会阻塞。

4)有一个socket有由异常错误条件待处理

对于这样的socket的读操作将不会阻塞,并且返回一个错误(-1),errno则设置成明确的错误条件,这些待处理的错误也可通过指定socket选项SO_ERROR调用getsockopy来取得清除

可写:

 1)socket的发送缓冲区中的字节数大于等于该socket的发送缓冲区低水位标记的当前大小。

对于这样的socket的写操作将不阻塞并返回一个大于0的值(返回准备好写入的数据)。可以用SO_SNDLOWAT socket选项来设置该socket的低水位标记。对于TCP和UDP socket而言,其缺省值为2048

2)该链接的写这一半关闭。

对这样的socket的写操作将产生SIGPIPE信号,该信号的缺省行为是终止进程

3)有一个socket有一次错误条件待处理

对于这样的socket的写操作将不会阻塞并范围一个错误(-1),,errno则设置成明确的错误条件.这些待处理的错误也可以通过指定socket选项SO_ERROR调用getsockopt函数来取得并清除;

Epoll在LT和ET模式下的读写方式

7、节点计算机可以通过丢包率感知网络拥塞(不确定)

ping -f

traceroute:UDP

ping:因为ping命令是使用ICMP协议,所以没有端口号,但是有两个域:类型和代码。

8、netstat https://linux.cn/article-2434-1.html

Recv-Q 接收队列,表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()

Send-Q 发送队列,对方没有收到的数据或者说没有Ack的,还是本地缓冲区

这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况,短暂的Send-Q队列发送pakets非0是正常状态。
如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。
如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。

通过netstat的这两个值就可以简单判断程序收不到包到底是包没到还是包没有被进程recv。socket选项SO_ERROR调用getsockopt函数来取得并清除;

9、OSI参考模型


物理层:激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的物理媒体

数据链路层:数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。

网络层:网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能。

传输层:第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。

会话层:在两个节点间建立、维护和释放面向用户的连接,并向会话进行管理和控制,保证会话数据的可靠传输

表示层:传输信息的语法和语义,对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。

应用层:为操作系统或网络应用程序提供访问网络服务的接口。



10.http协议http://www.cnblogs.com/ranyonsue/p/5984001.html

       https:点击打开链接

                 深度解析HTTPS原理

http和https的区别



URL访问方式:ftp —— 文件传送协议 FTP
                            http —— 超文本传送协议 HTTP
                            News —— USENET 新闻

<主机> 是存放资源的主机在因特网中的域名



HTTP 是面向事务的客户服务器协议。
HTTP 1.0 协议是无状态的(stateless)。
HTTP 协议本身也是无连接的,虽然它使用了面向连接的 TCP 向上提供的服务。
万维网浏览器就是一个 HTTP 客户,而在万维网服务器等待 HTTP 请求的进程常称为 HTTP daemon,有的文献将它缩写为 HTTPD。
HTTP daemon 在收到 HTTP 客户的请求后,把所需的文件返回给 HTTP 客户。   

12、connect出错的几种情况

       1、ETIMEDOUT,TCP客户没有收到SYN分节的响应。若调用connect时,4.4BSD内核发送一个SYN,若无响应等待6s后再发送一个,若仍无响应则等待24s后再发送一个,若总共等了75s后仍未收到响应则返回本错误

       2、ECONNRREFUSED,若对客户SYN的响应是RST,则表明服务器主机在我们指定的端口上没有进程在等待与之连接,客户已接收到RST马上返回ECONNRREFUSED错误

       3、若客户发出的SYN在中间的某个路由器上引发了一个“destination unreachable”(目的地不可达)的ICMP错误,则认为是一种软错误。客户主机内核保存该消息,并按第一种情况中所述的时间间隔继续发送SYN。若在某个规定的时间后仍未收到响应,则把保存的消息(ICMP错误)作为EHOSTUNREACH或ENETUNREACH错误返回给进程。

13、TCP怎么保证可靠性

1.面向连接

2.将数据截断为合理长度

3.对于收到的请求,给出确认响应,超时重发(发送端有计时器,超时收不到确认,将重发这个报文段。

4.校验和出错,丢弃报文段,不给出响应

5.对失序数据进行重新排序

6丢弃重复的数据

7.流量控制,防止较快主机致使较慢主机的缓冲区溢出

14、计算机网络常考点

15、Event Loop

16、ARP是地址解析协议,简单语言解释一下工作原理。


    是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源

     不管网络层使用的是什么协议,在实际网络的链路上传输数据帧时,最终还是必须使用硬件地址。OSI 模式把网络工作分为七层,彼此不直接打交道,只通过接口(layre interface). IP地址在第三层, MAC地址在第二层。协议在发生数据包时,首先要封装第三层 (IP地址)和第二层 (MAC地址)的报头, 但协议只知道目的节点的IP地址,不知道其物理地址,又不能跨第二、三层,所以得用ARP的服务。
答:
(1)首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
(2)当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。

(3)当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址
(4)源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。


17、DNS(Domain Name System)域名系统:提供主机名到IP地址的映射

        DNS使用的是TCP协议还是UDP协议:TCP53和UDP53

          将主机名和域名转换为IP地址

       应用层协议

       运行在UDP之上,使用端口号是53

 


每一个域名fuqu不但能够进行一些域名到IP地址的解析,而且还必须具有连向其他域名服务器的信息。

当自己不能进行域名到IP地址的转换时,就能够知道到什么地方去找别的域名服务器。

a、本地域名服务器  b、根域名服务器  c、授权域名服务器




从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。


eg

1、网络客户端就是我们平常使用的电脑,打开浏览器,输入一个域名。比如输入www.163.com,这时,你使用的电脑会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。
2、查询www.163.com的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
3、根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。
4、本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。
5、最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。


17、ifconfig

18、TCP的4个不同的定时器

        (1)重传定时器:使用于希望收到另一端的确认

                  当TCP发送报文段时,就创建该特定报文段的重传计时器。可能发生两种情况:
                 若在计时器截止时间到(通常是60秒)之前收到了对此特定报文段的确认,则撤销此计时器。
                 若在收到了对此特定报文段的确认之前计时器截止期到,则重传此报文段,执行指数退避。

        (2)坚持定时器:使窗口大小信息保持不断流动,即时另一端关闭了其接收窗口

                 ACK的传输并不可靠。TCP不对ACK报文段进行确认,只确认那些包含有数据的ACK报文段。当接收窗口大小为0,并且接收方发送的窗口通告确认丢失了,那接收方等待接收数据,而发送方在等待允许它继续发送数据的窗口更新,这样就形成了死锁。对该情况的解决方案:发送方使用一个坚持定时器来周期性地向接收方发送窗口探测报文,以便发现窗口是否已增大。

        (3)保活定时器:可以检测到一个空闲连接的另一端何时崩溃或重启。

                 许多时候一个服务器希望知道客户主机是否崩溃并关机或崩溃又重新启动,保活定时器就提供这个功能。在连接两个端系统的网络出现临时故障的时候,保活选项会引起一个实际上很好的连接终止。如果一个给定的连接在两个小时之内没有任何动作,则服务器就向客服发送一个探查报文段,客户主机必须处于以下4个状态之一:

1)客户机依然正常运行,并从服务器可达。客户TCP响应正常,两小时内保活定时器复位。如果两小时内有数据交换,则在数据交换后的未来2小时再复位 
2)客户机已经奔溃,并且关闭或正在重新启动,客户TCP没有响应。服务器收不到探查的响应,然后每隔75秒发送探查报文,总共发送10个,如果服务器没有收到一个响应,认为客户端已经关闭并终止连接 
3)客户主机崩溃并已经重新启动,。这是服务器收到对其保活探查的响应,但是这个响应是一个复位(RESET),服务器终止连接 
4)客户主机正常运行,但是从服务不可达,等同情况2

        (4)2MSL定时器测量一个连接处于TIME_WAIT状态的时间


19、Nagle算法和延迟ACK

       有时候在一个连接上客户一般每次发送一个字节到服务器,这就产生了一些41字节长的分组(20字节的IP首部,20字节的TCP首部和1个字节的数据)。在局域网上,这些小分组通常不会引起麻烦,但在广域网上,这些小分组会增加拥塞的可能。


20、reactor模式

21、ICMP协议





ICMP报文被封装在IP包里,也就是说他是由IP协议承载的,从这一点伤来说,他跟TCP协议是一个层级的。




22、keepalive

        Socket心跳包机制

        

23、网络加载慢原因


24、TCP、UDP端口扫描原理

       点击打开链接网络扫描技术揭秘读书笔记3-TCP/UDP端口扫描器设计原理


25、session、cookie区别

关于Session的概念和测试点

session互串:应该在每一个用户登录前 先清空session,这样做就合理多了,特别是对于一些跟钱有关的操作时候。

26、计算机网络之子网划分


27、 从一道百度面试题到分析输入url到页面返回的过程(或者查询返回过程)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值